shell: spuštění sysapps podle názvu příkazu
Upraveno: kernel/main.c - přidané napojení na runtime registr sysapps - přidaná funkce run_sysapp_by_name() - shell teď před chybou 'Neznamy prikaz' zkusí sysapp - doplněná help hláška o příkazech ze složky sysapps Přidáno/Odstraněno: nic mimo kernel/main.c
This commit is contained in:
@@ -20,10 +20,12 @@
|
|||||||
#include "scheduler.h"
|
#include "scheduler.h"
|
||||||
#include "storage.h"
|
#include "storage.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
#include "sysapps_runtime.h"
|
||||||
#include "syscall.h"
|
#include "syscall.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
|
||||||
void app_tetris_main(void);
|
void app_tetris_main(void);
|
||||||
|
extern const sysapp_entry_t g_sysapps[];
|
||||||
|
|
||||||
static char g_cwd[ASTERFS_NAME_LEN] = "/";
|
static char g_cwd[ASTERFS_NAME_LEN] = "/";
|
||||||
static unsigned long g_timer_hz = 100UL;
|
static unsigned long g_timer_hz = 100UL;
|
||||||
@@ -63,6 +65,7 @@ static void auth_readline_plain(char *out, int max_len);
|
|||||||
static void auth_readline_secret(char *out, int max_len);
|
static void auth_readline_secret(char *out, int max_len);
|
||||||
static void auth_clear_users(void);
|
static void auth_clear_users(void);
|
||||||
static int auth_add_user(const char *name, const char *pass);
|
static int auth_add_user(const char *name, const char *pass);
|
||||||
|
static int run_sysapp_by_name(const char *name);
|
||||||
static char g_fm_names[FM_MAX_ENTRIES][ASTERFS_NAME_LEN];
|
static char g_fm_names[FM_MAX_ENTRIES][ASTERFS_NAME_LEN];
|
||||||
static u8 g_fm_types[FM_MAX_ENTRIES];
|
static u8 g_fm_types[FM_MAX_ENTRIES];
|
||||||
static u16 g_fm_sizes[FM_MAX_ENTRIES];
|
static u16 g_fm_sizes[FM_MAX_ENTRIES];
|
||||||
@@ -614,6 +617,24 @@ static int system_is_installed(void) {
|
|||||||
return asterfs_get_type(INSTALL_FLAG_FILE) == 0;
|
return asterfs_get_type(INSTALL_FLAG_FILE) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int run_sysapp_by_name(const char *name) {
|
||||||
|
usize i;
|
||||||
|
|
||||||
|
if (!name || name[0] == '\0') {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; g_sysapps[i].name; ++i) {
|
||||||
|
if (aster_strcmp(g_sysapps[i].name, name) == 0) {
|
||||||
|
g_sysapps[i].entry();
|
||||||
|
render_shell_statusbar();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
static void cmd_setup_install(void) {
|
static void cmd_setup_install(void) {
|
||||||
static const char readme[] =
|
static const char readme[] =
|
||||||
"AsterOS base install\n"
|
"AsterOS base install\n"
|
||||||
@@ -804,6 +825,7 @@ static const char g_help_lines[][80] = {
|
|||||||
"edit filename - editor (Ctrl+S, ESC)",
|
"edit filename - editor (Ctrl+S, ESC)",
|
||||||
"calc A op B - vypocet (+ - * /)",
|
"calc A op B - vypocet (+ - * /)",
|
||||||
"tetris - testovaci hra nad app API",
|
"tetris - testovaci hra nad app API",
|
||||||
|
"<sysapps nazvy> - appka ze slozky sysapps",
|
||||||
"echo text - vypis textu",
|
"echo text - vypis textu",
|
||||||
"ticks - pocet tiknuti casovace",
|
"ticks - pocet tiknuti casovace",
|
||||||
"alloc N - alokovat N bajtu",
|
"alloc N - alokovat N bajtu",
|
||||||
@@ -2864,6 +2886,8 @@ static void shell_loop(void) {
|
|||||||
cmd_reboot();
|
cmd_reboot();
|
||||||
} else if (aster_strcmp(exec_cmd, "shutdown") == 0) {
|
} else if (aster_strcmp(exec_cmd, "shutdown") == 0) {
|
||||||
cmd_shutdown();
|
cmd_shutdown();
|
||||||
|
} else if (run_sysapp_by_name(exec_cmd) == 0) {
|
||||||
|
continue;
|
||||||
} else {
|
} else {
|
||||||
print_error("Neznamy prikaz. Zadej help.");
|
print_error("Neznamy prikaz. Zadej help.");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user