diff options
| author | Franklin Wei <git@fwei.tk> | 2015-05-23 12:33:24 -0400 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2015-05-23 12:33:24 -0400 |
| commit | 62d053bbf4dead25afb11b688b60e26b1a91fa0a (patch) | |
| tree | ca88ed3ae8033f91aacd963eb54aad772fbc4c71 /src/util.c | |
| parent | 437c81289e70e16b5058b085c8050cf855f8698e (diff) | |
| download | market-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.c | 111 |
1 files changed, 82 insertions, 29 deletions
@@ -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; + } +} |