#include #include #include #include #include "lb.h" void lb_debug_break(LBContext *cxt, int c_line) { static int mode = 0; char buf[256]; if (mode == 0) { FILE *f = fopen(cxt->source, "r"); int need_line = 1; if (f) { char line[512] = ""; int i; for (i = 1; fgets(line, sizeof(line), f) && i < c_line; i++); printf("%s", line); fclose(f); } while (need_line) { printf("lbdb> "); fflush(stdout); assert(fgets(buf, sizeof(buf), stdin)); if (*buf == 'r') { mode = 1; need_line = 0; } else if (*buf == 'n') { need_line = 0; } else if (*buf == '\n') { need_line = 0; } else if (*buf == 'p') { char *ptr = buf; int i; while (*ptr && !isspace(*ptr)) ptr++; while (*ptr && isspace(*ptr)) ptr++; if (ptr[strlen(ptr) - 1] == '\n') { ptr[strlen(ptr) - 1] = 0; } for (i = 0; i < cxt->vars_size; i++) { if (!strcasecmp(cxt->vars[i].name->data, ptr)) { break; } } if (i != cxt->vars_size) { assert((cxt->vars[i].rows == cxt->vars[i].columns) && (cxt->vars[i].rows == 1)); switch (cxt->vars[i].type) { case STRING: printf("%s = \"", cxt->vars[i].name->data); fwrite(cxt->vars[i].data.str->data, cxt->vars[i].data.str->size, 0, stdout); printf("\"\n"); break; case DOUBLE: printf("%s = %f\n", cxt->vars[i].name->data, cxt->vars[i].data.db); break; case HANDLE: printf("%s\n", cxt->vars[i].name->data); break; } } } } } }