/* - - X LIBS - - */
#include<X11/Xlib.h>
#include<X11/Xutil.h>
#include<X11/Xos.h>
#include<X11/Xatom.h>
#include<X11/keysym.h>

#define INTERNAL_VARIABLE 0
#define IMAGE 1
#define DATA_VARIABLE 2

#define GREY_SCALE 1
#define PLM 2
#define RGB24 3

/* - - Macro for (x,y) array indexing - - */
#define XYofA(x, y, A, row_length)  A[y*row_length + x ]

/* - - Types - - */
typedef double Data;
typedef double Data2;

/* - - structures - - */
struct variable
{
  char * name;
  Data * data;     /* signed, larger interger values  */
  Data2 * data2;   /* signed, possibly floating point, values   */
  unsigned char * image; /* unsigned 8 bit types*/
                         /* NB: char ranges from -128 to 128 */ 
  int max_value;
  int image_type;
  int var_type;
  int M, N;
};
typedef struct variable Var;

struct variable_int
{
  char * name;
  int * data;     /* signed chars go from -128 to + 128 */
  unsigned int image_type;
  int M, N;
};
typedef struct variable_int intVar;




/* - - -  prototypes - - - */
/* cement_display.c */
void start_graphics(Display **, GC *);
Pixmap create_buffered_window(unsigned int, unsigned int, char *, int, int);
int display_image(Var *, char *, int, int);
void update_graphics(void);
void cmap_init(XColor *);
Pixmap create_display_panel_single(char *, int, int, int, int);
int update_image_single(Var * Img, Pixmap drawing, int width, int height, int corner);
void wait_for_any_key_in_Xwindow(Display *, Window);
int load_image(char * filenameA, Var * frameA);
int get_image_dimensions(char * filename, int * width, int * height);
int load_ppm_file(char * file_name, Var * image);
void init_var(Var *, char *, int, int, int, int);
void wait_for_any_key_in_Xwindow(Display *display, Window win);

/* prototypes for other external functions here */
void SetupGC(void);
void SetSizeHints(int, int);
void ClearPixmap(Pixmap, int, int);







