Annotation of 43BSDReno/sys/netiso/xebec/xebec.c, revision 1.1.1.1

1.1       root        1: /* $Header: xebec.c,v 2.2 88/09/19 12:55:37 nhall Exp $ */
                      2: /* $Source: /var/home/tadl/src/argo/xebec/RCS/xebec.c,v $ */
                      3: 
                      4: #include "xebec.h"
                      5: #include "llparse.h"
                      6: #ifndef        E_TABLE
                      7: #define        E_TABLE "xebec.e"
                      8: #endif E_TABLE
                      9: 
                     10: #include "main.h"
                     11: #include "sets.h"
                     12: #include <stdio.h> 
                     13: 
                     14: extern FILE *eventfile_h, *actfile; 
                     15: 
                     16: llaction(lln,token)
                     17: LLtoken *token;
                     18: {
                     19:        struct llattr *llattr;
                     20:        llattr = &llattrdesc[lldescindex-1];
                     21: switch(lln) {
                     22: case 1:
                     23:        llfinprod();
                     24:        break;
                     25: 
                     26: case 10: {
                     27:        
                     28:                                        if(strlen(llattr->llabase[3].ID.address) > 50 ) {
                     29:                                                fprintf(stderr, 
                     30:                                                "Protocol name may not exceed 50 chars in length.\n"); 
                     31:                                                Exit(-1);
                     32:                                        }
                     33:                                        strcpy(protocol, llattr->llabase[3].ID.address); 
                     34:                                        openfiles(protocol); 
                     35:                                
                     36: } break;
                     37: 
                     38: case 11: {
                     39:  
                     40:                                        llattr->llabase[7].pcb.isevent = 0; 
                     41:                                
                     42: } break;
                     43: 
                     44: case 12: {
                     45: 
                     46:                                  fprintf(actfile, "\ntypedef %s %s%s;\n",
                     47:                                                          llattr->llabase[7].pcb.address,protocol, PCBNAME); 
                     48:                                  llattr->llabase[8].syn.type = PCB_SYN;
                     49:                                
                     50: } break;
                     51: 
                     52: case 13: {
                     53:  llattr->llabase[11].part.type = (unsigned char) STATESET; 
                     54: } break;
                     55: 
                     56: case 14: {
                     57:  end_states(eventfile_h); 
                     58: } break;
                     59: 
                     60: case 15: {
                     61:  llattr->llabase[14].pcb.isevent = 1; 
                     62: } break;
                     63: 
                     64: case 16: {
                     65: 
                     66:                                        fprintf(eventfile_h, "\t"); /* fmq gags on single chars */
                     67:                                        includecode(eventfile_h, llattr->llabase[14].pcb.address);
                     68:                                        fprintf(eventfile_h, "\n"); /* fmq gags on single chars */
                     69:                                        llattr->llabase[15].syn.type = EVENT_SYN;
                     70:                                
                     71: } break;
                     72: 
                     73: case 17: {
                     74:  
                     75:                                        llattr->llabase[16].part.type = (unsigned char)EVENTSET; 
                     76:                                
                     77: } break;
                     78: 
                     79: case 18: {
                     80:  end_events(); 
                     81: } break;
                     82: 
                     83: case 19: {
                     84:  
                     85:                                        putincludes();
                     86:                                        putdriver(actfile, 9);
                     87:                                
                     88: } break;
                     89: 
                     90: case 20: {
                     91:        if(llattr->llabase[0].pcb.isevent)  {
                     92:                                        fprintf(stderr, 
                     93:                                        "Event is a list of objects enclosed by \"{}\"\n");
                     94:                                        Exit(-1);
                     95:                                }
                     96:                          fprintf(eventfile_h, "struct "); 
                     97:                        
                     98: } break;
                     99: 
                    100: case 21: {
                    101:  llattr->llabase[0].pcb.address = llattr->llabase[2].ACTION.address; 
                    102: } break;
                    103: 
                    104: case 22: {
                    105:        if( ! llattr->llabase[0].pcb.isevent)  {
                    106:                                        fprintf(stderr, 
                    107:                                        "Pcb requires a type or structure definition.\"{}\"\n");
                    108:                                        Exit(-1);
                    109:                                }
                    110:                           llattr->llabase[0].pcb.address = llattr->llabase[1].ACTION.address; 
                    111:                        
                    112: } break;
                    113: 
                    114: case 23: {
                    115:   llattr->llabase[0].pcb.address = llattr->llabase[1].ID.address; 
                    116: } break;
                    117: 
                    118: case 24: {
                    119:  synonyms[llattr->llabase[0].syn.type] = stash( llattr->llabase[2].ID.address ); 
                    120: } break;
                    121: 
                    122: case 25: {
                    123:  includecode(actfile, llattr->llabase[2].ACTION.address);
                    124: } break;
                    125: 
                    126: case 26: {
                    127:  
                    128:                        llattr->llabase[2].partrest.address = llattr->llabase[1].ID.address;
                    129:                        llattr->llabase[2].partrest.type = llattr->llabase[0].part.type; 
                    130:                
                    131: } break;
                    132: 
                    133: case 27: {
                    134:  llattr->llabase[3].parttail.type = llattr->llabase[0].part.type; 
                    135: } break;
                    136: 
                    137: case 28: {
                    138:  llattr->llabase[1].part.type = llattr->llabase[0].parttail.type; 
                    139: } break;
                    140: 
                    141: case 29: {
                    142:  
                    143:                          if(  lookup( llattr->llabase[0].partrest.type, llattr->llabase[0].partrest.address ) ) {
                    144:                                fprintf(stderr, "bnf:trying to redefine obj type 0x%x, adr %s\n",
                    145:                                        llattr->llabase[0].partrest.type, llattr->llabase[0].partrest.address);
                    146:                                Exit(-1);
                    147:                          } 
                    148:                          llattr->llabase[2].setdef.type = llattr->llabase[0].partrest.type;
                    149:                          llattr->llabase[2].setdef.address = stash( llattr->llabase[0].partrest.address );
                    150:                          llattr->llabase[2].setdef.keep = 1;
                    151:                        
                    152: } break;
                    153: 
                    154: case 30: {
                    155:  llattr->llabase[3].setstruct.object = llattr->llabase[2].setdef.object; 
                    156: } break;
                    157: 
                    158: case 31: {
                    159:  
                    160:                 defineitem(llattr->llabase[0].partrest.type, 
                    161:                                        llattr->llabase[0].partrest.address, llattr->llabase[1].ACTION.address); 
                    162:                
                    163: } break;
                    164: 
                    165: case 32: {
                    166:  
                    167:                        defineitem(llattr->llabase[0].partrest.type, llattr->llabase[0].partrest.address, (char *)0);
                    168:                
                    169: } break;
                    170: 
                    171: case 33: {
                    172: 
                    173:                                if(llattr->llabase[0].setstruct.object)  {
                    174:                                        /* WHEN COULD THIS BE FALSE?? 
                    175:                                         * isn't it supposed to be setstruct.object???
                    176:                                         * (it used to be $ACTION.address)
                    177:                                         */
                    178: 
                    179:                                        llattr->llabase[0].setstruct.object->obj_struc = llattr->llabase[1].ACTION.address;
                    180:                                        fprintf(eventfile_h, 
                    181:                                                "struct %s %s%s;\n\n", llattr->llabase[1].ACTION.address, 
                    182:                                                EV_PREFIX,  llattr->llabase[0].setstruct.object->obj_name);
                    183:                                }
                    184:                        
                    185: } break;
                    186: 
                    187: case 34: {
                    188:  
                    189:                        llattr->llabase[2].setlist.setnum = 
                    190:                        defineset(llattr->llabase[0].setdef.type, llattr->llabase[0].setdef.address, llattr->llabase[0].setdef.keep); 
                    191:                
                    192: } break;
                    193: 
                    194: case 35: {
                    195:  llattr->llabase[0].setdef.object = llattr->llabase[2].setlist.setnum; 
                    196: } break;
                    197: 
                    198: case 36: {
                    199:  
                    200:                member(llattr->llabase[0].setlist.setnum, llattr->llabase[1].ID.address); 
                    201:                                llattr->llabase[2].setlisttail.setnum = llattr->llabase[0].setlist.setnum; 
                    202:        
                    203: } break;
                    204: 
                    205: case 37: {
                    206:  llattr->llabase[2].setlist.setnum = llattr->llabase[0].setlisttail.setnum; 
                    207: } break;
                    208: 
                    209: case 38: {
                    210:  transno ++; 
                    211: } break;
                    212: 
                    213: case 39: {
                    214:  
                    215:                CurrentEvent /* GAG! */ = llattr->llabase[6].event.object; 
                    216:         
                    217: } break;
                    218: 
                    219: case 40: {
                    220:  
                    221:                llattr->llabase[8].actionpart.string = llattr->llabase[7].predicatepart.string; 
                    222:                llattr->llabase[8].actionpart.newstate = llattr->llabase[1].newstate.object; 
                    223:                llattr->llabase[8].actionpart.oldstate = llattr->llabase[5].oldstate.object;
                    224:        
                    225: } break;
                    226: 
                    227: case 41: {
                    228:  
                    229:                 llattr->llabase[0].predicatepart.string = stash ( llattr->llabase[1].PREDICATE.address );
                    230:        
                    231: } break;
                    232: 
                    233: case 42: {
                    234:  
                    235:                llattr->llabase[0].predicatepart.string = (char *)0;
                    236:        
                    237: } break;
                    238: 
                    239: case 43: {
                    240: 
                    241:          statetable( llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate, 
                    242:                                        llattr->llabase[0].actionpart.newstate,
                    243:                                        acttable(actfile, llattr->llabase[1].ACTION.address ), 
                    244:                                        CurrentEvent ); 
                    245:          if( print_trans ) {
                    246:                dump_trans( llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate, 
                    247:                                        llattr->llabase[0].actionpart.newstate,
                    248:                                        llattr->llabase[1].ACTION.address, CurrentEvent ); 
                    249:          }
                    250:        
                    251: } break;
                    252: 
                    253: case 44: {
                    254: 
                    255:          statetable(llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate, llattr->llabase[0].actionpart.newstate,
                    256:                                  0, CurrentEvent ); /* KLUDGE - remove this */
                    257:          if( print_trans ) {
                    258:                dump_trans( llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate, 
                    259:                                        llattr->llabase[0].actionpart.newstate,
                    260:                                        "NULLACTION", CurrentEvent ); 
                    261:          }
                    262:        
                    263: } break;
                    264: 
                    265: case 45: {
                    266:        
                    267:                llattr->llabase[0].oldstate.object = Lookup(STATESET, llattr->llabase[1].ID.address);
                    268:        
                    269: } break;
                    270: 
                    271: case 46: {
                    272: 
                    273:                        llattr->llabase[1].setdef.address = (char *)0;
                    274:                        llattr->llabase[1].setdef.type = (unsigned char)STATESET; 
                    275:                        llattr->llabase[1].setdef.keep = 0;
                    276:                
                    277: } break;
                    278: 
                    279: case 47: {
                    280:  
                    281:                        llattr->llabase[0].oldstate.object = llattr->llabase[1].setdef.object; 
                    282:                
                    283: } break;
                    284: 
                    285: case 48: {
                    286:  
                    287:                llattr->llabase[0].newstate.object = Lookup(STATESET, llattr->llabase[1].ID.address); 
                    288:        
                    289: } break;
                    290: 
                    291: case 49: {
                    292:  
                    293:                extern struct Object *SameState;
                    294: 
                    295:                llattr->llabase[0].newstate.object = SameState;
                    296:        
                    297: } break;
                    298: 
                    299: case 50: {
                    300: 
                    301:                        llattr->llabase[0].event.object = Lookup(EVENTSET, llattr->llabase[1].ID.address); 
                    302:                
                    303: } break;
                    304: 
                    305: case 51: {
                    306: 
                    307:                        llattr->llabase[1].setdef.address = (char *)0;
                    308:                        llattr->llabase[1].setdef.type = (unsigned char)EVENTSET; 
                    309:                        llattr->llabase[1].setdef.keep = 0;
                    310:                
                    311: } break;
                    312: 
                    313: case 52: {
                    314:  
                    315:                        llattr->llabase[0].event.object = llattr->llabase[1].setdef.object; 
                    316:                
                    317: } break;
                    318: }
                    319: }
                    320: char *llstrings[] = {
                    321:        "<null>",
                    322:        "ID",
                    323:        "STRUCT",
                    324:        "SYNONYM",
                    325:        "PREDICATE",
                    326:        "ACTION",
                    327:        "PROTOCOL",
                    328:        "LBRACK",
                    329:        "RBRACK",
                    330:        "LANGLE",
                    331:        "EQUAL",
                    332:        "COMMA",
                    333:        "STAR",
                    334:        "EVENTS",
                    335:        "TRANSITIONS",
                    336:        "INCLUDE",
                    337:        "STATES",
                    338:        "SEMI",
                    339:        "PCB",
                    340:        "DEFAULT",
                    341:        "NULLACTION",
                    342:        "SAME",
                    343:        "ENDMARKER",
                    344:        "pcb",
                    345:        "syn",
                    346:        "setlist",
                    347:        "setlisttail",
                    348:        "part",
                    349:        "parttail",
                    350:        "partrest",
                    351:        "setstruct",
                    352:        "setdef",
                    353:        "translist",
                    354:        "transition",
                    355:        "event",
                    356:        "oldstate",
                    357:        "newstate",
                    358:        "predicatepart",
                    359:        "actionpart",
                    360:        "program",
                    361:        "includelist",
                    362:        "optsemi",
                    363:        "translisttail",
                    364:        "$goal$",
                    365:        (char *) 0
                    366: };
                    367: short llnterms = 23;
                    368: short llnsyms = 44;
                    369: short llnprods = 38;
                    370: short llinfinite = 10000;
                    371: short llproductions[] = {
                    372: 41, -21, 5, -20, 2, 
                    373: 41, -22, 5, 
                    374: 41, -23, 1, 
                    375: -24, 1, 3, 
                    376: 
                    377: 26, -36, 1, 
                    378: 25, -37, 11, 
                    379: 
                    380: 28, -27, 29, -26, 1, 
                    381: 27, -28, 
                    382: 
                    383: 30, -30, 31, -29, 10, 
                    384: -31, 5, 
                    385: -32, 
                    386: -33, 5, 
                    387: 
                    388: -35, 8, 25, -34, 7, 
                    389: 42, 33, 
                    390: 17, 38, -40, 37, -39, 34, 35, 10, 10, 9, -38, 36, 
                    391: -50, 1, 
                    392: -52, 31, -51, 
                    393: -45, 1, 
                    394: -47, 31, -46, 
                    395: -48, 1, 
                    396: -49, 21, 
                    397: -41, 4, 
                    398: -42, 19, 
                    399: -43, 5, 
                    400: -44, 20, 
                    401: 32, -19, 14, -18, 12, 27, -17, 24, -16, 23, -15, 13, -14, 12, 27, -13, 16, 12, 24, -12, 23, -11, 18, 40, 12, -10, 1, 6, 12, 
                    402: 12, -25, 5, 15, 
                    403: 
                    404: 17, 
                    405: 
                    406: 32, 
                    407: 
                    408: 22, 39, 
                    409: 0
                    410: };
                    411: struct llprodindex llprodindex[] = {
                    412: {   0,   0,   0 }, {   0,   5,  19 }, {   5,   3,   3 }, {   8,   3,   2 }, 
                    413: {  11,   3,   2 }, {  14,   0,   2 }, {  14,   3,   0 }, {  17,   3,   1 }, 
                    414: {  20,   0,   0 }, {  20,   5,   3 }, {  25,   2,   0 }, {  27,   0,   3 }, 
                    415: {  27,   5,   1 }, {  32,   2,   0 }, {  34,   1,   3 }, {  35,   2,   1 }, 
                    416: {  37,   0,   0 }, {  37,   5,   1 }, {  42,   2,   0 }, {  44,  12,   3 }, 
                    417: {  56,   2,   2 }, {  58,   3,   2 }, {  61,   2,   0 }, {  63,   3,   2 }, 
                    418: {  66,   2,   1 }, {  68,   2,   0 }, {  70,   2,   9 }, {  72,   2,   1 }, 
                    419: {  74,   2,   1 }, {  76,   2,   1 }, {  78,  29,   1 }, { 107,   4,   1 }, 
                    420: { 111,   0,   1 }, { 111,   1,   1 }, { 112,   0,   1 }, { 112,   1,   1 }, 
                    421: { 113,   0,   1 }, { 113,   2,   2 }, {   0,   0,   0 }
                    422: };
                    423: short llepsilon[] = {
                    424:  0, 0, 0, 0, 0, 1, 0, 0, 1, 0,
                    425:  0, 1, 0, 0, 1, 0, 1, 0, 0, 0,
                    426:  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                    427:  0, 0, 1, 0, 1, 0, 1, 0, 0
                    428: };
                    429: struct llparsetable llparsetable[] = {
                    430: {   1,   3 }, {   2,   1 }, {   5,   2 }, {   0,  23 }, {   1,   5 }, 
                    431: {   3,   4 }, {  12,   5 }, {   0,  24 }, {   1,   6 }, {   0,  25 }, 
                    432: {   8,   8 }, {  11,   7 }, {   0,  26 }, {   1,   9 }, {   0,  27 }, 
                    433: {   1,  10 }, {  12,  11 }, {   0,  28 }, {   1,  14 }, {   5,  13 }, 
                    434: {  10,  12 }, {  12,  14 }, {   0,  29 }, {   1,  16 }, {   5,  15 }, 
                    435: {  12,  16 }, {   0,  30 }, {   7,  17 }, {   0,  31 }, {   1,  18 }, 
                    436: {  21,  18 }, {   0,  32 }, {   1,  19 }, {  21,  19 }, {   0,  33 }, 
                    437: {   1,  20 }, {   7,  21 }, {   0,  34 }, {   1,  22 }, {   7,  23 }, 
                    438: {   0,  35 }, {   1,  24 }, {  21,  25 }, {   0,  36 }, {   4,  26 }, 
                    439: {  19,  27 }, {   0,  37 }, {   5,  28 }, {  20,  29 }, {   0,  38 }, 
                    440: {  12,  30 }, {   0,  39 }, {  15,  31 }, {  18,  32 }, {   0,  40 }, 
                    441: {   1,  34 }, {   3,  34 }, {  12,  34 }, {  17,  33 }, {   0,  41 }, 
                    442: {   1,  35 }, {  21,  35 }, {  22,  36 }, {   0,  42 }, {  12,  37 }, 
                    443: {   0,  43 }, {   0,   0 }
                    444: };
                    445: short llparseindex[] = {
                    446:  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                    447:  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                    448:  0, 0, 0, 0, 4, 8, 10, 13, 15, 18,
                    449:  23, 27, 29, 32, 35, 38, 41, 44, 47, 50,
                    450:  52, 55, 60, 64, 0
                    451: };

unix.superglobalmegacorp.com

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