diff options
Diffstat (limited to 'src/video/ncurses.c')
-rw-r--r-- | src/video/ncurses.c | 47 |
1 files changed, 41 insertions, 6 deletions
diff --git a/src/video/ncurses.c b/src/video/ncurses.c index 05653e2..76bfb26 100644 --- a/src/video/ncurses.c +++ b/src/video/ncurses.c @@ -15,30 +15,65 @@ void TerminalInit() initscr(); cbreak(); noecho(); + curs_set(0); TerminalShiftRegister = (byte*)malloc(960); + TerminalShiftRegisterPosition = TerminalShiftRegister; TerminalShiftRegisterOffset = 0; } void TerminalClose() { free(TerminalShiftRegister); + curs_set(0); endwin(); } -void TerminalInput() +void TerminalInput(char n) { + mvaddch(TermY,TermX,n); + + *TerminalShiftRegisterPosition = n; + TerminalShiftRegisterPosition++; + if (TerminalShiftRegisterPosition >= (TerminalShiftRegister + 960)) + TerminalShiftRegisterPosition = TerminalShiftRegister; + + + TermX++; + + if (n == KEY_ENTER) { + TermY++; + } + if (TermX >= 40) { TermX = 0; TermY++; } if (TermY >= 24) { - + TerminalShiftRegisterOffset += 40; // Discard first line + if (TerminalShiftRegisterOffset >= 960) + TerminalShiftRegisterOffset = TerminalShiftRegister; + + byte *offset = TerminalShiftRegister + TerminalShiftRegisterOffset; + + // For every position, fill with contents of the terminal shift register + for (int i = 0; i < 23; i++) { + for (int j = 0; j < 40; j++) { + + if (offset >= (TerminalShiftRegister + 960)) + offset -= 960; + + mvaddch(i,j, *(offset)); + offset++; + }} + + TermY = 23; + TermX = 0; + + // Clear bottom line. + mvwprintw(stdscr, TermY, TermX, " "); } -} -void TerminalPrompt() -{ - addch('@' | A_BLINK); + mvaddch(TermY, TermX, '@' | A_BLINK); }
\ No newline at end of file |