diff --git a/console_win.c b/console_win.c new file mode 100644 index 00000000..b303d0e3 --- /dev/null +++ b/console_win.c @@ -0,0 +1,18 @@ +#include +#include "windows.h" + +static WINDOW *cons_win; + +void create_console_window(void) +{ + int rows, cols; + getmaxyx(stdscr, rows, cols); + + cons_win = newwin(rows-3, cols, 1, 0); + scrollok(cons_win, TRUE); + + waddstr(cons_win, "Welcome to Profanity.\n"); + touchwin(cons_win); + wrefresh(cons_win); +} + diff --git a/input_bar.c b/input_bar.c new file mode 100644 index 00000000..3d44e69b --- /dev/null +++ b/input_bar.c @@ -0,0 +1,36 @@ +#include +#include "windows.h" + +static WINDOW *inp_bar; + +void create_input_bar(void) +{ + int rows, cols; + getmaxyx(stdscr, rows, cols); + + inp_bar = newwin(1, cols, rows-2, 0); + wbkgd(inp_bar, COLOR_PAIR(3)); + wrefresh(inp_bar); +} + +void inp_bar_inactive(int win) +{ + mvwaddch(inp_bar, 0, 30 + win, ' '); + if (win == 9) + mvwaddch(inp_bar, 0, 30 + win + 1, ' '); + wrefresh(inp_bar); +} + +void inp_bar_active(int win) +{ + mvwprintw(inp_bar, 0, 30 + win, "%d", win+1); + touchwin(inp_bar); + wrefresh(inp_bar); +} + +void inp_bar_print_message(char *msg) +{ + mvwprintw(inp_bar, 0, 0, msg); + wrefresh(inp_bar); +} + diff --git a/input_win.c b/input_win.c new file mode 100644 index 00000000..76ec2829 --- /dev/null +++ b/input_win.c @@ -0,0 +1,84 @@ +#include +#include "windows.h" + +static WINDOW *inp_win; + +void create_input_window(void) +{ + int rows, cols; + getmaxyx(stdscr, rows, cols); + + inp_win = newwin(1, cols, rows-1, 0); + keypad(inp_win, TRUE); + wrefresh(inp_win); +} + +void inp_get_command_str(char *cmd) +{ + wmove(inp_win, 0, 0); + wgetstr(inp_win, cmd); +} + +void inp_clear(void) +{ + wclear(inp_win); + wmove(inp_win, 0, 0); + wrefresh(inp_win); +} + +void inp_non_block(void) +{ + wtimeout(inp_win, 0); +} + +void inp_poll_char(int *ch, char command[], int *size) +{ + int inp_y = 0; + int inp_x = 0; + + // move cursor back to inp_win + getyx(inp_win, inp_y, inp_x); + wmove(inp_win, inp_y, inp_x); + + // echo off, and get some more input + noecho(); + *ch = wgetch(inp_win); + + // if delete pressed, go back and delete it + if (*ch == 127) { + if (*size > 0) { + getyx(inp_win, inp_y, inp_x); + wmove(inp_win, inp_y, inp_x-1); + wdelch(inp_win); + (*size)--; + } + } + + // else if not error or newline, show it and store it + else if (*ch != ERR && + *ch != '\n' && + *ch != KEY_F(1) && + *ch != KEY_F(2) && + *ch != KEY_F(3) && + *ch != KEY_F(4) && + *ch != KEY_F(5) && + *ch != KEY_F(6) && + *ch != KEY_F(7) && + *ch != KEY_F(8) && + *ch != KEY_F(9) && + *ch != KEY_F(10)) { + waddch(inp_win, *ch); + command[(*size)++] = *ch; + } + + echo(); +} + +void inp_get_password(char *passwd) +{ + wclear(inp_win); + noecho(); + mvwgetstr(inp_win, 0, 0, passwd); + echo(); +} + diff --git a/title_bar.c b/title_bar.c new file mode 100644 index 00000000..61e3776e --- /dev/null +++ b/title_bar.c @@ -0,0 +1,17 @@ +#include +#include "windows.h" + +static WINDOW *title_bar; + +void create_title_bar(void) +{ + char *title = "Profanity"; + + int rows, cols; + getmaxyx(stdscr, rows, cols); + + title_bar = newwin(1, cols, 0, 0); + wbkgd(title_bar, COLOR_PAIR(3)); + mvwprintw(title_bar, 0, 0, title); + wrefresh(title_bar); +}