The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/netiso/xebec/xebec.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: 4db12148f857ed1487f2bcbf34bc7a90


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.