pushtype = NO_PUSHBACK; pushname[0] = '\0'; yyin = fp; bufstart = bufptr = buf; _nc_curr_file_pos = 0L; if (fp != 0) _nc_curr_line = 0; _nc_curr_col = 0;
static const char terminfo_punct[] = "@%&*!#"; long number; int type; int ch; char *numchk; char numbuf[80]; unsigned found; static char buffer[MAX_ENTRY_SIZE]; char *ptr; int dot_flag = FALSE; long token_start;  if (pushtype != NO_PUSHBACK) { int retval = pushtype;  _nc_set_type(pushname); DEBUG(3, ("pushed-back token: `%s', class %d", _nc_curr_token.tk_name, pushtype));  pushtype = NO_PUSHBACK; pushname[0] = '\0';   return (retval); }  if (end_of_stream()) return (EOF);  start_token: token_start = stream_pos(); while ((ch = next_char()) == '\n' || iswhite(ch)) continue;  ch = eat_escaped_newline(ch);  if (ch == EOF) type = EOF; else {  if (separator == ':' && ch == ':') ch = next_char();  if (ch == '.' #if NCURSES_EXT_FUNCS && !_nc_disable_period #endif ) { dot_flag = TRUE; DEBUG(8, ("dot-flag set"));  while ((ch = next_char()) == '.' || iswhite(ch)) continue; }  if (ch == EOF) { type = EOF; goto end_of_token; }   if (!isalnum(ch) #if NCURSES_EXT_FUNCS && !(ch == '.' && _nc_disable_period) #endif && !strchr(terminfo_punct, (char) ch)) { _nc_warning("Illegal character (expected alphanumeric or %s) - %s", terminfo_punct, unctrl((chtype) ch)); _nc_panic_mode(separator); goto start_token; }  ptr = buffer; *(ptr++) = ch;  if (first_column) { char *desc;  _nc_comment_start = token_start; _nc_comment_end = _nc_curr_file_pos; _nc_start_line = _nc_curr_line;  _nc_syntax = ERR; while ((ch = next_char()) != '\n') { if (ch == EOF) _nc_err_abort("premature EOF"); else if (ch == ':' && last_char() != ',') { _nc_syntax = SYN_TERMCAP; separator = ':'; break; } else if (ch == ',') { _nc_syntax = SYN_TERMINFO; separator = ',';   } else ch = eat_escaped_newline(ch);  *ptr++ = ch; } ptr[0] = '\0'; if (_nc_syntax == ERR) {  _nc_syntax = SYN_TERMCAP; separator = ':'; } else if (_nc_syntax == SYN_TERMINFO) {  for (--ptr; iswhite(*ptr) || *ptr == ','; ptr--) continue; ptr[1] = '\0'; }   ptr = strchr(buffer, '|'); if (ptr == (char *) NULL) ptr = buffer + strlen(buffer); ch = *ptr; *ptr = '\0'; _nc_set_type(buffer); *ptr = ch;   desc = strrchr(buffer, '|'); if (desc) { if (*desc == '\0') _nc_warning("empty longname field"); #ifndef __OpenBSD__ else if (strchr(desc, ' ') == (char *) NULL) _nc_warning("older tic versions may treat the description field as an alias"); #endif } if (!desc) desc = buffer + strlen(buffer);   for (ptr = buffer; ptr < desc; ptr++) { if (isspace(CharOf(*ptr))) { _nc_warning("whitespace in name or alias field"); break; } else if (*ptr == '/') { _nc_warning("slashes aren't allowed in names or aliases"); break; } else if (strchr("$[]!*?", *ptr)) { _nc_warning("dubious character `%c' in name or alias field", *ptr); break; } }  ptr = buffer;  _nc_curr_token.tk_name = buffer; type = NAMES; } else { while ((ch = next_char()) != EOF) { if (!isalnum(ch)) { if (_nc_syntax == SYN_TERMINFO) { if (ch != '_') break; } else {	 if (ch != ';') break; } } *(ptr++) = ch; }  *ptr++ = '\0'; switch (ch) { case ',': case ':': if (ch != separator) _nc_err_abort("Separator inconsistent with syntax"); _nc_curr_token.tk_name = buffer; type = BOOLEAN; break; case '@': if ((ch = next_char()) != separator) _nc_warning("Missing separator after `%s', have %s", buffer, unctrl((chtype) ch)); _nc_curr_token.tk_name = buffer; type = CANCEL; break;  case '#': found = 0; while (isalnum(ch = next_char())) { numbuf[found++] = ch; if (found >= sizeof(numbuf) - 1) break; } numbuf[found] = '\0'; number = strtol(numbuf, &numchk, 0); if (numchk == numbuf) _nc_warning("no value given for `%s'", buffer); if ((*numchk != '\0') || (ch != separator)) _nc_warning("Missing separator"); _nc_curr_token.tk_name = buffer; _nc_curr_token.tk_valnumber = number; type = NUMBER; break;  case '=': ch = _nc_trans_string(ptr, buffer + sizeof(buffer)); if (ch != separator) _nc_warning("Missing separator"); _nc_curr_token.tk_name = buffer; _nc_curr_token.tk_valstring = ptr; type = STRING; break;  case EOF: type = EOF; break; default:  type = UNDEF; _nc_warning("Illegal character - %s", unctrl((chtype) ch)); } }			 }				  end_of_token:  #ifdef TRACE if (dot_flag == TRUE) DEBUG(8, ("Commented out "));  if (_nc_tracing >= DEBUG_LEVEL(7)) { switch (type) { case BOOLEAN: _tracef("Token: Boolean; name='%s'", _nc_curr_token.tk_name); break;  case NUMBER: _tracef("Token: Number;  name='%s', value=%d", _nc_curr_token.tk_name, _nc_curr_token.tk_valnumber); break;  case STRING: _tracef("Token: String;  name='%s', value=%s", _nc_curr_token.tk_name, _nc_visbuf(_nc_curr_token.tk_valstring)); break;  case CANCEL: _tracef("Token: Cancel; name='%s'", _nc_curr_token.tk_name); break;  case NAMES:  _tracef("Token: Names; value='%s'", _nc_curr_token.tk_name); break;  case EOF: _tracef("Token: End of file"); break;  default: _nc_warning("Bad token type"); } } #endif  if (dot_flag == TRUE)	 type = _nc_get_token();  DEBUG(3, ("token: `%s', class %d", _nc_curr_token.tk_name, type));  return (type);
NCURSES_EXPORT(void)_nc_reset_input(FILE * fp, char *buf){    pushtype = NO_PUSHBACK;    pushname[0] = '\0';    yyin = fp;    bufstart = bufptr = buf;    _nc_curr_file_pos = 0L;    if (fp != 0)	_nc_curr_line = 0;    _nc_curr_col = 0;}