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

1.1       root        1: /* $Header: putdriver.c,v 2.2 88/09/19 12:55:27 nhall Exp $ */
                      2: /* $Source: /var/home/tadl/src/argo/xebec/RCS/putdriver.c,v $ */
                      3: 
                      4: /*
                      5:  * This code is such a kludge that I don't want to put my name on it.
                      6:  * It was a ridiculously fast hack and needs rewriting.
                      7:  * However it does work...
                      8:  */
                      9: 
                     10: /* The original idea was to put all the driver code
                     11:  * in one place so it would be easy to modify
                     12:  * but as hacks got thrown in it got worse and worse...
                     13:  * It's to the point where a user would be better off
                     14:  * writing his own driver and xebec should JUST produce
                     15:  * the tables.
                     16:  */
                     17: 
                     18: #include <stdio.h>
                     19: #include "main.h"
                     20: #include "debug.h"
                     21: 
                     22: extern char protocol[];
                     23: char Eventshiftstring[10];
                     24: static char statename[] = {'_', 's', 't', 'a', 't', 'e' };
                     25: 
                     26: static char *strings[] = {
                     27: 
                     28: #define PART1 { 0,3 }
                     29: 
                     30:        "\n#include \"",
                     31:        kerneldirname,
                     32:        protocol,
                     33:        "_states.h\"",
                     34:        (char *)0,
                     35:        (char *)0,
                     36:        (char *)0,
                     37:        (char *)0,
                     38:        (char *)0,
                     39:        (char *)0,
                     40: 
                     41: #define PART12 { 10,12 }
                     42:        "\n\nstatic struct act_ent {\n",
                     43:        "\tint a_newstate;\n\tint a_action;\n",
                     44:        "} statetable[] = { {0,0},\n",
                     45:        (char *)0,
                     46:        (char *)0,
                     47:        (char *)0,
                     48:        (char *)0,
                     49:        (char *)0,
                     50:        (char *)0,
                     51:        (char *)0,
                     52: 
                     53: #define PART2 { 20,20 }
                     54:        "};\n",
                     55:        (char *)0,
                     56:        (char *)0,
                     57:        (char *)0,
                     58:        (char *)0,
                     59:        (char *)0,
                     60:        (char *)0,
                     61:        (char *)0,
                     62:        (char *)0,
                     63:        (char *)0,
                     64: 
                     65: #define PART3 { 30,41 }
                     66:        "\n",
                     67:        protocol,
                     68:        "_driver(p, e)\nregister ",
                     69:        protocol,
                     70:        PCBNAME,
                     71:        " *p;\nregister struct ",
                     72:        protocol,
                     73:        "_event *e;\n",
                     74:        "{\n",
                     75:                "\tregister int index, error=0;\n",
                     76:                "\tstruct act_ent *a;\n",
                     77:                "\tstatic struct act_ent erroraction = {0,-1};\n",
                     78:        (char *)0,
                     79:        (char *)0,
                     80:        (char *)0,
                     81:        (char *)0,
                     82:        (char *)0,
                     83:        (char *)0,
                     84:        (char *)0,
                     85:        (char *)0,
                     86: 
                     87: #define PART4 { 50,54 }
                     88: 
                     89:        "\textern int ",
                     90:        protocol,
                     91:        "_debug;\n\textern FILE *",
                     92:        protocol,
                     93:        "_astringfile;\n", 
                     94:        (char *)0,
                     95:        (char *)0,
                     96:        (char *)0,
                     97:        (char *)0,
                     98:        (char *)0,
                     99: 
                    100: #define PART6 { 60, 65 }
                    101:        "\n\tindex = inx[1 + e->ev_number][p->",
                    102:                protocol,
                    103:                statename,
                    104:                "];\n\tif(index<0) index=_Xebec_index(e, p);\n",
                    105:                "\tif (index==0) {\n\t\ta = &erroraction;\n",
                    106:                "\t} else\n\t\ta = &statetable[index];\n\n",
                    107:        (char *)0,
                    108:        (char *)0,
                    109:        (char *)0,
                    110:        (char *)0,
                    111: 
                    112: #define PART7 {70, 77 }
                    113:        "\tif(",
                    114:        protocol,
                    115:        "_debug) fprintf(",
                    116:        protocol,
                    117:        "_astringfile, \"%15s <-- %15s [%15s] \\n\\t%s\\n\",\n",
                    118:        "\t\tsstring[a->a_newstate], sstring[p->",
                    119:        protocol,
                    120:        "_state], estring[e->ev_number], astring[a->a_action]);\n\n",
                    121:        (char *)0,
                    122:        (char *)0,
                    123: 
                    124: #define PART8 { 80, 84 }
                    125:                "\tif(a->a_action)\n",
                    126:                "\t\terror = _Xebec_action( a->a_action, e, p );\n",
                    127:                "\tif(error==0)\n\tp->",
                    128:                protocol,
                    129:                "_state = a->a_newstate;\n\treturn error;\n}\n",
                    130:        (char *)0,
                    131:        (char *)0,
                    132:        (char *)0,
                    133:        (char *)0,
                    134:        (char *)0,
                    135: 
                    136: #define PART9 { 90, 99 }
                    137:        "\n_XEBEC_PG int _Xebec_action(a,e,p)\nint a;\nstruct ",
                    138:        protocol,
                    139:        "_event *e;\n",
                    140:        protocol, 
                    141:        PCBNAME,
                    142:        " *p;\n{\n",
                    143:        "switch(a) {\n",
                    144:        "case -1:  return ",
                    145:        protocol,
                    146:        "_protocol_error(e,p);\n",
                    147:        (char *)0,
                    148: 
                    149: #define PART10 { 101, 105 }
                    150:        "\tif(",
                    151:        protocol,
                    152:        "_debug) fprintf(",
                    153:        protocol,
                    154:        "_astringfile, \"index 0x%5x\\n\", index);\n",
                    155:        (char *)0,
                    156:        (char *)0,
                    157:        (char *)0,
                    158:        (char *)0,
                    159: 
                    160: #define PART5 { 110, 121 }
                    161:        "\n_XEBEC_PG int\n_Xebec_index( e,p )\n",
                    162:        "\tstruct ",
                    163:        protocol,
                    164:        "_event *e;\n\t", 
                    165:        protocol, 
                    166:        PCBNAME,
                    167:        " *p;\n{\nswitch( (e->ev_number<<",
                    168:        Eventshiftstring,
                    169:        ")+(p->",
                    170:        protocol, 
                    171:        statename,
                    172:        ") ) {\n", 
                    173:        (char *)0,
                    174:        (char *)0,
                    175:        (char *)0,
                    176:        (char *)0,
                    177:        (char *)0,
                    178:        (char *)0,
                    179:        (char *)0,
                    180:        (char *)0,
                    181: 
                    182: #define PART11 {130, 137 }
                    183:        "\tIFTRACE(D_DRIVER)\n",
                    184:        "\t",
                    185:        protocol,
                    186:        "trace(DRIVERTRACE,",
                    187:        "\t\ta->a_newstate, p->",
                    188:        protocol,
                    189:        "_state, e->ev_number, a->a_action, 0);\n\n",
                    190:        "\tENDTRACE\n",
                    191:        (char *)0,
                    192:        (char *)0,
                    193: 
                    194: #define PART13 {140, 147 }
                    195:        "\tif(",
                    196:        protocol,
                    197:        "_debug) fprintf(",
                    198:        protocol,
                    199:        "_astringfile, \"%15s <-- %15s [%15s] \\n\",\n",
                    200:        "\t\tsstring[a->a_newstate], sstring[p->",
                    201:        protocol,
                    202:        "_state], estring[e->ev_number]);\n\n",
                    203:        (char *)0,
                    204:        (char *)0,
                    205: 
                    206: #define PART14 { 150,150 }
                    207:        "#define _XEBEC_PG static\n",
                    208: 
                    209: #define PART15 { 151,151 }
                    210:        "#define _XEBEC_PG  \n",
                    211: 
                    212: };
                    213: 
                    214: static struct { int start; int finish; } parts[] = {
                    215:        { 0,0 },
                    216:        PART1,
                    217:        PART2,
                    218:        PART3,
                    219:        PART4,
                    220:        PART5,
                    221:        PART6,
                    222:        PART7,
                    223:        PART8,
                    224:        PART9,
                    225:        PART10,
                    226:        PART11,
                    227:        PART12,
                    228:        PART13,
                    229:        PART14,
                    230:        PART15,
                    231: };
                    232: 
                    233: putdriver(f, x) 
                    234: FILE *f;
                    235: int x;
                    236: {
                    237:        register int i; 
                    238: 
                    239:        for( i = parts[x].start; i<= parts[x].finish; i++)
                    240:                fprintf(f, "%s", strings[i]);
                    241:        IFDEBUG(d)
                    242:                fflush(f);
                    243:        ENDDEBUG
                    244: }

unix.superglobalmegacorp.com

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