aboutsummaryrefslogtreecommitdiff
path: root/src/util.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2015-05-23 12:33:24 -0400
committerFranklin Wei <git@fwei.tk>2015-05-23 12:33:24 -0400
commit62d053bbf4dead25afb11b688b60e26b1a91fa0a (patch)
treeca88ed3ae8033f91aacd963eb54aad772fbc4c71 /src/util.c
parent437c81289e70e16b5058b085c8050cf855f8698e (diff)
downloadmarket-sim-62d053bbf4dead25afb11b688b60e26b1a91fa0a.zip
market-sim-62d053bbf4dead25afb11b688b60e26b1a91fa0a.tar.gz
market-sim-62d053bbf4dead25afb11b688b60e26b1a91fa0a.tar.bz2
market-sim-62d053bbf4dead25afb11b688b60e26b1a91fa0a.tar.xz
enable operation without ncurses
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c111
1 files changed, 82 insertions, 29 deletions
diff --git a/src/util.c b/src/util.c
index 145535a..05273f1 100644
--- a/src/util.c
+++ b/src/util.c
@@ -225,7 +225,7 @@ void print_handler(struct player_t *player)
output("Total capital: $%llu.%02llu\n", total / 100, total % 100);
}
-char *read_string(void)
+static char *read_string_curses(void)
{
char *ret = malloc(1);
size_t len = 1;
@@ -247,6 +247,19 @@ char *read_string(void)
return ret;
}
+static char *read_string_nocurses(void)
+{
+ char *ret = NULL;
+ size_t len = 0;
+
+ len = getline(&ret, &len, stdin);
+ if(len)
+ ret[len - 1] = '\0';
+ return ret;
+}
+
+char* (*read_string)(void) = read_string_nocurses;
+
char *read_ticker(void)
{
char *str = read_string();
@@ -279,7 +292,7 @@ void update_handler(struct player_t *player)
}
}
-uint parse_args(struct player_t *player, int argc, char *argv[], char **port_file)
+uint parse_args(int argc, char *argv[], char **port_file)
{
uint ret = 0;
@@ -297,6 +310,10 @@ uint parse_args(struct player_t *player, int argc, char *argv[], char **port_fil
ret |= ARG_FAILURE;
break;
}
+ else if(strcmp(arg, "--nocurses") == 0)
+ {
+ ret |= ARG_NOCURSES;
+ }
else if(strcmp(arg, "-v") == 0 ||
strcmp(arg, "--verbose") == 0)
{
@@ -351,7 +368,7 @@ void fail(const char *fmt, ...)
exit(EXIT_FAILURE);
}
-int curses_printf(const char *fmt, ...)
+static int curses_printf(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
@@ -367,41 +384,23 @@ int curses_printf(const char *fmt, ...)
int (*output)(const char*, ...) = printf;
-void curses_init(void)
+void horiz_line_curses(void)
{
- initscr();
- echo();
- nocbreak();
- nl();
- scrollok(stdscr, true);
- output = curses_printf;
-
- if(has_colors())
- {
- have_color = true;
- start_color();
- attron(A_BOLD);
- init_color(COLOR_WHITE, 1000, 1000, 1000);
- init_pair(0, COLOR_WHITE, COLOR_BLACK);
- init_pair(1, COLOR_RED, COLOR_BLACK);
- init_pair(2, COLOR_GREEN, COLOR_BLACK);
- use_color(COL_NORM);
- }
- else
+ for(int i = 0; i < getmaxx(stdscr); ++i)
{
- have_color = false;
+ output("=");
}
}
-void horiz_line(void)
+void horiz_line_nocurses(void)
{
- for(int i = 0; i < getmaxx(stdscr); ++i)
- {
+ for(int i = 0; i < 80; ++i)
output("=");
- }
}
-void heading(const char *fmt, ...)
+void (*horiz_line)(void) = horiz_line_nocurses;
+
+void heading_curses(const char *fmt, ...)
{
char text[128];
va_list ap;
@@ -424,6 +423,31 @@ void heading(const char *fmt, ...)
output("=");
}
+void heading_nocurses(const char *fmt, ...)
+{
+ char text[128];
+ va_list ap;
+ va_start(ap, fmt);
+ vsnprintf(text, sizeof(text), fmt, ap);
+ va_end(ap);
+
+ int len = strlen(text) / 2;
+ int beg_x = 40 - len;
+ int d = 0;
+ if(strlen(text) & 1)
+ d++;
+
+ for(int i = 0; i < beg_x - 1; ++i)
+ output("=");
+ output(" ");
+ output(text);
+ output(" ");
+ for(int i = 0; i < 40 - len - 1 - d; ++i)
+ output("=");
+}
+
+void (*heading)(const char*, ...) = heading_nocurses;
+
bool have_color = false;
void use_color(int col)
@@ -441,3 +465,32 @@ void stop_color(int col)
attroff(COLOR_PAIR(col));
}
}
+
+void curses_init(void)
+{
+ initscr();
+ echo();
+ nocbreak();
+ nl();
+ scrollok(stdscr, true);
+ output = curses_printf;
+ read_string = read_string_curses;
+ horiz_line = horiz_line_curses;
+ heading = heading_curses;
+
+ if(has_colors())
+ {
+ have_color = true;
+ start_color();
+ attron(A_BOLD);
+ init_color(COLOR_WHITE, 1000, 1000, 1000);
+ init_pair(0, COLOR_WHITE, COLOR_BLACK);
+ init_pair(1, COLOR_RED, COLOR_BLACK);
+ init_pair(2, COLOR_GREEN, COLOR_BLACK);
+ use_color(COL_NORM);
+ }
+ else
+ {
+ have_color = false;
+ }
+}