コード例 #1
0
ファイル: TinyShell.c プロジェクト: cristovaozr/freertos
static int parse (char *command) {
	int arg_base, i;

	if (command[0] == '?')
		return default_help();

	if (command[0] == '\0')
		return 0;

	// Gets the command name
	for (i = 0; command[i] != '\0'; i++) {
		if (command[i] == ' ') {

			command[i] = '\0';
			break;
		}
	}
	arg_base = i + 1;

	// Searches in list of commands. If not found returns ERR_COMMAND_NOT_FOUND
	for (i = 0 ;; i++) {

		if (commands[i].command_name == 0)
			return ERR_COMMAND_NOT_FOUND;

		if (my_strcmp(commands[i].command_name, command) == 0)
			break;

	}

	// Build args, if any
	if (commands[i].build_args) commands[i].build_args(&command[arg_base]);

	// Runs command at last
	return commands[i].execute();
}
コード例 #2
0
ファイル: gplib.c プロジェクト: jkeuffer/pari
static void
help(const char *s0, int flag)
{
  const long long_help = flag & h_LONG;
  long n;
  entree *ep;
  char *s = get_sep(s0);

  if (isdigit((int)*s)) { digit_help(s,flag); return; }
  if (flag & h_APROPOS) { external_help(s,-1); return; }
  /* Get meaningful answer on '\ps 5' (e.g. from <F1>) */
  if (*s == '\\') { char *t = s+1; pari_skip_alpha(&t); *t = '\0'; }
  if (isalpha((int)*s))
  {
    if (!strncmp(s, "default", 7))
    { /* special-case ?default(dft_name), e.g. default(log) */
      char *t = s+7;
      pari_skip_space(&t);
      if (*t == '(')
      {
        t++; pari_skip_space(&t);
        cut_trailing_garbage(t);
        if (pari_is_default(t)) { default_help(t,flag); return; }
      }
    }
    cut_trailing_garbage(s);
  }

  if (long_help && (n = ok_external_help(&s))) { external_help(s,n); return; }
  switch (*s)
  {
    case '*' : commands(-1); return;
    case '\0': menu_commands(); return;
    case '\\': slash_commands(); return;
    case '.' : member_commands(); return;
  }
  ep = is_entry(s);
  if (!ep)
  {
    if (pari_is_default(s))
      default_help(s,flag);
    else if (long_help)
      external_help(s,3);
    else if (!cb_pari_whatnow || !cb_pari_whatnow(pariOut, s,1))
      simple_help(s,"unknown identifier");
    return;
  }

  if (EpVALENCE(ep) == EpALIAS)
  {
    pari_printf("%s is aliased to:\n\n",s);
    ep = do_alias(ep);
  }
  switch(EpVALENCE(ep))
  {
    case EpVAR:
      if (!ep->help)
      {
        if (typ((GEN)ep->value)!=t_CLOSURE)
          simple_help(s, "user defined variable");
        else
        {
          GEN str = closure_get_text((GEN)ep->value);
          if (typ(str) == t_VEC)
            pari_printf("%s =\n  %Ps\n", ep->name, ep->value);
        }
        return;
      }
      break;

    case EpINSTALL:
      if (!ep->help) { simple_help(s, "installed function"); return; }
      break;

    case EpNEW:
      if (!ep->help) { simple_help(s, "new identifier"); return; };
      break;

    default: /* built-in function */
      if (!ep->help) pari_err_BUG("gp_help (no help found)"); /*paranoia*/
      if (long_help) { external_help(ep->name,3); return; }
  }
  print_text(ep->help);
}