diff options
Diffstat (limited to 'sys/netiso/xebec/xebec.c')
-rw-r--r-- | sys/netiso/xebec/xebec.c | 451 |
1 files changed, 451 insertions, 0 deletions
diff --git a/sys/netiso/xebec/xebec.c b/sys/netiso/xebec/xebec.c new file mode 100644 index 0000000..132bcb8 --- /dev/null +++ b/sys/netiso/xebec/xebec.c @@ -0,0 +1,451 @@ +/* $Header: xebec.c,v 2.2 88/09/19 12:55:37 nhall Exp $ */ +/* $Source: /var/home/tadl/src/argo/xebec/RCS/xebec.c,v $ */ + +#include "xebec.h" +#include "llparse.h" +#ifndef E_TABLE +#define E_TABLE "xebec.e" +#endif E_TABLE + +#include "main.h" +#include "sets.h" +#include <stdio.h> + +extern FILE *eventfile_h, *actfile; + +llaction(lln,token) +LLtoken *token; +{ + struct llattr *llattr; + llattr = &llattrdesc[lldescindex-1]; +switch(lln) { +case 1: + llfinprod(); + break; + +case 10: { + + if(strlen(llattr->llabase[3].ID.address) > 50 ) { + fprintf(stderr, + "Protocol name may not exceed 50 chars in length.\n"); + Exit(-1); + } + strcpy(protocol, llattr->llabase[3].ID.address); + openfiles(protocol); + +} break; + +case 11: { + + llattr->llabase[7].pcb.isevent = 0; + +} break; + +case 12: { + + fprintf(actfile, "\ntypedef %s %s%s;\n", + llattr->llabase[7].pcb.address,protocol, PCBNAME); + llattr->llabase[8].syn.type = PCB_SYN; + +} break; + +case 13: { + llattr->llabase[11].part.type = (unsigned char) STATESET; +} break; + +case 14: { + end_states(eventfile_h); +} break; + +case 15: { + llattr->llabase[14].pcb.isevent = 1; +} break; + +case 16: { + + fprintf(eventfile_h, "\t"); /* fmq gags on single chars */ + includecode(eventfile_h, llattr->llabase[14].pcb.address); + fprintf(eventfile_h, "\n"); /* fmq gags on single chars */ + llattr->llabase[15].syn.type = EVENT_SYN; + +} break; + +case 17: { + + llattr->llabase[16].part.type = (unsigned char)EVENTSET; + +} break; + +case 18: { + end_events(); +} break; + +case 19: { + + putincludes(); + putdriver(actfile, 9); + +} break; + +case 20: { + if(llattr->llabase[0].pcb.isevent) { + fprintf(stderr, + "Event is a list of objects enclosed by \"{}\"\n"); + Exit(-1); + } + fprintf(eventfile_h, "struct "); + +} break; + +case 21: { + llattr->llabase[0].pcb.address = llattr->llabase[2].ACTION.address; +} break; + +case 22: { + if( ! llattr->llabase[0].pcb.isevent) { + fprintf(stderr, + "Pcb requires a type or structure definition.\"{}\"\n"); + Exit(-1); + } + llattr->llabase[0].pcb.address = llattr->llabase[1].ACTION.address; + +} break; + +case 23: { + llattr->llabase[0].pcb.address = llattr->llabase[1].ID.address; +} break; + +case 24: { + synonyms[llattr->llabase[0].syn.type] = stash( llattr->llabase[2].ID.address ); +} break; + +case 25: { + includecode(actfile, llattr->llabase[2].ACTION.address); +} break; + +case 26: { + + llattr->llabase[2].partrest.address = llattr->llabase[1].ID.address; + llattr->llabase[2].partrest.type = llattr->llabase[0].part.type; + +} break; + +case 27: { + llattr->llabase[3].parttail.type = llattr->llabase[0].part.type; +} break; + +case 28: { + llattr->llabase[1].part.type = llattr->llabase[0].parttail.type; +} break; + +case 29: { + + if( lookup( llattr->llabase[0].partrest.type, llattr->llabase[0].partrest.address ) ) { + fprintf(stderr, "bnf:trying to redefine obj type 0x%x, adr %s\n", + llattr->llabase[0].partrest.type, llattr->llabase[0].partrest.address); + Exit(-1); + } + llattr->llabase[2].setdef.type = llattr->llabase[0].partrest.type; + llattr->llabase[2].setdef.address = stash( llattr->llabase[0].partrest.address ); + llattr->llabase[2].setdef.keep = 1; + +} break; + +case 30: { + llattr->llabase[3].setstruct.object = llattr->llabase[2].setdef.object; +} break; + +case 31: { + + defineitem(llattr->llabase[0].partrest.type, + llattr->llabase[0].partrest.address, llattr->llabase[1].ACTION.address); + +} break; + +case 32: { + + defineitem(llattr->llabase[0].partrest.type, llattr->llabase[0].partrest.address, (char *)0); + +} break; + +case 33: { + + if(llattr->llabase[0].setstruct.object) { + /* WHEN COULD THIS BE FALSE?? + * isn't it supposed to be setstruct.object??? + * (it used to be $ACTION.address) + */ + + llattr->llabase[0].setstruct.object->obj_struc = llattr->llabase[1].ACTION.address; + fprintf(eventfile_h, + "struct %s %s%s;\n\n", llattr->llabase[1].ACTION.address, + EV_PREFIX, llattr->llabase[0].setstruct.object->obj_name); + } + +} break; + +case 34: { + + llattr->llabase[2].setlist.setnum = + defineset(llattr->llabase[0].setdef.type, llattr->llabase[0].setdef.address, llattr->llabase[0].setdef.keep); + +} break; + +case 35: { + llattr->llabase[0].setdef.object = llattr->llabase[2].setlist.setnum; +} break; + +case 36: { + + member(llattr->llabase[0].setlist.setnum, llattr->llabase[1].ID.address); + llattr->llabase[2].setlisttail.setnum = llattr->llabase[0].setlist.setnum; + +} break; + +case 37: { + llattr->llabase[2].setlist.setnum = llattr->llabase[0].setlisttail.setnum; +} break; + +case 38: { + transno ++; +} break; + +case 39: { + + CurrentEvent /* GAG! */ = llattr->llabase[6].event.object; + +} break; + +case 40: { + + llattr->llabase[8].actionpart.string = llattr->llabase[7].predicatepart.string; + llattr->llabase[8].actionpart.newstate = llattr->llabase[1].newstate.object; + llattr->llabase[8].actionpart.oldstate = llattr->llabase[5].oldstate.object; + +} break; + +case 41: { + + llattr->llabase[0].predicatepart.string = stash ( llattr->llabase[1].PREDICATE.address ); + +} break; + +case 42: { + + llattr->llabase[0].predicatepart.string = (char *)0; + +} break; + +case 43: { + + statetable( llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate, + llattr->llabase[0].actionpart.newstate, + acttable(actfile, llattr->llabase[1].ACTION.address ), + CurrentEvent ); + if( print_trans ) { + dump_trans( llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate, + llattr->llabase[0].actionpart.newstate, + llattr->llabase[1].ACTION.address, CurrentEvent ); + } + +} break; + +case 44: { + + statetable(llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate, llattr->llabase[0].actionpart.newstate, + 0, CurrentEvent ); /* KLUDGE - remove this */ + if( print_trans ) { + dump_trans( llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate, + llattr->llabase[0].actionpart.newstate, + "NULLACTION", CurrentEvent ); + } + +} break; + +case 45: { + + llattr->llabase[0].oldstate.object = Lookup(STATESET, llattr->llabase[1].ID.address); + +} break; + +case 46: { + + llattr->llabase[1].setdef.address = (char *)0; + llattr->llabase[1].setdef.type = (unsigned char)STATESET; + llattr->llabase[1].setdef.keep = 0; + +} break; + +case 47: { + + llattr->llabase[0].oldstate.object = llattr->llabase[1].setdef.object; + +} break; + +case 48: { + + llattr->llabase[0].newstate.object = Lookup(STATESET, llattr->llabase[1].ID.address); + +} break; + +case 49: { + + extern struct Object *SameState; + + llattr->llabase[0].newstate.object = SameState; + +} break; + +case 50: { + + llattr->llabase[0].event.object = Lookup(EVENTSET, llattr->llabase[1].ID.address); + +} break; + +case 51: { + + llattr->llabase[1].setdef.address = (char *)0; + llattr->llabase[1].setdef.type = (unsigned char)EVENTSET; + llattr->llabase[1].setdef.keep = 0; + +} break; + +case 52: { + + llattr->llabase[0].event.object = llattr->llabase[1].setdef.object; + +} break; +} +} +char *llstrings[] = { + "<null>", + "ID", + "STRUCT", + "SYNONYM", + "PREDICATE", + "ACTION", + "PROTOCOL", + "LBRACK", + "RBRACK", + "LANGLE", + "EQUAL", + "COMMA", + "STAR", + "EVENTS", + "TRANSITIONS", + "INCLUDE", + "STATES", + "SEMI", + "PCB", + "DEFAULT", + "NULLACTION", + "SAME", + "ENDMARKER", + "pcb", + "syn", + "setlist", + "setlisttail", + "part", + "parttail", + "partrest", + "setstruct", + "setdef", + "translist", + "transition", + "event", + "oldstate", + "newstate", + "predicatepart", + "actionpart", + "program", + "includelist", + "optsemi", + "translisttail", + "$goal$", + (char *) 0 +}; +short llnterms = 23; +short llnsyms = 44; +short llnprods = 38; +short llinfinite = 10000; +short llproductions[] = { +41, -21, 5, -20, 2, +41, -22, 5, +41, -23, 1, +-24, 1, 3, + +26, -36, 1, +25, -37, 11, + +28, -27, 29, -26, 1, +27, -28, + +30, -30, 31, -29, 10, +-31, 5, +-32, +-33, 5, + +-35, 8, 25, -34, 7, +42, 33, +17, 38, -40, 37, -39, 34, 35, 10, 10, 9, -38, 36, +-50, 1, +-52, 31, -51, +-45, 1, +-47, 31, -46, +-48, 1, +-49, 21, +-41, 4, +-42, 19, +-43, 5, +-44, 20, +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, +12, -25, 5, 15, + +17, + +32, + +22, 39, +0 +}; +struct llprodindex llprodindex[] = { +{ 0, 0, 0 }, { 0, 5, 19 }, { 5, 3, 3 }, { 8, 3, 2 }, +{ 11, 3, 2 }, { 14, 0, 2 }, { 14, 3, 0 }, { 17, 3, 1 }, +{ 20, 0, 0 }, { 20, 5, 3 }, { 25, 2, 0 }, { 27, 0, 3 }, +{ 27, 5, 1 }, { 32, 2, 0 }, { 34, 1, 3 }, { 35, 2, 1 }, +{ 37, 0, 0 }, { 37, 5, 1 }, { 42, 2, 0 }, { 44, 12, 3 }, +{ 56, 2, 2 }, { 58, 3, 2 }, { 61, 2, 0 }, { 63, 3, 2 }, +{ 66, 2, 1 }, { 68, 2, 0 }, { 70, 2, 9 }, { 72, 2, 1 }, +{ 74, 2, 1 }, { 76, 2, 1 }, { 78, 29, 1 }, { 107, 4, 1 }, +{ 111, 0, 1 }, { 111, 1, 1 }, { 112, 0, 1 }, { 112, 1, 1 }, +{ 113, 0, 1 }, { 113, 2, 2 }, { 0, 0, 0 } +}; +short llepsilon[] = { + 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, + 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, 0 +}; +struct llparsetable llparsetable[] = { +{ 1, 3 }, { 2, 1 }, { 5, 2 }, { 0, 23 }, { 1, 5 }, +{ 3, 4 }, { 12, 5 }, { 0, 24 }, { 1, 6 }, { 0, 25 }, +{ 8, 8 }, { 11, 7 }, { 0, 26 }, { 1, 9 }, { 0, 27 }, +{ 1, 10 }, { 12, 11 }, { 0, 28 }, { 1, 14 }, { 5, 13 }, +{ 10, 12 }, { 12, 14 }, { 0, 29 }, { 1, 16 }, { 5, 15 }, +{ 12, 16 }, { 0, 30 }, { 7, 17 }, { 0, 31 }, { 1, 18 }, +{ 21, 18 }, { 0, 32 }, { 1, 19 }, { 21, 19 }, { 0, 33 }, +{ 1, 20 }, { 7, 21 }, { 0, 34 }, { 1, 22 }, { 7, 23 }, +{ 0, 35 }, { 1, 24 }, { 21, 25 }, { 0, 36 }, { 4, 26 }, +{ 19, 27 }, { 0, 37 }, { 5, 28 }, { 20, 29 }, { 0, 38 }, +{ 12, 30 }, { 0, 39 }, { 15, 31 }, { 18, 32 }, { 0, 40 }, +{ 1, 34 }, { 3, 34 }, { 12, 34 }, { 17, 33 }, { 0, 41 }, +{ 1, 35 }, { 21, 35 }, { 22, 36 }, { 0, 42 }, { 12, 37 }, +{ 0, 43 }, { 0, 0 } +}; +short llparseindex[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 8, 10, 13, 15, 18, + 23, 27, 29, 32, 35, 38, 41, 44, 47, 50, + 52, 55, 60, 64, 0 +}; |