aboutsummarylogtreecommitdiffstats
path: root/info.c
diff options
context:
space:
mode:
authorAntony Kellermann2018-05-28 16:30:06 -0400
committerAntony Kellermann2018-05-28 16:30:06 -0400
commit623f25f7ed052eae15f6f48be1c8c3b8b66c610c (patch)
treeeeda8f1c9ef93b3cab87809e47e697371a151e0b /info.c
parent3b4b35e9d273b33b062734d1b5aee0b003101723 (diff)
downloadaur-623f25f7ed052eae15f6f48be1c8c3b8b66c610c.tar.gz
Modified info for ncurses output
Diffstat (limited to 'info.c')
-rw-r--r--info.c122
1 files changed, 102 insertions, 20 deletions
diff --git a/info.c b/info.c
index 6dcca42860be..1dc5b31932f7 100644
--- a/info.c
+++ b/info.c
@@ -16,35 +16,116 @@ void symbol_print_info(const char* symbol) {
if (symbol_info == NULL)
RET_MSG("Invalid symbol!")
}
+ initscr();
+ int rows, cols;
+ getmaxyx(stdscr, rows, cols);
+ start_color();
+ init_pair(2, COLOR_WHITE, COLOR_BLACK); // Init black background, white foreground
+ bkgd(BLACK); // set background/foreground
+ char time_str[32];
+ time_t time = symbol_info->intraday_time / 1000; // divide into second instead of milliseconds
+ struct tm* ts = localtime(&time);
+ strftime(time_str, 32, "%F %T", ts);
- if (symbol_info->name[0] != '\0')
- printf("%s %s $%lf (%lf%%)\n", symbol_info->name, symbol_info->symbol, symbol_info->price,
- symbol_info->change_1d);
+ mvprintw(0, 13, "%s", time_str);
+ mvprintw(0, (int)(28 + strlen(symbol_info->name) + strlen(symbol_info->symbol)), "24H 7D 30D");
+ mvprintw(1, 13, "%s %s %8.2lf %6.2lf%% %6.2lf%% %6.2lf%%", symbol_info->name, symbol_info->symbol,
+ symbol_info->price, symbol_info->change_1d, symbol_info->change_7d, symbol_info->change_30d);
+ WINDOW* company_win = newwin(COMPANY_HEIGHT, COMPANY_WIDTH, COMPANY_Y, COMPANY_X);
+
+ if (symbol_info->description[0] != '\0')
+ mvwprintw(company_win, 0, 0, "%s\n\n", symbol_info->description);
+ else mvwprintw(company_win, 0, 0, "Description unavailable.\n\n");
+
+ if (symbol_info->ceo[0] != '\0')
+ wprintw(company_win, "CEO: %s", symbol_info->ceo);
+ else wprintw(company_win, "CEO unavailable.");
+
+ int x, y;
+ getyx(company_win, y, x);
+
+ if (symbol_info->website[0] != '\0')
+ mvwprintw(company_win, y, getmaxx(company_win) / 2, "Website: %s\n", symbol_info->website);
+ else mvwprintw(company_win, y, getmaxx(company_win) / 2, "Website unavailable.\n");
+
+ if (symbol_info->sector[0] != '\0')
+ wprintw(company_win, "Sector: %s", symbol_info->sector);
+ else wprintw(company_win, "Sector unavailable.");
+
+ getyx(company_win, y, x);
+
+ if (symbol_info->industry[0] != '\0')
+ mvwprintw(company_win, y, getmaxx(company_win) / 2, "Industry: %s\n", symbol_info->industry);
+ else mvwprintw(company_win, y, getmaxx(company_win) / 2, "Industry unavailable.\n");
+
+ if (symbol_info->revenue != EMPTY)
+ wprintw(company_win, "Revenue: %ld", symbol_info->revenue);
+ else wprintw(company_win, "Revenue unavailable.");
+
+ getyx(company_win, y, x);
+
+ if (symbol_info->gross_profit != EMPTY)
+ mvwprintw(company_win, y, getmaxx(company_win) / 2, "Gross Profit: %ld\n", symbol_info->gross_profit);
+ else mvwprintw(company_win, y, getmaxx(company_win) / 2, "Gross Profit unavailable.\n");
+
+ if (symbol_info->cash != EMPTY)
+ wprintw(company_win, "Cash: %ld", symbol_info->cash);
+ else wprintw(company_win, "Cash unavailable.");
+
+ getyx(company_win, y, x);
+
+ if (symbol_info->debt != EMPTY)
+ mvwprintw(company_win, y, getmaxx(company_win) / 2, "Debt: %ld\n", symbol_info->debt);
+ else mvwprintw(company_win, y, getmaxx(company_win) / 2, "Debt unavailable.\n");
- if (strcmp(symbol_info->symbol, "") != 0)
- printf("Symbol: %s\n", symbol_info->symbol);
- if (symbol_info->price != EMPTY)
- printf("Price: $%.2lf\n", symbol_info->price);
- if (symbol_info->change_1d != EMPTY)
- printf("Percent change 24h: %.2lf%%\n", symbol_info->change_1d);
- if (symbol_info->change_7d != EMPTY)
- printf("Percent change 7d: %.2lf%%\n", symbol_info->change_7d);
- if (symbol_info->change_30d != EMPTY)
- printf("Percent change 30d: %.2lf%%\n", symbol_info->change_30d);
- if (symbol_info->div_yield != EMPTY)
- printf("Dividend yield: %.2lf%%\n", symbol_info->div_yield);
if (symbol_info->marketcap != EMPTY)
- printf("Market Cap: $%ld\n", symbol_info->marketcap);
+ wprintw(company_win, "Market Cap: %ld", symbol_info->marketcap);
+ else wprintw(company_win, "Market Cap unavailable.");
+
+ getyx(company_win, y, x);
+
if (symbol_info->volume_1d != EMPTY)
- printf("Volume 24h: $%ld\n", symbol_info->volume_1d);
+ mvwprintw(company_win, y, getmaxx(company_win) / 2, "Volume: %ld\n", symbol_info->volume_1d);
+ else mvwprintw(company_win, y, getmaxx(company_win) / 2, "Volume unavailable.\n");
+
+ if (symbol_info->pe_ratio != EMPTY)
+ wprintw(company_win, "P/E Ratio: %ld", symbol_info->pe_ratio);
+ else wprintw(company_win, "P/E Ratio unavailable.");
+
+ getyx(company_win, y, x);
+
+ if (symbol_info->div_yield != EMPTY)
+ mvwprintw(company_win, y, getmaxx(company_win) / 2, "Dividend Yield: %lf\n\n", symbol_info->div_yield);
+ else mvwprintw(company_win, y, getmaxx(company_win) / 2, "Dividend Yield unavailable.\n\n");
+
+ y += 2;
+ for (int i = 0; i < QUARTERS; i++)
+ mvwprintw(company_win, y, 4 + i * getmaxx(company_win) / QUARTERS, "%s", symbol_info->fiscal_period[i]);
+
+ y++;
+ mvwprintw(company_win, y, 0, "EPS ");
+ for (int i = 0; i < QUARTERS; i++)
+ mvwprintw(company_win, y, 4 + i * getmaxx(company_win) / QUARTERS, "%.2lf", symbol_info->eps[i]);
+
+ y++;
+ mvwprintw(company_win, y, 0, "1Y%% ");
+ for (int i = 0; i < QUARTERS; i++)
+ mvwprintw(company_win, y, 4 + i * getmaxx(company_win) / QUARTERS, "%.2lf%%", symbol_info->eps_year_ago[i]);
+
+ refresh();
+ wrefresh(company_win);
+
+ WINDOW* graph_win = newwin(GRAPH_HEIGHT, GRAPH_WIDTH, GRAPH_Y, GRAPH_X);
+ graph_main(symbol, NULL, graph_win);
+ endwin();
api_info_destroy(&symbol_info);
}
void symbol_print_news(const char* symbol, int num_articles) {
if (num_articles > 50)
- RET_MSG("You cannot request more than 50 articles.");
+ RET_MSG("You cannot request more than 50 articles.");
char iex_api_string[URL_MAX_LENGTH];
sprintf(iex_api_string, "https://api.iextrading.com/1.0/stock/%s/news/last/%d", symbol, num_articles);
@@ -183,7 +264,8 @@ void graph_main(const char* symbol, const char* symbol2, WINDOW* window) {
graph_print(price_data, price_data2, &start_date, zoom, symbol, symbol2, window);
}
}
- endwin();
+ if (window == stdscr)
+ endwin();
free(price_data);
if (price_data2 != NULL)
free(price_data2);
@@ -197,7 +279,7 @@ void graph_print(const double* points, const double* points2, struct tm* start_t
cols -= 11; // 10 offset to give space for graph labels + 1 for right side
rows -= 3; // Make space for zoom indicator
rows -= rows % ROWS_SPACING; // Round down to multiple of 5
- if (cols < 50 || rows < 25) // Exits if the terminal is too small
+ if (cols < 40 || rows < 15) // Exits if the terminal is too small
RET_MSG("Terminal not large enough.")
time_t now = time(NULL);