+added a prompting for inputer.
This commit is contained in:
parent
89175d9d8b
commit
dd0a5260e1
3
HISTORY
3
HISTORY
@ -1,3 +1,6 @@
|
|||||||
|
Aug. 29 2017
|
||||||
|
Added a prompting for inputer
|
||||||
|
|
||||||
Jul. 24 2017
|
Jul. 24 2017
|
||||||
Added an mb_get_var_name function
|
Added an mb_get_var_name function
|
||||||
|
|
||||||
|
Binary file not shown.
@ -14005,8 +14005,9 @@ _exit:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Safe stdin reader function */
|
/* Safe stdin reader function */
|
||||||
int mb_gets(char* buf, int s) {
|
int mb_gets(const char* pmt, char* buf, int s) {
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
mb_unrefvar(pmt);
|
||||||
|
|
||||||
if(buf && s) {
|
if(buf && s) {
|
||||||
if(fgets(buf, s, stdin) == 0) {
|
if(fgets(buf, s, stdin) == 0) {
|
||||||
@ -17464,6 +17465,7 @@ static int _std_input(mb_interpreter_t* s, void** l) {
|
|||||||
_object_t* obj = 0;
|
_object_t* obj = 0;
|
||||||
char line[_INPUT_MAX_LENGTH];
|
char line[_INPUT_MAX_LENGTH];
|
||||||
char* conv_suc = 0;
|
char* conv_suc = 0;
|
||||||
|
const char* pmt = 0;
|
||||||
|
|
||||||
mb_assert(s && l);
|
mb_assert(s && l);
|
||||||
|
|
||||||
@ -17478,12 +17480,13 @@ static int _std_input(mb_interpreter_t* s, void** l) {
|
|||||||
#ifdef MB_CP_VC
|
#ifdef MB_CP_VC
|
||||||
getch();
|
getch();
|
||||||
#else /* MB_CP_VC */
|
#else /* MB_CP_VC */
|
||||||
_get_inputer(s)(line, sizeof(line));
|
_get_inputer(s)(pmt, line, sizeof(line));
|
||||||
#endif /* MB_CP_VC */
|
#endif /* MB_CP_VC */
|
||||||
|
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
if(obj->type == _DT_STRING) {
|
if(obj->type == _DT_STRING) {
|
||||||
|
pmt = obj->data.string;
|
||||||
_print_string(s, obj);
|
_print_string(s, obj);
|
||||||
ast = ast->next;
|
ast = ast->next;
|
||||||
obj = (_object_t*)ast->data;
|
obj = (_object_t*)ast->data;
|
||||||
@ -17497,7 +17500,7 @@ static int _std_input(mb_interpreter_t* s, void** l) {
|
|||||||
_handle_error_on_obj(s, SE_RN_VAR_EXPECTED, s->source_file, DON(ast), MB_FUNC_ERR, _exit, result);
|
_handle_error_on_obj(s, SE_RN_VAR_EXPECTED, s->source_file, DON(ast), MB_FUNC_ERR, _exit, result);
|
||||||
}
|
}
|
||||||
if(obj->data.variable->data->type == _DT_INT || obj->data.variable->data->type == _DT_REAL) {
|
if(obj->data.variable->data->type == _DT_INT || obj->data.variable->data->type == _DT_REAL) {
|
||||||
_get_inputer(s)(line, sizeof(line));
|
_get_inputer(s)(pmt, line, sizeof(line));
|
||||||
obj->data.variable->data->type = _DT_INT;
|
obj->data.variable->data->type = _DT_INT;
|
||||||
obj->data.variable->data->data.integer = (int_t)mb_strtol(line, &conv_suc, 0);
|
obj->data.variable->data->data.integer = (int_t)mb_strtol(line, &conv_suc, 0);
|
||||||
if(*conv_suc != _ZERO_CHAR) {
|
if(*conv_suc != _ZERO_CHAR) {
|
||||||
@ -17515,7 +17518,7 @@ static int _std_input(mb_interpreter_t* s, void** l) {
|
|||||||
if(obj->data.variable->data->data.string && !obj->data.variable->data->is_ref) {
|
if(obj->data.variable->data->data.string && !obj->data.variable->data->is_ref) {
|
||||||
safe_free(obj->data.variable->data->data.string);
|
safe_free(obj->data.variable->data->data.string);
|
||||||
}
|
}
|
||||||
len = (size_t)_get_inputer(s)(line, sizeof(line));
|
len = (size_t)_get_inputer(s)(pmt, line, sizeof(line));
|
||||||
#if defined MB_CP_VC && defined MB_ENABLE_UNICODE
|
#if defined MB_CP_VC && defined MB_ENABLE_UNICODE
|
||||||
do {
|
do {
|
||||||
_dynamic_buffer_t buf;
|
_dynamic_buffer_t buf;
|
||||||
|
@ -573,7 +573,7 @@ typedef int (* mb_routine_func_t)(struct mb_interpreter_t*, void**, mb_value_t*,
|
|||||||
typedef int (* mb_debug_stepped_handler_t)(struct mb_interpreter_t*, void**, char*, int, unsigned short, unsigned short);
|
typedef int (* mb_debug_stepped_handler_t)(struct mb_interpreter_t*, void**, char*, int, unsigned short, unsigned short);
|
||||||
typedef void (* mb_error_handler_t)(struct mb_interpreter_t*, mb_error_e, char*, char*, int, unsigned short, unsigned short, int);
|
typedef void (* mb_error_handler_t)(struct mb_interpreter_t*, mb_error_e, char*, char*, int, unsigned short, unsigned short, int);
|
||||||
typedef int (* mb_print_func_t)(const char*, ...);
|
typedef int (* mb_print_func_t)(const char*, ...);
|
||||||
typedef int (* mb_input_func_t)(char*, int);
|
typedef int (* mb_input_func_t)(const char*, char*, int);
|
||||||
typedef int (* mb_import_handler_t)(struct mb_interpreter_t*, const char*);
|
typedef int (* mb_import_handler_t)(struct mb_interpreter_t*, const char*);
|
||||||
typedef void (* mb_dtor_func_t)(struct mb_interpreter_t*, void*);
|
typedef void (* mb_dtor_func_t)(struct mb_interpreter_t*, void*);
|
||||||
typedef void* (* mb_clone_func_t)(struct mb_interpreter_t*, void*);
|
typedef void* (* mb_clone_func_t)(struct mb_interpreter_t*, void*);
|
||||||
@ -685,7 +685,7 @@ MBAPI int mb_gc(struct mb_interpreter_t* s, int_t* collected/* = NULL*/);
|
|||||||
MBAPI int mb_get_userdata(struct mb_interpreter_t* s, void** d);
|
MBAPI int mb_get_userdata(struct mb_interpreter_t* s, void** d);
|
||||||
MBAPI int mb_set_userdata(struct mb_interpreter_t* s, void* d);
|
MBAPI int mb_set_userdata(struct mb_interpreter_t* s, void* d);
|
||||||
MBAPI int mb_set_import_handler(struct mb_interpreter_t* s, mb_import_handler_t h);
|
MBAPI int mb_set_import_handler(struct mb_interpreter_t* s, mb_import_handler_t h);
|
||||||
MBAPI int mb_gets(char* buf, int s);
|
MBAPI int mb_gets(const char* pmt, char* buf, int s);
|
||||||
MBAPI char* mb_memdup(const char* val, unsigned size);
|
MBAPI char* mb_memdup(const char* val, unsigned size);
|
||||||
MBAPI int mb_set_memory_manager(mb_memory_allocate_func_t a, mb_memory_free_func_t f);
|
MBAPI int mb_set_memory_manager(mb_memory_allocate_func_t a, mb_memory_free_func_t f);
|
||||||
|
|
||||||
|
@ -853,7 +853,7 @@ static void _edit_program(const char* no) {
|
|||||||
--lno;
|
--lno;
|
||||||
memset(line, 0, _MAX_LINE_LENGTH);
|
memset(line, 0, _MAX_LINE_LENGTH);
|
||||||
_printf("%ld]", lno + 1);
|
_printf("%ld]", lno + 1);
|
||||||
mb_gets(line, _MAX_LINE_LENGTH);
|
mb_gets(0, line, _MAX_LINE_LENGTH);
|
||||||
l = (int)strlen(line);
|
l = (int)strlen(line);
|
||||||
_code()->lines[lno] = (char*)realloc(_code()->lines[lno], l + 2);
|
_code()->lines[lno] = (char*)realloc(_code()->lines[lno], l + 2);
|
||||||
strcpy(_code()->lines[lno], line);
|
strcpy(_code()->lines[lno], line);
|
||||||
@ -878,7 +878,7 @@ static void _insert_program(const char* no) {
|
|||||||
--lno;
|
--lno;
|
||||||
memset(line, 0, _MAX_LINE_LENGTH);
|
memset(line, 0, _MAX_LINE_LENGTH);
|
||||||
_printf("%ld]", lno + 1);
|
_printf("%ld]", lno + 1);
|
||||||
mb_gets(line, _MAX_LINE_LENGTH);
|
mb_gets(0, line, _MAX_LINE_LENGTH);
|
||||||
if(_code()->count + 1 == _code()->size) {
|
if(_code()->count + 1 == _code()->size) {
|
||||||
_code()->size += _REALLOC_INC_STEP;
|
_code()->size += _REALLOC_INC_STEP;
|
||||||
_code()->lines = (char**)realloc(_code()->lines, sizeof(char*) * _code()->size);
|
_code()->lines = (char**)realloc(_code()->lines, sizeof(char*) * _code()->size);
|
||||||
@ -1028,7 +1028,7 @@ static int _do_line(void) {
|
|||||||
|
|
||||||
memset(line, 0, _MAX_LINE_LENGTH);
|
memset(line, 0, _MAX_LINE_LENGTH);
|
||||||
_printf("]");
|
_printf("]");
|
||||||
mb_gets(line, _MAX_LINE_LENGTH);
|
mb_gets(0, line, _MAX_LINE_LENGTH);
|
||||||
|
|
||||||
memcpy(dup, line, _MAX_LINE_LENGTH);
|
memcpy(dup, line, _MAX_LINE_LENGTH);
|
||||||
strtok(line, " ");
|
strtok(line, " ");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user