/*
    Garmin icon tables
    Based on information provided by Ian Cowley, Sigurd Humerfelt,
	and Garmin MapSource

    Copyright (C) 2003 Robert Lipe, robertlipe@usa.net

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
 */

#ifndef GARMIN_TABLES_H
#define GARMIN_TABLES_H

#include "defs.h"

#define DEFAULT_ICON_DESCR "Waypoint"
#define DEFAULT_ICON_VALUE 18

typedef struct icon_mapping {
	const int mpssymnum;
	const int pcxsymnum;
	const char *icon;
} icon_mapping_t;

typedef enum {MAPSOURCE, PCX, GARMIN_SERIAL, GDB} garmin_formats_e;

char *gt_find_desc_from_icon_number(const int icon, garmin_formats_e garmin_format, int *dynamic);
int gt_find_icon_number_from_desc(const char *desc, garmin_formats_e garmin_format);

extern icon_mapping_t garmin_icon_table[];

typedef enum {
	gt_waypt_class_user_waypoint = 0,
	gt_waypt_class_airport,
	gt_waypt_class_intersection,
	gt_waypt_class_ndb,
	gt_waypt_class_vor,
	gt_waypt_class_runway_threshold,
	gt_waypt_class_airport_intersection,
	gt_waypt_class_airport_ndb,
	gt_waypt_class_map_point,
	gt_waypt_class_map_area,
	gt_waypt_class_map_intersection,
	gt_waypt_class_map_address,
	gt_waypt_class_map_line
} gt_waypt_classes_e;

extern char *gt_waypt_class_names[];

typedef struct gt_country_code_s 
{ 
	char *cc; 
	char *country; 
} gt_country_code_t;

extern gt_country_code_t gt_country_codes[];

char *gt_get_icao_country(const char *cc);
char *gt_get_icao_cc(const char *country, const char *shortname);

/* this order is used by most devices */
typedef enum {
	gt_display_mode_symbol_and_name = 0,
	gt_display_mode_symbol,
	gt_display_mode_symbol_and_comment
} gt_display_modes_e;
	
extern char *gt_display_mode_names[];

#define GT_DISPLAY_MODE_MIN gt_display_mode_symbol_and_name
#define GT_DISPLAY_MODE_MAX gt_display_mode_symbol_and_comment

typedef enum {
	gt_gdb_display_mode_symbol = 0,
	gt_gdb_display_mode_symbol_and_name,
	gt_gdb_display_mode_symbol_and_comment
} gt_gdb_display_modes_e;

unsigned char gt_convert_category(const char *name, int *category);

unsigned char gt_switch_display_mode_value(const unsigned char display_mode, const int protoid, const char device);

grid_type gt_lookup_grid_type(const char *grid_name, const char *module);
char *gt_get_mps_grid_longname(const grid_type grid, const char *module);
int gt_lookup_datum_index(const char *datum_str, const char *module);
char *gt_get_mps_datum_name(const int datum_index);

#endif
