Switch to C++
This commit is contained in:
2
BUILD
2
BUILD
@@ -1,7 +1,7 @@
|
||||
cc_binary(
|
||||
name = "ncac",
|
||||
srcs = [
|
||||
"ncac.c",
|
||||
"ncac.cc",
|
||||
"ncac.h",
|
||||
],
|
||||
deps = [
|
||||
|
||||
@@ -8,47 +8,45 @@
|
||||
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
setup();
|
||||
|
||||
char input;
|
||||
|
||||
int curs_x = 0;
|
||||
int curs_y = 0;
|
||||
|
||||
char input;
|
||||
|
||||
while(1) {
|
||||
switch (input = getch()) {
|
||||
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;
|
||||
default:
|
||||
finish(0);
|
||||
finish(SIGTERM);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void finish(int sig) {
|
||||
(void)sig;
|
||||
static void finish(int sig) {
|
||||
endwin();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void setup() {
|
||||
static void setup() {
|
||||
// initialize ncurses
|
||||
initscr();
|
||||
|
||||
cbreak();
|
||||
|
||||
|
||||
|
||||
// don't echo input
|
||||
noecho();
|
||||
|
||||
nonl();
|
||||
|
||||
// install handlers
|
||||
signal(SIGINT, &finish);
|
||||
signal(SIGKILL, &finish);
|
||||
signal(SIGTERM, &finish);
|
||||
}
|
||||
6
ncac.h
6
ncac.h
@@ -4,12 +4,10 @@
|
||||
/**
|
||||
* Cleans up before exit. Installed on SIGINT
|
||||
*/
|
||||
void finish();
|
||||
static void finish(int sig);
|
||||
|
||||
/**
|
||||
* Sets up ncurses and internal data structures
|
||||
*/
|
||||
void setup();
|
||||
|
||||
|
||||
static void setup();
|
||||
#endif // _NCAC_H_
|
||||
|
||||
2
ui/BUILD
2
ui/BUILD
@@ -1,6 +1,6 @@
|
||||
cc_library(
|
||||
name="ui",
|
||||
srcs = ["base.c"],
|
||||
srcs = ["base.cc"],
|
||||
hdrs = ["base.h"],
|
||||
deps = ["@system_include//:curses"],
|
||||
visibility = ["//visibility:public"],
|
||||
|
||||
17
ui/base.c
17
ui/base.c
@@ -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
23
ui/base.cc
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,14 @@
|
||||
#ifndef UI_BASE_H_
|
||||
#define UI_BASE_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
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(int *x, int *y, char *text);
|
||||
void draw_text(const std::string text, int *x, int *y);
|
||||
|
||||
} // namespace ui
|
||||
#endif // UI_BASE_H_
|
||||
|
||||
Reference in New Issue
Block a user