aboutsummarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--info.c43
-rw-r--r--info.h16
2 files changed, 45 insertions, 14 deletions
diff --git a/info.c b/info.c
index 91a2124fdc24..96ebbcda8f93 100644
--- a/info.c
+++ b/info.c
@@ -23,14 +23,16 @@ void interface_print(const char* symbol) {
init_pair(2, COLOR_WHITE, COLOR_BLACK); // Init black background, white foreground
bkgd(BLACK); // set background/foreground
curs_set(FALSE);
- WINDOW* header_window = newwin(2, cols / 2, 0, 13);
+ WINDOW* header_window = newwin(2, cols - 13, 0, 13);
WINDOW* graph_window = newwin(GRAPH_HEIGHT, GRAPH_WIDTH, GRAPH_Y, GRAPH_X);
WINDOW* company_window = newwin(COMPANY_HEIGHT, COMPANY_WIDTH, COMPANY_Y, COMPANY_X);
WINDOW* news_window = newwin(NEWS_HEIGHT, NEWS_WIDTH, NEWS_Y, NEWS_X);
+ WINDOW* peer_window = newwin(PEERS_HEIGHT, PEERS_WIDTH, PEERS_Y, PEERS_X);
wbkgd(header_window, BLACK);
wbkgd(graph_window, BLACK);
wbkgd(company_window, BLACK);
wbkgd(news_window, BLACK);
+ wbkgd(peer_window, BLACK);
int graph_rows, graph_cols;
getmaxyx(graph_window, graph_rows, graph_cols);
@@ -43,10 +45,12 @@ void interface_print(const char* symbol) {
header_printw(header_window, symbol_info); // Print to windows
info_printw(company_window, symbol_info);
news_printw(news_window, symbol_info);
+ peers_printw(peer_window, symbol_info);
wrefresh(header_window); // Refresh other windows before graph otherwise they won't print before next getch()
wrefresh(company_window);
wrefresh(news_window);
+ wrefresh(peer_window);
graph_printw(graph_window, symbol_info, NULL); // No refresh needed since getch()
@@ -64,12 +68,13 @@ void header_printw(WINDOW* window, Info* symbol_info) {
mvwprintw(window, 0, 0, "%s", time_str);
}
mvwprintw(window, 0, (int) (15 + strlen(symbol_info->name) + strlen(symbol_info->symbol)), "24H 7D ");
- if (symbol_info->change_30d != EMPTY)
+ if (symbol_info->price_30d != EMPTY)
wprintw(window, "30D");
mvwprintw(window, 1, 0, "%s %s %8.2lf %6.2lf%% %6.2lf%% ", symbol_info->name, symbol_info->symbol,
- symbol_info->price, symbol_info->change_1d, symbol_info->change_7d);
- if (symbol_info->change_30d != EMPTY)
- wprintw(window, "%6.2lf%%", symbol_info->change_30d);
+ symbol_info->price, 100 * (symbol_info->price / symbol_info->price_last_close - 1),
+ 100 * (symbol_info->price / symbol_info->price_7d - 1));
+ if (symbol_info->price_30d != EMPTY)
+ wprintw(window, "%6.2lf%%", 100 * (symbol_info->price / symbol_info->price_30d - 1));
}
void info_print(Info* symbol_info) {
@@ -78,13 +83,13 @@ void info_print(Info* symbol_info) {
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);
+ printf("Price: $%lf\n", symbol_info->price);
+ if (symbol_info->price_last_close != EMPTY)
+ printf("Percent change 24h: %.2lf%%\n", 100 * (symbol_info->price / symbol_info->price_last_close - 1));
+ if (symbol_info->price_7d != EMPTY)
+ printf("Percent change 7d: %.2lf%%\n", 100 * (symbol_info->price / symbol_info->price_7d - 1));
+ if (symbol_info->price_30d != EMPTY)
+ printf("Percent change 30d: %.2lf%%\n", 100 * (symbol_info->price / symbol_info->price_30d - 1));
if (symbol_info->div_yield != EMPTY)
printf("Dividend yield: %.2lf%%\n", symbol_info->div_yield);
if (symbol_info->marketcap != EMPTY)
@@ -192,6 +197,20 @@ void news_printw(WINDOW* window, Info* symbol_info) {
symbol_info->articles[i]->summary, symbol_info->articles[i]->url, symbol_info->articles[i]->related);
}
+void peers_printw(WINDOW* window, Info* symbol_info) {
+ if (symbol_info->peers == NULL) {
+ wprintw(window, "Peers unavailable.");
+ return;
+ } else wprintw(window, "Peers:\n\nSYMBOL PRICE 24H%% 7D%% 30D%%");
+ Info* idx;
+ for (size_t i = 0; i < symbol_info->peers->length; i++) {
+ idx = symbol_info->peers->array[i];
+ mvwprintw(window, (int) i + 3, 0, "%6s %8.2lf %6.2lf%% %6.2lf%% %6.2lf%%", idx->symbol, idx->price,
+ 100 * (idx->price / idx->price_last_close - 1), 100 * (idx->price / idx->price_7d - 1),
+ 100 * (idx->price / idx->price_30d - 1));
+ }
+}
+
void graph_print(const char* symbol, const char* symbol2) {
Info* symbol_info = api_get_check_info(symbol), *symbol_info2 = NULL;
if (symbol_info == NULL)
diff --git a/info.h b/info.h
index dcfde68c8c1d..6e00d6abe5fd 100644
--- a/info.h
+++ b/info.h
@@ -38,6 +38,11 @@
#define NEWS_HEIGHT GRAPH_HEIGHT + PADDING * 3
#define NEWS_WIDTH GRAPH_WIDTH
+#define PEERS_Y NEWS_Y
+#define PEERS_X NEWS_X + NEWS_WIDTH + PADDING * 2
+#define PEERS_HEIGHT GRAPH_HEIGHT
+#define PEERS_WIDTH GRAPH_WIDTH
+
#include <stdlib.h>
#include <ncurses.h>
#include "api.h"
@@ -71,20 +76,27 @@ void info_print(Info* symbol_info);
void info_printw(WINDOW* window, Info* symbol_info);
/**
- * Prints num_articles articles relating to the given symbol to stdout. Currently on works for stocks/etfs
+ * Prints num_articles articles relating to the given symbol to stdout. Currently only works for stocks/etfs
* @param symbol stock/etf symbol
* @param num_articles number of articles to print (max 50)
*/
void news_print(const char* symbol, int num_articles);
/**
- * Prints articles relating to the given symbol to an Ncurses window. Currently on works for stocks/etfs
+ * Prints articles relating to the given symbol to an Ncurses window. Currently only works for stocks/etfs
* @param window
* @param symbol_info Info*
*/
void news_printw(WINDOW* window, Info* symbol_info);
/**
+ * Prints peers relating to the given symbol to an Ncurses window. Currently only works for stocks/etfs
+ * @param window
+ * @param symbol_info Info*
+ */
+void peers_printw(WINDOW* window, Info* symbol_info);
+
+/**
* Graphs a security in stdscr. If symbol2 is not NULL, also graphs that security.
* @param symbol security to graph
* @param symbol2 optional second security