Beispiel #1
0
void check_keyword()
{
	char *argv[MAX_ARGC + 1] = {NULL};
	char cmdstr[CMDBUF_SIZE];
	int argc = 1;
	int i;

	find_events();
	fill_arg(cmdstr, cmd[cur_his]);
	argv[0] = cmdtok(cmdstr);
	if (!argv[0])
		return;

	for(argc = 1 ; argv[argc-1] && argc < MAX_ARGC ; argc++)
		if(!(argv[argc] = cmdtok(NULL)))
			break;

	for (i = 0; i < CMD_COUNT; i++) {
		if (!strcmp(argv[0], cmd_data[i].cmd)) {
			cmd_data[i].func(argc, argv);
			break;
		}
	}
	if (i == CMD_COUNT) {
		write(fdout, argv[0], strlen(argv[0]) + 1);
		write(fdout, ": command not found", 20);
		write(fdout, next_line, 3);
	}
}
Beispiel #2
0
int	op_add(t_action *action, char *str, t_pos *pos)
{
  int	i;
  char	c;
  char	type;
  char	**tab;
  char	**list_arg;

  if ((c = 0) || !(pos->prog_size += 2) ||
      !(i = -1) || !(action->identifier = 0x04) ||
      !(action->args = malloc(sizeof(t_arg *) * 4)) ||
      !(tab = str_to_word_tab(str, ',')) ||
      !(list_arg = str_to_word_tab("1 1 1", ' ')) ||
      init_args(action, 3))
    return (1);
  while (tab[++i])
    {
      if (i > 2 || (type = check_type(tab[i], pos)) == -1 ||
	  check_args(type, list_arg[i], pos) ||
	  fill_arg(type, tab[i], action->args[i], action->pos - i - 1))
	return (1);
      add_prog_size(type, pos);
      c += (type << (6 - (i * 2)));
    }
  action->coding_byte = c;
  return (free_tab(tab), free_tab(list_arg), (i < 3) ? 1 : 0);
}
Beispiel #3
0
static void     treat_asm(t_cmd *line, char *header[2],
                          t_cmd *asms[3], int *pos)
{
  int           i;

  if (line->cmd_code == T_LABEL)
    {
      list_replace_node(asms, &asms[2], line);
      line->bin_size = *pos;
    }
  else if (line->cmd_code == T_NAME || line->cmd_code == T_COMMENT)
    header[line->cmd_code + 3] = line->arg.argv[0];
  else
    {
      line->bin_size = -1;
      line->bin[++(line->bin_size)] = line->cmd_code;
      if (line->cmd_code != T_REG && line->cmd_code != 9 &&
          line->cmd_code != 12 && line->cmd_code != 15)
        fill_arg_type(line, &(line->bin_size));
      i = -1;
      while (++i < MAX_ARGS_NUMBER && line->arg.type[i] != 0)
        fill_arg(line, &(line->bin_size), my_getnbr(line->arg.argv[i]),
                 get_arg_size(line->cmd_code, i, line->arg.type[i]));
      *pos += line->bin_size + 1;
    }
}
Beispiel #4
0
void check_keyword()
{
	char *argv[MAX_ARGC + 1] = {NULL};
	char cmdstr[CMDBUF_SIZE];
	char buffer[CMDBUF_SIZE * MAX_ENVVALUE / 2 + 1];
	char *p = buffer;
	int argc = 1;
	int i;

	find_events();
	strcpy(cmdstr, cmd[cur_his]);
	argv[0] = cmdtok(cmdstr);
	if (!argv[0])
		return;

	while (1) {
		argv[argc] = cmdtok(NULL);
		if (!argv[argc])
			break;
		argc++;
		if (argc >= MAX_ARGC)
			break;
	}

	for(i = 0; i < argc; i++) {
		int l = fill_arg(p, argv[i]);
		argv[i] = p;
		p += l + 1;
	}

	for (i = 0; i < CMD_COUNT; i++) {
		if (!strcmp(argv[0], cmd_data[i].cmd)) {
			cmd_data[i].func(argc, argv);
			break;
		}
	}
	if (i == CMD_COUNT) {
		write(fdout, argv[0], strlen(argv[0]) + 1);
		write(fdout, ": command not found", 20);
		write(fdout, next_line, 3);
	}
}
Beispiel #5
0
static void     labels_loop(t_cmd *line, t_cmd *lbls,
                            int i[3], int *lsize)
{
  t_cmd		*it;

  while (++i[0] < 4 && line->arg.type[*i] != 0)
    {
      i[1] = get_arg_size(line->cmd_code, *i, line->arg.type[*i]);
      if (line->arg.type[*i] == T_LAB || line->arg.argv[*i][0] == LABEL_CHAR)
        {
          it = lbls;
          while (it && my_strcmp(line->arg.argv[*i] + 1, it->arg.argv[0]))
            it = it->next;
          if (it)
            fill_arg(line, lsize, it->bin_size - i[2], i[1]);
          else
	    syntax_prompt("Label undifined", line->line, *i, TRUE);
        }
      else
        *lsize += i[1];
    }
}
Beispiel #6
0
void generic_sanitise(struct syscallrecord *rec)
{
	struct syscallentry *entry;
	unsigned int call;

	call = rec->nr;
	entry = syscalls[call].entry;

	if (entry->arg1type != 0)
		rec->a1 = fill_arg(rec, 1);
	if (entry->arg2type != 0)
		rec->a2 = fill_arg(rec, 2);
	if (entry->arg3type != 0)
		rec->a3 = fill_arg(rec, 3);
	if (entry->arg4type != 0)
		rec->a4 = fill_arg(rec, 4);
	if (entry->arg5type != 0)
		rec->a5 = fill_arg(rec, 5);
	if (entry->arg6type != 0)
		rec->a6 = fill_arg(rec, 6);
}