USG_PG3/usr/source/lexgen2/start.c

# include "../lexgen1/ldefs.c"

start(s, fp)
	char *s;
	int *fp;
{
	char tp[30], *t;
	int k, *fi;
fi = fp;
switch(*s)
	{
	case '^': /* beginning of line state 2 */
		s++;
		*fp++ = 2;
		break;
	case '<':
		for(s++; *s && *s != '>'; )
			{
			t = tp;
			while (index(*s, ",>") < 0)
				*t++ = *s++;
			*t = 0;
			k = startnam(tp)->ii;
			if (k==0)
				warning("unknown start condition %s", tp);
			else
				*fp++ = k;
			if (*s==',') s++;
			}
		s++;
		if (*s == '^') /* combination of <> and ^ */
			{
			s++;
			while (fi < fp)
				(*fi++)++;
			}
		break;
	default: /* normal case, start state 1 */
		*fp++ = 1;
		break;
	}
*fp= 0;
return(s);
}