Require: #657 ([compare](https://git.kolibrios.org/Egor00f/kolibrios/compare/update-shell-api...shell-api-implement-return-value)) Implement a return value for shell API functions. required for updating libc streams. The return value is declared after `data` for consistency with older programs. # Changes: ## [`shell`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-9e9982c0c3e401531fcfbc1f9dd5f1f3d85452fd) + `SHELL_PUTS` and `SHELL_GETS` return the number of bytes written + `SHELL_GETC` write full `int` value ## `libshell` + [`shell_gets`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-8840a9f9a5e28f05f5f46e1b5106caf3ce6c470e) returns `NULL` or `EOF`, or a pointer to a string and returns the number of bytes received + [`shell_getc`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-955a257b2a02cfc5ee9879b7efc50d0644ad179c) return `int` + [`shell_printf`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-4ffb653a63ef098530e336370053615fee66be03) returns the number of bytes written + [`shell_puts`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-ee4df9617f16bc52153701c0edc6c2947dd877a8) returns the number of bytes written + [`shell_write_string`](https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660/files#diff-cebe23f17158adc73d20c5f9096862c209732598) returns the number of bytes written Reviewed-on: https://git.kolibrios.org/KolibriOS/kolibrios/pulls/660 Reviewed-by: Kiril Lipatov <lipatov.kiril@gmail.com>
72 lines
1.5 KiB
C
72 lines
1.5 KiB
C
#ifndef _SHELL_API_H_
|
|
#define _SHELL_API_H_
|
|
|
|
#include <sys/ksys.h>
|
|
|
|
#ifdef _BUILD_LIBC
|
|
#define __EXTERN
|
|
#else
|
|
#define __EXTERN extern
|
|
#endif
|
|
|
|
enum SHELL_API_COMMANDS {
|
|
SHELL_OK = 0,
|
|
SHELL_EXIT = 1,
|
|
SHELL_PUTC = 2,
|
|
SHELL_PUTS = 3,
|
|
SHELL_GETC = 4,
|
|
SHELL_GETS = 5,
|
|
SHELL_CLS = 6,
|
|
SHELL_PID = 7,
|
|
SHELL_PING = 8
|
|
};
|
|
|
|
#define SHELL_SHM_MAX 1024 * 16
|
|
|
|
enum __SHELL_INIT_STATE {
|
|
__SHELL_NOT_LOADED = 0, // not try init shell before
|
|
__SHELL_LOADING = 1, // in progress
|
|
__SHELL_INIT_OK = 2, // ok
|
|
__SHELL_INIT_FAILED = 3 // fail init shell
|
|
};
|
|
|
|
#pragma pack(push, 1)
|
|
struct return_value {
|
|
size_t written_bytes;
|
|
char* str;
|
|
};
|
|
|
|
struct shell_shm_buffer {
|
|
uint8_t cmd;
|
|
char data[SHELL_SHM_MAX - sizeof(((struct shell_shm_buffer*)NULL)->cmd) - sizeof(struct return_value)];
|
|
struct return_value return_value;
|
|
};
|
|
#pragma pack(pop)
|
|
|
|
__EXTERN char __shell_shm_name[32];
|
|
__EXTERN struct shell_shm_buffer* __shell_shm;
|
|
__EXTERN enum __SHELL_INIT_STATE __shell_is_init;
|
|
__EXTERN void __shell_init();
|
|
|
|
#define __SHELL_WAIT() \
|
|
do { \
|
|
_ksys_thread_yield(); \
|
|
} while (__shell_shm->cmd);
|
|
|
|
__EXTERN int shell_ping();
|
|
__EXTERN unsigned shell_get_pid();
|
|
__EXTERN void shell_exit();
|
|
|
|
__EXTERN int shell_getc();
|
|
__EXTERN char* shell_gets(char* str, int n);
|
|
|
|
__EXTERN void shell_putc(char c);
|
|
__EXTERN size_t shell_puts(const char* str);
|
|
__EXTERN int shell_printf(const char* format, ...);
|
|
|
|
__EXTERN size_t shell_write_string(const char* s, size_t len);
|
|
|
|
__EXTERN void shell_cls();
|
|
|
|
#endif
|