static void refresh(int full) { int i; struct line *l = scrline; if (!full) { if (smartscroll) { if (scrline->next == lastscrline) { printf("%c[1T", 27); refresh_line(scrline, 0); pos(0, screenheight); printf("%*s", screenwidth, ""); return; } if (scrline->prev == lastscrline) { printf("%c[1S", 27); for (i = 0; i < screenheight - 1; i++) { l = l->next; if (!l) return; } refresh_line(l, screenheight - 1); return; } } else { refresh(1); return; } } for (i = 0; i < screenheight; i++) { refresh_line(l, i); l = l->next; if (!l) break; } i++; while (i < screenheight) { pos(0, i++); printf("~"); } }
static void delete_char(int pos) { char *line = curline->data; int end = strlen(line); while (pos < end) { line[pos] = line[pos + 1]; pos++; } refresh_line(curline, cursy); }
//////////////////////////////////////////////////////////// // main loop // //////////////////////////////////////////////////////////// void main_loop() { for (;;) { if (need_render_frame) render_buffer(); if (need_refresh_line) { refresh_line(); check_inputs(); } } }
static void insert_char(char c) { int pos = textx; char *line; int end = strlen(curline->data); line_realloc(strlen(curline->data) + 2, curline); line = curline->data; while (end >= pos) { line[end + 1] = line[end]; end--; } line[pos] = c; textx++; refresh_line(curline, cursy); }