return result;
}
+ int mb_gets(char* buf, int s) {
+ /* Safe stdin reader function */
+ int result = 0;
+ if(fgets(buf, s, stdin) == 0) {
+ fprintf(stderr, "Error reading.\n");
+ exit(1);
+ }
+ result = (int)strlen(buf);
+ if(buf[result - 1] == '\n')
+ buf[result - 1] = '\0';
+
+ return result;
+ }
+
+void mb_set_user_data(mb_interpreter_t* s, void *ptr)
+{
+ mb_assert(s);
+ s->userdata = ptr;
+}
+
+void *mb_get_user_data(mb_interpreter_t* s)
+{
+ mb_assert(s);
+ return s->userdata;
+}
+
/* ========================================================} */
/*
ast = (_ls_node_t*)(*l);
obj = (_object_t*)(ast->data);
+ if(!obj || obj->type != _DT_VAR) {
+ _handle_error_on_obj(s, SE_RN_VARIABLE_EXPECTED, DON(ast), MB_FUNC_ERR, _exit, result);
+ }
if(obj->data.variable->data->type == _DT_INT || obj->data.variable->data->type == _DT_REAL) {
- mb_gets(line, sizeof(line));
+ if(!fgets(line, sizeof(line), stdin)) {
+ result = MB_FUNC_ERR;
+ goto _exit;
+ }
obj->data.variable->data->type = _DT_INT;
obj->data.variable->data->data.integer = (int_t)strtol(line, &conv_suc, 0);
if(*conv_suc != '\0') {
MBAPI int mb_set_error_handler(mb_interpreter_t* s, mb_error_handler_t h);
MBAPI int mb_set_printer(mb_interpreter_t* s, mb_print_func_t p);
+ MBAPI int mb_gets(char* buf, int s);
+
+MBAPI void mb_set_user_data(mb_interpreter_t* s, void *ptr);
+MBAPI void *mb_get_user_data(mb_interpreter_t* s);
+
#ifdef MB_COMPACT_MODE
# pragma pack()
#endif /* MB_COMPACT_MODE */