Switch to C++
This commit is contained in:
2
BUILD
2
BUILD
@@ -1,7 +1,7 @@
|
|||||||
cc_binary(
|
cc_binary(
|
||||||
name = "ncac",
|
name = "ncac",
|
||||||
srcs = [
|
srcs = [
|
||||||
"ncac.c",
|
"ncac.cc",
|
||||||
"ncac.h",
|
"ncac.h",
|
||||||
],
|
],
|
||||||
deps = [
|
deps = [
|
||||||
|
|||||||
@@ -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
6
ncac.h
@@ -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_
|
||||||
|
|||||||
2
ui/BUILD
2
ui/BUILD
@@ -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"],
|
||||||
|
|||||||
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
14
ui/base.h
14
ui/base.h
@@ -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_
|
||||||
|
|||||||
Reference in New Issue
Block a user