Switch to C++

This commit is contained in:
2018-01-07 22:24:23 -08:00
parent efc529bec8
commit 3a10624966
7 changed files with 47 additions and 41 deletions

2
BUILD
View File

@@ -1,7 +1,7 @@
cc_binary( cc_binary(
name = "ncac", name = "ncac",
srcs = [ srcs = [
"ncac.c", "ncac.cc",
"ncac.h", "ncac.h",
], ],
deps = [ deps = [

View File

@@ -8,47 +8,45 @@
int main(int argc, char **argv) { int main(int argc, char **argv) {
(void)argc;
(void)argv;
setup(); setup();
char input;
int curs_x = 0; int curs_x = 0;
int curs_y = 0; int curs_y = 0;
char input;
while(1) { while(1) {
switch (input = getch()) { switch (input = getch()) {
case 'a': case 'a':
draw_text(&curs_x, &curs_y, "Hello, world!"); ui::draw_text("Hello, world!", &curs_x, &curs_y);
break;
case 'b':
ui::draw_text("Goodbye, world!", &curs_x, &curs_y);
break; break;
default: default:
finish(0); finish(SIGTERM);
break; break;
} }
} }
return 0; return 0;
} }
void finish(int sig) { static void finish(int sig) {
(void)sig;
endwin(); endwin();
exit(0); exit(0);
} }
void setup() { static void setup() {
// initialize ncurses // initialize ncurses
initscr(); initscr();
cbreak(); cbreak();
// don't echo input // don't echo input
noecho(); noecho();
nonl(); nonl();
// install handlers // install handlers
signal(SIGINT, &finish); signal(SIGINT, &finish);
signal(SIGKILL, &finish);
signal(SIGTERM, &finish);
} }

6
ncac.h
View File

@@ -4,12 +4,10 @@
/** /**
* Cleans up before exit. Installed on SIGINT * Cleans up before exit. Installed on SIGINT
*/ */
void finish(); static void finish(int sig);
/** /**
* Sets up ncurses and internal data structures * Sets up ncurses and internal data structures
*/ */
void setup(); static void setup();
#endif // _NCAC_H_ #endif // _NCAC_H_

View File

@@ -1,6 +1,6 @@
cc_library( cc_library(
name="ui", name="ui",
srcs = ["base.c"], srcs = ["base.cc"],
hdrs = ["base.h"], hdrs = ["base.h"],
deps = ["@system_include//:curses"], deps = ["@system_include//:curses"],
visibility = ["//visibility:public"], visibility = ["//visibility:public"],

View File

@@ -1,17 +0,0 @@
#include "base.h"
#include <curses.h>
#include <string.h>
void draw_text(int *x, int *y, char *text) {
size_t len = strlen(text);
if (!len) return;
mvaddch(*x, *y, text[0]);
for (size_t i=1; i < strlen(text); i++) {
addch(text[i]);
}
getyx(stdscr, *y, *x);
}

23
ui/base.cc Normal file
View File

@@ -0,0 +1,23 @@
#include "base.h"
#include <curses.h>
#include <string.h>
#include <string>
namespace ui {
void draw_text(const std::string text, int *x, int *y) {
if (!text.length()) return;
auto iter = text.begin();
mvaddch(*y, *x, *iter);
++iter;
for (; iter != text.end(); ++iter) {
addch(*iter);
}
getyx(stdscr, *y, *x);
}
}

View File

@@ -1,10 +1,14 @@
#ifndef UI_BASE_H_ #ifndef UI_BASE_H_
#define UI_BASE_H_ #define UI_BASE_H_
/** #include <string>
* Prints the string text starting at position *x, *y. x and y are updated to
* the position after the last character
*/
void draw_text(int *x, int *y, char *text);
namespace ui {
/**
* Prints the string text starting at position *x, *y. x and y are updated to
* the position after the last character
*/
void draw_text(const std::string text, int *x, int *y);
} // namespace ui
#endif // UI_BASE_H_ #endif // UI_BASE_H_