aboutsummaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'io.c')
-rw-r--r--io.c413
1 files changed, 204 insertions, 209 deletions
diff --git a/io.c b/io.c
index f0dc4a0..0f39881 100644
--- a/io.c
+++ b/io.c
@@ -2,235 +2,230 @@
#include <stdlib.h>
#include "7w.h"
-char* cards_getname(int era, int card);
-int* cards_getcost(int era, int card);
-int cards_gettype(int era, int card);
-int* cards_getproduction(int era, int card);
-char* getname(int res);
-int gettypecolor(int type);
-int* cards_getcoupons(int era, int card);
-int* cards_getcouponed(int era, int card);
-char* cards_specialmessage(int era, int card);
-int data_getera();
-int* data_gethand(int p);
-int* get_special(int era, int card, int player);
-void arraycpy(int *from, int *to, int len);
-
-void io_init()
-{
- initscr();
- clear();
- noecho();
- cbreak();
- curs_set(0);
- keypad(stdscr, TRUE);
- start_color();
- use_default_colors();
+void io_init() {
+ initscr();
+ clear();
+ noecho();
+ cbreak();
+ curs_set(0);
+ keypad(stdscr, TRUE);
+ start_color();
+ use_default_colors();
//This may seem slightly conveluted, but it's the curses way.
- init_pair(0, A_NORMAL, -1);
- init_pair(30, COLOR_BLACK, -1);
- init_pair(31, COLOR_RED, -1);
- init_pair(32, COLOR_GREEN, -1);
- init_pair(33, COLOR_YELLOW, -1);
- init_pair(34, COLOR_BLUE, -1);
- init_pair(35, COLOR_MAGENTA, -1);
- init_pair(36, COLOR_CYAN, -1);
- init_pair(37, COLOR_WHITE, -1);
+ init_pair(0, A_NORMAL, -1);
+ init_pair(30, COLOR_BLACK, -1);
+ init_pair(31, COLOR_RED, -1);
+ init_pair(32, COLOR_GREEN, -1);
+ init_pair(33, COLOR_YELLOW, -1);
+ init_pair(34, COLOR_BLUE, -1);
+ init_pair(35, COLOR_MAGENTA, -1);
+ init_pair(36, COLOR_CYAN, -1);
+ init_pair(37, COLOR_WHITE, -1);
}
-int io_getkey()
-{
-int c;
- switch(c = getch()) {
- case KEY_LEFT:
- return LEFT;
- break;
- case KEY_RIGHT:
- return RIGHT;
- break;
- case KEY_UP:
- return UP;
- break;
- case KEY_DOWN:
- return DOWN;
- break;
- case KEY_ENTER:
- case '\n':
- case '\r':
- return ENTER;
- break;
- default:
- return c;
- break;
- }
+int io_getkey() {
+ int c;
+ switch (c = getch()) {
+ case KEY_LEFT:
+ return LEFT;
+ break;
+ case KEY_RIGHT:
+ return RIGHT;
+ break;
+ case KEY_UP:
+ return UP;
+ break;
+ case KEY_DOWN:
+ return DOWN;
+ break;
+ case KEY_ENTER:
+ case '\n':
+ case '\r':
+ return ENTER;
+ break;
+ default:
+ return c;
+ break;
+ }
}
-void io_clearscreen()
-{
- clear();
+void io_clearscreen() {
+ clear();
}
-void io_printname(int x, int y, int era, int card)
-{
- mvprintw(y, x, "# ");
- attron(COLOR_PAIR(gettypecolor(cards_gettype(era, card))));
- printw("%-23s", cards_getname(era, card));
- attrset(A_NORMAL);
- printw(" #");
+void io_printname(int x, int y, int era, int card) {
+ mvprintw(y, x, "# ");
+ attron(COLOR_PAIR(gettypecolor(cards_gettype(era, card))));
+ char array[40];
+ printw("%-23s", cards_getname(era, card, array));
+ attrset(A_NORMAL);
+ printw(" #");
}
-void io_printblankline(int x, int y, int width)
-{
- int i;
- mvprintw(y, x, "#");
- for(i = 0; i < width-1; i++) printw(" ");
- printw("#");
+void io_printblankline(int x, int y, int width) {
+ int i;
+ mvprintw(y, x, "#");
+ for (i = 0; i < width - 1; i++)
+ printw(" ");
+ printw("#");
}
-int io_printtext(int xorigin, int y, int width, char* text)
-{
- width -= 1; //padding
- int x = xorigin+2;
- int wordlength;
- int wordstart = 0;
- int i;
- //start with a cleared line
- io_printblankline(xorigin, y, width);
- while(text[wordstart] != '\0') {
- wordlength = 0;
- while(text[wordstart+(wordlength++)] != ' ' && text[wordstart+wordlength] != '\0' && text[wordstart+wordlength] != '\n');
- if(x-xorigin+wordlength > width || text[wordstart] == '\n') {
- io_printblankline(xorigin, ++y, width);
- x = xorigin+2;
- }
- mvprintw(y, x, "");
- for(i = wordstart; i < wordstart+wordlength; i++) {
- if(text[i] != '\n') addch(text[i]);
- }
- x += wordlength;
- wordstart += wordlength;
- }
- return y+1;
+int io_printtext(int xorigin, int y, int width, char* text) {
+ width -= 1; //padding
+ int x = xorigin + 2;
+ int wordlength;
+ int wordstart = 0;
+ int i;
+ //start with a cleared line
+ io_printblankline(xorigin, y, width);
+ while (text[wordstart] != '\0') {
+ wordlength = 0;
+ while (text[wordstart + (wordlength++)] != ' '
+ && text[wordstart + wordlength] != '\0'
+ && text[wordstart + wordlength] != '\n')
+ ;
+ if (x - xorigin + wordlength > width || text[wordstart] == '\n') {
+ io_printblankline(xorigin, ++y, width);
+ x = xorigin + 2;
+ }
+ mvprintw(y, x, "");
+ for (i = wordstart; i < wordstart + wordlength; i++) {
+ if (text[i] != '\n')
+ addch(text[i]);
+ }
+ x += wordlength;
+ wordstart += wordlength;
+ }
+ return y + 1;
}
-void io_printborder(int x, int y, int width)
-{
- int i;
- for(i = 0; i < width; i++)
- mvprintw(y, x+i, "#");
+void io_printborder(int x, int y, int width) {
+ int i;
+ for (i = 0; i < width; i++)
+ mvprintw(y, x + i, "#");
}
-int io_printcard(int x, int y, int era, int card, int player)
-{
- io_printborder(x, y++, 28);
- if(cards_getname(era, card)[0] != '\0')
- io_printname(x, y++, era, card);
- int *costs = cards_getcost(era, card);
- int *products = cards_getproduction(era, card);
- int hasCP = 0;
- int i, j, k;
- for(i = 0; i < NUMRESOURCES; i++)
- if(costs[i] > 0) hasCP = 1;
- for(i = 0; i < NUMPRODUCTS; i++)
- if(products[i] > 0) hasCP = 1;
- if(hasCP) {
- mvprintw(y++, x, "# Costs: | Produces: #");
- i = j = -1;
- while(i < NUMRESOURCES || j < NUMPRODUCTS) {
- while(i < NUMRESOURCES && costs[++i] == 0);
- while(j < NUMPRODUCTS && products[++j] == 0);
- if(i == NUMRESOURCES && j == NUMPRODUCTS) break;
- mvprintw(y++, x, "# ");
- if(i < NUMRESOURCES) printw(" %d %-6s| ", costs[i], getname(i));
- else printw(" | ");
- int isFinal = 1;
- for(k = j+1; k < NUMPRODUCTS; k++)
- if(products[k]) isFinal = 0;
- if(j < NUMPRODUCTS)
- if(isFinal || j == GOLD || j == SHIELD || j == VP) printw(" %d %-10s #", products[j], getname(j));
- else printw(" %d %-7s or #", products[j], getname(j));
- else printw(" #");
- }
- }
-
- char* message = cards_specialmessage(era, card);
- if(message[0] != '\0')
- y = io_printtext(x, y, 28, message);
-
- int* special = get_special(era, card, player);
- if(special[2])
- { //print special (vp, gold)
- mvprintw(y++, x, "# In your case, produces: #");
- mvprintw(y++, x, "# %2d victory points #", special[0]);
- mvprintw(y++, x, "# %2d gold #", special[1]);
- }
-
- int* coupons = cards_getcoupons(era, card);
- if(coupons[1] || coupons[3])
- { //print the coupons!
- mvprintw(y++, x, "# Coupon for: #");
- if(coupons[1])
- io_printname(x, y++, coupons[0], coupons[1]);
- if(coupons[3])
- io_printname(x, y++, coupons[2], coupons[3]);
- }
-
- coupons = cards_getcouponed(era, card);
- if(coupons[1] || coupons[3])
- { //print the coupons!
- mvprintw(y++, x, "# Free if owned: #");
- if(coupons[1])
- io_printname(x, y++, coupons[0], coupons[1]);
- if(coupons[3])
- io_printname(x, y++, coupons[2], coupons[3]);
- }
-
- io_printborder(x, y, 28);
- return y;
+int io_printcard(int x, int y, int era, int card, int player) {
+ io_printborder(x, y++, 28);
+ char array[40];
+ if (cards_getname(era, card, array)[0] != '\0')
+ io_printname(x, y++, era, card);
+ int cost[NUMRESOURCES];
+ cards_getcost(era, card, cost);
+ int prod[NUMPRODUCTS];
+ cards_getproduction(era, card, prod);
+ int hasCP = 0;
+ int i, j, k;
+ for (i = 0; i < NUMRESOURCES; i++)
+ if (cost[i] > 0)
+ hasCP = 1;
+ for (i = 0; i < NUMPRODUCTS; i++)
+ if (prod[i] > 0)
+ hasCP = 1;
+ if (hasCP) {
+ mvprintw(y++, x, "# Costs: | Produces: #");
+ i = j = -1;
+ while (i < NUMRESOURCES || j < NUMPRODUCTS) {
+ while (i < NUMRESOURCES && cost[++i] == 0)
+ ;
+ while (j < NUMPRODUCTS && prod[++j] == 0)
+ ;
+ if (i == NUMRESOURCES && j == NUMPRODUCTS)
+ break;
+ mvprintw(y++, x, "# ");
+ if (i < NUMRESOURCES)
+ printw(" %d %-6s| ", cost[i], getname(i));
+ else
+ printw(" | ");
+ int isFinal = 1;
+ for (k = j + 1; k < NUMPRODUCTS; k++)
+ if (prod[k])
+ isFinal = 0;
+ if (j < NUMPRODUCTS)
+ if (isFinal || j == GOLD || j == SHIELD || j == VP)
+ printw(" %d %-10s #", prod[j], getname(j));
+ else
+ printw(" %d %-7s or #", prod[j], getname(j));
+ else
+ printw(" #");
+ }
+ }
+
+ char message[200];
+ cards_specialmessage(era, card, message);
+ if (message[0] != '\0')
+ y = io_printtext(x, y, 28, message);
+
+ int* special = get_special(era, card, player);
+ if (special[2]) { //print special (vp, gold)
+ mvprintw(y++, x, "# In your case, produces: #");
+ mvprintw(y++, x, "# %2d victory points #", special[0]);
+ mvprintw(y++, x, "# %2d gold #", special[1]);
+ }
+
+ int coupons[4];
+ cards_getcoupons(era, card, coupons);
+ if (coupons[1] || coupons[3]) { //print the coupons!
+ mvprintw(y++, x, "# Coupon for: #");
+ if (coupons[1])
+ io_printname(x, y++, coupons[0], coupons[1]);
+ if (coupons[3])
+ io_printname(x, y++, coupons[2], coupons[3]);
+ }
+
+ cards_getcouponed(era, card, coupons);
+ if (coupons[1] || coupons[3]) { //print the coupons!
+ mvprintw(y++, x, "# Free if owned: #");
+ if (coupons[1])
+ io_printname(x, y++, coupons[0], coupons[1]);
+ if (coupons[3])
+ io_printname(x, y++, coupons[2], coupons[3]);
+ }
+
+ io_printborder(x, y, 28);
+ return y;
}
-int* data_getdiscards();
-int print_cards(int x, int y, int *cards, int cursor);
-
-int io_printhand(int x, int y, int player, int cursor, int mode) //mode 0 is normal, 1 is discard search
-{
- int hand[7];
- if(mode) arraycpy(data_getdiscards(), hand, 7);
- else arraycpy(data_gethand(player), hand, 7);
- int i;
- io_printborder(x, y++, 28);
- if(mode) {
- y = io_printtext(x, y, 28, " Discards");
- y = print_cards(x, y, hand, cursor);
- y = io_printcard(x, y, hand[cursor*2], hand[cursor*2+1], player);
- }
- else {
- y = io_printtext(x, y, 28, " Hand");
- for(i = 0; hand[i] != -1 && i < 7; i++) {
- io_printname(x, y++, data_getera(), hand[i]);
- if(i == cursor) {
- mvprintw(y-1, x+25, "*");
- }
- }
- y = io_printtext(x, y, 28, " Trade...");
- if(i == cursor)
- mvprintw(y-1, x+25, "*");
- else if(cursor >= 0 && cursor < 7 && hand[cursor] != -1)
- y = io_printcard(x, y, data_getera(), hand[cursor], player);
- else io_printborder(x, y++, 28);
- }
- return y;
+int io_printhand(int x, int y, int player, int cursor) {
+ int hand[7];
+ data_gethand(player, hand);
+ int i;
+ io_printborder(x, y++, 28);
+ y = io_printtext(x, y, 28, " Hand");
+ for (i = 0; i < 7 && hand[i] != -1; i++) {
+ io_printname(x, y++, data_getera(), hand[i]);
+ if (i == cursor) {
+ mvprintw(y - 1, x + 25, "*");
+ }
+ }
+ y = io_printtext(x, y, 28, " Trade...");
+ if (i == cursor)
+ mvprintw(y - 1, x + 25, "*");
+ else if (cursor >= 0 && cursor < 7 && hand[cursor] != -1)
+ y = io_printcard(x, y, data_getera(), hand[cursor], player);
+ else
+ io_printborder(x, y++, 28);
+ return y;
}
-void io_printplain(int x, int y, char *s)
-{
- mvprintw(y, x, "%s", s);
+int io_printdiscards(int x, int y, int player, int cursor) {
+ int discards[150];
+ data_getdiscards(discards);
+ io_printborder(x, y++, 28);
+ y = io_printtext(x, y, 28, " Discards");
+ y = print_cards(x, y, discards, cursor);
+ y = io_printcard(x, y, discards[cursor * 2], discards[cursor * 2 + 1],
+ player);
+ return y;
}
-void io_printcolor(int x, int y, int color, char *s)
-{
- attron(COLOR_PAIR(color));
- io_printplain(x, y, s);
- attrset(A_NORMAL);
+void io_printplain(int x, int y, char *s) {
+ mvprintw(y, x, "%s", s);
+}
+
+void io_printcolor(int x, int y, int color, char *s) {
+ attron(COLOR_PAIR(color));
+ io_printplain(x, y, s);
+ attrset(A_NORMAL);
}
bgstack15