HTlex_buffer[lex_cnt++] = ch;
HTlex_buffer[lex_cnt++] = (char) ch;
PUBLIC LexItem lex ARGS1(FILE *, fp){    int ch;    if (fp != cache) {	/* This cache doesn't work ok because the system  */	cache = fp;	/* often assign same FILE structure the next open */	HTlex_line = 1;	/* file.  So, if there are syntax errors in setup */    }			/* files it may confuse things later on.	  */    if (lex_pushed_back != LEX_NONE) {	LexItem ret = lex_pushed_back;	lex_pushed_back = LEX_NONE;	return ret;    }    lex_cnt = 0;    lex_template = NO;    for(;;) {	switch (ch = getc(fp)) {	  case EOF:	  case ' ':	  case '\t':	  case '\r':	  case '\n':	  case ':':	  case ',':	  case '(':	  case ')':	  case '@':	    if (lex_cnt > 0) {		if (ch != EOF) ungetc(ch,fp);		if (lex_template) return LEX_TMPL_STR;		else		  return LEX_ALPH_STR;	    }	    else switch(ch) {	      case EOF:		return LEX_EOF;	      case '\n':		HTlex_line++;	return LEX_REC_SEP;	      case ':':		return LEX_FIELD_SEP;	      case ',':		return LEX_ITEM_SEP;	      case '(':		return LEX_OPEN_PAREN;	      case ')':		return LEX_CLOSE_PAREN;	      case '@':		return LEX_AT_SIGN;	      default:	;	/* Leading white space ignored (SP,TAB,CR) */	    }	    break;	  default:	    HTlex_buffer[lex_cnt++] = ch;	    HTlex_buffer[lex_cnt] = '\0';	    if ('*' == ch) lex_template = YES;	} /* switch ch */    } /* forever */}