forked from KolibriOS/kolibrios
libc.obj & libshell: formatting fix & update comments & add checks that shell really initialized
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,5 @@
|
||||
|
||||
void shell_puts(const char *str)
|
||||
{
|
||||
__shell_init();
|
||||
shell_write_string(str, strlen(str));
|
||||
__SHELL_WAIT();
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user