From b6d097f84fc01896a46de4166db8b0d002a64f78 Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Sun, 26 Mar 2023 03:55:57 -0700 Subject: [PATCH] Cleanup, comments, and making extra test aps. --- Makefile | 5 ++- sbf-cpp/main.cpp | 82 ++++++++++++++++++++++++------------------------ sbf-cpp/sbf.cpp | 80 ++++++++++++++++++++++++++++++++++++++++++++++ sbf-cpp/test.cpp | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 205 insertions(+), 42 deletions(-) create mode 100644 sbf-cpp/sbf.cpp create mode 100644 sbf-cpp/test.cpp diff --git a/Makefile b/Makefile index 065d238..3b0ca15 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ else ASAN_FLAGS= endif +APPS = test sbf BREW86_PREFIX := $(shell arch -x86_64 /usr/local/homebrew/bin/brew --prefix) BREW_PREFIX := $(shell brew --prefix) INCLUDE_DIRS = sbf-cpp $(BREW_PREFIX)/opt/ncurses/include @@ -41,7 +42,7 @@ MANDATORY_TARGETS = Makefile .Phony: all clean app test -all: $(BUILD_DIR)/$(CLIAPPNAME) app +all: $(BUILD_DIR)/$(CLIAPPNAME) app $(patsubst %, $(BUILD_DIR)/%, $(APPS)) clean: rm -rf $(BUILD_DIR) @@ -74,6 +75,8 @@ $(BUILD_DIR)/$(CLIAPPNAME): $(patsubst %, $(BUILD_DIR)/%, $(APP_OBJECTS)) $(pats $(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp $(SRC_DIR)/*.h $(MANDATORY_TARGETS) $(CC) $(CCFLAGS) -c -o $@ $< +#$(BUILD_DIR)/$(APPS) are built by "magic" using good enough rules + # We make our own fat libs cause homebrew sucks $(BUILD_DIR)/lib/libncurses.a: $(BREW_PREFIX)/opt/ncurses/lib $(BREW86_PREFIX)/opt/ncurses/lib lipo -create -output ./build/lib/libncurses.a $(BREW_PREFIX)/opt/ncurses/lib/libncurses.a $(BREW86_PREFIX)/opt/ncurses/lib/libncurses.a diff --git a/sbf-cpp/main.cpp b/sbf-cpp/main.cpp index 1469af2..33ecc06 100644 --- a/sbf-cpp/main.cpp +++ b/sbf-cpp/main.cpp @@ -22,29 +22,8 @@ using namespace std; | ╬ | WACS_D_PLUS | WACS_DDDD | */ -int main(int argc, char* argv[]) { - setlocale(LC_ALL, ""); - wchar_t buffer[255] = {0}; - - // Load ncurses and initialize stdscr - initscr(); - // Enable raw mode to give us direct access to extra keys. - raw(); - // Disable echoing characters as they are typed. - noecho(); - // Enable keypad characters (function keys, arrow keys, and numpad keys.) - keypad(stdscr, true); - - // Create a window with width: 17, height: 15, startX: 10, startY: 2 - // These dimensions include the window bounds so the window actually starts at column 11 and row 3 - // The size of the window is actually 17 wide by 15 tall, but after drawing the border the usable - // area is only 15x13 instead of 17x15. - // WINDOW* newwin(nlines, ncols, begin_y, begin_x) - // WINDOW* pWindow = newwin(15, 17, 2, 10); - refresh(); - - // Draw a box around the window with default chars - wborder_set(stdscr, +int set_double_border(WINDOW* screen) { + return wborder_set(screen, WACS_D_VLINE/*left side*/, WACS_D_VLINE/*right side*/, WACS_D_HLINE/*top side*/, @@ -53,26 +32,47 @@ int main(int argc, char* argv[]) { WACS_D_URCORNER/*top right corner*/, WACS_D_LLCORNER/*bottom left corner*/, WACS_D_LRCORNER/*bottom right corner*/); - - int width; - int height; - getmaxyx(stdscr, height, width); - swprintf(buffer, sizeof(buffer), L"width: %i, height: %i", width, height); - mvaddwstr(1, 2, buffer); - //mvaddwstr(5,5, L"x\u2562╢x"); - //mvadd_wch(3,2, WACS_D_PLUS); - refresh(); - - // wrefresh(pWindow); +} + +int main(int argc, char* argv[]) { + setlocale(LC_ALL, ""); + wchar_t buffer[255] = {0}; + WINDOW* pWindow = nullptr; + // Load ncurses and initialize stdscr. + initscr(); + pWindow = stdscr; + // Enable raw mode to give us direct access to extra keys. + raw(); + // Disable echoing characters as they are typed. + noecho(); + // Enable keypad characters. (function keys, arrow keys, and numpad keys.) + keypad(pWindow, true); + // Remove the delay when pressing esc. set_escdelay(0); - bool done = false; - while(!done) { - int key = getch(); - swprintf(buffer, sizeof(buffer), L"0x%04o pressed", key); - mvaddwstr(2, 2, buffer); - if (key == KEY_ESCAPE) { - done = true; + + int key = KEY_RESIZE; + while(key != KEY_ESCAPE) { + if (key == KEY_RESIZE) { + // Clear the screen. + werase(pWindow); + // Draw a box around the window with default chars. + set_double_border(pWindow); + // Display the event + mvwaddwstr(pWindow, 2, 2, L"Resized"); + // Get the window width and height. + int width; + int height; + getmaxyx(pWindow, height, width); + // Display the width and height. + swprintf(buffer, sizeof(buffer), L"width: %i, height: %i", width, height); + mvwaddwstr(pWindow, 1, 2, buffer); + } else { + // Display the keycode of the key that was pressed in hex and octal. + swprintf(buffer, sizeof(buffer), L"0x%04X %04o pressed", key, key); + mvwaddwstr(pWindow,2, 2, buffer); } + wrefresh(pWindow); + key = wgetch(pWindow); } endwin(); diff --git a/sbf-cpp/sbf.cpp b/sbf-cpp/sbf.cpp new file mode 100644 index 0000000..33ecc06 --- /dev/null +++ b/sbf-cpp/sbf.cpp @@ -0,0 +1,80 @@ +#define _XOPEN_SOURCE_EXTENDED +#include +#include +#include +#include + +#define KEY_ESCAPE 0033 + +using namespace std; + +/* +| ╔ | WACS_D_ULCORNER | WACS_BDDB | +| ╚ | WACS_D_LLCORNER | WACS_DDBB | +| ╗ | WACS_D_URCORNER | WACS_BBDD | +| ╝ | WACS_D_LRCORNER | WACS_DBBD | +| ╣ | WACS_D_RTEE | WACS_DBDD | +| ╠ | WACS_D_LTEE | WACS_DDDB | +| ╩ | WACS_D_BTEE | WACS_DDBD | +| ╦ | WACS_D_TTEE | WACS_BDDD | +| ═ | WACS_D_HLINE | WACS_BDBD | +| ║ | WACS_D_VLINE | WACS_DBDB | +| ╬ | WACS_D_PLUS | WACS_DDDD | +*/ + +int set_double_border(WINDOW* screen) { + return wborder_set(screen, + WACS_D_VLINE/*left side*/, + WACS_D_VLINE/*right side*/, + WACS_D_HLINE/*top side*/, + WACS_D_HLINE/*bottom side*/, + WACS_D_ULCORNER/*top left corner*/, + WACS_D_URCORNER/*top right corner*/, + WACS_D_LLCORNER/*bottom left corner*/, + WACS_D_LRCORNER/*bottom right corner*/); +} + +int main(int argc, char* argv[]) { + setlocale(LC_ALL, ""); + wchar_t buffer[255] = {0}; + WINDOW* pWindow = nullptr; + // Load ncurses and initialize stdscr. + initscr(); + pWindow = stdscr; + // Enable raw mode to give us direct access to extra keys. + raw(); + // Disable echoing characters as they are typed. + noecho(); + // Enable keypad characters. (function keys, arrow keys, and numpad keys.) + keypad(pWindow, true); + // Remove the delay when pressing esc. + set_escdelay(0); + + int key = KEY_RESIZE; + while(key != KEY_ESCAPE) { + if (key == KEY_RESIZE) { + // Clear the screen. + werase(pWindow); + // Draw a box around the window with default chars. + set_double_border(pWindow); + // Display the event + mvwaddwstr(pWindow, 2, 2, L"Resized"); + // Get the window width and height. + int width; + int height; + getmaxyx(pWindow, height, width); + // Display the width and height. + swprintf(buffer, sizeof(buffer), L"width: %i, height: %i", width, height); + mvwaddwstr(pWindow, 1, 2, buffer); + } else { + // Display the keycode of the key that was pressed in hex and octal. + swprintf(buffer, sizeof(buffer), L"0x%04X %04o pressed", key, key); + mvwaddwstr(pWindow,2, 2, buffer); + } + wrefresh(pWindow); + key = wgetch(pWindow); + } + endwin(); + + return 0; +} diff --git a/sbf-cpp/test.cpp b/sbf-cpp/test.cpp new file mode 100644 index 0000000..33ecc06 --- /dev/null +++ b/sbf-cpp/test.cpp @@ -0,0 +1,80 @@ +#define _XOPEN_SOURCE_EXTENDED +#include +#include +#include +#include + +#define KEY_ESCAPE 0033 + +using namespace std; + +/* +| ╔ | WACS_D_ULCORNER | WACS_BDDB | +| ╚ | WACS_D_LLCORNER | WACS_DDBB | +| ╗ | WACS_D_URCORNER | WACS_BBDD | +| ╝ | WACS_D_LRCORNER | WACS_DBBD | +| ╣ | WACS_D_RTEE | WACS_DBDD | +| ╠ | WACS_D_LTEE | WACS_DDDB | +| ╩ | WACS_D_BTEE | WACS_DDBD | +| ╦ | WACS_D_TTEE | WACS_BDDD | +| ═ | WACS_D_HLINE | WACS_BDBD | +| ║ | WACS_D_VLINE | WACS_DBDB | +| ╬ | WACS_D_PLUS | WACS_DDDD | +*/ + +int set_double_border(WINDOW* screen) { + return wborder_set(screen, + WACS_D_VLINE/*left side*/, + WACS_D_VLINE/*right side*/, + WACS_D_HLINE/*top side*/, + WACS_D_HLINE/*bottom side*/, + WACS_D_ULCORNER/*top left corner*/, + WACS_D_URCORNER/*top right corner*/, + WACS_D_LLCORNER/*bottom left corner*/, + WACS_D_LRCORNER/*bottom right corner*/); +} + +int main(int argc, char* argv[]) { + setlocale(LC_ALL, ""); + wchar_t buffer[255] = {0}; + WINDOW* pWindow = nullptr; + // Load ncurses and initialize stdscr. + initscr(); + pWindow = stdscr; + // Enable raw mode to give us direct access to extra keys. + raw(); + // Disable echoing characters as they are typed. + noecho(); + // Enable keypad characters. (function keys, arrow keys, and numpad keys.) + keypad(pWindow, true); + // Remove the delay when pressing esc. + set_escdelay(0); + + int key = KEY_RESIZE; + while(key != KEY_ESCAPE) { + if (key == KEY_RESIZE) { + // Clear the screen. + werase(pWindow); + // Draw a box around the window with default chars. + set_double_border(pWindow); + // Display the event + mvwaddwstr(pWindow, 2, 2, L"Resized"); + // Get the window width and height. + int width; + int height; + getmaxyx(pWindow, height, width); + // Display the width and height. + swprintf(buffer, sizeof(buffer), L"width: %i, height: %i", width, height); + mvwaddwstr(pWindow, 1, 2, buffer); + } else { + // Display the keycode of the key that was pressed in hex and octal. + swprintf(buffer, sizeof(buffer), L"0x%04X %04o pressed", key, key); + mvwaddwstr(pWindow,2, 2, buffer); + } + wrefresh(pWindow); + key = wgetch(pWindow); + } + endwin(); + + return 0; +}