|
|
1.1 root 1: -- VTPM: decode ASR PDU
2:
3: -- $Header: /f/osi/vt/RCS/rcv_asr.py,v 7.0 89/11/23 22:31:36 mrose Rel $
4: --
5: --
6: -- $Log: rcv_asr.py,v $
7: -- Revision 7.0 89/11/23 22:31:36 mrose
8: -- Release 6.0
9: --
10:
11: --
12: -- NOTICE
13: --
14: -- Acquisition, use, and distribution of this module and related
15: -- materials are subject to the restrictions of a license agreement.
16: -- Consult the Preface in the User's Manual for the full terms of
17: -- this agreement.
18: --
19: --
20:
21:
22: ASRPDU DEFINITIONS ::=
23:
24: %{
25: #include <stdio.h>
26: #include "sector1.h"
27:
28: #undef PEPYPARM
29: #define PEPYPARM int *
30:
31: #undef PEPYTEST
32:
33: static int l,m,n,q;
34:
35: #ifdef PEPYTEST
36:
37: ASR_MSG udr;
38:
39: rcv_asr(pe)
40: PE pe;
41: {
42:
43: int i;
44:
45: if(unbuild_ASRPDU_ASRpdu(pe,1,NULLIP,NULLVP,&udr) == NOTOK)
46: {
47: (void)printf("Can't unbuild ASR PDU\n");
48: return;
49: }
50:
51: (void)printf("Result = %d\n",udr.result);
52: (void)printf("Version.bitcount = %d; Version = %x\n",
53: udr.version.bitcount,udr.version.bitstring);
54: (void)printf("F.U. bitcount = %d; F.U. = %x\n",
55: udr.func_units.bitcount,udr.func_units.bitstring);
56: if(udr.valid_coll)
57: (void)printf("valid_coll = %d; coll_winner = %d\n",
58: udr.valid_coll,udr.coll_winner);
59: (void)printf("Valid_reason = %d\n",udr.valid_reason);
60: (void)printf("Sp Obj = %d CDS Obj = %d CSS Obj = %d DEV Obj = %d\n",
61: udr.arg_list.num_sp_param,udr.arg_list.num_cds_objects,
62: udr.arg_list.num_css_objects,udr.arg_list.num_dev_objects);
63:
64: for(l=0; l<udr.arg_list.num_sp_param; l++)
65: {
66: (void)printf("\n");
67: (void)printf("Special Num = %d Special Type = %d",
68: udr.arg_list.sp_val[l].param_num,
69: udr.arg_list.sp_val[l].param_type);
70: if(udr.arg_list.sp_val[l].param_type == 0)
71: {
72: (void)printf("Boolean Type = %d\n",
73: udr.arg_list.sp_val[l].args.bool_arg);
74: }
75: else if(udr.arg_list.sp_val[l].param_type == 1)
76: {
77: (void)printf("Integer Type = %d\n",
78: udr.arg_list.sp_val[l].args.int_arg);
79: }
80: else
81: (void)printf("Bad Special Param Type\n");
82: }
83:
84: for(l=0;l<udr.arg_list.num_cds_objects; l++)
85: {
86: (void)printf("\n\nObject Name = %s\n",udr.arg_list.cds_val[l].obj_name);
87: (void)printf("Valid:\n");
88: (void)printf("\tdimen(%d) x_dim(%d) y_dim(%d) z_dim(%d)\n",
89: udr.arg_list.cds_val[l].dimensions,
90: udr.arg_list.cds_val[l].valid_x_dim,
91: udr.arg_list.cds_val[l].valid_y_dim,
92: udr.arg_list.cds_val[l].valid_z_dim);
93: (void)printf("\terase(%d) repertoire(%d) emph(%d) fore(%d)\n",
94: udr.arg_list.cds_val[l].valid_erasure,
95: udr.arg_list.cds_val[l].valid_rep_list,
96: udr.arg_list.cds_val[l].valid_emp_list,
97: udr.arg_list.cds_val[l].valid_fore_color);
98: (void)printf("\tback(%d) access right(%d)\n",
99: udr.arg_list.cds_val[l].valid_back_color,
100: udr.arg_list.cds_val[l].valid_access_right);
101: (void)printf("X Dimension:\n");
102: (void)printf("\tBound(%d) addressing(%d) absolute(%d) window(%d)\n",
103: udr.arg_list.cds_val[l].x_dim.bound_type,
104: udr.arg_list.cds_val[l].x_dim.valid_addr,
105: udr.arg_list.cds_val[l].x_dim.valid_abs,
106: udr.arg_list.cds_val[l].x_dim.window_type);
107: (void)printf("\twindow size = %d\n",udr.arg_list.cds_val[l].x_dim.window);
108: (void)printf("Repertoires: (Number = %d)\n",
109: udr.arg_list.cds_val[l].rep_value.num_reps);
110: for(i=0;i<udr.arg_list.cds_val[l].rep_value.num_reps;i++)
111: {
112: (void)printf("\ttype(%d) rep(%s) capability(%d) fonts(%d)\n",
113: udr.arg_list.cds_val[l].rep_value.repertoire[i].rep_type,
114: udr.arg_list.cds_val[l].rep_value.repertoire[i].rep_assign,
115: udr.arg_list.cds_val[l].rep_value.repertoire[i].valid_font_cap,
116: udr.arg_list.cds_val[l].rep_value.repertoire[i].num_fonts);
117: }
118: }
119:
120: }
121:
122: #endif
123:
124:
125: #define bitstr2int(arg,val,cnt) \
126: { \
127: char *cp; \
128: \
129: cp = bitstr2strb (arg, &cnt); \
130: val = strb2int (cp, cnt); \
131: free (cp); \
132: }
133:
134: %}
135:
136: BEGIN
137:
138: SECTIONS none unbuild none
139:
140: ASRpdu ::= CHOICE
141:
142: {
143: asrpdu [1] IMPLICIT ASRcontent [[p (PEPYPARM)parm]]
144: }
145:
146: ASRcontent
147: %{
148: ASR_MSG *arg = (ASR_MSG *)parm;
149: %}
150: ::= SEQUENCE
151: %{
152: arg->valid_reason = 0;
153: arg->valid_imp = 0;
154: arg->valid_coll = 0;
155: arg->version.bitcount = 0;
156: arg->func_units.bitcount = 0;
157: arg->arg_list.num_sp_param = 0;
158: %}
159: {
160:
161: userReason [0] IMPLICIT PrintableString [[s arg->reason.usr_reason]]
162: %{arg->reason.type = 0;
163: arg->valid_reason = 1;%}
164: OPTIONAL,
165:
166: provReason [1] IMPLICIT INTEGER [[i arg->reason.provider_reason]]
167: %{arg->reason.type = 1;
168: arg->valid_reason = 1;%}
169: OPTIONAL,
170:
171: [2] IMPLICIT INTEGER [[i arg->result]],
172:
173: [3] IMPLICIT ImplemIdent [[p (PEPYPARM)&(arg->imp_id)]]
174: %{arg->valid_imp = 1;%}
175: OPTIONAL,
176:
177: [4] IMPLICIT BITSTRING
178: %{ bitstr2int ($$, arg->version.bitstring, arg->version.bitcount); %},
179:
180: [5] IMPLICIT ArgumValueList [[p (PEPYPARM)&(arg->arg_list)]],
181:
182: [6] IMPLICIT BITSTRING
183: %{ bitstr2int ($$, arg->func_units.bitstring, arg->func_units.bitcount) ;%},
184:
185: [7] IMPLICIT INTEGER [[i arg->coll_winner]]
186: %{arg->valid_coll = 1;%}
187: OPTIONAL
188: }
189:
190: ImplemIdent
191: %{
192: IMPLEM_ID *arg = (IMPLEM_ID *)parm;
193: %}
194: ::= SEQUENCE
195: %{
196: arg->oid_true = 0;
197: arg->name_true = 0;
198: arg->version_true = 0;
199: %}
200: {
201: impIdent [0] IMPLICIT OBJECT IDENTIFIER
202: [[O arg->imp_oid]]
203: %{arg->oid_true = 1;%},
204:
205: impName [1] IMPLICIT PrintableString
206: [[s arg->name]]
207: %{arg->name_true = 1;%},
208:
209: impVersion [2] IMPLICIT PrintableString
210: [[s arg->version]]
211: %{arg->version_true = 1;%}
212: }
213:
214: ArgumValueList
215: %{
216: ARG_VAL_LIST *arg = (ARG_VAL_LIST *)parm;
217: %}
218: ::= SET OF %{q = arg->num_sp_param;%} Squat [[p parm]]
219:
220:
221: Squat ::= CHOICE
222: {
223: specArgs [0] IMPLICIT SpecialArgs [[p parm]],
224: vteParams [1] IMPLICIT ParamValueList [[p parm]]
225: }
226:
227: SpecialArgs
228: %{
229: ARG_VAL_LIST *arg = (ARG_VAL_LIST *)parm;
230: %}
231: ::= SEQUENCE
232: {
233: identifier INTEGER [[i arg->sp_val[q].param_num]],
234: value CHOICE
235: {
236: BOOLEAN [[b arg->sp_val[q].args.bool_arg]]
237: %{arg->sp_val[q].param_type = 0;%},
238: INTEGER [[i arg->sp_val[q].args.int_arg]]
239: %{arg->sp_val[q].param_type = 1;%},
240: PrintableString[[s arg->sp_val[q].args.string_arg]]
241: %{arg->sp_val[q].param_type = 2;%}
242: }
243:
244: %{++arg->num_sp_param;
245: if(arg->num_sp_param >= MAXSPARGS) return(OK);
246: %}
247: }
248:
249: ParamValueList
250: %{
251: ARG_VAL_LIST *arg = (ARG_VAL_LIST *)parm;
252: %}
253: ::= SEQUENCE
254: %{
255: /* arg->num_cds_objects = 0;*/
256: %}
257: {
258: displayObjects [0] IMPLICIT CDSValues [[p parm]]
259: OPTIONAL,
260:
261: -- controlObjects [1] IMPLICIT CSSValues [[p parm]]
262: -- OPTIONAL,
263:
264: -- deviceObjects [2] IMPLICIT DEVValues [[p parm]]
265: -- OPTIONAL,
266:
267: deliveryControl [3] IMPLICIT INTEGER
268: [[i arg->del_ctrl]]
269: OPTIONAL
270: }
271:
272: --Note Problem with IMPLICIT SEQUENCE Definition below. PEPY does not accept
273: --it as defined in 9041 and in fact that definition is ridiculous. At the
274: --moment it is not clear if even hand coding available in ISODE 3.0 can
275: --produce the requirement of 9041.
276:
277: CDSValues
278: %{
279: ARG_VAL_LIST *arg = (ARG_VAL_LIST *)parm;
280: %}
281: ::=
282: SET OF %{l = arg->num_cds_objects;%} SEQUENCE
283: {
284: objectName PrintableString
285: [[s arg->cds_val[l].obj_name]],
286:
287: ObjectOffer [[p (PEPYPARM)&(arg->cds_val[l])]]
288: %{ ++arg->num_cds_objects;
289: if(arg->num_cds_objects >= MAXCDSOBJ) return(OK);
290: %}
291: }
292:
293: CSSValues ::= NULL --Unused for now--
294:
295: DEVValues ::= NULL --Unused for now--
296:
297: ObjectOffer
298: %{
299: CDS_VALUE *arg = (CDS_VALUE *)parm;
300: %}
301: ::= SEQUENCE
302: %{
303: arg->dimensions = 0;
304: arg->valid_x_dim = 0;
305: arg->valid_y_dim = 0;
306: arg->valid_z_dim = 0;
307: arg->valid_erasure = 0;
308: arg->valid_rep_list = 0;
309: arg->valid_emp_list = 0;
310: arg->valid_fore_color = 0;
311: arg->valid_back_color = 0;
312: arg->valid_access_right = 0;
313: %}
314: {
315: dimensionValue [0] IMPLICIT INTEGER
316: [[i arg->dimensions]]
317: OPTIONAL,
318:
319: xParamValue [1] IMPLICIT DimValue [[p (PEPYPARM)&(arg->x_dim)]]
320: %{arg->valid_x_dim = 1;%}
321: OPTIONAL,
322:
323: yParamValue [2] IMPLICIT DimValue [[p (PEPYPARM)&(arg->y_dim)]]
324: %{arg->valid_y_dim = 1;%}
325: OPTIONAL,
326:
327: zParamValue [3] IMPLICIT DimValue [[p (PEPYPARM)&(arg->z_dim)]]
328: %{arg->valid_z_dim = 1;%}
329: OPTIONAL,
330:
331: -- erasurevalue [4] IMPLICIT BOOLEAN
332: -- [[b arg->erasure]]
333: -- %{arg->valid_erasure = 1;%}
334: -- OPTIONAL,
335:
336: repValueList [5] IMPLICIT CompRepValue [[p (PEPYPARM)&(arg->rep_value)]]
337: %{arg->valid_rep_list = 1;%}
338: OPTIONAL,
339:
340: -- empValueList [6] IMPLICIT CompEmpValue [[p (PEPYPARM)&(arg->emp_value)]]
341: -- %{arg->valid_emp_list = 1;%}
342: -- OPTIONAL,
343:
344: -- foreColorVal [7] IMPLICIT ColorValue [[p (PEPYPARM)&(arg->fore_color_list)]]
345: -- %{arg->valid_fore_color = 1;%}
346: -- OPTIONAL,
347:
348: -- backColorVal [8] IMPLICIT ColorValue [[p (PEPYPARM)&(arg->back_color_list)]]
349: -- %{arg->valid_back_color = 1;%}
350: -- OPTIONAL,
351:
352: objectAccRight [9] IMPLICIT INTEGER
353: [[i arg->access_right]]
354: %{arg->valid_access_right = 1;%}
355: OPTIONAL
356: }
357:
358: DimValue
359: %{
360: DIMEN_VALUE *arg = (DIMEN_VALUE *)parm;
361: %}
362: ::= SEQUENCE
363: %{
364: arg->bound_type = 0;
365: arg->valid_addr = 0;
366: arg->valid_abs = 0;
367: arg->window_type = 0;
368: %}
369: {
370: bound [0] CHOICE
371: {
372: unbounded NULL
373: %{arg->bound_type = 1;%},
374:
375: limit INTEGER
376: [[i arg->bound]]
377: %{arg->bound_type = 2;%}
378: }
379: OPTIONAL,
380:
381: addressing [1] IMPLICIT INTEGER
382: [[i arg->addressing]]
383: OPTIONAL,
384:
385: absolute [2] IMPLICIT INTEGER
386: [[i arg->absolute]]
387: OPTIONAL,
388:
389: window [3] CHOICE
390: {
391: unbounded NULL
392: %{arg->window_type = 1;%},
393:
394: limit INTEGER
395: [[i arg->window]]
396: %{arg->window_type = 2;%}
397: }
398: OPTIONAL
399: }
400:
401: CompRepValue
402: %{
403: REP_VALUE *arg = (REP_VALUE *)parm;
404: %}
405: ::= SEQUENCE
406: %{
407: arg->valid_cap = 0;
408: arg->num_reps = 0;
409: %}
410: {
411: repCapability [0] IMPLICIT INTEGER
412: [[i arg->capability]]
413: %{arg->valid_cap = 1;%}
414: OPTIONAL,
415: [1] IMPLICIT SEQUENCE OF
416: %{m = arg->num_reps;%}
417: RepFontValue [[p (PEPYPARM)&(arg->repertoire[m])]]
418: %{++arg->num_reps;
419: if(arg->num_reps >= MAXREPS) return(OK);
420: %}
421: OPTIONAL
422: }
423:
424: RepFontValue
425: %{
426: FONT_VALUE *arg = (FONT_VALUE *)parm;
427: %}
428: ::=
429: CHOICE
430: %{
431: arg->valid_font_cap = 0;
432: arg->num_fonts = 0;
433: arg->rep_assign = 0;
434: %}
435: {
436: NULL
437: %{arg->rep_type = 1;%},
438:
439: SEQUENCE
440: {
441: repertoire [0] IMPLICIT PrintableString
442: [[s arg->rep_assign]]
443: OPTIONAL,
444:
445: fontCapability [1] IMPLICIT INTEGER
446: [[i arg->capability]]
447: %{++arg->valid_font_cap;%}
448: OPTIONAL,
449:
450: [2] IMPLICIT SEQUENCE OF
451: %{n = arg->num_fonts;%}
452: PrintableString
453: [[s arg->font_names[n] ]]
454: %{
455: ++arg->num_fonts;
456: if(arg->num_fonts >= MAXFONTS) return(OK);
457: %}
458: OPTIONAL
459: }
460: }
461:
462: --CompEmpValue
463: --%{
464: -- EMP_VALUE *arg = (EMP_VALUE *)parm;
465: --%}
466: -- ::= SEQUENCE
467: --%{arg->valid_cap = 0;
468: -- arg->num_emps = 0;
469: --%}
470: --{
471: -- empCap [0] IMPLICIT INTEGER
472: -- [[i arg->capability]]
473: -- %{arg->valid_cap = 1;%}
474: -- OPTIONAL,
475:
476: -- SEQUENCE OF %{m = arg->num_emps;%}
477: -- PrintableString
478: -- [[s arg->emp_string[m] ]]
479: -- %{++arg->num_emps;
480: -- if(arg->num_emps >= MAXEMPS) return(OK);
481: -- %}
482: -- OPTIONAL
483: --}
484:
485: --ColorValue
486: --%{
487: -- COLOR_VALUE *arg = (COLOR_VALUE *)parm;
488: --%}
489: -- ::= SEQUENCE
490: --%{
491: -- arg->valid_cap = 0;
492: -- arg->num_colors = 0;
493: --%}
494: --{
495: -- colorCap [0] IMPLICIT INTEGER
496: -- [[i arg->capability]]
497: -- %{arg->valid_cap = 1;%}
498: -- OPTIONAL,
499:
500: -- colorNames SEQUENCE OF %{m = arg->num_colors;%}
501: -- PrintableString
502: -- [[s arg->color_string[m] ]]
503: -- %{++arg->num_colors;
504: -- if(arg->num_colors >= MAXCOLORS) return(OK);
505: -- %}
506: --}
507:
508: END
509:
510: %{
511:
512:
513: %}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.