#define CGI_BIN_URL "http://www.csdl.tamu.edu/FLORA/cgi"

typedef enum { ABSOLUTE, GRADED_VALUE } map_type_t ;

typedef struct {
  int do_scale ;
  int do_clip ;
  float scale_factor ;
  int clip_left ;
  int clip_right ;
  int clip_top ;
  int clip_bottom ;
} map_xform_t ;

extern void *map_initialize(char *dir, char *prefix, map_type_t type) ;

extern void map_get_dimensions(void *map_info, int *height_p,
			       int *width_p) ;
extern int map_get_num_regions(void *map_info_v) ;
extern char *map_convert_region_name(char *dir, char *prefix,
				     char *src_naming_scheme,
				     char *dest_naming_scheme,
				     char *region_name) ;
extern void map_dump_src_url(void *map_info, map_xform_t *xform) ;
extern void map_output_redirect(void *map_info, map_xform_t *xform) ;
extern void map_output_img(void *map_info, 
			   int ismap, char *alt, char *align,
			   map_xform_t *xform) ;
extern void map_output_form_elem(void *map_info, char *name, char *align,
				 map_xform_t *xform) ;
extern int map_output_absolute_color_block(void *map_info, int num) ;
extern int map_output_graded_color_key(void *map_info) ;
extern int map_output_graded_no_data_block(void *map_info) ;

extern int map_assign_absolute_colors(void *map_info, int num_colors,
			       int *reds, int *greens, int *blues) ;
extern void map_set_region_color_by_num(void *map_info, int reg_num, int color) ;
extern void map_set_region_color_by_name(void *map_info, char *naming_scheme, 
				  char *name, int color) ;
extern int map_assign_graded_colors(void *map_info, int num_colors,
			     int *reds, int *greens, int *blues) ;
extern void map_set_fixed_gradations(void *map_info, ...) ;
extern void map_add_to_region_by_num(void *map_info, int reg_num, int num) ;
extern void map_add_to_region_by_name(void *map_info, char *naming_scheme,
			       char *name, int num) ;
extern int map_get_region_val_by_num(void *map_info, int reg_num) ;
extern int map_get_region_val_by_name(void *map_info, char *scheme_name,
				      char *reg_name) ;
extern int map_disable_all_regions(void *map_info) ;
extern int map_enable_region_by_num(void *map_info, int num) ;
extern int map_enable_region_by_name(void *map_info, char *naming_scheme,
			      char *name) ;
extern int map_disable_region_by_num(void *map_info, int num) ;
extern int map_disable_region_by_name(void *map_info, char *naming_scheme,
			      char *name) ;

extern int xy_to_num(int x, int y, char *fname) ;
extern int map_convert_xy_to_num(int x, int y, char *dir, char *prefix) ;
extern char *map_convert_xy_to_name(int x, int y, char *dir, char *prefix,
				  char *naming_scheme) ;

extern void *regarray_initialize(char *dir, char *prefix) ;

extern void regarray_set_val_by_name(void *regarray, char *naming_scheme,
				     char *name, int val) ;
extern void regarray_set_val_by_num(void *regarray, int num, int val) ;
extern void regarray_add_val_by_name(void *regarray, char *naming_scheme,
				     char *name, int val) ;
extern void regarray_add_val_by_num(void *regarray, int num, int val) ;
extern int regarray_get_val_by_name(void *regarray, char *naming_scheme,
				     char *name) ;
extern int regarray_get_val_by_num(void *regarray, int num) ;
extern int regarray_get_num_regions(void *regarray) ;
