/*----------------------------------------------------------------------*\
 | Data structures for DLG data											|
\*----------------------------------------------------------------------*/

#define NoTarget	0
#define MapInfo		1
#define AtlasPro	2
#define Tactician	4

#define min(a,b) (((a) < (b)) ? (a) : (b))
#define max(a,b) (((a) > (b)) ? (a) : (b))

#define MAXLEN 81

struct lgo_header {
	char banner[76];
	char mapname[44];
	int source_year;
	unsigned long source_scale;
	int DLG_level;
	int ref_system;
	int zone;
	int units;
	double resolution;
	int trans_param_cnt;
	int acc_rec_cnt;
	int ctrl_pt_cnt;
	int category_cnt;
	double a;
	double e2;
	double lat1;
	double lat2;
	double lon0;
	double lat0;
	double easting;
	double northing;
	double a1;
	double a2;
	double a3;
	double a4;
	struct ctrl_pt **ctrl_pt;
	};

struct ctrl_pt {
	char corner[4];
	double latitude;
	double longitude;
	double y;
	double x;
	};

struct category {
	char name[24];
	int attr_format;
	int node_ref_cnt;
	int node_cnt;
	int link_node_area;
	int link_node_line;
	int area_ref_cnt;
	int area_cnt;
	int link_area_node;
	int link_area_line;
	int area_coord_lists;
	int line_ref_cnt;
	int line_cnt;
	int line_coord_lists;
	struct node **node;
	struct area **area;
	struct line **line;
	};

struct node {
	int id;
	double y;
	double x;
	int area_list_cnt;
	int line_list_cnt;
	int area_coord_list_cnt;
	int attr_cnt;
	int text_cnt;
	int *area;
	int *line;
	struct attr *attr;
	};

struct area {
	int id;
	double y;
	double x;
	int node_list_cnt;
	int line_list_cnt;
	int area_coord_list_cnt;
	int attr_cnt;
	int text_cnt;
	int island_cnt;
	int *line;
	struct attr *attr;
	};

struct line {
	int id;
	int beg_node;
	int end_node;
	int left_area;
	int right_area;
	int coord_cnt;
	int attr_cnt;
	int text_cnt;
	struct point *coord;
	struct attr *attr;
	};

struct attr {
	int major;
	int minor;
	};

struct point {
	double y;
	double x;
	};

struct attr_table {
	int major;
	int minor;
	char *dept;
	char *bureau;
	char *name;
	};

#define SEARCH		4
#define ALL			3
#define ATTR_ONLY	2
#define NONE		1

struct output {
	char nodes;
	char areas;
	char lines;
	char states;
	};

/*----------------------------------------------------------------------*\
\*----------------------------------------------------------------------*/
