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

1.1       root        1: -- VTPM: decode ASQ PDU
                      2: 
                      3: -- $Header: /f/osi/vt/RCS/rcv_asq.py,v 7.0 89/11/23 22:31:34 mrose Rel $
                      4: --
                      5: --
                      6: -- $Log:       rcv_asq.py,v $
                      7: -- Revision 7.0  89/11/23  22:31:34  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: ASQPDU 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: char *myname;
                     38: ASQ_MSG ud;
                     39: 
                     40: rcv_asq(pe)
                     41: PE pe;
                     42: {
                     43:        int i,j;
                     44: 
                     45:        if(unbuild_ASQPDU_ASQpdu(pe,1,NULLIP,NULLVP,&ud) == NOTOK)return;
                     46: 
                     47:        (void)printf("\n\n\nASQ Message:\n");
                     48:        (void)printf("Class = %d   Valid_Imp = %d   Functional Units(%d) = %x\n",
                     49:                ud.class,ud.valid_imp,ud.func_units.bitcount,ud.func_units.bitstring);
                     50:        (void)printf("Version = %x   Valid_coll = %d   Valid_Prof = %d\n",
                     51:                ud.version.bitstring,ud.valid_coll,ud.valid_prof);
                     52:        if(ud.valid_prof)printf("OID_true = %d\n",
                     53:                ud.asq_profile.oid_true);
                     54: 
                     55:        if(!ud.valid_prof) 
                     56:                return;
                     57:        (void)printf("Specials=%d   CDS=%d    CSS=%d    DEV=%d\n",
                     58:                ud.asq_profile.num_sp_param,
                     59:                ud.asq_profile.num_cds_objects,ud.asq_profile.num_css_objects,
                     60:                ud.asq_profile.num_dev_objects);
                     61:        
                     62:        for(i=0; i < ud.asq_profile.num_sp_param; i++)
                     63:        {
                     64:                (void)printf("\n");
                     65:                (void)printf("Special Num = %d   Special Type = %d  ",
                     66:                        ud.asq_profile.sp_offer_list[i].param_num,
                     67:                        ud.asq_profile.sp_offer_list[i].param_type);
                     68:                if(ud.asq_profile.sp_offer_list[i].param_type == 0)
                     69:                {
                     70:                        (void)printf("Boolean = %c\n",
                     71:                                ud.asq_profile.sp_offer_list[i].args.bool_arg);
                     72:                }
                     73:                else if(ud.asq_profile.sp_offer_list[i].param_type == 1)
                     74:                {
                     75:                        (void)printf("Integer type = %d   Integer value = %d\n",
                     76:                                ud.asq_profile.sp_offer_list[i].args.int_arg.type,
                     77:                                ud.asq_profile.sp_offer_list[i].args.int_arg.value);
                     78:                }
                     79:                else (void)printf("Invalid type\n");
                     80:        }
                     81: 
                     82: 
                     83:        for(i=0; i<ud.asq_profile.num_cds_objects; i++)
                     84:        {
                     85:                (void)printf("\n");
                     86:                (void)printf("name: %s   x=%d  y=%d  z=%d\n",
                     87:                        ud.asq_profile.cds_offer_list[i].obj_name,
                     88:                        ud.asq_profile.cds_offer_list[i].valid_x_dim,
                     89:                        ud.asq_profile.cds_offer_list[i].valid_y_dim,
                     90:                        ud.asq_profile.cds_offer_list[i].valid_z_dim);
                     91: 
                     92:                (void)printf("erase=%d   repertoire=%d   emphasis=%d\n",
                     93:                        ud.asq_profile.cds_offer_list[i].erasure.bitcount,
                     94:                        ud.asq_profile.cds_offer_list[i].valid_rep_list,
                     95:                        ud.asq_profile.cds_offer_list[i].valid_emp_list);
                     96: 
                     97:                (void)printf("ForeColor=%d   BackColor=%d    Access Right=%d\n",
                     98:                        ud.asq_profile.cds_offer_list[i].valid_fore_color,
                     99:                        ud.asq_profile.cds_offer_list[i].valid_back_color,
                    100:                        ud.asq_profile.cds_offer_list[i].access_right.bitcount);
                    101: 
                    102:                if(ud.asq_profile.cds_offer_list[i].valid_x_dim)
                    103:                {
                    104:                        (void)printf("Bound=%d  Add=%d   Abs=%d   Window=%d\n",
                    105:                                ud.asq_profile.cds_offer_list[i].x_dim.bound_type,
                    106:                                ud.asq_profile.cds_offer_list[i].x_dim.addressing.bitcount,
                    107:                                ud.asq_profile.cds_offer_list[i].x_dim.absolute.bitcount,
                    108:                                ud.asq_profile.cds_offer_list[i].x_dim.window_type);
                    109: 
                    110:                        if(ud.asq_profile.cds_offer_list[i].x_dim.window_type)
                    111:                        {
                    112:                                (void)printf("windowtype=%d   windowvalue=%d\n",
                    113:                                        ud.asq_profile.cds_offer_list[i].x_dim.window.type,
                    114:                                        ud.asq_profile.cds_offer_list[i].x_dim.window.value);
                    115:                        }
                    116:                }
                    117:                if(ud.asq_profile.cds_offer_list[i].valid_rep_list)
                    118:                {
                    119:                        (void)printf("\n");
                    120:                        (void)printf("validcap=%d   Number of Repertoires=%d\n",
                    121:                                ud.asq_profile.cds_offer_list[i].rep_offer.valid_cap,
                    122:                                ud.asq_profile.cds_offer_list[i].rep_offer.num_reps);
                    123:                        for(j=0;j<ud.asq_profile.cds_offer_list[i].rep_offer.num_reps;j++)
                    124:                        {
                    125:                        (void)printf("\n");
                    126:                        (void)printf("reptype=%d  fontcap=%d   numfonts=%d\n",
                    127:                                ud.asq_profile.cds_offer_list[i].rep_offer.repertoire[j].rep_type, ud.asq_profile.cds_offer_list[i].rep_offer.repertoire[j].valid_font_cap, ud.asq_profile.cds_offer_list[i].rep_offer.repertoire[j].num_fonts);
                    128:                        if(ud.asq_profile.cds_offer_list[i].rep_offer.repertoire[j].rep_type == 2)
                    129:                                (void)printf("Repertoire = %s\n", ud.asq_profile.cds_offer_list[i].rep_offer.repertoire[j].rep_assign);
                    130:                        }
                    131:                }
                    132:        }
                    133: }
                    134: 
                    135: #endif
                    136: 
                    137: 
                    138: #define        bitstr2int(arg,val,cnt) \
                    139: { \
                    140:     char   *cp; \
                    141:  \
                    142:     cp = bitstr2strb (arg, &cnt); \
                    143:     val = strb2int (cp, cnt); \
                    144:     free (cp); \
                    145: }
                    146: 
                    147: %}
                    148: 
                    149: BEGIN
                    150: 
                    151: SECTIONS none unbuild none
                    152: 
                    153: ASQpdu ::= CHOICE
                    154: 
                    155: {
                    156:        asqpdu [0] IMPLICIT ASQcontent [[p (PEPYPARM)parm]]
                    157: }
                    158: 
                    159: ASQcontent 
                    160: %{
                    161:        ASQ_MSG *arg =
                    162:                        (ASQ_MSG *) parm;
                    163: %}
                    164:        ::= SEQUENCE
                    165: %{
                    166:        arg->valid_imp = 0;
                    167:        arg->valid_prof = 0;
                    168:        arg->valid_coll = 0;
                    169: %}
                    170: {
                    171:        [0] IMPLICIT INTEGER [[i arg->class]],
                    172: 
                    173:        [1] IMPLICIT ImplemIdent [[p (PEPYPARM)&(arg->imp_id)]]
                    174:        %{arg->valid_imp = 1;%}
                    175:        OPTIONAL,
                    176: 
                    177:        [2] IMPLICIT BIT STRING
                    178:        %{ bitstr2int ($$, arg->func_units.bitstring, arg->func_units.bitcount); %},
                    179: 
                    180:        [3] IMPLICIT Profile [[p (PEPYPARM)&(arg->asq_profile)]]
                    181:        %{arg->valid_prof = 1;%}
                    182:        OPTIONAL,
                    183: 
                    184:        [4] IMPLICIT BIT STRING
                    185:        %{ bitstr2int ($$, arg->version.bitstring, arg->version.bitcount); %}
                    186:        OPTIONAL,
                    187: 
                    188:        [5] IMPLICIT INTEGER [[i arg->coll_winner]]
                    189:        %{arg->valid_coll = 1;%}
                    190:        OPTIONAL
                    191: }
                    192: 
                    193: ImplemIdent 
                    194: %{
                    195:        IMPLEM_ID       *arg = (IMPLEM_ID *)parm;
                    196: %}
                    197:        ::= SEQUENCE
                    198: %{
                    199:        arg->oid_true = 0;
                    200:        arg->name_true = 0;
                    201:        arg->version_true = 0;
                    202: %}
                    203: {
                    204:        impIdent [0] IMPLICIT OBJECT IDENTIFIER
                    205:        [[O arg->imp_oid]]
                    206:        %{arg->oid_true = 1;%}
                    207:        OPTIONAL,
                    208: 
                    209:        impName [1] IMPLICIT PrintableString
                    210:        [[s arg->name]]
                    211:        %{arg->name_true = 1;%}
                    212:        OPTIONAL,
                    213: 
                    214:        impVersion [2] IMPLICIT PrintableString
                    215:        [[s arg->version]]
                    216:        %{arg->version_true = 1;%}
                    217: }
                    218: 
                    219: Profile 
                    220: %{
                    221:        ARG_OFFER_LIST *arg = (ARG_OFFER_LIST *)parm;
                    222: %}
                    223:        ::= SEQUENCE
                    224: %{
                    225:        arg->oid_true = 0;
                    226:        arg->num_sp_param = 0;
                    227:        arg->num_cds_objects = 0;
                    228:        arg->num_css_objects = 0;
                    229:        arg->num_dev_objects = 0;
                    230:        arg->del_ctrl.bitcount = 0;
                    231: %}
                    232: {
                    233:        name OBJECT IDENTIFIER [[O arg->prof_oid]]
                    234:        %{arg->oid_true = 1;%},
                    235: 
                    236:        ProfileArgList [[p parm]]
                    237:        OPTIONAL
                    238: 
                    239: }
                    240: 
                    241: ProfileArgList 
                    242: %{
                    243:        int k;
                    244:        ARG_OFFER_LIST  *arg = (ARG_OFFER_LIST *)parm;
                    245: 
                    246: %} ::= 
                    247: SEQUENCE OF %{
                    248: 
                    249:        q = arg->num_sp_param;
                    250: %}
                    251: 
                    252:        CHOICE
                    253:        {
                    254:                specialArgs [0] IMPLICIT SEQUENCE
                    255:                {
                    256:                        identifier INTEGER
                    257:                        [[i arg->sp_offer_list[q].param_num]],
                    258: 
                    259:                        offeredValues CHOICE
                    260:                        {
                    261:                                boolean [0] IMPLICIT BIT STRING
                    262:                                [[x arg->sp_offer_list[q].args.bool_arg $ k]]
                    263:                                %{arg->sp_offer_list[q].param_type = 0;%},
                    264: 
                    265:                                integer [1] IMPLICIT IntOffer [[p (PEPYPARM)&(arg->sp_offer_list[q].args.int_arg)]]
                    266:                                %{arg->sp_offer_list[q].param_type = 1;%},
                    267: 
                    268:                                string [2] IMPLICIT SET OF <<j=0; j<1; j++>>
                    269:                                        PrintableString
                    270:                                [[s arg->sp_offer_list[q].args.string_arg]]
                    271:                                %{arg->sp_offer_list[q].param_type = 2;%}
                    272:                        }
                    273: 
                    274:                        %{++arg->num_sp_param;
                    275:                          if(arg->num_sp_param >= MAXSPARGS) return(OK);
                    276:                        %}
                    277:                },
                    278: 
                    279:                vteParams [1] IMPLICIT ParamOfferList [[p parm]]
                    280: 
                    281:        }
                    282: 
                    283: ParamOfferList 
                    284: %{
                    285:        ARG_OFFER_LIST  *arg = (ARG_OFFER_LIST *)parm;
                    286: %}
                    287:        ::= SEQUENCE
                    288: {
                    289:        displayObjects  [0] IMPLICIT CDSOffer [[p parm]]
                    290:        OPTIONAL,
                    291: 
                    292: --     controlObjects  [1] IMPLICIT CSSOffer [[p parm]]
                    293: --     OPTIONAL,
                    294: 
                    295: --     deviceObjects   [2] IMPLICIT DEVOffer [[p parm]]
                    296: --     OPTIONAL,
                    297: 
                    298:        deliveryControl [3] IMPLICIT BIT STRING
                    299:        %{ bitstr2int ($$,
                    300:                       arg->del_ctrl.bitstring,
                    301:                       arg->del_ctrl.bitcount); %}
                    302:        OPTIONAL
                    303: }
                    304: 
                    305: --Note Problem with IMPLICIT SEQUENCE Definition below.  PEPY does not accept
                    306: --it as defined in 9041 and in fact that definition is ridiculous.  At the
                    307: --moment it is not clear if even hand coding available in ISODE 3.0 can
                    308: --produce the requirement of 9041.
                    309: 
                    310: CDSOffer 
                    311: %{
                    312:        ARG_OFFER_LIST  *arg = (ARG_OFFER_LIST *)parm;
                    313: %}
                    314:        ::= 
                    315: SET OF 
                    316: %{
                    317:        l = arg->num_cds_objects;
                    318: %} SEQUENCE
                    319: {
                    320:        objectName PrintableString
                    321:                [[s arg->cds_offer_list[l].obj_name]],
                    322: 
                    323:        ObjectOffer [[p (PEPYPARM)&(arg->cds_offer_list[l])]]
                    324: 
                    325:        %{ ++arg->num_cds_objects;
                    326:           if(arg->num_cds_objects >= MAXCDSOBJ) return(OK);
                    327:        %}
                    328: }
                    329: 
                    330: --CSSOffer ::= NULL 
                    331: 
                    332: --DEVOffer ::= NULL
                    333: 
                    334: ObjectOffer 
                    335: %{
                    336:        CDS_OFFER       *arg = (CDS_OFFER *)parm;
                    337: %}
                    338:        ::= SEQUENCE
                    339: %{     
                    340:        arg->dimensions.bitcount = 0;
                    341:        arg->valid_x_dim = 0;
                    342:        arg->valid_y_dim = 0;
                    343:        arg->valid_z_dim = 0;
                    344:        arg->erasure.bitcount = 0;
                    345:        arg->valid_rep_list = 0;
                    346:        arg->valid_emp_list = 0;
                    347:        arg->valid_fore_color = 0;
                    348:        arg->valid_back_color = 0;
                    349:        arg->access_right.bitcount = 0;
                    350: %}
                    351: {
                    352:        dimensionOffer [0]      IMPLICIT BIT STRING
                    353:        %{ bitstr2int ($$,
                    354:                       arg->dimensions.bitstring,
                    355:                       arg->dimensions.bitcount); %}
                    356:        OPTIONAL,
                    357: 
                    358:        xParamOffer [1]         IMPLICIT DimOffer [[p (PEPYPARM)&(arg->x_dim)]]
                    359:        %{arg->valid_x_dim = 1;%}
                    360:        OPTIONAL,
                    361: 
                    362:        yParamOffer [2]         IMPLICIT DimOffer [[p (PEPYPARM)&(arg->y_dim)]]
                    363:        %{arg->valid_y_dim = 1;%}
                    364:        OPTIONAL,
                    365: 
                    366:        zParamOffer [3]         IMPLICIT DimOffer [[p (PEPYPARM)&(arg->z_dim)]]
                    367:        %{arg->valid_z_dim = 1;%}
                    368:        OPTIONAL,
                    369: 
                    370: --     erasuroffer [4]         IMPLICIT BIT STRING
                    371: --     %{ bitstr2int ($$,
                    372: --                    arg->erasure.bitstring,
                    373: --                    arg->erasure.bitcount); %}
                    374: --     OPTIONAL,
                    375: 
                    376:        repOfferList [5]        IMPLICIT CompRepOffer [[p (PEPYPARM)&(arg->rep_offer)]]
                    377:        %{arg->valid_rep_list = 1;%}
                    378:        OPTIONAL,
                    379: 
                    380: --     empOfferList [6]        IMPLICIT CompEmpOffer [[p (PEPYPRAM)&(arg->emp_offer)]]
                    381: --     %{arg->valid_emp_list = 1;%}
                    382: --     OPTIONAL,
                    383: 
                    384: --     foreColorList [7]       IMPLICIT ColorOffer [[p (PEPYPARM)&(arg->fore_color_list)]]
                    385: --     %{arg->valid_fore_color = 1;%}
                    386: --     OPTIONAL,
                    387: 
                    388: --     backColorList [8]       IMPLICIT ColorOffer [[p (PEPYPARM)&(arg->back_color_list)]]
                    389: --     %{arg->valid_back_color = 1;%}
                    390: --     OPTIONAL,
                    391: 
                    392:        objectAccRight [9]      IMPLICIT BIT STRING
                    393:        %{ bitstr2int ($$,
                    394:                       arg->access_right.bitstring,
                    395:                       arg->access_right.bitcount); %}
                    396:        OPTIONAL
                    397: }
                    398: 
                    399: DimOffer 
                    400: %{
                    401:        DIMEN_PARAM     *arg = (DIMEN_PARAM *)parm;
                    402: %}
                    403:        ::= SEQUENCE
                    404: %{     
                    405:        arg->bound_type = 0;
                    406:        arg->addressing.bitcount = 0;
                    407:        arg->absolute.bitcount = 0;
                    408:        arg->window_type = 0;
                    409: %}
                    410: 
                    411: {
                    412:        bound           [0] IMPLICIT SEQUENCE
                    413:        {
                    414:                unbounded NULL
                    415:                %{arg->bound_type = 1;%}
                    416:                OPTIONAL,
                    417: 
                    418:                limit IntOffer [[p (PEPYPARM)&(arg->bound)]]
                    419:                %{arg->bound_type = 2;%}
                    420:        }
                    421:        OPTIONAL,
                    422: 
                    423:        addressing      [1] IMPLICIT BIT STRING
                    424:        %{ bitstr2int ($$,
                    425:                       arg->addressing.bitstring,
                    426:                       arg->addressing.bitcount); %}
                    427:        OPTIONAL,
                    428: 
                    429:        absolute        [2] IMPLICIT BIT STRING
                    430:        %{ bitstr2int ($$,
                    431:                       arg->absolute.bitstring,
                    432:                       arg->absolute.bitcount); %}
                    433:        OPTIONAL,
                    434: 
                    435:        window          [3] IMPLICIT SEQUENCE
                    436:        {
                    437:                unbounded NULL
                    438:                %{arg->window_type = 1;%}
                    439:                OPTIONAL,
                    440: 
                    441:                limit IntOffer [[p (PEPYPARM)&(arg->window)]]
                    442:                %{arg->window_type = 2;%}
                    443:                OPTIONAL
                    444:        }
                    445:        OPTIONAL
                    446: }
                    447: 
                    448: CompRepOffer 
                    449: %{
                    450:        REP_LIST        *arg = (REP_LIST *)parm;
                    451: %}
                    452:        ::= SEQUENCE
                    453: %{     
                    454:        arg->valid_cap = 0;
                    455:        arg->num_reps = 0;
                    456:        arg->repertoire[m].valid_font_cap = 0;
                    457:        arg->repertoire[m].num_fonts = 0;
                    458: /*     arg->repertoire[m].rep_assign = 0; */
                    459: %}
                    460: 
                    461: {
                    462:        repCapability   [0] IMPLICIT IntOffer [[p (PEPYPARM)&(arg->capability)]]
                    463:        %{arg->valid_cap = 1;%}
                    464:        OPTIONAL,
                    465: 
                    466:                        [1] IMPLICIT SEQUENCE OF 
                    467:                        %{m = arg->num_reps;%}
                    468:                                RepFontOffer [[p (PEPYPARM)&(arg->repertoire[m])]]
                    469:                                %{++arg->num_reps;
                    470:                                if(arg->num_reps >= MAXREPS) return(OK);
                    471:                                %}
                    472: }
                    473: 
                    474: RepFontOffer 
                    475: %{
                    476:        REP_FONT        *arg = (REP_FONT *)parm;
                    477: %}
                    478:        ::= 
                    479: CHOICE
                    480: {
                    481:        NULL
                    482:        %{arg->rep_type = 1;%},
                    483: 
                    484:        SEQUENCE
                    485:        {
                    486:                repertoire      [0] IMPLICIT PrintableString
                    487:                [[s arg->rep_assign]]
                    488:                OPTIONAL,
                    489: 
                    490:                fontCapability  [1] IMPLICIT IntOffer [[p (PEPYPARM)&(arg->capability)]]
                    491:                %{arg->valid_font_cap = 1;%}
                    492:                OPTIONAL,
                    493: 
                    494:                [2] IMPLICIT SEQUENCE OF
                    495:                %{n = arg->num_fonts;%}
                    496:                PrintableString
                    497:                [[s arg->font_names[n] ]]
                    498:                %{++arg->num_fonts;%}
                    499:                OPTIONAL
                    500:        }
                    501:        %{arg->rep_type = 2;%}
                    502: }
                    503: 
                    504: --CompEmpOffer ::= SEQUENCE
                    505: --%{   parm->asq_profile.cds_offer_list[l].emp_offer.valid_cap = 0;
                    506: --     parm->asq_profile.cds_offer_list[l].emp_offer.num_emps = 0;
                    507: --%}
                    508: 
                    509: --{
                    510: --     empCap          [0] IMPLICIT IntOffer [[p parm]]
                    511: --                     %{parm->asq_profile.cds_offer_list[l].emp_offer.valid_cap = 1;%}
                    512: --                     OPTIONAL,
                    513: 
                    514: --                     SEQUENCE OF %{m = parm->asq_profile.cds_offer_list[l].emp_offer.num_emps;%}
                    515: --                             PrintableString
                    516: --                             [[s parm->asq_profile.cds_offer_list[l].emp_offer.emp_string[m] ]]
                    517: --                             %{++parm->asq_profile.cds_offer_list[l].emp_offer.num_emps;
                    518: --                             if(parm->asq_profile.cds_offer_list[l].emp_offer.num_emps >= MAXEMPS) return(OK);
                    519: --                             %}
                    520: --                             OPTIONAL
                    521: --}
                    522: 
                    523: --ColorOffer %{int i;%} ::= SEQUENCE
                    524: --%{   
                    525: --     COLOR_LIST      *arg = parm;
                    526: --
                    527: --     arg->valid_cap = 0;
                    528: --     arg->num_colors = 0;
                    529: --%}
                    530: 
                    531: --{
                    532: --     colorCap        [0] IMPLICIT FCIntOffer [[p parm]]
                    533: --                     %{arg->valid_cap = 1;%}
                    534: --                     OPTIONAL,
                    535: 
                    536: --     colorNames      SEQUENCE OF %{m = parm->asq_profile.cds_offer_list[l].fore_color_list.num_colors;%}
                    537: --                             PrintableString
                    538: --                             [[s parm->asq_profile.cds_offer_list[l].fore_color_list.color_string[m] ]]
                    539: --                             %{++parm->asq_profile.cds_offer_list[l].fore_color_list.num_colors;
                    540: --                             if(parm->asq_profile.cds_offer_list[l].fore_color_list.num_colors >= MAXCOLORS) return(OK);
                    541: --                             %}
                    542: --                             OPTIONAL
                    543: --}
                    544: 
                    545: IntOffer 
                    546: %{
                    547:        INT_OFFER       *arg = (INT_OFFER *)parm;
                    548: %}
                    549:        ::= SEQUENCE OF
                    550: 
                    551:        CHOICE
                    552:        {
                    553:                indivValue [0] IMPLICIT INTEGER
                    554:                [[i arg->value]]
                    555:                %{arg->type = 0;%},
                    556: 
                    557:                range [1] IMPLICIT SEQUENCE
                    558:                %{arg->type = 1;%}
                    559:                {
                    560:                        INTEGER [[i arg->min_val]],
                    561:                        INTEGER [[i arg->max_val]]
                    562:                }
                    563:        }
                    564: 
                    565: END
                    566: 
                    567: %{
                    568: 
                    569: %}

unix.superglobalmegacorp.com

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