HelenOS sources
history 89 kernel/generic/src/console/kconsole.c static char32_t history[KCONSOLE_HISTORY][MAX_CMDLINE] = { };
history 104 kernel/generic/src/console/kconsole.c history[i][0] = 0;
history 341 kernel/generic/src/console/kconsole.c char32_t *current = history[history_pos];
history 501 kernel/generic/src/console/kconsole.c current = history[history_pos];
history 134 uspace/lib/clui/include/tinput.h char *history[HISTORY_LEN + 1];
history 460 uspace/lib/clui/src/tinput.c if (ti->history[HISTORY_LEN] != NULL)
history 461 uspace/lib/clui/src/tinput.c free(ti->history[HISTORY_LEN]);
history 466 uspace/lib/clui/src/tinput.c ti->history[i] = ti->history[i - 1];
history 468 uspace/lib/clui/src/tinput.c ti->history[1] = str_dup(str);
history 470 uspace/lib/clui/src/tinput.c if (ti->history[0] != NULL) {
history 471 uspace/lib/clui/src/tinput.c free(ti->history[0]);
history 472 uspace/lib/clui/src/tinput.c ti->history[0] = NULL;
history 583 uspace/lib/clui/src/tinput.c if (ti->history[ti->hpos] != NULL) {
history 584 uspace/lib/clui/src/tinput.c free(ti->history[ti->hpos]);
history 585 uspace/lib/clui/src/tinput.c ti->history[ti->hpos] = NULL;
history 588 uspace/lib/clui/src/tinput.c ti->history[ti->hpos] = tinput_get_str(ti);
history 591 uspace/lib/clui/src/tinput.c int pad = (int) ti->nc - str_length(ti->history[ti->hpos]);
history 595 uspace/lib/clui/src/tinput.c tinput_set_str(ti, ti->history[ti->hpos]);
history 793 uspace/lib/clui/src/tinput.c ti->history[0] = NULL;
history 116 uspace/lib/termui/src/history.c static bool _index_valid(const struct history *history, size_t idx)
history 118 uspace/lib/termui/src/history.c const struct line_buffer *lines = &history->lines;
history 127 uspace/lib/termui/src/history.c #define _history_check(history) do { \
history 128 uspace/lib/termui/src/history.c assert(history->lines.head < history->lines.buf_len || history->lines.head == 0); \
history 129 uspace/lib/termui/src/history.c assert(history->lines.tail < history->lines.buf_len || history->lines.tail == 0); \
history 130 uspace/lib/termui/src/history.c assert(history->cells.tail_top <= history->cells.head_offset); \
history 131 uspace/lib/termui/src/history.c assert(history->cells.head_offset <= history->cells.head_top); \
history 132 uspace/lib/termui/src/history.c assert(history->cells.head_top <= history->cells.buf_len); \
history 133 uspace/lib/termui/src/history.c assert(_index_valid(history, history->viewport_top) || history->viewport_top == history->lines.tail); \
history 134 uspace/lib/termui/src/history.c if (history->append) assert(!_lines_empty(&history->lines)); \
history 137 uspace/lib/termui/src/history.c static void _evict_oldest_line(struct history *history)
history 139 uspace/lib/termui/src/history.c struct line_buffer *lines = &history->lines;
history 140 uspace/lib/termui/src/history.c struct cell_buffer *cells = &history->cells;
history 142 uspace/lib/termui/src/history.c _history_check(history);
history 144 uspace/lib/termui/src/history.c bool head = (history->viewport_top == lines->head);
history 152 uspace/lib/termui/src/history.c history->viewport_top = 0;
history 153 uspace/lib/termui/src/history.c history->append = false;
history 154 uspace/lib/termui/src/history.c history->row_delta = 0;
history 158 uspace/lib/termui/src/history.c history->viewport_top = lines->head;
history 159 uspace/lib/termui/src/history.c history->row_delta = 0;
history 162 uspace/lib/termui/src/history.c _history_check(history);
history 167 uspace/lib/termui/src/history.c _history_check(history);
history 171 uspace/lib/termui/src/history.c _history_check(history);
history 271 uspace/lib/termui/src/history.c static void _alloc_line(struct history *history)
history 273 uspace/lib/termui/src/history.c struct line_buffer *lines = &history->lines;
history 291 uspace/lib/termui/src/history.c bool viewport_inactive = (history->viewport_top == lines->tail);
history 303 uspace/lib/termui/src/history.c history->viewport_top = lines->tail;
history 307 uspace/lib/termui/src/history.c _evict_oldest_line(history);
history 312 uspace/lib/termui/src/history.c history->viewport_top = lines->tail;
history 317 uspace/lib/termui/src/history.c history->append = true;
history 319 uspace/lib/termui/src/history.c _history_check(history);
history 344 uspace/lib/termui/src/history.c static termui_cell_t *_history_append(struct history *history, size_t len)
history 346 uspace/lib/termui/src/history.c struct line_buffer *lines = &history->lines;
history 347 uspace/lib/termui/src/history.c struct cell_buffer *cells = &history->cells;
history 367 uspace/lib/termui/src/history.c _evict_oldest_line(history);
history 374 uspace/lib/termui/src/history.c if (!history->append || _lines_empty(lines)) {
history 375 uspace/lib/termui/src/history.c _alloc_line(history);
history 391 uspace/lib/termui/src/history.c _alloc_line(history);
history 407 uspace/lib/termui/src/history.c bool _scrollback_active(const struct history *history)
history 409 uspace/lib/termui/src/history.c if (history->viewport_top == history->lines.tail)
history 412 uspace/lib/termui/src/history.c assert(_index_valid(history, history->viewport_top));
history 416 uspace/lib/termui/src/history.c static size_t _history_line_rows(const struct history *history, size_t idx)
history 418 uspace/lib/termui/src/history.c assert(_index_valid(history, idx));
history 420 uspace/lib/termui/src/history.c struct history_line line = history->lines.buf[idx];
history 425 uspace/lib/termui/src/history.c return (line.len - 1) / history->cols + 1;
history 428 uspace/lib/termui/src/history.c static int _history_scroll_down(struct history *history, int requested)
history 436 uspace/lib/termui/src/history.c if (history->row_delta > 0) {
history 437 uspace/lib/termui/src/history.c size_t rows = _history_line_rows(history, history->viewport_top);
history 438 uspace/lib/termui/src/history.c assert(rows > history->row_delta);
history 440 uspace/lib/termui/src/history.c if (delta < rows - history->row_delta) {
history 441 uspace/lib/termui/src/history.c history->row_delta += delta;
history 442 uspace/lib/termui/src/history.c _history_check(history);
history 446 uspace/lib/termui/src/history.c delta -= rows - history->row_delta;
history 447 uspace/lib/termui/src/history.c history->row_delta = 0;
history 449 uspace/lib/termui/src/history.c _line_idx_inc(&history->lines, &history->viewport_top);
history 454 uspace/lib/termui/src/history.c while (_scrollback_active(history)) {
history 455 uspace/lib/termui/src/history.c size_t rows = _history_line_rows(history, history->viewport_top);
history 459 uspace/lib/termui/src/history.c history->row_delta = delta;
history 460 uspace/lib/termui/src/history.c _history_check(history);
history 466 uspace/lib/termui/src/history.c _line_idx_inc(&history->lines, &history->viewport_top);
history 470 uspace/lib/termui/src/history.c _history_check(history);
history 474 uspace/lib/termui/src/history.c static int _history_scroll_up(struct history *history, int requested)
history 479 uspace/lib/termui/src/history.c if (history->row_delta > INT_MAX) {
history 480 uspace/lib/termui/src/history.c history->row_delta += requested;
history 481 uspace/lib/termui/src/history.c _history_check(history);
history 485 uspace/lib/termui/src/history.c int delta = requested + (int) history->row_delta;
history 486 uspace/lib/termui/src/history.c history->row_delta = 0;
history 488 uspace/lib/termui/src/history.c while (delta < 0 && history->viewport_top != history->lines.head) {
history 489 uspace/lib/termui/src/history.c _line_idx_dec(&history->lines, &history->viewport_top);
history 491 uspace/lib/termui/src/history.c size_t rows = _history_line_rows(history, history->viewport_top);
history 494 uspace/lib/termui/src/history.c history->row_delta = rows + delta;
history 495 uspace/lib/termui/src/history.c _history_check(history);
history 502 uspace/lib/termui/src/history.c _history_check(history);
history 508 uspace/lib/termui/src/history.c history->row_delta = (size_t) delta;
history 512 uspace/lib/termui/src/history.c static int _history_scroll_to_top(struct history *history)
history 514 uspace/lib/termui/src/history.c history->viewport_top = history->lines.head;
history 515 uspace/lib/termui/src/history.c history->row_delta = 0;
history 516 uspace/lib/termui/src/history.c _history_check(history);
history 520 uspace/lib/termui/src/history.c static int _history_scroll_to_bottom(struct history *history)
history 522 uspace/lib/termui/src/history.c history->viewport_top = history->lines.tail;
history 523 uspace/lib/termui/src/history.c _history_check(history);
history 533 uspace/lib/termui/src/history.c int _history_scroll(struct history *history, int delta)
history 536 uspace/lib/termui/src/history.c return _history_scroll_to_top(history);
history 538 uspace/lib/termui/src/history.c return _history_scroll_to_bottom(history);
history 540 uspace/lib/termui/src/history.c return _history_scroll_down(history, delta);
history 542 uspace/lib/termui/src/history.c return _history_scroll_up(history, delta);
history 556 uspace/lib/termui/src/history.c const termui_cell_t *_history_reflow(struct history *history, size_t new_cols, size_t *recouped)
history 558 uspace/lib/termui/src/history.c history->row_delta = (history->row_delta * history->cols) / new_cols;
history 559 uspace/lib/termui/src/history.c history->cols = new_cols;
history 561 uspace/lib/termui/src/history.c if (!history->append) {
history 567 uspace/lib/termui/src/history.c assert(!_lines_empty(&history->lines));
history 569 uspace/lib/termui/src/history.c size_t last_idx = history->lines.tail;
history 570 uspace/lib/termui/src/history.c _line_idx_dec(&history->lines, &last_idx);
history 572 uspace/lib/termui/src/history.c struct history_line *last = &history->lines.buf[last_idx];
history 575 uspace/lib/termui/src/history.c if (last->idx + last->len == history->cells.head_top) {
history 576 uspace/lib/termui/src/history.c history->cells.head_top -= *recouped;
history 578 uspace/lib/termui/src/history.c assert(last->idx + last->len == history->cells.tail_top);
history 579 uspace/lib/termui/src/history.c history->cells.tail_top -= *recouped;
history 584 uspace/lib/termui/src/history.c assert(history->cells.tail_top == 0);
history 585 uspace/lib/termui/src/history.c last->idx = history->cells.head_top;
history 588 uspace/lib/termui/src/history.c return &history->cells.buf[last->idx + last->len];
history 597 uspace/lib/termui/src/history.c int _history_viewport_rows(const struct history *history, size_t max)
history 599 uspace/lib/termui/src/history.c if (!_scrollback_active(history))
history 602 uspace/lib/termui/src/history.c size_t current = history->viewport_top;
history 603 uspace/lib/termui/src/history.c size_t rows = _history_line_rows(history, current) - history->row_delta;
history 604 uspace/lib/termui/src/history.c _line_idx_inc(&history->lines, ¤t);
history 606 uspace/lib/termui/src/history.c while (rows < max && current != history->lines.tail) {
history 607 uspace/lib/termui/src/history.c rows += _history_line_rows(history, current);
history 608 uspace/lib/termui/src/history.c _line_idx_inc(&history->lines, ¤t);
history 626 uspace/lib/termui/src/history.c static void _adjust_row_delta(const struct history *history, size_t *line_idx, size_t *delta)
history 628 uspace/lib/termui/src/history.c while (*line_idx != history->lines.tail) {
history 629 uspace/lib/termui/src/history.c size_t rows = _history_line_rows(history, *line_idx);
history 634 uspace/lib/termui/src/history.c _line_idx_inc(&history->lines, line_idx);
history 648 uspace/lib/termui/src/history.c int _history_iter_rows(const struct history *history, int row, int count, termui_update_cb_t cb, void *udata)
history 650 uspace/lib/termui/src/history.c assert(history->row_delta <= SIZE_MAX - row);
history 652 uspace/lib/termui/src/history.c size_t current_line = history->viewport_top;
history 653 uspace/lib/termui/src/history.c size_t delta = history->row_delta + (size_t) row;
history 655 uspace/lib/termui/src/history.c _adjust_row_delta(history, ¤t_line, &delta);
history 659 uspace/lib/termui/src/history.c while (count > 0 && current_line != history->lines.tail) {
history 661 uspace/lib/termui/src/history.c assert(_index_valid(history, current_line));
history 663 uspace/lib/termui/src/history.c struct history_line line = history->lines.buf[current_line];
history 664 uspace/lib/termui/src/history.c assert(line.len <= history->cells.buf_len);
history 665 uspace/lib/termui/src/history.c assert(line.idx <= history->cells.buf_len - line.len);
history 669 uspace/lib/termui/src/history.c _update_blank(0, row, history->cols, cb, udata);
history 672 uspace/lib/termui/src/history.c _line_idx_inc(&history->lines, ¤t_line);
history 676 uspace/lib/termui/src/history.c const termui_cell_t *cells = &history->cells.buf[line.idx];
history 677 uspace/lib/termui/src/history.c size_t line_offset = delta * history->cols;
history 682 uspace/lib/termui/src/history.c while (count > 0 && line_offset + history->cols <= line.len) {
history 683 uspace/lib/termui/src/history.c assert(line.idx + line_offset <= history->cells.buf_len - history->cols);
history 684 uspace/lib/termui/src/history.c cb(udata, 0, row, &cells[line_offset], history->cols);
history 686 uspace/lib/termui/src/history.c line_offset += history->cols;
history 697 uspace/lib/termui/src/history.c assert(col < history->cols);
history 700 uspace/lib/termui/src/history.c _update_blank(col, row, history->cols - col, cb, udata);
history 706 uspace/lib/termui/src/history.c _line_idx_inc(&history->lines, ¤t_line);
history 719 uspace/lib/termui/src/history.c void _history_append_row(struct history *history, const termui_cell_t *b, bool last)
history 721 uspace/lib/termui/src/history.c size_t len = history->cols;
history 729 uspace/lib/termui/src/history.c memcpy(_history_append(history, len), b, sizeof(termui_cell_t) * len);
history 732 uspace/lib/termui/src/history.c history->append = false;
history 87 uspace/lib/termui/src/history.h INTERNAL bool _scrollback_active(const struct history *history);
history 88 uspace/lib/termui/src/history.h INTERNAL void _history_append_row(struct history *history, const termui_cell_t *b, bool last);
history 89 uspace/lib/termui/src/history.h INTERNAL int _history_viewport_rows(const struct history *history, size_t max);
history 90 uspace/lib/termui/src/history.h INTERNAL int _history_iter_rows(const struct history *history, int row, int count, termui_update_cb_t cb, void *udata);
history 91 uspace/lib/termui/src/history.h INTERNAL int _history_scroll(struct history *history, int delta);
history 92 uspace/lib/termui/src/history.h INTERNAL const termui_cell_t *_history_reflow(struct history *history, size_t new_cols, size_t *recouped);
history 62 uspace/lib/termui/src/termui.c struct history history;
history 111 uspace/lib/termui/src/termui.c _history_append_row(&termui->history, &_screen_cell(termui, 0, 0), last);
history 149 uspace/lib/termui/src/termui.c int viewport_rows = _history_viewport_rows(&termui->history, termui->rows);
history 181 uspace/lib/termui/src/termui.c size_t old_top = termui->history.viewport_top;
history 185 uspace/lib/termui/src/termui.c if (old_top != termui->history.viewport_top && termui->refresh_cb)
history 188 uspace/lib/termui/src/termui.c if (termui->scroll_cb && !_scrollback_active(&termui->history))
history 505 uspace/lib/termui/src/termui.c int sb_rows = _history_viewport_rows(&termui->history, termui->rows);
history 506 uspace/lib/termui/src/termui.c int updated = _history_iter_rows(&termui->history, first_row, rows, termui->update_cb, termui->update_udata);
history 520 uspace/lib/termui/src/termui.c return _scrollback_active(&termui->history);
history 537 uspace/lib/termui/src/termui.c termui->history.lines.max_len = history_lines;
history 539 uspace/lib/termui/src/termui.c termui->history.cells.max_len = SIZE_MAX;
history 541 uspace/lib/termui/src/termui.c termui->history.cells.max_len = history_lines * cols;
history 542 uspace/lib/termui/src/termui.c termui->history.cols = cols;
history 576 uspace/lib/termui/src/termui.c int scrolled = _history_scroll(&termui->history, delta);
history 656 uspace/lib/termui/src/termui.c termui->history.lines.max_len = history_lines;
history 659 uspace/lib/termui/src/termui.c termui->history.cells.max_len = SIZE_MAX;
history 661 uspace/lib/termui/src/termui.c termui->history.cells.max_len = history_lines * cols;
history 669 uspace/lib/termui/src/termui.c const termui_cell_t *c = _history_reflow(&termui->history, cols, &recouped);
HelenOS homepage, sources at GitHub