BTW, just for fun, here's a tiny FSM that finds the start of Via fields:

char viaFsm [5][14] = 
{
  { '\r',1,'\n',1,0 },                          /* 0 */
  { 'v',2,'\r',1,'\n',1,0 }                     /* 1 */
  { 'i',3,':',5,' ',4,'\t',4,'\r',1,'\n',1,0},  /* 2 */
  { 'a',4,'\r',1,'\n',1,0 }                     /* 3 */
  { ':',5,' ',4,'\t',4,'\r',1,'\n',1,0 }        /* 4 */
};

char *findVia(char *buffer, char *buffEnd);
{
  char *curr = buffer;
  char *start;
  char state = 0;
  char nextState;
  int i;

  while (curr < buffEnd)
  {
    nextState = 0;
    for (i = 0; viaFsm[state][i]; i += 2)
    {
      if (viaFsm[state][i] == tolower(*curr))
      {
        nextState = viaFsm[state][i+1];
        if (nextState == 2) start = curr;
        if (nextState == 5) return start;
      }
    }
    state = nextState;
    curr++;
  }
  return 0;
}

(Can you tell I've been working on documents and just *itching*
to code recently?)

-- 
Adam Roach, Ericsson Inc. |  Ph: +1 972 583 7594 | 1010 E. Arapaho, MS L-04
[EMAIL PROTECTED]   | Fax: +1 972 669 0154 | Richardson, TX 75081 USA

Reply via email to