Annotation of 43BSDReno/contrib/isode-beta/vt/rcv_text.py, revision 1.1.1.1

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: %}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.