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 | |
| 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')
| -rw-r--r-- | src/globals.h | 11 | ||||
| -rw-r--r-- | src/help.c | 1 | ||||
| -rw-r--r-- | src/main.c | 5 | ||||
| -rw-r--r-- | src/util.c | 111 |
4 files changed, 93 insertions, 35 deletions
diff --git a/src/globals.h b/src/globals.h index e9814da..4900c67 100644 --- a/src/globals.h +++ b/src/globals.h @@ -22,6 +22,7 @@ #define ARG_LOADED (1<<0) #define ARG_FAILURE (1<<1) #define ARG_VERBOSE (1<<2) +#define ARG_NOCURSES (1<<3) /* don't change this, it will corrupt existing saves */ #define EPOCH_YEAR 2000 @@ -92,12 +93,12 @@ extern bool have_color; void do_menu(struct player_t*, const struct command_t*, uint len, const char *prompt); bool get_stock_info(char *sym, struct money_t*, char **name); char *csv_read(char**); -char *read_string(void); +char *(*read_string)(void); char *read_ticker(void); int compare_stocks(const void*, const void*); void fail(const char*, ...);; struct stock_t *find_stock(struct player_t*, char*); -uint parse_args(struct player_t*, int argc, char *argv[], char**); +uint parse_args(int argc, char *argv[], char**); uint16_t to_be16(uint16_t); uint16_t to_sys16(uint16_t); uint32_t to_be32(uint32_t); @@ -109,14 +110,16 @@ void add_hist(struct stock_t*, enum history_action, ullong count); void all_lower(char*); void all_upper(char*); void cleanup(void); +void curses_init(void); void load_portfolio(struct player_t*, const char*); void print_history(struct stock_t*); void print_usage(int argc, char *argv[]); void print_version(void); void sig_handler(int); extern int (*output)(const char*, ...); -void heading(const char *text, ...); -void horiz_line(void); +extern void (*heading)(const char *text, ...); +extern void (*horiz_line)(void); + #define COL_NORM 0 #define COL_RED 1 #define COL_GREEN 2 @@ -9,6 +9,7 @@ void print_usage(int argc, char *argv[]) output("Options:\n"); output(" -h, --help\tShow this help and exit\n"); + output(" --nocurses\tOperate without curses\n"); output(" -v, --verbose\tEnable verbose operation\n"); output(" --version\tOutput version information and exit\n"); } @@ -18,9 +18,10 @@ int main(int argc, char *argv[]) char *save_file; char **save_file_p = &save_file; - uint args_status = parse_args(player, argc, argv, save_file_p); + uint args_status = parse_args(argc, argv, save_file_p); - curses_init(); + if(!(args_status & ARG_NOCURSES)) + curses_init(); atexit(cleanup); @@ -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; + } +} |