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)); }
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 ; }