titP->tit_error = "No operator";
titP->tit_error = _("No operator");
tip (titP, instring)     struct tit *titP;		/* We build an exploded instruction here. */     char *instring;		/* Text of a vax instruction: we modify. */{  register struct tot_wot *twP = NULL;	/* How to bit-encode this opcode. */  register char *p;		/* 1/skip whitespace.2/scan vot_how */  register char *q;		/*  */  register unsigned char count;	/* counts number of operands seen */  register struct top *operandp;/* scan operands in struct tit */  register char *alloperr = "";	/* error over all operands */  register char c;		/* Remember char, (we clobber it				   with '\0' temporarily). */  char *save_input_line_pointer;  if (*instring == ' ')    ++instring;			/* Skip leading whitespace. */  for (p = instring; *p && *p != ' '; p++)    ;				/* MUST end in end-of-string or				   exactly 1 space. */  /* Scanned up to end of operation-code. */  /* Operation-code is ended with whitespace. */  if (p == instring)    {      titP->tit_error = "No operator";      count = 0;      titP->tit_opcode = 0;    }  else    {      c = *p;      *p = '\0';      /*     * Here with instring pointing to what better be an op-name, and p     * pointing to character just past that.     * We trust instring points to an op-name, with no whitespace.     */      twP = (struct tot_wot *) hash_find (op_hash, instring);      *p = c;			/* Restore char after op-code. */      if (twP == 0)	{	  titP->tit_error = "Unknown operator";	  count = 0;	  titP->tit_opcode = 0;	}      else	{	  /*       * We found a match! So lets pick up as many operands as the       * instruction wants, and even gripe if there are too many.       * We expect comma to seperate each operand.       * We let instring track the text, while p tracks a part of the       * struct tot.       */	  count = 0;		/* no operands seen yet */	  instring = p + (*p != '\0');	/* point past the operation code */	  /* tip_op() screws with the input_line_pointer, so save it before	 I jump in */	  save_input_line_pointer = input_line_pointer;	  for (p = twP->args, operandp = titP->tit_operand;	       !*alloperr && *p;	       operandp++, p += 2)	    {	      /*	 * Here to parse one operand. Leave instring pointing just	 * past any one ',' that marks the end of this operand.	 */	      if (!p[1])		as_fatal ("Compiler bug: ODD number of bytes in arg structure %s.",			  twP->args);	      else if (*instring)		{		  for (q = instring; (*q != ',' && *q != '\0'); q++)		    {		      if (*q == '\'' && q[1] != '\0')	/* Jump quoted characters */			q++;		    }		  c = *q;		  /*	   * Q points to ',' or '\0' that ends argument. C is that	   * character.	   */		  *q = '\0';		  operandp->top_access = p[0];		  operandp->top_width = p[1];		  tip_op (instring - 1, operandp);		  *q = c;	/* Restore input text. */		  if (*(operandp->top_error))		    {		      alloperr = operandp->top_error;		    }		  instring = q + (c ? 1 : 0);	/* next operand (if any) */		  count++;	/*  won another argument, may have an operr */		}	      else		alloperr = "Not enough operands";	    }	  /* Restore the pointer. */	  input_line_pointer = save_input_line_pointer;	  if (!*alloperr)	    {	      if (*instring == ' ')		instring++;	/* Skip whitespace. */	      if (*instring)		alloperr = "Too many operands";	    }	  titP->tit_error = alloperr;	}    }  titP->tit_opcode = twP->code;	/* The op-code. */  titP->tit_operands = count;}				/* tip */