summaryrefslogtreecommitdiff
path: root/test/point.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/point.cpp')
-rw-r--r--test/point.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/test/point.cpp b/test/point.cpp
new file mode 100644
index 0000000..edf4492
--- /dev/null
+++ b/test/point.cpp
@@ -0,0 +1,76 @@
+#include <curses.h>
+
+#define PAGE_SIZE 16
+#include "../page.cpp"
+#include "../point.cpp"
+
+int main() {
+ int exit = 0;
+ Page *page = new Page();
+ Point point = Point(page);
+
+ initscr();
+ start_color();
+ cbreak();
+ noecho();
+ nonl();
+ intrflush(stdscr, FALSE);
+ keypad(stdscr, TRUE);
+
+#define black 20
+#define red 21
+#define green 22
+ init_color(black, 0, 0, 0);
+ init_color(red, 1000, 0, 0);
+ init_color(green, 0, 1000, 0);
+ init_pair(1, red, black);
+ init_pair(2, green, black);
+
+ while (!exit) {
+ clear();
+
+ Page *iter = page;
+ while (iter) {
+ if (iter == point.page && iter->gap_end == point.index_to_offset()) {
+ attron(COLOR_PAIR(1));
+ } else {
+ attron(COLOR_PAIR(2));
+ }
+ for (int i = 0; i < iter->gap_start; i++) {
+ addch(iter->elements[i]);
+ }
+ for (int i = iter->gap_start; i < iter->gap_end; i++) {
+ addch('_');
+ }
+ for (int i = iter->gap_end; i < PAGE_SIZE; i++) {
+ addch(iter->elements[i]);
+ }
+ iter = iter->next;
+ attroff(COLOR_PAIR(1));
+ attroff(COLOR_PAIR(2));
+ }
+
+ int input = getch();
+ switch (input) {
+ case '':
+ exit = 1;
+ break;
+ case KEY_LEFT:
+ point--;
+ point.align_gap();
+ break;
+ case KEY_RIGHT:
+ point++;
+ point.align_gap();
+ break;
+ case KEY_BACKSPACE:
+ point.pop();
+ break;
+ default:
+ point.push(input);
+ }
+ }
+
+ endwin();
+ return 0;
+}