/* euroscore.h */
// include standard C libraries
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
// ensure we have TRUE and FALSE
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
// other definitions
#define STRLEN 64
// path is <PATHPREFIX>{year}<SEMIPATH/FINALPATH>{image}<SUFFIX>
//
// i.e. ../../images/eurovision/2005/semi/image.jpeg
// or ../../images/eurovision/2005/final/image.jpeg
// [-------prefix--------][year][path][image][suffix]
//
// Don't delete "SEMIPATHOLD", it is used with legacy handling!
#define PATHPREFIX "../../images/eurovision/"
#define SEMIPATHOLD "/semi/"
#define SEMIPATHONE "/semi1/"
#define SEMIPATHTWO "/semi2/"
#define FINALPATH "/final/"
#define SUFFIX ".jpeg"
// country structure
typedef struct countrydef
{
// From CSV file
unsigned char name[STRLEN];
signed int score;
unsigned char image[STRLEN];
unsigned int semi;
unsigned char comment[STRLEN];
unsigned char pointsto[13][STRLEN]; // allow 13 so we can go ...7,8,[9],10,[11],12
unsigned char titlename[STRLEN];
unsigned char refname[STRLEN];
unsigned char song[STRLEN];
// Calculated
signed int ranking; // is -ve if "joint", i.e. "-4" is joint fourth
};
// image structure
typedef struct imgsizedef
{
unsigned int width;
unsigned int height;
};
// global function definitions and associated variables
// Country
extern struct countrydef *country;
extern unsigned long countrycount; // how many we have right now
extern unsigned long countrymax; // how many we can have before reallocation required
extern int scorelist[];
extern void country_extendarray(void);
extern void country_tidyup(void);
extern void country_process(void);
extern void country_outputeach(void);
extern void country_gentable(int which);
extern void country_votedforme(int which);
extern char *country_alias(int which, int title);
// CSVloader
extern void csvloader_loadfile(char *file);
// ImageSize
extern struct imgsizedef *imagesize_getimagesize(char *path);
// MemTrace
extern void memtrace_init(void);
extern void memtrace_finish(void);
extern void memtrace_addentry(int base, int size, int method, char *parent);
extern void memtrace_removeentry(int base);
extern void *memtrace_calloc(size_t nmemb, size_t size);
extern void *memtrace_namedcalloc(size_t nmemb, size_t size, char *parent);
extern void memtrace_free(void *ptr);
extern void *memtrace_malloc(size_t size);
extern void *memtrace_namedmalloc(size_t size, char *parent);
extern void *memtrace_realloc(void *ptr, size_t size);
extern void *memtrace_namedrealloc(void *ptr, size_t size, char *parent);
extern void memtrace_checkclaims(FILE *stream);
extern void memtrace_dumpsixtyfour(int address, FILE *stream);
// big nasty global variables :-)
extern FILE *in;
extern FILE *out;
extern unsigned char workspace[1024];
extern unsigned int year;
extern unsigned int popularity;