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