Exemplo n.º 1
0
int				execute(char **args, char **envp)
{
	int i;

	if (args[0] == NULL)
		return (1);
	if (ft_strcmp(args[0], "exit") == 0)
		return (msh_exit(args));
	if (ft_strcmp(args[0], "help") == 0)
		return (msh_help(args));
	if (ft_strcmp(args[0], "clear") == 0)
		return (msh_clear());
	if (ft_strcmp(args[0], "coffee") == 0)
		return (msh_coffee(args));
	if (ft_strcmp(args[0], "ls") == 0)
		return (msh_ls(args));
	if (ft_strcmp(args[0], "echo") == 0)
		return (msh_echo(args));
	if (ft_strcmp(args[0], "cd") == 0)
		return (msh_cd(args));
	if (ft_strcmp(args[0], "pwd") == 0)
		return (msh_pwd(args));
	if (ft_strcmp(args[0], "env") == 0)
		return (msh_env(envp));
	if (ft_strcmp(args[0], "lol") == 0)
		return (msh_emoji(args));
	return (launch(args));
}
Exemplo n.º 2
0
void msh_auto_complete(char *prefix)
{
    int length, min_length;
    const char *name_ptr, *cmd_name;
    struct finsh_syscall *index;

    min_length = 0;
    name_ptr = RT_NULL;

    if (*prefix == '\0')
    {
        msh_help(0, RT_NULL);
        return;
    }

#ifdef RT_USING_DFS
    /* check whether a spare in the command */
    {
        char *ptr;

        ptr = prefix + rt_strlen(prefix);
        while (ptr != prefix)
        {
            if (*ptr == ' ')
            {
                msh_auto_complete_path(ptr + 1);
                break;
            }

            ptr --;
        }
#ifdef RT_USING_MODULE
        /* There is a chance that the user want to run the module directly. So
         * try to complete the file names. If the completed path is not a
         * module, the system won't crash anyway. */
        if (ptr == prefix)
        {
            msh_auto_complete_path(ptr);
        }
#endif
    }
#endif

    /* checks in internal command */
    {
        for (index = _syscall_table_begin; index < _syscall_table_end; FINSH_NEXT_SYSCALL(index))
        {
            /* skip finsh shell function */
            if (strncmp(index->name, "__cmd_", 6) != 0) continue;

            cmd_name = (const char *) &index->name[6];
            if (strncmp(prefix, cmd_name, strlen(prefix)) == 0)
            {
                if (min_length == 0)
                {
                    /* set name_ptr */
                    name_ptr = cmd_name;
                    /* set initial length */
                    min_length = strlen(name_ptr);
                }

                length = str_common(name_ptr, cmd_name);
                if (length < min_length)
                    min_length = length;

                rt_kprintf("%s\n", cmd_name);
            }
        }
    }

    /* auto complete string */
    if (name_ptr != NULL)
    {
        rt_strncpy(prefix, name_ptr, min_length);
    }

    return ;
}