BSD 4_3_Net_2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Tue, 7 May 1991 05:55:11 +0000 (21:55 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Tue, 7 May 1991 05:55:11 +0000 (21:55 -0800)
Work on file usr/src/sys/netiso/xebec/putdriver.c

Synthesized-from: CSRG/cd2/net.2

usr/src/sys/netiso/xebec/putdriver.c [new file with mode: 0644]

diff --git a/usr/src/sys/netiso/xebec/putdriver.c b/usr/src/sys/netiso/xebec/putdriver.c
new file mode 100644 (file)
index 0000000..996ac64
--- /dev/null
@@ -0,0 +1,244 @@
+/* $Header: putdriver.c,v 2.2 88/09/19 12:55:27 nhall Exp $ */
+/* $Source: /var/home/tadl/src/argo/xebec/RCS/putdriver.c,v $ */
+
+/*
+ * This code is such a kludge that I don't want to put my name on it.
+ * It was a ridiculously fast hack and needs rewriting.
+ * However it does work...
+ */
+
+/* The original idea was to put all the driver code
+ * in one place so it would be easy to modify
+ * but as hacks got thrown in it got worse and worse...
+ * It's to the point where a user would be better off
+ * writing his own driver and xebec should JUST produce
+ * the tables.
+ */
+
+#include <stdio.h>
+#include "main.h"
+#include "debug.h"
+
+extern char protocol[];
+char Eventshiftstring[10];
+static char statename[] = {'_', 's', 't', 'a', 't', 'e', 0 };
+
+static char *strings[] = {
+
+#define PART1 { 0,3 }
+
+       "\n#include \"",
+       kerneldirname,
+       protocol,
+       "_states.h\"",
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+
+#define PART12 { 10,12 }
+       "\n\nstatic struct act_ent {\n",
+       "\tint a_newstate;\n\tint a_action;\n",
+       "} statetable[] = { {0,0},\n",
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+
+#define PART2 { 20,20 }
+       "};\n",
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+
+#define PART3 { 30,41 }
+       "\n",
+       protocol,
+       "_driver(p, e)\nregister ",
+       protocol,
+       PCBNAME,
+       " *p;\nregister struct ",
+       protocol,
+       "_event *e;\n",
+       "{\n",
+               "\tregister int index, error=0;\n",
+               "\tstruct act_ent *a;\n",
+               "\tstatic struct act_ent erroraction = {0,-1};\n",
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+
+#define PART4 { 50,54 }
+
+       "\textern int ",
+       protocol,
+       "_debug;\n\textern FILE *",
+       protocol,
+       "_astringfile;\n", 
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+
+#define PART6 { 60, 65 }
+       "\n\tindex = inx[1 + e->ev_number][p->",
+               protocol,
+               statename,
+               "];\n\tif(index<0) index=_Xebec_index(e, p);\n",
+               "\tif (index==0) {\n\t\ta = &erroraction;\n",
+               "\t} else\n\t\ta = &statetable[index];\n\n",
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+
+#define PART7 {70, 77 }
+       "\tif(",
+       protocol,
+       "_debug) fprintf(",
+       protocol,
+       "_astringfile, \"%15s <-- %15s [%15s] \\n\\t%s\\n\",\n",
+       "\t\tsstring[a->a_newstate], sstring[p->",
+       protocol,
+       "_state], estring[e->ev_number], astring[a->a_action]);\n\n",
+       (char *)0,
+       (char *)0,
+
+#define PART8 { 80, 84 }
+               "\tif(a->a_action)\n",
+               "\t\terror = _Xebec_action( a->a_action, e, p );\n",
+               "\tif(error==0)\n\tp->",
+               protocol,
+               "_state = a->a_newstate;\n\treturn error;\n}\n",
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+
+#define PART9 { 90, 99 }
+       "\n_XEBEC_PG int _Xebec_action(a,e,p)\nint a;\nstruct ",
+       protocol,
+       "_event *e;\n",
+       protocol, 
+       PCBNAME,
+       " *p;\n{\n",
+       "switch(a) {\n",
+       "case -1:  return ",
+       protocol,
+       "_protocol_error(e,p);\n",
+       (char *)0,
+
+#define PART10 { 101, 105 }
+       "\tif(",
+       protocol,
+       "_debug) fprintf(",
+       protocol,
+       "_astringfile, \"index 0x%5x\\n\", index);\n",
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+
+#define PART5 { 110, 121 }
+       "\n_XEBEC_PG int\n_Xebec_index( e,p )\n",
+       "\tstruct ",
+       protocol,
+       "_event *e;\n\t", 
+       protocol, 
+       PCBNAME,
+       " *p;\n{\nswitch( (e->ev_number<<",
+       Eventshiftstring,
+       ")+(p->",
+       protocol, 
+       statename,
+       ") ) {\n", 
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+       (char *)0,
+
+#define PART11 {130, 137 }
+       "\tIFTRACE(D_DRIVER)\n",
+       "\t",
+       protocol,
+       "trace(DRIVERTRACE,",
+       "\t\ta->a_newstate, p->",
+       protocol,
+       "_state, e->ev_number, a->a_action, 0);\n\n",
+       "\tENDTRACE\n",
+       (char *)0,
+       (char *)0,
+
+#define PART13 {140, 147 }
+       "\tif(",
+       protocol,
+       "_debug) fprintf(",
+       protocol,
+       "_astringfile, \"%15s <-- %15s [%15s] \\n\",\n",
+       "\t\tsstring[a->a_newstate], sstring[p->",
+       protocol,
+       "_state], estring[e->ev_number]);\n\n",
+       (char *)0,
+       (char *)0,
+
+#define PART14 { 150,150 }
+       "#define _XEBEC_PG static\n",
+
+#define PART15 { 151,151 }
+       "#define _XEBEC_PG  \n",
+
+};
+
+static struct { int start; int finish; } parts[] = {
+       { 0,0 },
+       PART1,
+       PART2,
+       PART3,
+       PART4,
+       PART5,
+       PART6,
+       PART7,
+       PART8,
+       PART9,
+       PART10,
+       PART11,
+       PART12,
+       PART13,
+       PART14,
+       PART15,
+};
+
+putdriver(f, x) 
+FILE *f;
+int x;
+{
+       register int i; 
+
+       for( i = parts[x].start; i<= parts[x].finish; i++)
+               fprintf(f, "%s", strings[i]);
+       IFDEBUG(d)
+               fflush(f);
+       ENDDEBUG
+}