
enum {
	PLAIN_FONT = 0,
	ITALIC_FONT = 1,
	MANA_FONT   = 2,
	NO_FONT
};

enum {
	BORDER_BLACK = 0,
	BORDER_WHITE = 1
};

typedef enum FrameType {
	FRAME_7TH_ED    = 4,
	FRAME_8TH_ED    = 8
} FrameType;

enum {
	BLEND_DIST      = 64,
	BLEND_FLIP_ART  = 16
};

enum {
	IS_ARTIFACT     =  1,
	IS_WHITE        =  2,
	IS_BLUE         =  4,
	IS_BLACK        =  8,
	IS_RED          = 16,
	IS_GREEN        = 32,
	IS_LAND         = 64,
	IS_MULTI        = 128,
	IS_HYBRID       = 256,
	IS_PLANESWALKER = 512,
	IS_LEVELUP      = 1024
};

typedef struct Card  Card;

struct Card
{
	int 	bitfield;/* Bit-field: e.g. IS_BLUE | IS_RED | IS_MULTI */
	int	num_colours; /* Normally 1, but may be 0, 2, 3, 4, 5. */
	int	num_genmana; /* Number of coloured mana symbols generated. */
	int	num_hybrids; /* Number of unique hybrid mana symbols. */
	char *	bg;	/* Base_Sources/7th_Edition/Blue.png */

	char *	name;	/* Prodigal Sorcerer */
	char *	namefnt;/* 00000000000000000 i.e. all PLAIN_FONT */

	char *	cost;	/* 2U */
	char *	costfnt;/* 22 i.e. all MANA_FONT */
	int 	costsum;/* 3 i.e. converted mana cost */
	char *	color;	/* Blue */
	char *	rarity;	/* C */
	char *	artfile;/* Artwork/Prodigal_Sorcerer_4th_Ed.jpg */
	char *	artist;	/* Melissa Benson */

	char *	type;	/* Creature - Wizard */
	char *	typefnt;/* 00000000000000000 i.e. all PLAIN_FONT */

	char *	text;	/* T: Deal 1 damage to target creature or player. */
	char *	textfnt;/* 2000000000000000000000000000000000000000000000 */

	char *	flavor;	/* "I dislike unexpected visitors." */
	char *	flavfnt;/* 11111111111111111111111111111111 i.e. ITALIC_FONT */

	char *	powtgh;	/* 1/1 */
	char *	expsym;	/* Symbols/4th_Ed.png or 4th_Ed or 12th_Ed_MythicRare */
	char *	number;	/* 32/110 */

	char *	designer;/* name of designer if known */
	
	char *	rulings;/* <multi-line set of rulings> */
	char *	rulifnt;/* <multi-line set of rulings font indexes> */

	char *  bg1;    /* Blue ie. frame file base */
	char *  tb1;    /* Blue ie. textbox file base  */
	Colour  tb_col1;/* CLEAR ie. textbox frame solid colour used by land */

	char *  bg2;    /* NULL or frame base for right side of 2-colour hybrid */
	char *  tb2;    /* NULL or textbox base for right side of 2-colour hybrid */
	Colour  tb_col2;/* CLEAR ie. textbox frame solid colour used by land */

	char *  bg3;    /* NULL or frame base for right side of 3-colour hybrid */
	char *  tb3;    /* NULL or textbox base for right side of 3-colour hybrid */
	Colour  tb_col3;/* CLEAR ie. textbox frame solid colour used by land */

	Card *	flip;	/* NULL or the upside-down card data */
	Card *	split;	/* NULL or second card numbered same or // separated */
};

/* Globals.c - Set up in GUI.c then used by Draw7Ed.c, Draw8Ed.c, SaveCard.c */

extern Font *screen_font;
extern Font *mana_font;
extern Font *mana_fonts[61];

extern Font *name_font;
extern Font *name_fonts[4];
extern Font *type_font;
extern Font *artist_font;
extern Font *number_font;
extern Font *normal_fonts[61];
extern Font *italic_fonts[61];
extern Font **fonts_7th_ed[3];

extern Font *name8_font;
extern Font *name8_fonts[4];
extern Font *type8_fonts[4];
extern Font *artist8_font;
extern Font *number8_font;
extern Font *normal8_fonts[61];
extern Font *italic8_fonts[61];
extern Font **fonts_8th_ed[3];

extern FILE *logfile;
extern char *art_dir;
extern char *symbols;
extern char *baseart;
extern char *rulings;
extern char *dpi300;
extern char *dpi150;
extern char *dpi100;
extern char *dpi090;
extern char *dpi075;
extern char *page_prefix;
extern char *photo_prefix;
extern char *default_expansion;

extern Image *anti_aliased_circle;

/* Globals inside FindImg.c - Set up in GUI.c then used in FindImg.c */

extern char *cache_basedir;

/* Blend.c */

void blend_two_images_32bpp_horizontally(Image *img1, Image *img2, int size);
void blend_two_images_32bpp_vertically  (Image *img1, Image *img2, int size);

void blend_three_images_32bpp_horizontally(Image *img1, Image *img2, Image *img3, int size);

/* Borders.c */

Colour darker(Colour c);
Colour brighter(Colour c);

typedef long Edge;
void draw_bevel(Graphics *g, Rect r, int thick, Image *img, Point p, Edge lighten);
void draw_antialiased_diagonal(Graphics *g, Point p1, Point p2);
void make_rect_transparent(Image *img, Rect r);
void draw_outer_border(Graphics *g, Image *result, Rect r, int border, int border_line, Colour border_colour);

/* Draw7Ed.c */

Image * create_card_image_7th_ed(Card *card, Colour border_colour);

/* Draw8Ed.c */

Image * create_card_image_8th_ed(Card *card, Colour border_colour);

/* FindImg.c */

char *	find_image_source(char *base, char *subdir, char *filename, char *trailer);
Image * find_cached_image(char *name);

/* FitText.c */

int fit_text(Graphics *g, Font **font_vector[3],
		Rect r, int align,
		int start_size, int stop_size,
		char *text, int textbytes, char *textfnt,
		char *flavor, int flavbytes, char *flavfnt,
		int draw_it_too);
void narrow_text(Graphics *g, Font **fonts, Rect r, int align,
		char *text, int textbytes, char *textfnt);

/* Form7Ed.c */

Image * form_card_template_1_7th_ed(Colour bg_border,
                char *bg_name, char *tb_name, Colour tb_border, int is_flip);

Image * form_card_template_2_7th_ed(Colour bg_border,
                char *bg_name1, char *tb_name1, Colour tb_border1,
                char *bg_name2, char *tb_name2, Colour tb_border2,
                int is_flip);

Image * form_card_template_3_7th_ed(Colour bg_border,
                char *bg_name1, char *tb_name1, Colour tb_border1,
                char *bg_name2, char *tb_name2, Colour tb_border2,
                char *bg_name3, char *tb_name3, Colour tb_border3,
                int is_flip);

/* Form8Ed.c */

char *form_powtgh_filename(
			int bitfield,		/* bit-field: IS_BLUE | IS_ARTIFACT */
			int num_colours,	/* # unique colours */
			int num_genmana,	/* # unique mana symbols generated */
			char *tb_name		/* e.g. Red or Land */
	);


Image * form_card_template_1_8th_ed(Colour bg_border,
                int bitfield, int num_colours, int num_genmana, int num_hybrids,
                char *bg_name, char *tb_name, int is_creature, int is_flip);

Image * form_card_template_2_8th_ed(Colour bg_border,
                int bitfield, int num_colours, int num_genmana, int num_hybrids,
                char *bg_name1, char *tb_name1,
                char *bg_name2, char *tb_name2,
                int is_creature, int is_flip);

Image * form_card_template_3_8th_ed(Colour bg_border,
                int bitfield, int num_colours, int num_genmana, int num_hybrids,
                char *bg_name1, char *tb_name1,
                char *bg_name2, char *tb_name2,
                char *bg_name3, char *tb_name3,
                int is_creature, int is_flip);

/* LargeRct.c */

Rect largest_rect(Rect sr, int width, int height);

/* Simplify.c */

#include "Simplify.h"

/* Parse.c */

Card *  parse_card(char *block, SimplifySet *set);
void    print_card(FILE *f, Card *card);
void    del_card(Card *card);
Card ** load_cards(char *filepath, int *count, SimplifySet *set);

/* Process.c */

int process(int first, int last);

/* Rarity.c */

char * rarity_to_trailer(char *expansion, char *rarity);

/* Rotate.c */

void    rotate_image_32bpp_180_degrees(Image *img);
Image * image_32bpp_rotated_180_degrees(Image *img);
Image * image_32bpp_rotated_90_degrees(Image *img); /* anticlockwise */

/* Rulings.c */

void save_card_rulings(Card *card);

/* SaveCard.c */

void save_card_at_dpi(Image *img, Card *card, int index, int dpi, int also_tapped, int also_flipped);
void save_card_9_page(Image *cards[9], char *name, int index);
void save_card_2_page(Image *cards[9], char *name, int index);

/* Shadow.c */

void draw_white_shadow_text(Graphics *g, Rect r, int align, char *utf8, int nbytes);
void draw_white_shadow_text_1(Graphics *g, Rect r, int align, char *utf8, int nbytes);
void draw_white_shadow_text_style(Graphics *g, Font *fonts[], Rect r,
				int align,
				char *utf8, int nbytes, char *style);

/* StrArray.c */

#include "StrArray.h"

/* StrUtil.c */

#include "StrUtil.h"

/* StyleTxt.c */

#include "StyleTxt.h"

/* Symbols.c */

#include "Symbols.h"

/* TextTable.c */

#include "TextTable.h"

