|
|
1.1 ! root 1: -- VTPM: decode NDQ PDU ! 2: ! 3: -- $Header: /f/osi/vt/RCS/rcv_text.py,v 7.0 89/11/23 22:31:37 mrose Rel $ ! 4: -- ! 5: -- ! 6: -- $Log: rcv_text.py,v $ ! 7: -- Revision 7.0 89/11/23 22:31:37 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: NDQPDU DEFINITIONS ::= ! 23: ! 24: %{ ! 25: #include <stdio.h> ! 26: #include "sector1.h" ! 27: ! 28: void adios (); ! 29: ! 30: #undef PEPYPARM ! 31: #define PEPYPARM int * ! 32: ! 33: #undef PEPYTEST ! 34: ! 35: static int echo_sw; ! 36: static char *do_name; ! 37: extern TEXT_UPDATE *ndq_queue; ! 38: ! 39: #ifdef PEPYTEST ! 40: ! 41: TEXT_UPDATE ud; ! 42: ! 43: rcv_text(pe) ! 44: PE pe; ! 45: { ! 46: ! 47: ud.echo_sw = ud.type_sw = -1; ! 48: ud.updates.do_list.do_name = "\0"; ! 49: ud.updates.do_list.do_type = -1; ! 50: ud.updates.do_list.do_cmd.text_ud.text_count = 0; ! 51: ! 52: if(unbuild_NDQPDU_NDQpdu(pe,1,NULLIP,NULLVP,&ud) == NOTOK) ! 53: return; ! 54: ! 55: (void)printf("Echo = %d; Type = %d; D.O. Name = %s; D. O. Update Type = %d\n", ud.echo_sw,ud.type_sw,ud.updates.do_list.do_name, ud.updates.do_list.do_type); ! 56: if(ud.updates.do_list.do_cmd.text_ud.text_count) ! 57: (void)printf("Text = %s\n",ud.updates.do_list.do_cmd.text_ud.text_ptr); ! 58: } ! 59: ! 60: #endif ! 61: ! 62: ! 63: #define bitstr2int(arg,val,cnt) \ ! 64: { \ ! 65: char *cp; \ ! 66: \ ! 67: cp = bitstr2strb (arg, &cnt); \ ! 68: val = strb2int (cp, cnt); \ ! 69: free (cp); \ ! 70: } ! 71: ! 72: %} ! 73: ! 74: BEGIN ! 75: ! 76: SECTIONS none unbuild none ! 77: ! 78: NDQpdu ::= CHOICE ! 79: ! 80: { ! 81: ndqpdu [6] IMPLICIT NDQcontent [[p (PEPYPARM)0]] ! 82: } ! 83: ! 84: NDQcontent ::= SEQUENCE OF VTsdi [[p (PEPYPARM)0]] ! 85: ! 86: VTsdi ::= CHOICE ! 87: { ! 88: echoNow [0] IMPLICIT SEQUENCE OF ObjectUpdate [[p (PEPYPARM)0]] ! 89: %{echo_sw = ECHO_ON;%}, ! 90: notEchoNow [1] IMPLICIT SEQUENCE OF ObjectUpdate [[p (PEPYPARM)0]] ! 91: %{echo_sw = ECHO_OFF;%} ! 92: } ! 93: ! 94: ObjectUpdate ::= CHOICE ! 95: { ! 96: display [0] IMPLICIT SEQUENCE ! 97: { ! 98: dOname PrintableString ! 99: [[s do_name]], ! 100: ! 101: SEQUENCE OF DOupdate [[p (PEPYPARM)0]] ! 102: }, ! 103: control [1] IMPLICIT COupdate [[p (PEPYPARM)0]] ! 104: } ! 105: ! 106: DOupdate ! 107: %{ ! 108: TEXT_UPDATE *arg = (TEXT_UPDATE *)parm; ! 109: %} ! 110: ::= CHOICE ! 111: %{ ! 112: if( !(arg = (TEXT_UPDATE *)malloc(sizeof(TEXT_UPDATE)) )) ! 113: adios (NULLCP, "out of memory"); ! 114: arg->echo_sw = echo_sw; ! 115: arg->type_sw = DISPLAY_OBJ; ! 116: arg->updates.do_list.do_name = do_name; ! 117: %} ! 118: { ! 119: nextXarray [0] IMPLICIT NULL ! 120: %{arg->updates.do_list.do_type = 0; ! 121: (void) enq(&ndq_queue,arg);%}, ! 122: nextYarray [1] IMPLICIT NULL ! 123: %{arg->updates.do_list.do_type = 1; ! 124: (void) enq(&ndq_queue,arg);%}, ! 125: ptr-relative [2] IMPLICIT ExplicitPointer ! 126: [[p (PEPYPARM)&(arg->updates.do_list.do_cmd.ptr_rel)]] ! 127: %{arg->updates.do_list.do_type = 2; ! 128: (void) enq(&ndq_queue,arg);%}, ! 129: ptr-absolute [3] IMPLICIT Pointer ! 130: [[p (PEPYPARM)&(arg->updates.do_list.do_cmd.ptr_abs)]] ! 131: %{arg->updates.do_list.do_type = 3; ! 132: (void) enq(&ndq_queue,arg);%}, ! 133: text [4] IMPLICIT OCTETSTRING ! 134: [[o arg->updates.do_list.do_cmd.text_ud.text_ptr $ arg->updates.do_list.do_cmd.text_ud.text_count]] ! 135: %{arg->updates.do_list.do_type = 4; ! 136: (void) enq(&ndq_queue,arg);%}, ! 137: ! 138: repeatText [5] IMPLICIT SEQUENCE { ! 139: finishAddress Pointer ! 140: [[p (PEPYPARM)parm]], ! 141: ! 142: OCTETSTRING ! 143: [[o arg->updates.do_list.do_cmd.rpt_seq.text $ arg->updates.do_list.do_cmd.rpt_seq.text_count]] ! 144: } ! 145: %{arg->updates.do_list.do_type = 5; ! 146: (void) enq(&ndq_queue,arg);%}, ! 147: writeAttr [6] IMPLICIT SEQUENCE { ! 148: AttrId [[p (PEPYPARM)&(arg->updates.do_list.do_cmd.wrt_attrib)]], ! 149: AttrExtent [[p (PEPYPARM)&(arg->updates.do_list.do_cmd.wrt_attrib)]] ! 150: } ! 151: %{arg->updates.do_list.do_type = 6; ! 152: (void) enq(&ndq_queue,arg);%}, ! 153: erase [7] IMPLICIT SEQUENCE { ! 154: startErase Pointer [[p (PEPYPARM)&(arg->updates.do_list.do_cmd.erase.start_erase)]], ! 155: endErase Pointer [[p (PEPYPARM)&(arg->updates.do_list.do_cmd.erase.end_erase)]], ! 156: eraseAttr BOOLEAN ! 157: [[b arg->updates.do_list.do_cmd.erase.erase_attr]] ! 158: } ! 159: %{arg->updates.do_list.do_type = 7; ! 160: (void) enq(&ndq_queue,arg);%}, ! 161: previousXarray [8] IMPLICIT NULL ! 162: %{arg->updates.do_list.do_type = 8; ! 163: (void) enq(&ndq_queue,arg);%}, ! 164: previousYarray [9] IMPLICIT NULL ! 165: %{arg->updates.do_list.do_type = 9; ! 166: (void) enq(&ndq_queue,arg);%} ! 167: } ! 168: ! 169: COupdate ! 170: %{ ! 171: TEXT_UPDATE *arg = (TEXT_UPDATE *)parm; ! 172: %} ! 173: ::= SEQUENCE ! 174: %{ ! 175: if( !(arg = (TEXT_UPDATE *)malloc(sizeof(TEXT_UPDATE)) )) ! 176: adios (NULLCP, "out of memory"); ! 177: arg->echo_sw = echo_sw; ! 178: arg->type_sw = CTRL_OBJ; ! 179: %} ! 180: { ! 181: coName PrintableString ! 182: [[s arg->updates.co_list.co_name]], ! 183: ! 184: objectUpdate CHOICE { ! 185: characterUpdate [0] IMPLICIT PrintableString ! 186: [[s arg->updates.co_list.co_cmd.char_update]] ! 187: %{arg->updates.co_list.co_type = 0; ! 188: (void) enq(&ndq_queue,arg);%}, ! 189: ! 190: booleanUpdate [1] IMPLICIT SEQUENCE { ! 191: values [0] IMPLICIT BITSTRING ! 192: [[x arg->updates.co_list.co_cmd.bool_update.value $ arg->updates.co_list.co_cmd.bool_update.val_count]], ! 193: ! 194: mask [1] IMPLICIT BITSTRING ! 195: [[x arg->updates.co_list.co_cmd.bool_update.mask $ arg->updates.co_list.co_cmd.bool_update.mask_count]] ! 196: } ! 197: %{arg->updates.co_list.co_type = 1; ! 198: (void) enq(&ndq_queue,arg);%}, ! 199: ! 200: symbolicUpdate [2] IMPLICIT INTEGER ! 201: [[i arg->updates.co_list.co_cmd.sym_update]] ! 202: %{arg->updates.co_list.co_type = 2; ! 203: (void) enq(&ndq_queue,arg);%}, ! 204: ! 205: integerUpdate [3] IMPLICIT INTEGER ! 206: [[i arg->updates.co_list.co_cmd.int_update]] ! 207: %{arg->updates.co_list.co_type = 3; ! 208: (void) enq(&ndq_queue,arg);%}, ! 209: ! 210: bitStringUpdate [4] IMPLICIT BITSTRING ! 211: %{ bitstr2int ($$, ! 212: arg->updates.co_list.co_cmd.bit_update.bitstring, ! 213: arg->updates.co_list.co_cmd.bit_update.bitcount); ! 214: arg->updates.co_list.co_type = 4; ! 215: (void) enq(&ndq_queue,arg);%} ! 216: } ! 217: } ! 218: ! 219: ExplicitPointer ! 220: %{ ! 221: EX_POINTER *arg = (EX_POINTER *)parm; ! 222: %} ! 223: ::= SEQUENCE ! 224: %{ arg->x_true = 0; ! 225: arg->y_true = 0; ! 226: arg->z_true = 0; ! 227: %} ! 228: { ! 229: x [0] IMPLICIT INTEGER ! 230: [[i arg->x_value]] ! 231: %{arg->x_true = 1;%} ! 232: OPTIONAL, ! 233: ! 234: y [1] IMPLICIT INTEGER ! 235: [[i arg->y_value]] ! 236: %{arg->y_true = 1;%} ! 237: OPTIONAL, ! 238: ! 239: z [2] IMPLICIT INTEGER ! 240: [[i arg->z_value]] ! 241: %{arg->z_true = 1;%} ! 242: OPTIONAL ! 243: } ! 244: ! 245: Pointer ! 246: %{ ! 247: POINTER *arg = (POINTER *)parm; ! 248: %} ! 249: ::= CHOICE { ! 250: current [0] IMPLICIT NULL ! 251: %{arg->ptr_type = 0;%}, ! 252: start [1] IMPLICIT NULL ! 253: %{arg->ptr_type = 1;%}, ! 254: startY [2] IMPLICIT NULL ! 255: %{arg->ptr_type = 2;%}, ! 256: startX [3] IMPLICIT NULL ! 257: %{arg->ptr_type = 3;%}, ! 258: end [4] IMPLICIT NULL ! 259: %{arg->ptr_type = 4;%}, ! 260: endY [5] IMPLICIT NULL ! 261: %{arg->ptr_type = 5;%}, ! 262: endX [6] IMPLICIT NULL ! 263: %{arg->ptr_type = 6;%}, ! 264: coords [7] IMPLICIT ExplicitPointer [[p (PEPYPARM)&(arg->e_ptr)]] ! 265: %{arg->ptr_type = 7;%} ! 266: } ! 267: ! 268: AttrId ! 269: %{ ! 270: ATTRIB *arg = (ATTRIB *)parm; ! 271: %} ! 272: ::= CHOICE { ! 273: graphCharRep [0] IMPLICIT INTEGER ! 274: [[i arg->attr_val]] ! 275: %{arg->attr_id = 0;%}, ! 276: ! 277: foreColor [1] IMPLICIT INTEGER ! 278: [[i arg->attr_val]] ! 279: %{arg->attr_id = 1;%}, ! 280: ! 281: backColor [2] IMPLICIT INTEGER ! 282: [[i arg->attr_val]] ! 283: %{arg->attr_id = 2;%}, ! 284: ! 285: emphasis [3] IMPLICIT INTEGER ! 286: [[i arg->attr_val]] ! 287: %{arg->attr_id = 3;%}, ! 288: ! 289: font [4] IMPLICIT INTEGER ! 290: [[i arg->attr_val]] ! 291: %{arg->attr_id = 4;%} ! 292: } ! 293: ! 294: AttrExtent ! 295: %{ ! 296: ATTRIB *arg = (ATTRIB *)parm; ! 297: %} ! 298: ::= CHOICE { ! 299: global [0] IMPLICIT NULL ! 300: %{arg->attr_ext = 0;%}, ! 301: addrExtent [1] IMPLICIT SEQUENCE { ! 302: beginning Pointer [[p (PEPYPARM)&(arg->beg_p)]], ! 303: ending Pointer [[p (PEPYPARM)&(arg->end_p)]] ! 304: } ! 305: %{arg->attr_ext = 1;%}, ! 306: modalExtent [2] IMPLICIT NULL ! 307: %{arg->attr_ext = 2;%} ! 308: } ! 309: ! 310: END ! 311: ! 312: %{ ! 313: ! 314: /* ! 315: * deq take something out of a fifo queue (a la knuth) ! 316: * elements are circularly linked ! 317: * q head points to last entry in queue ! 318: */ ! 319: ! 320: TEXT_UPDATE * ! 321: deq( qhp ) ! 322: register TEXT_UPDATE **qhp; ! 323: { ! 324: register TEXT_UPDATE *elem; ! 325: ! 326: ! 327: if( (elem = (*qhp)) != 0 ) ! 328: { ! 329: elem = elem->ndq_elem; ! 330: (*qhp)->ndq_elem = elem->ndq_elem; ! 331: if( elem == elem->ndq_elem ) ! 332: (*qhp) = 0; ! 333: } ! 334: ! 335: return( elem ); ! 336: } ! 337: ! 338: /* ! 339: * enq enter something in a queue ! 340: * queue format is same as deq above ! 341: */ ! 342: ! 343: enq( qhp,elem ) ! 344: register TEXT_UPDATE **qhp; ! 345: register TEXT_UPDATE *elem; ! 346: { ! 347: register TEXT_UPDATE *liq; ! 348: ! 349: if( (liq = (*qhp)) == 0 ) ! 350: (*qhp) = elem; ! 351: elem->ndq_elem = (*qhp)->ndq_elem; ! 352: (*qhp)->ndq_elem = elem; ! 353: (*qhp) = elem; ! 354: ! 355: return ( (int) liq ); /* last-in-queue zero, says queue was empty */ ! 356: } ! 357: ! 358: /* ! 359: * fiq get the first in queue - no delinking ! 360: * return zero if nothing in queue ! 361: */ ! 362: ! 363: TEXT_UPDATE * ! 364: fiq( qhp ) ! 365: register TEXT_UPDATE **qhp; ! 366: { ! 367: register TEXT_UPDATE *e; ! 368: ! 369: if( (e = *qhp) != 0 ) /* something in queue */ ! 370: e = e->ndq_elem; /* get first in queue */ ! 371: ! 372: return( e ); /* return that value */ ! 373: } ! 374: %}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.