libc.obj & libshell: formatting fix & update comments & add checks that shell really initialized

This commit is contained in:
2026-03-07 15:00:04 +05:00
parent 6956ce8b8c
commit 84fb020568
13 changed files with 61 additions and 41 deletions

View File

@@ -3,6 +3,9 @@
void shell_cls()
{
__shell_init();
*__shell_shm = SHELL_CLS;
if(__shell_is_init == __SHELL_INIT_OK)
{
*__shell_shm = SHELL_CLS;
__SHELL_WAIT();
}
}

View File

@@ -6,10 +6,12 @@ unsigned shell_get_pid()
unsigned pid;
__shell_init();
*__shell_shm = SHELL_PID;
__SHELL_WAIT();
memcpy(&pid, __shell_shm + 1, sizeof(unsigned));
if (__shell_is_init == __SHELL_INIT_OK)
{
*__shell_shm = SHELL_PID;
__SHELL_WAIT();
memcpy(&pid, __shell_shm + 1, sizeof(unsigned));
}
return pid;
}

View File

@@ -3,7 +3,14 @@
char shell_getc()
{
__shell_init();
*__shell_shm = SHELL_GETC;
__SHELL_WAIT();
return *(__shell_shm + 1);
if (__shell_is_init == __SHELL_INIT_OK) {
*__shell_shm = SHELL_GETC;
__SHELL_WAIT();
return *(__shell_shm + 1);
}
else {
return 0;
}
}

View File

@@ -5,8 +5,10 @@ void shell_gets(char *str, int n)
{
__shell_init();
*__shell_shm = SHELL_GETS;
if (__shell_is_init == __SHELL_INIT_OK) {
*__shell_shm = SHELL_GETS;
__SHELL_WAIT();
strncpy(str, __shell_shm+1, n);
}
}

View File

@@ -11,7 +11,6 @@ enum __SHELL_INIT_STATE __shell_is_init = __SHELL_NOT_LOADED;
int __shell_shm_init()
{
__shell_is_init = __SHELL_LOADING;
ksys_thread_t proc_info;
unsigned PID;
@@ -31,23 +30,32 @@ void __shell_init()
case __SHELL_NOT_LOADED:
if (__shell_shm_init()) {
debug_printf("%s: shell problems detected!\n", app_name);
__shell_is_init = __SHELL_INIT_FAILED;
return;
goto __shell_init_err;
}
if (!shell_ping()) {
__shell_is_init = __SHELL_INIT_FAILED;
return;
goto __shell_init_err;
}
__shell_is_init = __SHELL_INIT_OK; // shell пингуется, значит работает
__shell_is_init = __SHELL_INIT_OK; // The shell is being pinged, so it's working.
break;
case __SHELL_LOADING:
while (__shell_is_init == __SHELL_LOADING) {
_ksys_thread_yield();
}
case __SHELL_INIT_OK:
if (!shell_ping()) {
goto __shell_init_err;
}
break;
default:
break;
}
return;
__shell_init_err:
__shell_is_init = __SHELL_INIT_FAILED;
shell_exit();
return;
}

View File

@@ -8,8 +8,5 @@ int shell_ping()
_ksys_thread_yield();
_ksys_delay(40);
if (*__shell_shm == SHELL_OK) {
return 1;
}
return 0;
return *__shell_shm == SHELL_OK;
}

View File

@@ -1,12 +1,12 @@
#include <shell_api.h>
#include <stdio.h>
void shell_printf(const char *format,...)
void shell_printf(const char *format, ...)
{
va_list ap;
va_start (ap, format);
vsnprintf(__shell_shm+1, SHELL_SHM_MAX, format, ap);
*__shell_shm=SHELL_PUTS;
va_start(ap, format);
vsnprintf(__shell_shm + 1, SHELL_SHM_MAX, format, ap);
*__shell_shm = SHELL_PUTS;
va_end(ap);
__SHELL_WAIT();
}

View File

@@ -3,7 +3,11 @@
void shell_putc(char c)
{
__shell_init();
*(__shell_shm+1) = c;
*__shell_shm = SHELL_PUTC;
__SHELL_WAIT();
if (__shell_is_init == __SHELL_INIT_OK)
{
*(__shell_shm + 1) = c;
*__shell_shm = SHELL_PUTC;
__SHELL_WAIT();
}
}

View File

@@ -3,7 +3,5 @@
void shell_puts(const char *str)
{
__shell_init();
shell_write_string(str, strlen(str));
__SHELL_WAIT();
}

View File

@@ -8,12 +8,12 @@ void shell_write_string(const char *s, size_t len)
{
if (len > SHELL_SHM_MAX - 1)
{
shell_write_string(s, SHELL_SHM_MAX - 1); // выводит что можно вывести
shell_write_string(s + (SHELL_SHM_MAX - 1), len - (SHELL_SHM_MAX - 1)); // выводит всё что осталось
shell_write_string(s, SHELL_SHM_MAX - 1); // Outputs as much as it can.
shell_write_string(s + (SHELL_SHM_MAX - 1), len - (SHELL_SHM_MAX - 1)); // Outputs the rest.
}
else
{
memset(__shell_shm, 0, SHELL_SHM_MAX);
memset(__shell_shm, 0, SHELL_SHM_MAX); // without int shell show \t, \n, lose chars and other trash
memcpy(__shell_shm + 1, s, len);
*__shell_shm = SHELL_PUTS;
__SHELL_WAIT();

View File

@@ -5,7 +5,7 @@
#ifdef _BUILD_LIBC
#define __EXTERN
#else
#else
#define __EXTERN extern
#endif
@@ -21,8 +21,7 @@
#define SHELL_SHM_MAX 1024 * 16
enum __SHELL_INIT_STATE
{
enum __SHELL_INIT_STATE {
__SHELL_NOT_LOADED = 0, // not try init shell before
__SHELL_LOADING = 1, // in progress
__SHELL_INIT_OK = 2, // ok
@@ -34,8 +33,10 @@ __EXTERN char* __shell_shm;
__EXTERN enum __SHELL_INIT_STATE __shell_is_init;
__EXTERN void __shell_init();
#define __SHELL_WAIT() \
while (*__shell_shm) {_ksys_thread_yield();}
#define __SHELL_WAIT() \
while (*__shell_shm) { \
_ksys_thread_yield(); \
}
__EXTERN int shell_ping();
__EXTERN unsigned shell_get_pid();
@@ -48,7 +49,7 @@ __EXTERN void shell_putc(char c);
__EXTERN void shell_puts(const char* str);
__EXTERN void shell_printf(const char* format, ...);
__EXTERN void shell_write_string(const char *s, size_t len);
__EXTERN void shell_write_string(const char* s, size_t len);
__EXTERN void shell_cls();
#endif

View File

@@ -4,6 +4,7 @@
char* console_gets(char* buff, size_t len);
void console_write(const char* ptr, size_t len);
void console_exit();
#endif // __LIBC_SYS_CONIO_H

View File

@@ -2,7 +2,7 @@
#include <conio.h>
#include "_conio.h"
char*console_gets(char* buff, size_t len)
char* console_gets(char* buff, size_t len)
{
char* ret = buff;
@@ -30,15 +30,12 @@ void console_write(const char* ptr, size_t len)
void console_exit()
{
_ksys_debug_puts("console exit\n");
if (__shell_is_init < __SHELL_INIT_FAILED) {
_ksys_debug_puts("shell_exit\n");
shell_exit();
}
if (__shell_is_init == __SHELL_INIT_FAILED) {
if (__con_is_load) {
_ksys_debug_puts("con_exit\n");
con_exit(0);
}
}