1 /* 2 * 3 * XASTIR, Amateur Station Tracking and Information Reporting 4 * Copyright (C) 1999,2000 Frank Giannandrea 5 * Copyright (C) 2000-2019 The Xastir Group 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 2 10 * of the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20 * 21 * Look at the README for more information on the program. 22 */ 23 24 #ifndef XASTIR_MAIN_H 25 #define XASTIR_MAIN_H 26 27 #include <X11/Intrinsic.h> 28 29 // For mutex debugging with Linux threads only 30 #ifdef __linux__ 31 #define MUTEX_DEBUG 1 32 #endif // __linux__ 33 34 35 // This gets defined if pthreads implementation uses SIGUSR1/SIGUSR2 36 // signals. This disables our SIGUSR1 handler which disallows 37 // creating snapshots on receipt of that signal. Old kernels (2.0 38 // and early 2.1) had only 32 signals available so only USR1/USR2 39 // were available for LinuxThreads use. Newer kernels have more 40 // signals available, making USR1/USR2 available to programs again. 41 // _NSIG is defined in /usr/include/bits/signum.h 42 // 43 #ifdef __linux__ 44 #ifdef _NSIG 45 #if (_NSIG <= 32) 46 #define OLD_PTHREADS 47 //# warning ***** OLD_PTHREADS DETECTED ***** 48 #else 49 //# warning ***** NEW_PTHREADS DETECTED ***** 50 #endif // if (_NSIG...) 51 #endif // _NSIG 52 #endif // __linux__ 53 54 55 // To enable the "Transmit Raw WX data" button in 56 // Configure->Defaults dialog. Warning: If you enable this, enable 57 // the button in Configure->Defaults, and are running a weather 58 // station that puts out raw data that is NOT allowed by the APRS 59 // spec, you'll be putting out garbage and trashing the channel. 60 // 61 //#define TRANSMIT_RAW_WX 62 63 // To use predefined object configuration files from within the 64 // user's base directory e.g. ~/.xastir/config/predefined_SAR.sys 65 // rather than from the main base directory, enable this definition. 66 //#define OBJECT_DEF_FILE_USER_BASE 67 68 extern int enable_server_port; 69 70 71 extern char altnet_call[MAX_CALLSIGN+1]; 72 extern int altnet; 73 extern Widget iface_da; 74 extern FILE *read_file_ptr; 75 extern int interrupt_drawing_now; 76 77 78 #define VERSIONFRM (!altnet?XASTIR_TOCALL:altnet_call) /* Packet version info */ 79 80 81 #ifdef __LCLINT__ 82 #define PACKAGE "xastir" 83 #define VERSION "lclint" 84 #define VERSIONTXT "xastir lclint debug version" 85 #else // __LCLINT__ 86 #define VERSIONTXT PACKAGE " " VERSION 87 #endif // __LCLINT__ 88 89 90 #define VERSIONLABEL VERSIONTXT 91 92 // NOTE: This is out of date and not used anymore anyway. 93 #define VERSIONMESSAGE "XASTIR Version: " VERSION "\n\nAmateur Station Tracking and Information Reporting\nby Frank Giannandrea, KC2GJS was KC0DGE\n Code added by:\n Richard Hagemeyer - VE3UNW, Curt Mills - WE7U,\n Mike Sims - KA9KIM, Gerald Stueve - K4INT was KE4NFJ,\n Mark Grennan - KD5AMB, Henk de Groot - PE1DNN,\n Jim Sevilla - KD6VPE, Jose R. Marte A. - HI8GN,\n Michael G. Petry - N3NYN, Lloyd Miller - VE6LFM,\n Alessandro Frigeri - IK0YUP,\n Chuck Byam - KG4IJB, Rolf Bleher - DK7IN, Ken Koster - N7IPB" 94 95 // NOTE: This is out of date and not used anymore anyway. 96 #define ABOUTGNUL "XASTIR, Copyright (C) 1999, 2000 Frank Giannandrea\nXASTIR comes with ABSOLUTELY NO WARRANTY;\nThis is free software, and you are welcome\nto redistribute it under certain conditions;\nsee the GNU LICENSE for details.\n" 97 98 #define MAX_PHG 8 99 #define MAX_COMMENT 80 100 101 102 103 ////////////////////////////////////////////////////////////////////// 104 // These globals and prototypes are from: 105 // http://lightconsulting.com/~thalakan/process-title-notes.html 106 // They seems to work fine on Linux, but they only change the "ps" 107 // listings, not the top listings. I don't know why yet. 108 109 /* Globals */ 110 //extern char **Argv = ((void *)0); 111 //extern char *__progname, *__progname_full; 112 //extern char *LastArgv = ((void *)0); 113 114 /* Prototypes */ 115 extern void set_proc_title(char *fmt,...); 116 extern void init_set_proc_title(int argc, char *argv[], char *envp[]); 117 118 // New stuff defined by Xastir project: 119 extern int my_argc; 120 extern char **my_argv; 121 extern char **my_envp; 122 ////////////////////////////////////////////////////////////////////// 123 124 extern int input_x; 125 extern int input_y; 126 127 #define MAX_RELAY_DIGIPEATER_CALLS 50 128 extern char relay_digipeater_calls[10*MAX_RELAY_DIGIPEATER_CALLS]; 129 extern int skip_dupe_checking; 130 extern int serial_char_pacing; // Inter-character delay in ms. 131 extern int disable_all_maps; 132 extern int re_sort_maps; 133 extern Widget trackme_button; 134 extern Widget CAD_close_polygon_menu_item; 135 extern int debug_level; 136 extern int my_position_valid; 137 extern int using_gps_position; 138 extern int transmit_now; 139 extern char DATABASE_FILE[]; 140 extern char DATABASE_POINTER_FILE[]; 141 extern char DATABASE_POINTER_TEMP[]; 142 extern char ALERT_MAP_DIR[400]; 143 extern char SELECTED_MAP_DIR[400]; 144 extern char SELECTED_MAP_DATA[400]; 145 extern char MAP_INDEX_DATA[400]; 146 extern char AUTO_MAP_DIR[400]; 147 extern char SYMBOLS_DIR[400]; 148 extern char LOGFILE_IGATE[400]; 149 extern char LOGFILE_TNC[400]; 150 extern char LOGFILE_NET[400]; 151 extern char LOGFILE_MESSAGE[400]; 152 extern char LOGFILE_WX[400]; 153 extern char LOGFILE_WX_ALERT[400]; 154 extern char HELP_FILE[]; 155 extern char SOUND_DIR[400]; 156 extern time_t WX_ALERTS_REFRESH_TIME; 157 extern time_t remove_ID_message_time; 158 extern int pending_ID_message; 159 extern time_t gps_time; 160 extern time_t POSIT_rate; 161 extern time_t OBJECT_rate; 162 extern time_t update_DR_rate; 163 164 extern time_t posit_last_time; 165 extern time_t posit_next_time; 166 167 extern int smart_beaconing; 168 extern int sb_POSIT_rate; 169 extern int sb_last_heading; 170 extern int sb_current_heading; 171 extern time_t sb_last_posit_time; 172 extern int sb_turn_min; 173 extern int sb_turn_slope; 174 extern int sb_turn_time; 175 extern int sb_posit_fast; 176 extern int sb_posit_slow; 177 extern int sb_low_speed_limit; 178 extern int sb_high_speed_limit; 179 180 extern int pop_up_new_bulletins; 181 extern int view_zero_distance_bulletins; 182 extern int warn_about_mouse_modifiers; 183 extern int predefined_menu_from_file; 184 185 extern int draw_labeled_grid_border; // used to turn on or off border on map 186 187 extern int my_trail_diff_color; // trails for mycall with different ssids have the same or a different color 188 189 extern int output_station_type; 190 191 extern int emergency_beacon; 192 193 typedef struct _selections 194 { 195 int none; 196 int mine; 197 int tnc; 198 int direct; 199 int via_digi; 200 int net; 201 int tactical; 202 int old_data; 203 204 int stations; 205 int fixed_stations; 206 int moving_stations; 207 int weather_stations; 208 int CWOP_wx_stations; 209 int objects; 210 int weather_objects; 211 int gauge_objects; 212 int other_objects; 213 int aircraft_objects; 214 int vessel_objects; 215 } Selections; 216 extern Selections Select_; 217 218 typedef struct _what_to_display 219 { 220 int callsign; 221 int label_all_trackpoints; 222 int symbol; 223 int symbol_rotate; 224 int trail; 225 226 int course; 227 int speed; 228 int speed_short; 229 int altitude; 230 231 int weather; 232 int weather_text; 233 int temperature_only; 234 int wind_barb; 235 236 int aloha_circle; 237 int ambiguity; 238 int phg; 239 int default_phg; 240 int phg_of_moving; 241 242 int df_data; 243 int df_beamwidth_data; 244 int df_bearing_data; 245 int dr_data; 246 int dr_arc; 247 int dr_course; 248 int dr_symbol; 249 250 int dist_bearing; 251 int last_heard; 252 } What_to_display; 253 extern What_to_display Display_; 254 255 extern int currently_selected_stations; 256 extern int currently_selected_stations_save; 257 extern Pixel colors[256]; 258 #define MAX_TRAIL_COLORS 32 259 extern Pixel trail_colors[MAX_TRAIL_COLORS]; 260 extern int current_trail_color; 261 extern int english_units; 262 extern int do_dbstatus; 263 extern int redraw_on_new_data; 264 extern int redo_list; 265 extern int operate_as_an_igate; 266 267 #ifdef TRANSMIT_RAW_WX 268 extern int transmit_raw_wx; 269 #endif // TRANSMIT_RAW_WX 270 271 extern int transmit_compressed_posit; 272 extern int transmit_compressed_objects_items; 273 extern int log_igate; 274 extern int log_tnc_data; 275 extern int log_net_data; 276 extern int log_message_data; 277 extern int log_wx_alert_data; 278 extern int log_wx; 279 extern int snapshots_enabled; 280 extern int kmlsnapshots_enabled; 281 extern char user_dir[]; 282 extern char lang_to_use[30]; 283 extern char my_group; 284 extern char my_symbol; 285 extern char my_phg[MAX_PHG+1]; 286 extern char my_comment[MAX_COMMENT+1]; 287 extern int map_background_color; 288 extern int map_color_fill; 289 extern int letter_style; 290 extern int icon_outline_style; 291 extern int wx_alert_style; 292 extern time_t map_refresh_interval; 293 extern time_t map_refresh_time; 294 extern char sound_command[90]; 295 extern pid_t last_sound_pid; 296 extern int sound_play_new_station; 297 extern int sound_play_new_message; 298 extern int sound_play_prox_message; 299 extern int sound_play_band_open_message; 300 extern int sound_play_wx_alert_message; 301 extern char sound_new_station[90]; 302 extern char sound_new_message[90]; 303 extern char sound_prox_message[90]; 304 extern char sound_band_open_message[90]; 305 extern char sound_wx_alert_message[90]; 306 extern int ATV_screen_ID; 307 extern int festival_speak_ID; 308 extern int festival_speak_new_station; 309 extern int festival_speak_proximity_alert; 310 extern int festival_speak_tracked_proximity_alert; 311 extern int festival_speak_band_opening; 312 extern int festival_speak_new_message_alert; 313 extern int festival_speak_new_message_body; 314 extern int festival_speak_new_weather_alert; 315 extern char prox_min[30]; 316 extern char prox_max[30]; 317 extern time_t sec_old; 318 extern time_t sec_clear; 319 extern time_t aircraft_sec_clear; 320 extern int trail_segment_time; 321 extern int trail_segment_distance; 322 extern int RINO_download_interval; 323 extern int dead_reckoning_timeout; 324 extern char bando_min[30]; 325 extern char bando_max[30]; 326 extern int Display_packet_data_type; 327 extern int show_only_station_capabilities; 328 extern int Display_packet_data_mine_only; 329 extern int menu_x; 330 extern int menu_y; 331 extern long my_last_altitude; 332 extern time_t my_last_altitude_time; 333 extern int my_last_course; 334 extern int my_last_speed; // in knots 335 extern unsigned igate_msgs_tx; 336 extern int symbols_loaded; 337 extern GC gc2; 338 extern GC gc_tint; 339 extern GC gc_stipple; 340 extern GC gc_bigfont; 341 extern int read_file; 342 extern float x_screen_distance; 343 extern time_t max_transmit_time; 344 extern int transmit_disable; 345 extern int posit_tx_disable; 346 extern int object_tx_disable; 347 extern int map_chooser_expand_dirs; 348 extern int request_new_image; 349 extern int disable_all_popups; 350 extern char temp_tracking_station_call[30]; 351 352 extern int coordinate_system; 353 #define USE_DDDDDD 0 354 #define USE_DDMMMM 1 355 #define USE_DDMMSS 2 356 #define USE_UTM 3 357 #define USE_UTM_SPECIAL 4 358 #define USE_MGRS 5 359 360 typedef struct 361 { 362 Widget calling_dialog; // NULL if the calling dialog has been closed. 363 Widget input_lat_deg; // Pointers to calling dialog's widgets 364 Widget input_lat_min; // (Where to get/put the data) 365 Widget input_lat_dir; 366 Widget input_lon_deg; 367 Widget input_lon_min; 368 Widget input_lon_dir; 369 } coordinate_calc_array_type; 370 extern coordinate_calc_array_type coordinate_calc_array; 371 extern void Coordinate_calc(Widget w, XtPointer clientData, XtPointer callData); 372 373 374 extern void HandlePendingEvents(XtAppContext app); 375 extern void create_gc(Widget w); 376 extern void Station_info(Widget w, XtPointer clientData, XtPointer calldata); 377 extern void Station_List(Widget w, XtPointer clientData, XtPointer calldata); 378 extern void Tracks_All_Clear(Widget w, XtPointer clientData, XtPointer callData); 379 extern void Locate_station(Widget w, XtPointer clientData, XtPointer callData); 380 extern void Locate_place(Widget w, XtPointer clientData, XtPointer callData); 381 extern void Geocoder_place(Widget w, XtPointer clientData, XtPointer callData); 382 extern void Display_Wx_Alert(Widget w, XtPointer clientData, XtPointer callData); 383 extern void Auto_msg_option(Widget w, XtPointer clientData, XtPointer calldata); 384 extern void Auto_msg_set(Widget w, XtPointer clientData, XtPointer calldata); 385 extern void Bulletins(Widget w, XtPointer clientData, XtPointer callData); 386 extern void on_off_switch(int switchpos, Widget first, Widget second); 387 extern void busy_cursor(Widget w); 388 extern void pos_dialog(Widget w); 389 extern int create_image(Widget w); 390 391 typedef struct _transparent_color_record 392 { 393 unsigned long trans_color; 394 struct _transparent_color_record *next; 395 } transparent_color_record; 396 397 extern int check_trans (XColor c, transparent_color_record *c_trans_color_head); 398 399 extern void draw_WMS_map (Widget w, char *filenm, int destination_pixmap, char *URL, transparent_color_record *c_trans_color_head, int nocache); 400 401 extern void locate_gui_init(void); 402 extern void geocoder_gui_init(void); 403 extern void location_gui_init(void); 404 extern void view_message_gui_init(void); 405 extern void wx_gui_init(void); 406 extern long get_x_scale(long x, long y, long ysc); 407 408 extern Widget Display_data_dialog; 409 extern Widget Display_data_text; 410 extern Widget text3; 411 extern Widget text4; 412 extern Widget log_indicator; 413 extern void display_zoom_status(void); 414 extern void Center_Zoom(Widget w, XtPointer clientData, XtPointer calldata); 415 extern int center_zoom_override; 416 extern void statusline(char *status_text,int update); 417 extern void stderr_and_statusline(char *message); 418 extern int SayTextInit(void); 419 extern int SayText(char *text); 420 extern Widget auto_msg_toggle; 421 422 // Symbol update stuff 423 extern Widget configure_station_dialog; 424 extern Widget station_config_group_data; 425 extern Widget station_config_symbol_data; 426 extern void updateSymbolPictureCallback(Widget w,XtPointer clientData,XtPointer callData); 427 428 extern Widget object_dialog; 429 extern Widget object_group_data; 430 extern Widget object_symbol_data; 431 extern void updateObjectPictureCallback(Widget w,XtPointer clientData,XtPointer callData); 432 433 extern void Draw_All_CAD_Objects(Widget w); 434 435 // unit conversion 436 extern char un_alt[2+1]; 437 extern char un_dst[2+1]; 438 extern char un_spd[4+1]; 439 extern double cvt_m2len; 440 extern double cvt_dm2len; 441 extern double cvt_hm2len; 442 extern double cvt_kn2len; 443 extern double cvt_mi2len; 444 445 // euid and egid 446 extern uid_t euid; 447 extern gid_t egid; 448 449 /* JMT - works in FreeBSD */ 450 // Note: weird conditional thing is there just to shut up 451 // "ignoring return value" warnings from GCC on newer Linux systems 452 #define DISABLE_SETUID_PRIVILEGE do { \ 453 if (seteuid(getuid())==0){/* all is well*/} \ 454 if (setegid(getgid())==0){/* all is well*/} \ 455 if (debug_level & 4) { fprintf(stderr, "Changing euid to %d and egid to %d\n", (int)getuid(), (int)getgid()); } \ 456 } while(0) 457 #define ENABLE_SETUID_PRIVILEGE do { \ 458 if (seteuid(euid)==0){/* all is well*/} \ 459 if (setegid(egid)==0){/* all is well*/} \ 460 if (debug_level & 4) { fprintf(stderr, "Changing euid to %d and egid to %d\n", (int)euid, (int)egid); } \ 461 } while(0) 462 463 #ifdef HAVE_LIBSHP 464 extern void create_map_from_trail(char *call_sign); 465 #endif // HAVE_LIBSHP 466 467 468 #endif /* XASTIR_MAIN_H */ 469 470 471