if (ffe_is_90 ())
if (1 || ffe_is_90 ())
ffelex_file_free (ffewhereFile wf, FILE *f){  register int c;		/* Character currently under consideration. */  register ffewhereColumnNumber column;	/* Not really; 0 means column 1... */  bool continuation_line;  ffewhereColumnNumber continuation_column;  int latest_char_in_file;	/* For getting back into comment-skipping				   code. */  /* Lex is called for a particular file, not for a particular program unit.     Yet the two events do share common characteristics.  The first line in a     file or in a program unit cannot be a continuation line.  No token can     be in mid-formation.  No current label for the statement exists, since     there is no current statement. */  assert (ffelex_handler_ != NULL);#if FFECOM_targetCURRENT == FFECOM_targetGCC  lineno = 0;  input_filename = ffewhere_file_name (wf);#endif  ffelex_current_wf_ = wf;  continuation_line = FALSE;  ffelex_token_->type = FFELEX_typeNONE;  ffelex_number_of_tokens_ = 0;  ffelex_current_wl_ = ffewhere_line_unknown ();  ffelex_current_wc_ = ffewhere_column_unknown ();  latest_char_in_file = '\n';  /* Come here to get a new line. */ beginning_of_line:		/* :::::::::::::::::::: */  c = latest_char_in_file;  if ((c == EOF) || ((c = ffelex_getc_ (f)) == EOF))    {     end_of_file:		/* :::::::::::::::::::: */      /* Line ending in EOF instead of \n still counts as a whole line. */      ffelex_finish_statement_ ();      ffewhere_line_kill (ffelex_current_wl_);      ffewhere_column_kill (ffelex_current_wc_);      return (ffelexHandler) ffelex_handler_;    }  ffelex_next_line_ ();  ffelex_bad_line_ = FALSE;  /* Skip over initial-comment and empty lines as quickly as possible! */  while ((c == '\n')	 || (c == '!')	 || (c == '#'))    {      if (c == '#')	{#if FFECOM_targetCURRENT == FFECOM_targetGCC	  c = ffelex_hash_ (f);#else	  /* Don't skip over # line after all.  */	  break;#endif	}     comment_line:		/* :::::::::::::::::::: */      while ((c != '\n') && (c != EOF))	c = getc (f);      if (c == EOF)	{	  ffelex_next_line_ ();	  goto end_of_file;	/* :::::::::::::::::::: */	}      c = getc (f);      ffelex_next_line_ ();      if (c == EOF)	goto end_of_file;	/* :::::::::::::::::::: */    }  ffelex_saw_tab_ = FALSE;  column = ffelex_image_char_ (c, 0);  /* Read the entire line in as is (with whitespace processing).  */  while (((c = getc (f)) != '\n') && (c != EOF))    column = ffelex_image_char_ (c, column);  if (ffelex_bad_line_)    {      ffelex_card_image_[column] = '\0';      ffelex_card_length_ = column;      goto comment_line;		/* :::::::::::::::::::: */    }  /* If no tab, cut off line after column 132.  */  if (!ffelex_saw_tab_ && (column > FFELEX_FREE_MAX_COLUMNS_))    column = FFELEX_FREE_MAX_COLUMNS_;  ffelex_card_image_[column] = '\0';  ffelex_card_length_ = column;  /* Save next char in file so we can use register-based c while analyzing     line we just read. */  latest_char_in_file = c;	/* Should be either '\n' or EOF. */  column = 0;  continuation_column = 0;  /* Skip over initial spaces to see if the first nonblank character     is exclamation point, newline, or EOF (line is therefore a comment) or     ampersand (line is therefore a continuation line). */  while ((c = ffelex_card_image_[column]) == ' ')    ++column;  switch (c)    {    case '!':    case '\0':      goto beginning_of_line;	/* :::::::::::::::::::: */    case '&':      continuation_column = column + 1;      break;    default:      break;    }  /* The line definitely has content of some kind, install new end-statement     point for error messages. */  ffewhere_line_kill (ffelex_current_wl_);  ffewhere_column_kill (ffelex_current_wc_);  ffelex_current_wl_ = ffewhere_line_new (ffelex_linecount_current_);  ffelex_current_wc_ = ffewhere_column_new (ffelex_card_length_ + 1);  /* Figure out which column to start parsing at. */  if (continuation_line)    {      if (continuation_column == 0)	{	  if (ffelex_raw_mode_ != 0)	    {	      ffelex_bad_1_ (FFEBAD_BAD_CHAR_CONTINUE,			     ffelex_linecount_current_, column + 1);	    }	  else if (ffelex_token_->type != FFELEX_typeNONE)	    {	      ffelex_bad_1_ (FFEBAD_BAD_LEXTOK_CONTINUE,			     ffelex_linecount_current_, column + 1);	    }	}      else if (ffelex_is_free_char_ctx_contin_ (continuation_column))	{			/* Line contains only a single "&" as only				   nonblank character. */	  ffelex_bad_1_ (FFEBAD_BAD_FREE_CONTINUE,			 ffelex_linecount_current_, continuation_column);	  goto beginning_of_line;	/* :::::::::::::::::::: */	}      column = continuation_column;    }  else    column = 0;  c = ffelex_card_image_[column];  continuation_line = FALSE;  /* Here is the main engine for parsing.  c holds the character at column.     It is already known that c is not a blank, end of line, or shriek,     unless ffelex_raw_mode_ is not 0 (indicating we are in a     character/hollerith constant).  A partially filled token may already     exist in ffelex_token_. */  if (ffelex_raw_mode_ != 0)    {    parse_raw_character:	/* :::::::::::::::::::: */      switch (c)	{	case '&':	  if (ffelex_is_free_char_ctx_contin_ (column + 1))	    {	      continuation_line = TRUE;	      goto beginning_of_line;	/* :::::::::::::::::::: */	    }	  break;	case '\0':	  ffelex_finish_statement_ ();	  goto beginning_of_line;	/* :::::::::::::::::::: */	default:	  break;	}      switch (ffelex_raw_mode_)	{	case -3:	  c = ffelex_backslash_ (c, column);	  if (c == EOF)	    break;	  if (!ffelex_backslash_reconsider_)	    ffelex_append_to_token_ (c);	  ffelex_raw_mode_ = -1;	  break;	case -2:	  if (c == ffelex_raw_char_)	    {	      ffelex_raw_mode_ = -1;	      ffelex_append_to_token_ (c);	    }	  else	    {	      ffelex_raw_mode_ = 0;	      ffelex_backslash_reconsider_ = TRUE;	    }	  break;	case -1:	  if (c == ffelex_raw_char_)	    ffelex_raw_mode_ = -2;	  else	    {	      c = ffelex_backslash_ (c, column);	      if (c == EOF)		{		  ffelex_raw_mode_ = -3;		  break;		}	      ffelex_append_to_token_ (c);	    }	  break;	default:	  c = ffelex_backslash_ (c, column);	  if (c == EOF)	    break;	  if (!ffelex_backslash_reconsider_)	    {	      ffelex_append_to_token_ (c);	      --ffelex_raw_mode_;	    }	  break;	}      if (ffelex_backslash_reconsider_)	ffelex_backslash_reconsider_ = FALSE;      else	c = ffelex_card_image_[++column];      if (ffelex_raw_mode_ == 0)	{	  ffelex_send_token_ ();	  assert (ffelex_raw_mode_ == 0);	  while (c == ' ')	    c = ffelex_card_image_[++column];	  if ((c == '\0') || (c == '!'))	    {	      ffelex_finish_statement_ ();	      goto beginning_of_line;	/* :::::::::::::::::::: */	    }	  if ((c == '&') && ffelex_is_free_nonc_ctx_contin_ (column + 1))	    {	      continuation_line = TRUE;	      goto beginning_of_line;	/* :::::::::::::::::::: */	    }	  goto parse_nonraw_character_noncontin;	/* :::::::::::::::::::: */	}      goto parse_raw_character;	/* :::::::::::::::::::: */    } parse_nonraw_character:	/* :::::::::::::::::::: */  if ((c == '&') && ffelex_is_free_nonc_ctx_contin_ (column + 1))    {      continuation_line = TRUE;      goto beginning_of_line;	/* :::::::::::::::::::: */    } parse_nonraw_character_noncontin:	/* :::::::::::::::::::: */  switch (ffelex_token_->type)    {    case FFELEX_typeNONE:      if (c == ' ')	{			/* Otherwise				   finish-statement/continue-statement				   already checked. */	  while (c == ' ')	    c = ffelex_card_image_[++column];	  if ((c == '\0') || (c == '!'))	    {	      ffelex_finish_statement_ ();	      goto beginning_of_line;	/* :::::::::::::::::::: */	    }	  if ((c == '&') && ffelex_is_free_nonc_ctx_contin_ (column + 1))	    {	      continuation_line = TRUE;	      goto beginning_of_line;	/* :::::::::::::::::::: */	    }	}      switch (c)	{	case '\"':	  ffelex_token_->type = FFELEX_typeQUOTE;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_send_token_ ();	  break;	case '$':	  ffelex_token_->type = FFELEX_typeDOLLAR;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_send_token_ ();	  break;	case '%':	  ffelex_token_->type = FFELEX_typePERCENT;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_send_token_ ();	  break;	case '&':	  ffelex_token_->type = FFELEX_typeAMPERSAND;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_send_token_ ();	  break;	case '\'':	  ffelex_token_->type = FFELEX_typeAPOSTROPHE;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_send_token_ ();	  break;	case '(':	  ffelex_token_->type = FFELEX_typeOPEN_PAREN;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  break;	case ')':	  ffelex_token_->type = FFELEX_typeCLOSE_PAREN;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_send_token_ ();	  break;	case '*':	  ffelex_token_->type = FFELEX_typeASTERISK;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  break;	case '+':	  ffelex_token_->type = FFELEX_typePLUS;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_send_token_ ();	  break;	case ',':	  ffelex_token_->type = FFELEX_typeCOMMA;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_send_token_ ();	  break;	case '-':	  ffelex_token_->type = FFELEX_typeMINUS;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_send_token_ ();	  break;	case '.':	  ffelex_token_->type = FFELEX_typePERIOD;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_send_token_ ();	  break;	case '/':	  ffelex_token_->type = FFELEX_typeSLASH;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  break;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	  ffelex_token_->type	    = ffelex_hexnum_ ? FFELEX_typeNAME : FFELEX_typeNUMBER;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_append_to_token_ (c);	  break;	case ':':	  ffelex_token_->type = FFELEX_typeCOLON;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  break;	case ';':	  ffelex_token_->type = FFELEX_typeSEMICOLON;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_permit_include_ = TRUE;	  ffelex_send_token_ ();	  ffelex_permit_include_ = FALSE;	  break;	case '<':	  ffelex_token_->type = FFELEX_typeOPEN_ANGLE;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  break;	case '=':	  ffelex_token_->type = FFELEX_typeEQUALS;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  break;	case '>':	  ffelex_token_->type = FFELEX_typeCLOSE_ANGLE;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  break;	case '?':	  ffelex_token_->type = FFELEX_typeQUESTION;	  ffelex_token_->where_line = ffewhere_line_use (ffelex_current_wl_);	  ffelex_token_->where_col = ffewhere_column_new (column + 1);	  ffelex_send_token_ ();	  break;	case '_':	  if (ffe_is_90 ())	    {	      ffelex_token_->type = FFELEX_typeUNDERSCORE;	      ffelex_token_->where_line		= ffewhere_line_use (ffelex_current_wl_);	      ffelex_token_->where_col		= ffewhere_column_new (column + 1);	      ffelex_send_token_ ();	      break;	    }	  /* Fall through. */	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':	case 'G':	case 'H':	case 'I':	case 'J':	case 'K':	case 'L':	case 'M':	case 'N':	case 'O':	case 'P':	case 'Q':	case 'R':	case 'S':	case 'T':	case 'U':	case 'V':	case 'W':	case 'X':	case 'Y':	case 'Z':	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	case 'g':	case 'h':	case 'i':	case 'j':	case 'k':	case 'l':	case 'm':	case 'n':	case 'o':	case 'p':	case 'q':	case 'r':	case 's':	case 't':	case 'u':	case 'v':	case 'w':	case 'x':	case 'y':	case 'z':	  c = ffesrc_char_source (c);	  if (ffesrc_char_match_init (c, 'H', 'h')	      && ffelex_expecting_hollerith_ != 0)	    {	      ffelex_raw_mode_ = ffelex_expecting_hollerith_;	      ffelex_token_->type = FFELEX_typeHOLLERITH;	      ffelex_token_->where_line = ffelex_raw_where_line_;	      ffelex_token_->where_col = ffelex_raw_where_col_;	      ffelex_raw_where_line_ = ffewhere_line_unknown ();	      ffelex_raw_where_col_ = ffewhere_column_unknown ();	      c = ffelex_card_image_[++column];	      goto parse_raw_character;	/* :::::::::::::::::::: */	    }	  if (ffelex_names_pure_)	    {	      ffelex_token_->where_line		= ffewhere_line_use (ffelex_token_->currentnames_line				     = ffewhere_line_use (ffelex_current_wl_));	      ffelex_token_->where_col		= ffewhere_column_use (ffelex_token_->currentnames_col				       = ffewhere_column_new (column + 1));	      ffelex_token_->type = FFELEX_typeNAMES;	    }	  else	    {	      ffelex_token_->where_line		= ffewhere_line_use (ffelex_current_wl_);	      ffelex_token_->where_col = ffewhere_column_new (column + 1);	      ffelex_token_->type = FFELEX_typeNAME;	    }	  ffelex_append_to_token_ (c);	  break;	default:	  ffelex_bad_1_ (FFEBAD_UNRECOGNIZED_CHARACTER,			 ffelex_linecount_current_, column + 1);	  ffelex_finish_statement_ ();	  goto beginning_of_line;	/* :::::::::::::::::::: */	}      break;    case FFELEX_typeNAME:      switch (c)	{	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':	case 'G':	case 'H':	case 'I':	case 'J':	case 'K':	case 'L':	case 'M':	case 'N':	case 'O':	case 'P':	case 'Q':	case 'R':	case 'S':	case 'T':	case 'U':	case 'V':	case 'W':	case 'X':	case 'Y':	case 'Z':	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	case 'g':	case 'h':	case 'i':	case 'j':	case 'k':	case 'l':	case 'm':	case 'n':	case 'o':	case 'p':	case 'q':	case 'r':	case 's':	case 't':	case 'u':	case 'v':	case 'w':	case 'x':	case 'y':	case 'z':	  c = ffesrc_char_source (c);	  /* Fall through.  */	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	case '_':	case '$':	  if ((c == '$')	      && !ffe_is_dollar_ok ())	    {	      ffelex_send_token_ ();	      goto parse_next_character;	/* :::::::::::::::::::: */	    }	  ffelex_append_to_token_ (c);	  break;	default:	  ffelex_send_token_ ();	  goto parse_next_character;	/* :::::::::::::::::::: */	}      break;    case FFELEX_typeNAMES:      switch (c)	{	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':	case 'G':	case 'H':	case 'I':	case 'J':	case 'K':	case 'L':	case 'M':	case 'N':	case 'O':	case 'P':	case 'Q':	case 'R':	case 'S':	case 'T':	case 'U':	case 'V':	case 'W':	case 'X':	case 'Y':	case 'Z':	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	case 'g':	case 'h':	case 'i':	case 'j':	case 'k':	case 'l':	case 'm':	case 'n':	case 'o':	case 'p':	case 'q':	case 'r':	case 's':	case 't':	case 'u':	case 'v':	case 'w':	case 'x':	case 'y':	case 'z':	  c = ffesrc_char_source (c);	  /* Fall through.  */	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	case '_':	case '$':	  if ((c == '$')	      && !ffe_is_dollar_ok ())	    {	      ffelex_send_token_ ();	      goto parse_next_character;	/* :::::::::::::::::::: */	    }	  if (ffelex_token_->length < FFEWHERE_indexMAX)	    {	      ffewhere_track (&ffelex_token_->currentnames_line,			      &ffelex_token_->currentnames_col,			      ffelex_token_->wheretrack,			      ffelex_token_->length,			      ffelex_linecount_current_,			      column + 1);	    }	  ffelex_append_to_token_ (c);	  break;	default:	  ffelex_send_token_ ();	  goto parse_next_character;	/* :::::::::::::::::::: */	}      break;    case FFELEX_typeNUMBER:      switch (c)	{	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	  ffelex_append_to_token_ (c);	  break;	default:	  ffelex_send_token_ ();	  goto parse_next_character;	/* :::::::::::::::::::: */	}      break;    case FFELEX_typeASTERISK:      switch (c)	{	case '*':		/* ** */	  ffelex_token_->type = FFELEX_typePOWER;	  ffelex_send_token_ ();	  break;	default:		/* * not followed by another *. */	  ffelex_send_token_ ();	  goto parse_next_character;	/* :::::::::::::::::::: */	}      break;    case FFELEX_typeCOLON:      switch (c)	{	case ':':		/* :: */	  ffelex_token_->type = FFELEX_typeCOLONCOLON;	  ffelex_send_token_ ();	  break;	default:		/* : not followed by another :. */	  ffelex_send_token_ ();	  goto parse_next_character;	/* :::::::::::::::::::: */	}      break;    case FFELEX_typeSLASH:      switch (c)	{	case '/':		/* // */	  ffelex_token_->type = FFELEX_typeCONCAT;	  ffelex_send_token_ ();	  break;	case ')':		/* /) */	  ffelex_token_->type = FFELEX_typeCLOSE_ARRAY;	  ffelex_send_token_ ();	  break;	case '=':		/* /= */	  ffelex_token_->type = FFELEX_typeREL_NE;	  ffelex_send_token_ ();	  break;	default:	  ffelex_send_token_ ();	  goto parse_next_character;	/* :::::::::::::::::::: */	}      break;    case FFELEX_typeOPEN_PAREN:      switch (c)	{	case '/':		/* (/ */	  ffelex_token_->type = FFELEX_typeOPEN_ARRAY;	  ffelex_send_token_ ();	  break;	default:	  ffelex_send_token_ ();	  goto parse_next_character;	/* :::::::::::::::::::: */	}      break;    case FFELEX_typeOPEN_ANGLE:      switch (c)	{	case '=':		/* <= */	  ffelex_token_->type = FFELEX_typeREL_LE;	  ffelex_send_token_ ();	  break;	default:	  ffelex_send_token_ ();	  goto parse_next_character;	/* :::::::::::::::::::: */	}      break;    case FFELEX_typeEQUALS:      switch (c)	{	case '=':		/* == */	  ffelex_token_->type = FFELEX_typeREL_EQ;	  ffelex_send_token_ ();	  break;	case '>':		/* => */	  ffelex_token_->type = FFELEX_typePOINTS;	  ffelex_send_token_ ();	  break;	default:	  ffelex_send_token_ ();	  goto parse_next_character;	/* :::::::::::::::::::: */	}      break;    case FFELEX_typeCLOSE_ANGLE:      switch (c)	{	case '=':		/* >= */	  ffelex_token_->type = FFELEX_typeREL_GE;	  ffelex_send_token_ ();	  break;	default:	  ffelex_send_token_ ();	  goto parse_next_character;	/* :::::::::::::::::::: */	}      break;    default:      assert ("Serious error!" == NULL);      abort ();      break;    }  c = ffelex_card_image_[++column]; parse_next_character:		/* :::::::::::::::::::: */  if (ffelex_raw_mode_ != 0)    goto parse_raw_character;	/* :::::::::::::::::::: */  if ((c == '\0') || (c == '!'))    {      ffelex_finish_statement_ ();      goto beginning_of_line;	/* :::::::::::::::::::: */    }  goto parse_nonraw_character;	/* :::::::::::::::::::: */}