rem: advance (0); return (TRUE == (value));
add: advance (false);
context: term (void){  int value;  if (pos >= argc)    beyond ();  /* Deal with leading "not"'s. */  if ('!' == argv[pos][0] && '\000' == argv[pos][1])    {      value = FALSE;      while (pos < argc && '!' == argv[pos][0] && '\000' == argv[pos][1])	{	  advance (1);	  value ^= (TRUE);	}      return (value ^ (term ()));    }  /* A paren-bracketed argument. */  if (argv[pos][0] == '(' && !argv[pos][1])    {      advance (1);      value = expr ();      if (!argv[pos])	test_syntax_error (_("')' expected\n"), NULL);      else        if (argv[pos][0] != ')' || argv[pos][1])	  test_syntax_error (_("')' expected, found %s\n"), argv[pos]);      advance (0);      return (TRUE == (value));    }  /* are there enough arguments left that this could be dyadic? */  if (((pos + 3 <= argc) && binop (argv[pos + 1])) ||      ((pos + 4 <= argc && STREQ (argv[pos], "-l") && binop (argv[pos + 2]))))    value = binary_operator ();  /* Might be a switch type argument */  else if ('-' == argv[pos][0] && argv[pos][1] && 0 == argv[pos][2])    {      if (unop (argv[pos][1]))	value = unary_operator ();      else	test_syntax_error (_("%s: unary operator expected\n"), argv[pos]);    }  else    {      value = (argv[pos][0] != '\0');      advance (0);    }  return (value);}