CoolPotOS/apps/shell/shell.c

91 lines
2.2 KiB
C
Raw Normal View History

#include <stdio.h>
#include "../include/syscall.h"
2024-09-01 11:56:39 +08:00
#include "../include/string.h"
2024-09-01 20:09:41 +08:00
#include "../include/cpos.h"
extern void print_info();
static int gets(char *buf) {
2024-09-01 11:56:39 +08:00
int index = 0;
char c;
2024-09-01 20:09:41 +08:00
2024-09-08 22:43:05 +08:00
while ((c = getc()) != '\n') {
2024-09-01 11:56:39 +08:00
if (c == '\b') {
if (index > 0) {
index--;
2024-09-01 14:56:38 +08:00
printf("\b \b");
2024-09-01 11:56:39 +08:00
}
} else {
buf[index++] = c;
printf("%c",c);
}
}
buf[index] = '\0';
printf("%c",c);
return index;
}
2024-09-08 22:43:05 +08:00
static inline int cmd_parse(char *cmd_str, char **argv, char token) {
2024-09-01 11:56:39 +08:00
int arg_idx = 0;
while (arg_idx < 50) {
argv[arg_idx] = NULL;
arg_idx++;
}
char *next = cmd_str;
int argc = 0;
while (*next) {
while (*next == token) *next++;
if (*next == 0) break;
argv[argc] = next;
while (*next && *next != token) *next++;
if (*next) *next++ = 0;
if (argc > 50) return -1;
argc++;
}
return argc;
}
2024-09-08 22:43:05 +08:00
int main(int argc_v,char **argv_v){
printf("CoolPotOS UserShell v0.0.1\n");
2024-09-01 11:56:39 +08:00
char com[100];
char *argv[50];
int argc = -1;
char *buffer[255];
2024-09-01 16:43:58 +08:00
while (1){
2024-09-01 11:56:39 +08:00
syscall_get_cd(buffer);
2024-09-06 00:16:50 +08:00
printf("\033[40m;default@localhost: \03330m;%s\\\03321m;$ ",buffer);
2024-09-01 20:09:41 +08:00
if (gets(com) <= 0) continue;
2024-09-01 11:56:39 +08:00
2024-09-08 22:43:05 +08:00
char* com_copy[100];
strcpy(com_copy,com);
2024-09-01 11:56:39 +08:00
argc = cmd_parse(com, argv, ' ');
if (argc == -1) {
printf("[Shell]: Error: out of arguments buffer\n");
continue;
}
2024-09-01 20:09:41 +08:00
if (!strcmp("version", argv[0])){
print_info();
2024-09-02 14:05:39 +08:00
}else if (!strcmp("system", argv[0])){
2024-09-01 20:36:45 +08:00
exit(0);
2024-09-01 20:09:41 +08:00
}else if (!strcmp("help", argv[0]) || !strcmp("?", argv[0]) || !strcmp("h", argv[0])) {
2024-09-01 11:56:39 +08:00
printf("-=[CoolPotShell Helper]=-\n");
printf("help ? h Print shell help info.\n");
printf("version Print os version.\n");
2024-09-01 20:36:45 +08:00
printf("system Launch system shell.\n");
2024-09-08 22:43:05 +08:00
} else {
int pid = exec_elf(argv[0],com_copy,false);
if(pid == NULL){
printf("\033ff3030;[Shell]: Unknown command '%s'.\033c6c6c6;\n", argv[0]);
}
}
}
}