else if (*lptr == '!' && *(lptr + 1) == '\"' || *lptr == '!' && *(lptr + 1) == sc_ctrlchar && *(lptr + 2) == '\"' || *lptr == sc_ctrlchar && *(lptr + 1) == '!' && *(lptr + 2) == '\"')
else if ((*lptr == '!' && *(lptr + 1) == '\"') || (*lptr == '!' && *(lptr + 1) == sc_ctrlchar && *(lptr + 2) == '\"') || (*lptr == sc_ctrlchar && *(lptr + 1) == '!' && *(lptr + 2) == '\"'))
lex(cell * lexvalue, char **lexsym){   int                 i, toolong, newline, rawstring;   char              **tokptr;   if (_pushed)     {	_pushed = FALSE;	/* reset "_pushed" flag */	*lexvalue = _lexval;	*lexsym = _lexstr;	return _lextok;     }				/* if */   _lextok = 0;			/* preset all values */   _lexval = 0;   _lexstr[0] = '\0';   *lexvalue = _lexval;   *lexsym = _lexstr;   _lexnewline = FALSE;   if (!freading)      return 0;   newline = (lptr == pline);	/* does lptr point to start of line buffer */   while (*lptr <= ' ')     {				/* delete leading white space */	if (*lptr == '\0')	  {	     preprocess();	/* preprocess resets "lptr" */	     if (!freading)		return 0;	     if (lptr == term_expr)	/* special sequence to terminate a pending expression */		return (_lextok = tENDEXPR);	     _lexnewline = TRUE;	/* set this after preprocess(), because					 * preprocess() calls lex() recursively */	     newline = TRUE;	  }	else	  {	     lptr += 1;	  }			/* if */     }				/* while */   if (newline)     {	stmtindent = 0;	for (i = 0; i < (int)(lptr - pline); i++)	   if (pline[i] == '\t' && sc_tabsize > 0)	      stmtindent +=		 (int)(sc_tabsize - (stmtindent + sc_tabsize) % sc_tabsize);	   else	      stmtindent++;     }				/* if */   i = tFIRST;   tokptr = sc_tokens;   while (i <= tMIDDLE)     {				/* match multi-character operators */	if (match(*tokptr, FALSE))	  {	     _lextok = i;	     return _lextok;	  }			/* if */	i += 1;	tokptr += 1;     }				/* while */   while (i <= tLAST)     {				/* match reserved words and compiler directives */	if (match(*tokptr, TRUE))	  {	     _lextok = i;	     errorset(sRESET);	/* reset error flag (clear the "panic mode") */	     return _lextok;	  }			/* if */	i += 1;	tokptr += 1;     }				/* while */   if ((i = number(&_lexval, lptr)) != 0)     {				/* number */	_lextok = tNUMBER;	*lexvalue = _lexval;	lptr += i;     }   else if ((i = ftoi(&_lexval, lptr)) != 0)     {	_lextok = tRATIONAL;	*lexvalue = _lexval;	lptr += i;     }   else if (alpha(*lptr))     {				/* symbol or label */	/*  Note: only sNAMEMAX characters are significant. The compiler	 *        generates a warning if a symbol exceeds this length.	 */	_lextok = tSYMBOL;	i = 0;	toolong = 0;	while (alphanum(*lptr))	  {	     _lexstr[i] = *lptr;	     lptr += 1;	     if (i < sNAMEMAX)		i += 1;	     else		toolong = 1;	  }			/* while */	_lexstr[i] = '\0';	if (toolong)	   error(200, _lexstr, sNAMEMAX);	/* symbol too long, truncated to sNAMEMAX chars */	if (_lexstr[0] == PUBLIC_CHAR && _lexstr[1] == '\0')	  {	     _lextok = PUBLIC_CHAR;	/* '@' all alone is not a symbol, it is an operator */	  }	else if (_lexstr[0] == '_' && _lexstr[1] == '\0')	  {	     _lextok = '_';	/* '_' by itself is not a symbol, it is a placeholder */	  }			/* if */	if (*lptr == ':' && sc_allowtags && _lextok != PUBLIC_CHAR)	  {	     _lextok = tLABEL;	/* it wasn't a normal symbol, it was a label/tagname */	     lptr += 1;		/* skip colon */	  }			/* if */     }   else if (*lptr == '\"' || *lptr == sc_ctrlchar && *(lptr + 1) == '\"')     {				/* unpacked string literal */	_lextok = tSTRING;	rawstring = (*lptr == sc_ctrlchar);	*lexvalue = _lexval = litidx;	lptr += 1;		/* skip double quote */	if (rawstring)	   lptr += 1;		/* skip "escape" character too */	lptr =	   sc_packstr ? packedstring(lptr, rawstring) : unpackedstring(lptr,								       rawstring);	if (*lptr == '\"')	   lptr += 1;		/* skip final quote */	else	   error(37);		/* invalid (non-terminated) string */     }   else if (*lptr == '!' && *(lptr + 1) == '\"'	    || *lptr == '!' && *(lptr + 1) == sc_ctrlchar && *(lptr + 2) == '\"'	    || *lptr == sc_ctrlchar && *(lptr + 1) == '!'	    && *(lptr + 2) == '\"')     {				/* packed string literal */	_lextok = tSTRING;	rawstring = (*lptr == sc_ctrlchar || *(lptr + 1) == sc_ctrlchar);	*lexvalue = _lexval = litidx;	lptr += 2;		/* skip exclamation point and double quote */	if (rawstring)	   lptr += 1;		/* skip "escape" character too */	lptr =	   sc_packstr ? unpackedstring(lptr, rawstring) : packedstring(lptr,								       rawstring);	if (*lptr == '\"')	   lptr += 1;		/* skip final quote */	else	   error(37);		/* invalid (non-terminated) string */     }   else if (*lptr == '\'')     {				/* character literal */	lptr += 1;		/* skip quote */	_lextok = tNUMBER;	*lexvalue = _lexval = litchar(&lptr, FALSE);	if (*lptr == '\'')	   lptr += 1;		/* skip final quote */	else	   error(27);		/* invalid character constant (must be one character) */     }   else if (*lptr == ';')     {				/* semicolumn resets "error" flag */	_lextok = ';';	lptr += 1;	errorset(sRESET);	/* reset error flag (clear the "panic mode") */     }   else     {	_lextok = *lptr;	/* if every match fails, return the character */	lptr += 1;		/* increase the "lptr" pointer */     }				/* if */   return _lextok;}