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