summaryrefslogtreecommitdiffstats
path: root/sys/netiso/xebec/xebec.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netiso/xebec/xebec.c')
-rw-r--r--sys/netiso/xebec/xebec.c451
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
+};
OpenPOWER on IntegriCloud