#pragma once #include #include "terminal.h" void grid_swap_row(struct grid *grid, int row_a, int row_b); struct row *grid_row_alloc(int cols); void grid_row_free(struct row *row); static inline struct row * grid_row(struct grid *grid, int row_no) { assert(grid->offset >= 0); int real_row = (grid->offset + row_no + grid->num_rows) % grid->num_rows; struct row *row = grid->rows[real_row]; if (row == NULL) { row = grid_row_alloc(grid->num_cols); grid->rows[real_row] = row; } return row; } static inline struct row * grid_row_in_view(struct grid *grid, int row_no) { assert(grid->view >= 0); int real_row = (grid->view + row_no + grid->num_rows) % grid->num_rows; struct row *row = grid->rows[real_row]; assert(row != NULL); return row; }