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 #ifdef HAVE_CONFIG_H
25   #include "config.h"
26 #endif  // HAVE_CONFIG_H
27 
28 #include "snprintf.h"
29 
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <unistd.h>
33 #include <termios.h>
34 #include <Xm/XmAll.h>
35 
36 #include "xastir.h"
37 #include "main.h"
38 #include "xa_config.h"
39 #include "interface.h"
40 #include "wx.h"
41 #include "draw_symbols.h"
42 #include "util.h"
43 #include "db_gis.h"
44 
45 // Must be last include file
46 #include "leak_detection.h"
47 
48 extern XmFontList fontlist1;    // Menu/System fontlist
49 
50 // lesstif (at least as of version 0.94 in 2008), doesn't
51 // have full implementation of combo boxes.
52 #ifndef USE_COMBO_BOX
53   #if (XmVERSION >= 2 && !defined(LESSTIF_VERSION))
54     #define USE_COMBO_BOX 1
55   #endif
56 #endif  // USE_COMBO_BOX
57 
58 Widget configure_interface_dialog = NULL;
59 Widget choose_interface_dialog = NULL;
60 Widget interface_type_list = NULL;
61 Widget control_interface_dialog = NULL;
62 Widget control_iface_list = NULL;
63 
64 
65 static xastir_mutex control_interface_dialog_lock;
66 
67 ioparam devices[MAX_IFACE_DEVICES];
68 xastir_mutex devices_lock;
69 
70 void Choose_interface_destroy_shell(Widget widget, XtPointer clientData, XtPointer callData);
71 void modify_device_list(int option, int port);
72 
73 
74 
75 
76 
interface_gui_init(void)77 void interface_gui_init(void)
78 {
79   init_critical_section( &control_interface_dialog_lock );
80   init_critical_section( &devices_lock );
81 }
82 
83 
84 
85 
86 
87 /*****************************************************/
88 /* Universal Serial GUI                              */
89 /*****************************************************/
90 int device_speed;
91 int device_style;
92 int device_igate_options;
93 int device_data_type;
94 
95 
96 
97 
98 
speed_toggle(Widget UNUSED (widget),XtPointer clientData,XtPointer callData)99 void speed_toggle( Widget UNUSED(widget), XtPointer clientData, XtPointer callData)
100 {
101   char *which = (char *)clientData;
102 
103   XmToggleButtonCallbackStruct *state = (XmToggleButtonCallbackStruct *)callData;
104   if (state->set)
105   {
106     device_speed = atoi(which);
107   }
108   else
109   {
110     device_speed = 0;
111   }
112 }
113 
114 
115 
116 
117 
style_toggle(Widget UNUSED (widget),XtPointer clientData,XtPointer callData)118 void style_toggle( Widget UNUSED(widget), XtPointer clientData, XtPointer callData)
119 {
120   char *which = (char *)clientData;
121 
122   XmToggleButtonCallbackStruct *state = (XmToggleButtonCallbackStruct *)callData;
123 
124   if (state->set)
125   {
126     device_style = atoi(which);
127   }
128   else
129   {
130     device_style = 0;
131   }
132 }
133 
134 
135 
136 
137 
data_toggle(Widget UNUSED (widget),XtPointer clientData,XtPointer callData)138 void data_toggle( Widget UNUSED(widget), XtPointer clientData, XtPointer callData)
139 {
140   char *which = (char *)clientData;
141 
142   XmToggleButtonCallbackStruct *state = (XmToggleButtonCallbackStruct *)callData;
143 
144   if (state->set)
145   {
146     device_data_type = atoi(which);
147   }
148   else
149   {
150     device_data_type = 0;
151   }
152 }
153 
154 
155 
156 
157 
rain_gauge_toggle(Widget UNUSED (widget),XtPointer clientData,XtPointer callData)158 void rain_gauge_toggle( Widget UNUSED(widget), XtPointer clientData, XtPointer callData)
159 {
160   char *which = (char *)clientData;
161 
162   XmToggleButtonCallbackStruct *state = (XmToggleButtonCallbackStruct *)callData;
163 
164   if (state->set)
165   {
166     WX_rain_gauge_type = atoi(which);
167   }
168   else
169   {
170     WX_rain_gauge_type = 0;
171   }
172 }
173 
174 
175 
176 
177 
igate_toggle(Widget UNUSED (widget),XtPointer clientData,XtPointer callData)178 void igate_toggle( Widget UNUSED(widget), XtPointer clientData, XtPointer callData)
179 {
180   char *which = (char *)clientData;
181 
182   XmToggleButtonCallbackStruct *state = (XmToggleButtonCallbackStruct *)callData;
183 
184   if (state->set)
185   {
186     device_igate_options = atoi(which);
187   }
188   else
189   {
190     device_igate_options = 0;
191   }
192 }
193 
194 
195 
196 
197 
set_port_speed(int port)198 void set_port_speed(int port)
199 {
200 
201   switch (device_speed)
202   {
203     case(1):
204       devices[port].sp=B300;
205       break;
206 
207     case(2):
208       devices[port].sp=B1200;
209       break;
210 
211     case(3):
212       devices[port].sp=B2400;
213       break;
214 
215     case(4):
216       devices[port].sp=B4800;
217       break;
218 
219     case(5):
220       devices[port].sp=B9600;
221       break;
222 
223     case(6):
224       devices[port].sp=B19200;
225       break;
226 
227     case(7):
228       devices[port].sp=B38400;
229       break;
230 
231 #ifndef __LSB__
232     case(8):
233       devices[port].sp=B57600;
234       break;
235 
236     case(9):
237       devices[port].sp=B115200;
238       break;
239 
240     case(10):
241 #ifndef B230400
242       devices[port].sp=B115200;
243 #else   // B230400
244       devices[port].sp=B230400;
245 #endif  // B230400
246       break;
247 #endif  // __LSB__
248 
249     default:
250       break;
251   }
252 }
253 
254 
255 
256 
257 
258 
259 
260 /*****************************************************/
261 /* Configure Serial TNC GUI                          */
262 /*****************************************************/
263 
264 /**** TNC CONFIGURE ******/
265 int TNC_port;
266 int TNC_device;
267 Widget config_TNC_dialog = (Widget)NULL;
268 Widget TNC_active_on_startup;
269 Widget TNC_transmit_data;
270 Widget TNC_device_name_data;
271 Widget TNC_radio_port_data; // Used only for Multi-Port TNC's
272 Widget TNC_converse_string;
273 Widget TNC_comment;
274 Widget TNC_unproto1_data;
275 Widget TNC_unproto2_data;
276 Widget TNC_unproto3_data;
277 Widget TNC_igate_data;
278 Widget TNC_up_file_data;
279 Widget TNC_down_file_data;
280 Widget TNC_txdelay;
281 Widget TNC_persistence;
282 Widget TNC_slottime;
283 Widget TNC_txtail;
284 Widget TNC_init_kiss;   // Used to initialize KISS-Mode
285 Widget TNC_fullduplex;
286 Widget TNC_extra_delay;
287 Widget TNC_GPS_set_time;
288 Widget TNC_AUX_GPS_Retrieve_Needed;
289 Widget TNC_relay_digipeat;
290 
291 
292 
293 
294 
Config_TNC_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))295 void Config_TNC_destroy_shell( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
296 {
297   Widget shell = (Widget) clientData;
298   XtPopdown(shell);
299   XtDestroyWidget(shell);
300   config_TNC_dialog = (Widget)NULL;
301   if (choose_interface_dialog != NULL)
302   {
303     Choose_interface_destroy_shell(choose_interface_dialog,choose_interface_dialog,NULL);
304   }
305   choose_interface_dialog = (Widget)NULL;
306 }
307 
308 
309 
310 
311 
Config_TNC_change_data(Widget widget,XtPointer clientData,XtPointer callData)312 void Config_TNC_change_data(Widget widget, XtPointer clientData, XtPointer callData)
313 {
314   int type;
315   int was_up;
316   char *temp_ptr;
317 
318 
319   busy_cursor(appshell);
320 
321   was_up=0;
322   if (get_device_status(TNC_port) == DEVICE_IN_USE)
323   {
324     /* if active shutdown before changes are made */
325     /*fprintf(stderr,"Device is up, shutting down\n");*/
326 
327 //WE7U:  Modify for MKISS?
328     (void)del_device(TNC_port);
329 
330     was_up=1;
331     usleep(1000000); // Wait for one second
332   }
333 
334   /* device type */
335   type=DEVICE_SERIAL_TNC; // Default in case not defined next
336   if (TNC_device)
337   {
338     type=TNC_device;  // Modified to support more than two types
339   }
340 
341   begin_critical_section(&devices_lock, "interface_gui.c:Config_TNC_change_data" );
342 
343   temp_ptr = XmTextFieldGetString(TNC_device_name_data);
344   xastir_snprintf(devices[TNC_port].device_name,
345                   sizeof(devices[TNC_port].device_name),
346                   "%s",
347                   temp_ptr);
348   XtFree(temp_ptr);
349 
350   (void)remove_trailing_spaces(devices[TNC_port].device_name);
351 
352   temp_ptr = XmTextFieldGetString(TNC_converse_string);
353   xastir_snprintf(devices[TNC_port].device_converse_string,
354                   sizeof(devices[TNC_port].device_converse_string),
355                   "%s",
356                   temp_ptr);
357   XtFree(temp_ptr);
358 
359   (void)remove_trailing_spaces(devices[TNC_port].device_converse_string);
360 
361   temp_ptr = XmTextFieldGetString(TNC_comment);
362   xastir_snprintf(devices[TNC_port].comment,
363                   sizeof(devices[TNC_port].comment),
364                   "%s",
365                   temp_ptr);
366   XtFree(temp_ptr);
367 
368   (void)remove_trailing_spaces(devices[TNC_port].comment);
369 
370   if (devices[TNC_port].device_type == DEVICE_SERIAL_MKISS_TNC)
371   {
372 
373     // If MKISS, fetch "radio_port".  If empty, store a zero.
374     temp_ptr = XmTextFieldGetString(TNC_radio_port_data);
375     xastir_snprintf(devices[TNC_port].radio_port,
376                     sizeof(devices[TNC_port].radio_port),
377                     "%s",
378                     temp_ptr);
379     XtFree(temp_ptr);
380 
381     (void)remove_trailing_spaces(devices[TNC_port].radio_port);
382 
383     if (strcmp(devices[TNC_port].radio_port,"") == 0)
384     {
385       xastir_snprintf(devices[TNC_port].radio_port,
386                       sizeof(devices[TNC_port].radio_port),
387                       "0");
388     }
389 //fprintf(stderr,"Radio Port: %s\n",devices[TNC_port].radio_port);
390   }
391 
392   if (XmToggleButtonGetState(TNC_active_on_startup))
393   {
394     devices[TNC_port].connect_on_startup=1;
395   }
396   else
397   {
398     devices[TNC_port].connect_on_startup=0;
399   }
400 
401   if(XmToggleButtonGetState(TNC_transmit_data))
402   {
403     devices[TNC_port].transmit_data=1;
404     if ( (devices[TNC_port].device_type == DEVICE_SERIAL_KISS_TNC)
405          || (devices[TNC_port].device_type == DEVICE_SERIAL_MKISS_TNC) )
406     {
407 
408 #ifdef SERIAL_KISS_RELAY_DIGI
409       XtSetSensitive(TNC_relay_digipeat, TRUE);
410 #else
411       XtSetSensitive(TNC_relay_digipeat, FALSE);
412 #endif  // SERIAL_KISS_RELAY_DIGI
413 
414     }
415 
416   }
417   else
418   {
419     devices[TNC_port].transmit_data=0;
420     if ( (devices[TNC_port].device_type == DEVICE_SERIAL_KISS_TNC)
421          || (devices[TNC_port].device_type == DEVICE_SERIAL_MKISS_TNC) )
422     {
423       XtSetSensitive(TNC_relay_digipeat, FALSE);
424     }
425   }
426 
427   if ( (type == DEVICE_SERIAL_KISS_TNC)
428        || (type == DEVICE_SERIAL_MKISS_TNC) )
429   {
430 
431     if (XmToggleButtonGetState(TNC_relay_digipeat))
432     {
433       devices[TNC_port].relay_digipeat=1;
434     }
435     else
436     {
437       devices[TNC_port].relay_digipeat=0;
438     }
439   }
440 
441   switch(type)
442   {
443 
444     case DEVICE_SERIAL_TNC:
445     case DEVICE_SERIAL_TNC_HSP_GPS:
446     case DEVICE_SERIAL_TNC_AUX_GPS:
447       if (XmToggleButtonGetState(TNC_extra_delay))
448       {
449         devices[TNC_port].tnc_extra_delay=1000000;  // 1,000,000 us
450       }
451       else
452       {
453         devices[TNC_port].tnc_extra_delay=0;
454       }
455       break;
456     default:
457       break;
458   }
459 
460   switch(type)
461   {
462 
463     case DEVICE_SERIAL_TNC_HSP_GPS:
464     case DEVICE_SERIAL_TNC_AUX_GPS:
465       if (XmToggleButtonGetState(TNC_GPS_set_time))
466       {
467         devices[TNC_port].set_time=1;
468       }
469       else
470       {
471         devices[TNC_port].set_time=0;
472       }
473 
474       if (type == DEVICE_SERIAL_TNC_AUX_GPS)
475       {
476         if (XmToggleButtonGetState(TNC_AUX_GPS_Retrieve_Needed))
477         {
478           devices[TNC_port].gps_retrieve=DEFAULT_GPS_RETR;
479         }
480         else
481         {
482           devices[TNC_port].gps_retrieve=0;
483         }
484       }
485 
486       break;
487 
488     case DEVICE_SERIAL_TNC:
489     case DEVICE_SERIAL_KISS_TNC:
490     case DEVICE_SERIAL_MKISS_TNC:
491     default:
492       break;
493   }
494 
495   set_port_speed(TNC_port);
496 
497   devices[TNC_port].style=device_style;
498   devices[TNC_port].igate_options=device_igate_options;
499 
500   temp_ptr = XmTextFieldGetString(TNC_unproto1_data);
501   xastir_snprintf(devices[TNC_port].unproto1,
502                   sizeof(devices[TNC_port].unproto1),
503                   "%s",
504                   temp_ptr);
505   XtFree(temp_ptr);
506 
507   (void)remove_trailing_spaces(devices[TNC_port].unproto1);
508 
509   if(check_unproto_path(devices[TNC_port].unproto1))
510   {
511     popup_message_always(langcode("WPUPCFT042"),
512                          langcode("WPUPCFT043"));
513   }
514 
515   temp_ptr = XmTextFieldGetString(TNC_unproto2_data);
516   xastir_snprintf(devices[TNC_port].unproto2,
517                   sizeof(devices[TNC_port].unproto2),
518                   "%s",
519                   temp_ptr);
520   XtFree(temp_ptr);
521 
522   (void)remove_trailing_spaces(devices[TNC_port].unproto2);
523 
524   if(check_unproto_path(devices[TNC_port].unproto2))
525   {
526     popup_message_always(langcode("WPUPCFT042"),
527                          langcode("WPUPCFT043"));
528   }
529 
530   temp_ptr = XmTextFieldGetString(TNC_unproto3_data);
531   xastir_snprintf(devices[TNC_port].unproto3,
532                   sizeof(devices[TNC_port].unproto3),
533                   "%s",
534                   temp_ptr);
535   XtFree(temp_ptr);
536 
537   (void)remove_trailing_spaces(devices[TNC_port].unproto3);
538 
539   if(check_unproto_path(devices[TNC_port].unproto3))
540   {
541     popup_message_always(langcode("WPUPCFT042"),
542                          langcode("WPUPCFT043"));
543   }
544 
545   temp_ptr = XmTextFieldGetString(TNC_igate_data);
546   xastir_snprintf(devices[TNC_port].unproto_igate,
547                   sizeof(devices[TNC_port].unproto_igate),
548                   "%s",
549                   temp_ptr);
550   XtFree(temp_ptr);
551 
552   (void)remove_trailing_spaces(devices[TNC_port].unproto_igate);
553 
554   if(check_unproto_path(devices[TNC_port].unproto_igate))
555   {
556     popup_message_always(langcode("WPUPCFT044"),
557                          langcode("WPUPCFT043"));
558   }
559 
560 
561   if ( (type == DEVICE_SERIAL_KISS_TNC)
562        || (type == DEVICE_SERIAL_MKISS_TNC) )
563   {
564 
565     // KISS TNC, no up/down files for this one!
566     devices[TNC_port].tnc_up_file[0] = '\0';
567     devices[TNC_port].tnc_down_file[0] = '\0';
568 
569     // Instead we have KISS parameters to set
570 
571 // We really should do some validation of these strings
572 
573 //WE7U:  Modify for MKISS:  Must send to the proper Radio Port.
574     temp_ptr = XmTextFieldGetString(TNC_txdelay);
575     xastir_snprintf(devices[TNC_port].txdelay,
576                     sizeof(devices[TNC_port].txdelay),
577                     "%s",
578                     temp_ptr);
579     XtFree(temp_ptr);
580 
581     send_kiss_config(TNC_port,0,0x01,atoi(devices[TNC_port].txdelay));
582 
583     temp_ptr = XmTextFieldGetString(TNC_persistence);
584     xastir_snprintf(devices[TNC_port].persistence,
585                     sizeof(devices[TNC_port].persistence),
586                     "%s",
587                     temp_ptr);
588     XtFree(temp_ptr);
589 
590     send_kiss_config(TNC_port,0,0x02,atoi(devices[TNC_port].persistence));
591 
592     temp_ptr = XmTextFieldGetString(TNC_slottime);
593     xastir_snprintf(devices[TNC_port].slottime,
594                     sizeof(devices[TNC_port].slottime),
595                     "%s",
596                     temp_ptr);
597     XtFree(temp_ptr);
598 
599     send_kiss_config(TNC_port,0,0x03,atoi(devices[TNC_port].slottime));
600 
601     temp_ptr = XmTextFieldGetString(TNC_txtail);
602     xastir_snprintf(devices[TNC_port].txtail,
603                     sizeof(devices[TNC_port].txtail),
604                     "%s",
605                     temp_ptr);
606     XtFree(temp_ptr);
607 
608     send_kiss_config(TNC_port,0,0x04,atoi(devices[TNC_port].txtail));
609 
610     if (XmToggleButtonGetState(TNC_fullduplex))
611     {
612       devices[TNC_port].fullduplex=1;
613     }
614     else
615     {
616       devices[TNC_port].fullduplex=0;
617     }
618     send_kiss_config(TNC_port,0,0x05,devices[TNC_port].fullduplex);
619 
620     // For KISS-mode
621     if (XmToggleButtonGetState(TNC_init_kiss))
622     {
623       devices[TNC_port].init_kiss=1;
624     }
625     else
626     {
627       devices[TNC_port].init_kiss=0;
628     }
629   }
630   else
631   {
632     temp_ptr = XmTextFieldGetString(TNC_up_file_data);
633     xastir_snprintf(devices[TNC_port].tnc_up_file,
634                     sizeof(devices[TNC_port].tnc_up_file),
635                     "%s",
636                     temp_ptr);
637     XtFree(temp_ptr);
638 
639     (void)remove_trailing_spaces(devices[TNC_port].tnc_up_file);
640 
641     temp_ptr = XmTextFieldGetString(TNC_down_file_data);
642     xastir_snprintf(devices[TNC_port].tnc_down_file,
643                     sizeof(devices[TNC_port].tnc_down_file),
644                     "%s",
645                     temp_ptr);
646     XtFree(temp_ptr);
647 
648     (void)remove_trailing_spaces(devices[TNC_port].tnc_down_file);
649   }
650 
651 //WE7U:  Modify for MKISS?
652   /* reopen port*/
653   if (was_up)
654   {
655     (void)add_device(TNC_port,
656                      type,
657                      devices[TNC_port].device_name,
658                      "",
659                      -1,
660                      devices[TNC_port].sp,
661                      devices[TNC_port].style,
662                      0,
663                      "");
664   }
665 
666   /* delete list */
667 //    modify_device_list(4,0);
668 
669 
670   /* add device type */
671   devices[TNC_port].device_type=type;
672 
673   /* rebuild list */
674 //    modify_device_list(3,0);
675 
676   end_critical_section(&devices_lock, "interface_gui.c:Config_TNC_change_data" );
677 
678   // Rebuild the interface control list
679   update_interface_list();
680 
681   Config_TNC_destroy_shell(widget,clientData,callData);
682 }
683 
684 
685 
686 
687 
Config_TNC(Widget UNUSED (w),int device_type,int config_type,int port)688 void Config_TNC( Widget UNUSED(w), int device_type, int config_type, int port)
689 {
690   static Widget  pane, scrollwindow, form, form2, button_ok, button_cancel,
691          frame, frame2, frame3, frame4,
692          setup1, setup3, setup4,
693          device, converse, comment, speed_box,
694          speed_300, speed_1200, speed_2400, speed_4800, speed_9600,
695          speed_19200, speed_38400;
696 //  static Widget setup, setup2, speed;
697 #ifndef __LSB__
698   static Widget speed_57600, speed_115200, speed_230400;
699 #endif  // __LSB__
700   static Widget style_box,
701          style_8n1, style_7e1, style_7o1,
702          igate_box,
703          igate_o_0, igate_o_1, igate_o_2,
704          igate_label,
705          proto, proto1, proto2, proto3,
706          radio_port_label;
707 //  static Widget style, igate;
708   char temp[50];
709   Atom delw;
710   Arg al[50];                      /* Arg List */
711   register unsigned int ac = 0;   /* Arg Count */
712   register char *tmp;
713 
714   tmp=(char *)NULL;
715   char tmp_string[100];
716 
717   if(!config_TNC_dialog)
718   {
719     TNC_port=port;
720     TNC_device=device_type;
721     /* config_TNC_dialog = XtVaCreatePopupShell(device_type ? langcode("WPUPCFT023"):langcode("WPUPCFT001"),
722      -- replaced by KB6MER with the lines below for adding AUX GPS type TNC
723     */
724     switch(device_type)
725     {
726       case DEVICE_SERIAL_TNC:
727         tmp=langcode("WPUPCFT001");
728         break;
729 
730       case DEVICE_SERIAL_KISS_TNC:
731         tmp=langcode("WPUPCFT030");
732         break;
733 
734       case DEVICE_SERIAL_MKISS_TNC:
735         tmp=langcode("WPUPCFT040");
736         break;
737 
738       case DEVICE_SERIAL_TNC_HSP_GPS:
739         tmp=langcode("WPUPCFT023");
740         break;
741 
742       case DEVICE_SERIAL_TNC_AUX_GPS:
743         tmp=langcode("WPUPCFT028");
744         break;
745 
746       default:
747         // "Configure TNC w/INVALID ENUM"
748         sprintf(tmp_string, langcode("WPUPCFT029"), (int)device_type);
749         tmp = tmp_string;
750         break;
751     }
752 
753     config_TNC_dialog = XtVaCreatePopupShell(
754                           tmp,
755                           xmDialogShellWidgetClass, appshell,
756                           XmNdeleteResponse,XmDESTROY,
757                           XmNdefaultPosition, FALSE,
758                           XmNfontList, fontlist1,
759                           NULL);
760 
761     pane = XtVaCreateWidget("Config_TNC pane",xmPanedWindowWidgetClass, config_TNC_dialog,
762                             XmNbackground, colors[0xff],
763                             NULL);
764 
765     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
766                                            xmScrolledWindowWidgetClass,
767                                            pane,
768                                            XmNscrollingPolicy, XmAUTOMATIC,
769                                            NULL);
770 
771     form =  XtVaCreateWidget("Config_TNC form",
772                              xmFormWidgetClass,
773                              scrollwindow,
774                              XmNfractionBase, 5,
775                              XmNbackground, colors[0xff],
776                              XmNautoUnmanage, FALSE,
777                              XmNshadowThickness, 1,
778                              NULL);
779 
780     TNC_active_on_startup = XtVaCreateManagedWidget(langcode("UNIOP00011"),xmToggleButtonWidgetClass,form,
781                             XmNnavigationType, XmTAB_GROUP,
782                             XmNtraversalOn, TRUE,
783                             XmNtopAttachment, XmATTACH_FORM,
784                             XmNtopOffset, 5,
785                             XmNbottomAttachment, XmATTACH_NONE,
786                             XmNleftAttachment, XmATTACH_FORM,
787                             XmNleftOffset,10,
788                             XmNrightAttachment, XmATTACH_NONE,
789                             XmNbackground, colors[0xff],
790                             XmNfontList, fontlist1,
791                             NULL);
792 
793     TNC_transmit_data = XtVaCreateManagedWidget(langcode("UNIOP00010"),xmToggleButtonWidgetClass,form,
794                         XmNnavigationType, XmTAB_GROUP,
795                         XmNtraversalOn, TRUE,
796                         XmNtopAttachment, XmATTACH_FORM,
797                         XmNtopOffset, 5,
798                         XmNbottomAttachment, XmATTACH_NONE,
799                         XmNleftAttachment, XmATTACH_WIDGET,
800                         XmNleftWidget, TNC_active_on_startup,
801                         XmNleftOffset,35,
802                         XmNrightAttachment, XmATTACH_NONE,
803                         XmNbackground, colors[0xff],
804                         XmNfontList, fontlist1,
805                         NULL);
806 
807     switch(device_type)
808     {
809       case DEVICE_SERIAL_TNC:
810       case DEVICE_SERIAL_TNC_HSP_GPS:
811       case DEVICE_SERIAL_TNC_AUX_GPS:
812         TNC_extra_delay = XtVaCreateManagedWidget(langcode("UNIOP00038"), xmToggleButtonWidgetClass, form,
813                           XmNnavigationType, XmTAB_GROUP,
814                           XmNtraversalOn, TRUE,
815                           XmNtopAttachment, XmATTACH_FORM,
816                           XmNtopOffset, 5,
817                           XmNbottomAttachment, XmATTACH_NONE,
818                           XmNleftAttachment, XmATTACH_WIDGET,
819                           XmNleftWidget, TNC_transmit_data,
820                           XmNleftOffset,35,
821                           XmNrightAttachment, XmATTACH_NONE,
822                           XmNbackground, colors[0xff],
823                           XmNfontList, fontlist1,
824                           NULL);
825     }
826 
827     switch(device_type)
828     {
829       case DEVICE_SERIAL_TNC_HSP_GPS:
830       case DEVICE_SERIAL_TNC_AUX_GPS:
831         TNC_GPS_set_time  = XtVaCreateManagedWidget(langcode("UNIOP00029"), xmToggleButtonWidgetClass, form,
832                             XmNnavigationType, XmTAB_GROUP,
833                             XmNtraversalOn, TRUE,
834                             XmNtopAttachment, XmATTACH_FORM,
835                             XmNtopOffset, 5,
836                             XmNbottomAttachment, XmATTACH_NONE,
837                             XmNleftAttachment, XmATTACH_WIDGET,
838                             XmNleftWidget, TNC_extra_delay,
839                             XmNleftOffset,35,
840                             XmNrightAttachment, XmATTACH_NONE,
841                             XmNbackground, colors[0xff],
842                             XmNfontList, fontlist1,
843                             NULL);
844 
845 // We can only set the time properly on Linux systems
846 #ifndef HAVE_SETTIMEOFDAY
847         XtSetSensitive(TNC_GPS_set_time,FALSE);
848 #endif  // HAVE_SETTIMEOFDAY
849 #ifdef __CYGWIN__
850         XtSetSensitive(TNC_GPS_set_time,FALSE);
851 #endif  // __CYGWIN__
852 
853         // Let the user turn off the Control-E thing
854         // that only SOME "tnc-with-gps" devices actually
855         // require, and that confuse the heck out of others.
856         // D700 is among the confused, by the way.  TVR -- 14 Aug 2012
857         if (device_type == DEVICE_SERIAL_TNC_AUX_GPS)
858         {
859           TNC_AUX_GPS_Retrieve_Needed  = XtVaCreateManagedWidget(langcode("UNIOP00037"), xmToggleButtonWidgetClass, form,
860                                          XmNnavigationType, XmTAB_GROUP,
861                                          XmNtraversalOn, TRUE,
862                                          XmNtopAttachment, XmATTACH_FORM,
863                                          XmNtopOffset, 5,
864                                          XmNbottomAttachment, XmATTACH_NONE,
865                                          XmNleftAttachment, XmATTACH_WIDGET,
866                                          XmNleftWidget, TNC_GPS_set_time,
867                                          XmNleftOffset,35,
868                                          XmNrightAttachment, XmATTACH_NONE,
869                                          XmNbackground, colors[0xff],
870                                          XmNfontList, fontlist1,
871                                          NULL);
872         }
873 
874         break;
875       case DEVICE_SERIAL_KISS_TNC:
876       case DEVICE_SERIAL_MKISS_TNC:
877         // Add a "RELAY Digipeat?" button for KISS/MKISS TNC's
878         TNC_relay_digipeat = XtVaCreateManagedWidget(langcode("UNIOP00030"),xmToggleButtonWidgetClass,form,
879                              XmNnavigationType, XmTAB_GROUP,
880                              XmNtraversalOn, TRUE,
881                              XmNtopAttachment, XmATTACH_FORM,
882                              XmNtopOffset, 5,
883                              XmNbottomAttachment, XmATTACH_NONE,
884                              XmNleftAttachment, XmATTACH_WIDGET,
885                              XmNleftWidget, TNC_transmit_data,
886                              XmNleftOffset,35,
887                              XmNrightAttachment, XmATTACH_NONE,
888                              XmNbackground, colors[0xff],
889                              XmNfontList, fontlist1,
890                              NULL);
891 
892 #ifdef SERIAL_KISS_RELAY_DIGI
893         XtSetSensitive(TNC_relay_digipeat, TRUE);
894 #else
895         XtSetSensitive(TNC_relay_digipeat, FALSE);
896 #endif  // SERIAL_KISS_RELAY_DIGIPEAT
897 
898         break;
899 
900       case DEVICE_SERIAL_TNC:
901       default:
902         break;
903     }
904 
905     device = XtVaCreateManagedWidget(langcode("WPUPCFT003"),xmLabelWidgetClass, form,
906                                      XmNtopAttachment, XmATTACH_WIDGET,
907                                      XmNtopWidget, TNC_active_on_startup,
908                                      XmNtopOffset, 5,
909                                      XmNbottomAttachment, XmATTACH_NONE,
910                                      XmNleftAttachment, XmATTACH_FORM,
911                                      XmNleftOffset, 10,
912                                      XmNrightAttachment, XmATTACH_NONE,
913                                      XmNbackground, colors[0xff],
914                                      XmNfontList, fontlist1,
915                                      NULL);
916 
917     TNC_device_name_data = XtVaCreateManagedWidget("Config_TNC device_data", xmTextFieldWidgetClass, form,
918                            XmNnavigationType, XmTAB_GROUP,
919                            XmNtraversalOn, TRUE,
920                            XmNeditable,   TRUE,
921                            XmNcursorPositionVisible, TRUE,
922                            XmNsensitive, TRUE,
923                            XmNshadowThickness,    1,
924                            XmNcolumns, 15,
925                            XmNwidth, ((15*7)+2),
926                            XmNmaxLength, MAX_DEVICE_NAME,
927                            XmNbackground, colors[0x0f],
928                            XmNtopAttachment,XmATTACH_WIDGET,
929                            XmNtopWidget, TNC_active_on_startup,
930                            XmNtopOffset, 2,
931                            XmNbottomAttachment,XmATTACH_NONE,
932                            XmNleftAttachment, XmATTACH_WIDGET,
933                            XmNleftWidget, device,
934                            XmNleftOffset, 12,
935                            XmNrightAttachment,XmATTACH_NONE,
936                            XmNfontList, fontlist1,
937                            NULL);
938 
939 //        converse = XtVaCreateManagedWidget(langcode("WPUPCFS017"),xmLabelWidgetClass, form,
940     converse = XtVaCreateManagedWidget("Converse CMD:",xmLabelWidgetClass, form,
941                                        XmNtopAttachment, XmATTACH_WIDGET,
942                                        XmNtopWidget, TNC_active_on_startup,
943                                        XmNtopOffset, 5,
944                                        XmNbottomAttachment, XmATTACH_NONE,
945                                        XmNleftAttachment, XmATTACH_WIDGET,
946                                        XmNleftWidget, TNC_device_name_data,
947                                        XmNleftOffset, 10,
948                                        XmNrightAttachment, XmATTACH_NONE,
949                                        XmNbackground, colors[0xff],
950                                        XmNfontList, fontlist1,
951                                        NULL);
952 
953     TNC_converse_string = XtVaCreateManagedWidget("Config_TNC comment", xmTextFieldWidgetClass, form,
954                           XmNnavigationType, XmTAB_GROUP,
955                           XmNtraversalOn, TRUE,
956                           XmNeditable,   TRUE,
957                           XmNcursorPositionVisible, TRUE,
958                           XmNsensitive, TRUE,
959                           XmNshadowThickness,    1,
960                           XmNcolumns, 15,
961                           XmNwidth, ((15*7)+2),
962                           XmNmaxLength, 49,
963                           XmNbackground, colors[0x0f],
964                           XmNtopAttachment,XmATTACH_WIDGET,
965                           XmNtopWidget, TNC_active_on_startup,
966                           XmNtopOffset, 2,
967                           XmNbottomAttachment,XmATTACH_NONE,
968                           XmNleftAttachment, XmATTACH_WIDGET,
969                           XmNleftWidget, converse,
970                           XmNleftOffset, 12,
971                           XmNrightAttachment,XmATTACH_NONE,
972                           XmNfontList, fontlist1,
973                           NULL);
974 
975     comment = XtVaCreateManagedWidget(langcode("WPUPCFS017"),xmLabelWidgetClass, form,
976                                       XmNtopAttachment, XmATTACH_WIDGET,
977                                       XmNtopWidget, TNC_active_on_startup,
978                                       XmNtopOffset, 5,
979                                       XmNbottomAttachment, XmATTACH_NONE,
980                                       XmNleftAttachment, XmATTACH_WIDGET,
981                                       XmNleftWidget, TNC_converse_string,
982                                       XmNleftOffset, 10,
983                                       XmNrightAttachment, XmATTACH_NONE,
984                                       XmNbackground, colors[0xff],
985                                       XmNfontList, fontlist1,
986                                       NULL);
987 
988     TNC_comment = XtVaCreateManagedWidget("Config_TNC comment", xmTextFieldWidgetClass, form,
989                                           XmNnavigationType, XmTAB_GROUP,
990                                           XmNtraversalOn, TRUE,
991                                           XmNeditable,   TRUE,
992                                           XmNcursorPositionVisible, TRUE,
993                                           XmNsensitive, TRUE,
994                                           XmNshadowThickness,    1,
995                                           XmNcolumns, 15,
996                                           XmNwidth, ((15*7)+2),
997                                           XmNmaxLength, 49,
998                                           XmNbackground, colors[0x0f],
999                                           XmNtopAttachment,XmATTACH_WIDGET,
1000                                           XmNtopWidget, TNC_active_on_startup,
1001                                           XmNtopOffset, 2,
1002                                           XmNbottomAttachment,XmATTACH_NONE,
1003                                           XmNleftAttachment, XmATTACH_WIDGET,
1004                                           XmNleftWidget, comment,
1005                                           XmNleftOffset, 12,
1006                                           XmNrightAttachment,XmATTACH_NONE,
1007                                           XmNfontList, fontlist1,
1008                                           NULL);
1009 
1010     if (device_type ==  DEVICE_SERIAL_MKISS_TNC)
1011     {
1012       // "Radio Port" field for Multi-Port KISS TNC's.
1013 
1014       radio_port_label = XtVaCreateManagedWidget(langcode("WPUPCFT041"),
1015                          xmLabelWidgetClass, form,
1016                          XmNtopAttachment, XmATTACH_WIDGET,
1017                          XmNtopWidget, TNC_active_on_startup,
1018                          XmNtopOffset, 5,
1019                          XmNbottomAttachment, XmATTACH_NONE,
1020                          XmNleftAttachment, XmATTACH_WIDGET,
1021                          XmNleftWidget, TNC_comment,
1022                          XmNleftOffset, 10,
1023                          XmNrightAttachment, XmATTACH_NONE,
1024                          XmNbackground, colors[0xff],
1025                          XmNfontList, fontlist1,
1026                          NULL);
1027 
1028       TNC_radio_port_data = XtVaCreateManagedWidget("Config_TNC device_data",
1029                             xmTextFieldWidgetClass, form,
1030                             XmNnavigationType, XmTAB_GROUP,
1031                             XmNtraversalOn, TRUE,
1032                             XmNeditable,   TRUE,
1033                             XmNcursorPositionVisible, TRUE,
1034                             XmNsensitive, TRUE,
1035                             XmNshadowThickness,    1,
1036                             XmNcolumns, 5,
1037                             XmNwidth, ((5*7)+2),
1038                             XmNmaxLength, 2,
1039                             XmNbackground, colors[0x0f],
1040                             XmNtopAttachment,XmATTACH_WIDGET,
1041                             XmNtopWidget, TNC_active_on_startup,
1042                             XmNtopOffset, 2,
1043                             XmNbottomAttachment,XmATTACH_NONE,
1044                             XmNleftAttachment, XmATTACH_WIDGET,
1045                             XmNleftWidget, radio_port_label,
1046                             XmNleftOffset, 12,
1047                             XmNrightAttachment,XmATTACH_NONE,
1048                             XmNfontList, fontlist1,
1049                             NULL);
1050     }
1051 
1052     frame = XtVaCreateManagedWidget("Config_TNC frame", xmFrameWidgetClass, form,
1053                                     XmNtopAttachment,XmATTACH_WIDGET,
1054                                     XmNtopOffset, 10,
1055                                     XmNtopWidget, device,
1056                                     XmNbottomAttachment,XmATTACH_NONE,
1057                                     XmNleftAttachment, XmATTACH_FORM,
1058                                     XmNleftOffset, 10,
1059                                     XmNrightAttachment,XmATTACH_FORM,
1060                                     XmNrightOffset, 10,
1061                                     XmNbackground, colors[0xff],
1062                                     NULL);
1063 
1064     // speed
1065     XtVaCreateManagedWidget(langcode("WPUPCFT004"),xmLabelWidgetClass, frame,
1066                             XmNchildType, XmFRAME_TITLE_CHILD,
1067                             XmNbackground, colors[0xff],
1068                             XmNfontList, fontlist1,
1069                             NULL);
1070 
1071     /*set args for color */
1072     ac=0;
1073     XtSetArg(al[ac], XmNbackground, colors[0xff]);
1074     ac++;
1075 
1076     speed_box = XmCreateRadioBox(frame,"Config_TNC Speed_box",al,ac);
1077     XtVaSetValues(speed_box,XmNnumColumns,5,NULL);
1078 
1079     speed_300 = XtVaCreateManagedWidget(langcode("WPUPCFT005"),xmToggleButtonGadgetClass,
1080                                         speed_box,
1081                                         XmNbackground, colors[0xff],
1082                                         XmNfontList, fontlist1,
1083                                         NULL);
1084 
1085     XtAddCallback(speed_300,XmNvalueChangedCallback,speed_toggle,"1");
1086 
1087     speed_1200 = XtVaCreateManagedWidget(langcode("WPUPCFT006"),xmToggleButtonGadgetClass,
1088                                          speed_box,
1089                                          XmNbackground, colors[0xff],
1090                                          XmNfontList, fontlist1,
1091                                          NULL);
1092     XtAddCallback(speed_1200,XmNvalueChangedCallback,speed_toggle,"2");
1093 
1094 
1095     speed_2400 = XtVaCreateManagedWidget(langcode("WPUPCFT007"),xmToggleButtonGadgetClass,
1096                                          speed_box,
1097                                          XmNbackground, colors[0xff],
1098                                          XmNfontList, fontlist1,
1099                                          NULL);
1100     XtAddCallback(speed_2400,XmNvalueChangedCallback,speed_toggle,"3");
1101 
1102 
1103     speed_4800 = XtVaCreateManagedWidget(langcode("WPUPCFT008"),xmToggleButtonGadgetClass,
1104                                          speed_box,
1105                                          XmNbackground, colors[0xff],
1106                                          XmNfontList, fontlist1,
1107                                          NULL);
1108     XtAddCallback(speed_4800,XmNvalueChangedCallback,speed_toggle,"4");
1109 
1110     speed_9600 = XtVaCreateManagedWidget(langcode("WPUPCFT009"),xmToggleButtonGadgetClass,
1111                                          speed_box,
1112                                          XmNbackground, colors[0xff],
1113                                          XmNfontList, fontlist1,
1114                                          NULL);
1115     XtAddCallback(speed_9600,XmNvalueChangedCallback,speed_toggle,"5");
1116 
1117     speed_19200 = XtVaCreateManagedWidget(langcode("WPUPCFT010"),xmToggleButtonGadgetClass,
1118                                           speed_box,
1119                                           XmNbackground, colors[0xff],
1120                                           XmNfontList, fontlist1,
1121                                           NULL);
1122     XtAddCallback(speed_19200,XmNvalueChangedCallback,speed_toggle,"6");
1123 
1124     speed_38400 = XtVaCreateManagedWidget(langcode("WPUPCFT019"),xmToggleButtonGadgetClass,
1125                                           speed_box,
1126                                           XmNbackground, colors[0xff],
1127                                           XmNfontList, fontlist1,
1128                                           NULL);
1129     XtAddCallback(speed_38400,XmNvalueChangedCallback,speed_toggle,"7");
1130 
1131 #ifndef __LSB__
1132     speed_57600 = XtVaCreateManagedWidget(langcode("WPUPCFT020"),xmToggleButtonGadgetClass,
1133                                           speed_box,
1134                                           XmNbackground, colors[0xff],
1135                                           XmNfontList, fontlist1,
1136                                           NULL);
1137     XtAddCallback(speed_57600,XmNvalueChangedCallback,speed_toggle,"8");
1138 
1139     speed_115200 = XtVaCreateManagedWidget(langcode("WPUPCFT021"),xmToggleButtonGadgetClass,
1140                                            speed_box,
1141                                            XmNbackground, colors[0xff],
1142                                            XmNfontList, fontlist1,
1143                                            NULL);
1144     XtAddCallback(speed_115200,XmNvalueChangedCallback,speed_toggle,"9");
1145 
1146     speed_230400 = XtVaCreateManagedWidget(langcode("WPUPCFT022"),xmToggleButtonGadgetClass,
1147                                            speed_box,
1148                                            XmNbackground, colors[0xff],
1149                                            XmNfontList, fontlist1,
1150                                            NULL);
1151     XtAddCallback(speed_230400,XmNvalueChangedCallback,speed_toggle,"10");
1152 #endif  // __LSB__
1153 
1154     switch(device_type)
1155     {
1156       case DEVICE_SERIAL_KISS_TNC:
1157       case DEVICE_SERIAL_MKISS_TNC:
1158         break;
1159       default:
1160         frame2 = XtVaCreateManagedWidget("Config_TNC frame2", xmFrameWidgetClass, form,
1161                                          XmNtopAttachment, XmATTACH_WIDGET,
1162                                          XmNtopWidget, frame,
1163                                          XmNtopOffset, 10,
1164                                          XmNbottomAttachment, XmATTACH_NONE,
1165                                          XmNleftAttachment, XmATTACH_FORM,
1166                                          XmNleftOffset, 10,
1167                                          XmNrightAttachment, XmATTACH_FORM,
1168                                          XmNrightOffset, 10,
1169                                          XmNbackground, colors[0xff],
1170                                          NULL);
1171 
1172         //style
1173         XtVaCreateManagedWidget(langcode("WPUPCFT015"),xmLabelWidgetClass, frame2,
1174                                 XmNchildType, XmFRAME_TITLE_CHILD,
1175                                 XmNbackground, colors[0xff],
1176                                 XmNfontList, fontlist1,
1177                                 NULL);
1178 
1179 
1180         style_box = XmCreateRadioBox(frame2,"Config_TNC Style box",al,ac);
1181 
1182         XtVaSetValues(style_box,XmNorientation, XmHORIZONTAL,NULL);
1183 
1184         style_8n1 = XtVaCreateManagedWidget(langcode("WPUPCFT016"),xmToggleButtonGadgetClass,
1185                                             style_box,
1186                                             XmNbackground, colors[0xff],
1187                                             XmNfontList, fontlist1,
1188                                             NULL);
1189         XtAddCallback(style_8n1,XmNvalueChangedCallback,style_toggle,"0");
1190 
1191         style_7e1 = XtVaCreateManagedWidget(langcode("WPUPCFT017"),xmToggleButtonGadgetClass,
1192                                             style_box,
1193                                             XmNbackground, colors[0xff],
1194                                             XmNfontList, fontlist1,
1195                                             NULL);
1196         XtAddCallback(style_7e1,XmNvalueChangedCallback,style_toggle,"1");
1197 
1198         style_7o1 = XtVaCreateManagedWidget(langcode("WPUPCFT018"),xmToggleButtonGadgetClass,
1199                                             style_box,
1200                                             XmNbackground, colors[0xff],
1201                                             XmNfontList, fontlist1,
1202                                             NULL);
1203         XtAddCallback(style_7o1,XmNvalueChangedCallback,style_toggle,"2");
1204         break;
1205     }
1206 
1207     frame4 = XtVaCreateManagedWidget("Config_TNC frame4", xmFrameWidgetClass, form,
1208                                      XmNtopAttachment, XmATTACH_WIDGET,
1209                                      XmNtopWidget, (device_type == DEVICE_SERIAL_KISS_TNC || device_type == DEVICE_SERIAL_MKISS_TNC) ? frame : frame2,
1210                                      XmNtopOffset, 10,
1211                                      XmNbottomAttachment, XmATTACH_NONE,
1212                                      XmNleftAttachment, XmATTACH_FORM,
1213                                      XmNleftOffset, 10,
1214                                      XmNrightAttachment, XmATTACH_FORM,
1215                                      XmNrightOffset, 10,
1216                                      XmNbackground, colors[0xff],
1217                                      XmNfontList, fontlist1,
1218                                      NULL);
1219 
1220     //igate
1221     XtVaCreateManagedWidget(langcode("IGPUPCF000"),xmLabelWidgetClass, frame4,
1222                             XmNchildType, XmFRAME_TITLE_CHILD,
1223                             XmNbackground, colors[0xff],
1224                             XmNfontList, fontlist1,
1225                             NULL);
1226 
1227     igate_box = XmCreateRadioBox(frame4,"Config_TNC IGate box",al,ac);
1228 
1229     XtVaSetValues(igate_box,XmNorientation, XmVERTICAL,XmNnumColumns,2,NULL);
1230 
1231     igate_o_0 = XtVaCreateManagedWidget(langcode("IGPUPCF001"),xmToggleButtonGadgetClass,
1232                                         igate_box,
1233                                         XmNbackground, colors[0xff],
1234                                         XmNfontList, fontlist1,
1235                                         NULL);
1236     XtAddCallback(igate_o_0,XmNvalueChangedCallback,igate_toggle,"0");
1237 
1238     igate_o_1 = XtVaCreateManagedWidget(langcode("IGPUPCF002"),xmToggleButtonGadgetClass,
1239                                         igate_box,
1240                                         XmNbackground, colors[0xff],
1241                                         XmNfontList, fontlist1,
1242                                         NULL);
1243     XtAddCallback(igate_o_1,XmNvalueChangedCallback,igate_toggle,"1");
1244 
1245     igate_o_2 = XtVaCreateManagedWidget(langcode("IGPUPCF003"),xmToggleButtonGadgetClass,
1246                                         igate_box,
1247                                         XmNbackground, colors[0xff],
1248                                         XmNfontList, fontlist1,
1249                                         NULL);
1250     XtAddCallback(igate_o_2,XmNvalueChangedCallback,igate_toggle,"2");
1251 
1252     proto = XtVaCreateManagedWidget(langcode("WPUPCFT011"), xmLabelWidgetClass, form,
1253                                     XmNorientation, XmHORIZONTAL,
1254                                     XmNtopAttachment,XmATTACH_WIDGET,
1255                                     XmNtopWidget, frame4,
1256                                     XmNtopOffset, 10,
1257                                     XmNbottomAttachment,XmATTACH_NONE,
1258                                     XmNleftAttachment, XmATTACH_FORM,
1259                                     XmNleftOffset, 5,
1260                                     XmNrightAttachment,XmATTACH_FORM,
1261                                     XmNrightOffset, 5,
1262                                     XmNbackground, colors[0xff],
1263                                     XmNfontList, fontlist1,
1264                                     NULL);
1265 
1266     xastir_snprintf(temp, sizeof(temp), langcode("WPUPCFT012"), VERSIONFRM);
1267 
1268     proto1 = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
1269                                      XmNorientation, XmHORIZONTAL,
1270                                      XmNtopAttachment,XmATTACH_WIDGET,
1271                                      XmNtopWidget, proto,
1272                                      XmNtopOffset, 12,
1273                                      XmNbottomAttachment,XmATTACH_NONE,
1274                                      XmNleftAttachment, XmATTACH_FORM,
1275                                      XmNleftOffset, 15,
1276                                      XmNrightAttachment,XmATTACH_NONE,
1277                                      XmNbackground, colors[0xff],
1278                                      XmNfontList, fontlist1,
1279                                      NULL);
1280 
1281     TNC_unproto1_data = XtVaCreateManagedWidget("Config_TNC protopath1", xmTextFieldWidgetClass, form,
1282                         XmNnavigationType, XmTAB_GROUP,
1283                         XmNtraversalOn, TRUE,
1284                         XmNeditable,   TRUE,
1285                         XmNcursorPositionVisible, TRUE,
1286                         XmNsensitive, TRUE,
1287                         XmNshadowThickness,    1,
1288                         XmNcolumns, 25,
1289                         XmNwidth, ((25*7)+2),
1290                         XmNmaxLength, 40,
1291                         XmNbackground, colors[0x0f],
1292                         XmNtopAttachment,XmATTACH_WIDGET,
1293                         XmNtopWidget, proto,
1294                         XmNtopOffset, 5,
1295                         XmNbottomAttachment,XmATTACH_NONE,
1296                         XmNleftAttachment,XmATTACH_WIDGET,
1297                         XmNleftWidget, proto1,
1298                         XmNleftOffset, 5,
1299                         XmNrightAttachment,XmATTACH_NONE,
1300                         XmNfontList, fontlist1,
1301                         NULL);
1302 
1303     xastir_snprintf(temp, sizeof(temp), langcode("WPUPCFT013"), VERSIONFRM);
1304 
1305     proto2 = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
1306                                      XmNorientation, XmHORIZONTAL,
1307                                      XmNtopAttachment,XmATTACH_WIDGET,
1308                                      XmNtopWidget, proto,
1309                                      XmNtopOffset, 12,
1310                                      XmNbottomAttachment,XmATTACH_NONE,
1311                                      XmNleftAttachment, XmATTACH_WIDGET,
1312                                      XmNleftWidget, TNC_unproto1_data,
1313                                      XmNleftOffset, 15,
1314                                      XmNrightAttachment,XmATTACH_NONE,
1315                                      XmNbackground, colors[0xff],
1316                                      XmNfontList, fontlist1,
1317                                      NULL);
1318 
1319     TNC_unproto2_data = XtVaCreateManagedWidget("Config_TNC protopath2", xmTextFieldWidgetClass, form,
1320                         XmNnavigationType, XmTAB_GROUP,
1321                         XmNtraversalOn, TRUE,
1322                         XmNeditable,   TRUE,
1323                         XmNcursorPositionVisible, TRUE,
1324                         XmNsensitive, TRUE,
1325                         XmNshadowThickness,    1,
1326                         XmNcolumns, 25,
1327                         XmNwidth, ((25*7)+2),
1328                         XmNmaxLength, 40,
1329                         XmNbackground, colors[0x0f],
1330                         XmNtopAttachment,XmATTACH_WIDGET,
1331                         XmNtopWidget, proto,
1332                         XmNtopOffset, 5,
1333                         XmNbottomAttachment,XmATTACH_NONE,
1334                         XmNleftAttachment, XmATTACH_WIDGET,
1335                         XmNleftWidget, proto2,
1336                         XmNleftOffset, 5,
1337                         XmNrightAttachment,XmATTACH_FORM,
1338                         XmNrightOffset, 15,
1339                         XmNfontList, fontlist1,
1340                         NULL);
1341 
1342     xastir_snprintf(temp, sizeof(temp), langcode("WPUPCFT014"), VERSIONFRM);
1343 
1344     proto3 = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
1345                                      XmNorientation, XmHORIZONTAL,
1346                                      XmNtopAttachment,XmATTACH_WIDGET,
1347                                      XmNtopWidget, proto1,
1348                                      XmNtopOffset, 15,
1349                                      XmNbottomAttachment,XmATTACH_NONE,
1350                                      XmNleftAttachment, XmATTACH_FORM,
1351                                      XmNleftOffset, 15,
1352                                      XmNrightAttachment,XmATTACH_NONE,
1353                                      XmNbackground, colors[0xff],
1354                                      XmNfontList, fontlist1,
1355                                      NULL);
1356 
1357     TNC_unproto3_data = XtVaCreateManagedWidget("Config_TNC protopath3", xmTextFieldWidgetClass, form,
1358                         XmNnavigationType, XmTAB_GROUP,
1359                         XmNtraversalOn, TRUE,
1360                         XmNeditable,   TRUE,
1361                         XmNcursorPositionVisible, TRUE,
1362                         XmNsensitive, TRUE,
1363                         XmNshadowThickness,    1,
1364                         XmNcolumns, 25,
1365                         XmNwidth, ((25*7)+2),
1366                         XmNmaxLength, 40,
1367                         XmNbackground, colors[0x0f],
1368                         XmNtopAttachment,XmATTACH_WIDGET,
1369                         XmNtopWidget, TNC_unproto1_data,
1370                         XmNtopOffset, 5,
1371                         XmNbottomAttachment,XmATTACH_NONE,
1372                         XmNleftAttachment,XmATTACH_WIDGET,
1373                         XmNleftWidget, proto3,
1374                         XmNleftOffset, 5,
1375                         XmNrightAttachment,XmATTACH_NONE,
1376                         XmNfontList, fontlist1,
1377                         NULL);
1378 
1379     xastir_snprintf(temp, sizeof(temp), "%s", langcode("IGPUPCF004"));
1380     igate_label = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
1381                                           XmNorientation, XmHORIZONTAL,
1382                                           XmNtopAttachment,XmATTACH_WIDGET,
1383                                           XmNtopWidget, proto2,
1384                                           XmNtopOffset, 15,
1385                                           XmNbottomAttachment,XmATTACH_NONE,
1386                                           XmNleftAttachment,XmATTACH_WIDGET,
1387                                           XmNleftWidget, TNC_unproto3_data,
1388                                           XmNleftOffset, 15,
1389                                           XmNrightAttachment,XmATTACH_NONE,
1390                                           XmNbackground, colors[0xff],
1391                                           XmNfontList, fontlist1,
1392                                           NULL);
1393 
1394     TNC_igate_data = XtVaCreateManagedWidget("Config_TNC igate_data", xmTextFieldWidgetClass, form,
1395                      XmNnavigationType, XmTAB_GROUP,
1396                      XmNtraversalOn, TRUE,
1397                      XmNeditable,   TRUE,
1398                      XmNcursorPositionVisible, TRUE,
1399                      XmNsensitive, TRUE,
1400                      XmNshadowThickness,    1,
1401                      XmNcolumns, 25,
1402                      XmNwidth, ((25*7)+2),
1403                      XmNmaxLength, 40,
1404                      XmNbackground, colors[0x0f],
1405                      XmNtopAttachment,XmATTACH_WIDGET,
1406                      XmNtopWidget, TNC_unproto2_data,
1407                      XmNtopOffset, 5,
1408                      XmNbottomAttachment,XmATTACH_NONE,
1409                      XmNleftAttachment,XmATTACH_WIDGET,
1410                      XmNleftWidget, igate_label,
1411                      XmNleftOffset, 5,
1412                      XmNrightAttachment,XmATTACH_NONE,
1413                      XmNfontList, fontlist1,
1414                      NULL);
1415 
1416 // Draw a different frame3 for Serial KISS/MKISS TNC interfaces
1417     switch(device_type)
1418     {
1419       case DEVICE_SERIAL_KISS_TNC:
1420       case DEVICE_SERIAL_MKISS_TNC:
1421         frame3 = XtVaCreateManagedWidget("Config_TNC frame3", xmFrameWidgetClass, form,
1422                                          XmNtopAttachment,XmATTACH_WIDGET,
1423                                          XmNtopOffset,10,
1424                                          XmNtopWidget, TNC_igate_data,
1425                                          XmNbottomAttachment,XmATTACH_NONE,
1426                                          XmNleftAttachment, XmATTACH_FORM,
1427                                          XmNleftOffset, 10,
1428                                          XmNrightAttachment,XmATTACH_FORM,
1429                                          XmNrightOffset, 10,
1430                                          XmNbackground, colors[0xff],
1431                                          NULL);
1432 
1433         // KISS Parameters
1434         //setup
1435         XtVaCreateManagedWidget(langcode("WPUPCFT034"),xmLabelWidgetClass, frame3,
1436                                 XmNchildType, XmFRAME_TITLE_CHILD,
1437                                 XmNbackground, colors[0xff],
1438                                 XmNfontList, fontlist1,
1439                                 NULL);
1440 
1441         form2 =  XtVaCreateWidget("Config_TNC form2",xmFormWidgetClass, frame3,
1442                                   XmNfractionBase, 6,
1443                                   XmNbackground, colors[0xff],
1444                                   NULL);
1445 
1446         // TXDelay (10 ms units)
1447         setup1 = XtVaCreateManagedWidget(langcode("WPUPCFT035"), xmLabelWidgetClass, form2,
1448                                          XmNtopAttachment,XmATTACH_FORM,
1449                                          XmNtopOffset, 10,
1450                                          XmNbottomAttachment,XmATTACH_NONE,
1451                                          XmNleftAttachment, XmATTACH_FORM,
1452                                          XmNleftOffset, 10,
1453                                          XmNrightAttachment,XmATTACH_NONE,
1454                                          XmNbackground, colors[0xff],
1455                                          XmNfontList, fontlist1,
1456                                          NULL);
1457 
1458         TNC_txdelay = XtVaCreateManagedWidget("Config_TNC TNC_txdelay", xmTextFieldWidgetClass, form2,
1459                                               XmNnavigationType, XmTAB_GROUP,
1460                                               XmNtraversalOn, TRUE,
1461                                               XmNeditable,   TRUE,
1462                                               XmNcursorPositionVisible, TRUE,
1463                                               XmNsensitive, TRUE,
1464                                               XmNshadowThickness,    1,
1465                                               XmNcolumns, 3,
1466                                               XmNwidth, ((6*7)+2),
1467                                               XmNmaxLength, 3,
1468                                               XmNbackground, colors[0x0f],
1469                                               XmNtopAttachment,XmATTACH_FORM,
1470                                               XmNtopOffset, 5,
1471                                               XmNbottomAttachment,XmATTACH_NONE,
1472                                               XmNleftAttachment,XmATTACH_POSITION,
1473                                               XmNleftPosition, 2,
1474                                               XmNrightAttachment,XmATTACH_NONE,
1475                                               XmNfontList, fontlist1,
1476                                               NULL);
1477 
1478         // Persistence (0 to 255)
1479         //setup2
1480         XtVaCreateManagedWidget(langcode("WPUPCFT036"), xmLabelWidgetClass, form2,
1481                                 XmNtopAttachment,XmATTACH_WIDGET,
1482                                 XmNtopWidget, setup1,
1483                                 XmNtopOffset, 10,
1484                                 XmNbottomAttachment,XmATTACH_NONE,
1485                                 XmNleftAttachment, XmATTACH_FORM,
1486                                 XmNleftOffset, 10,
1487                                 XmNrightAttachment,XmATTACH_NONE,
1488                                 XmNbackground, colors[0xff],
1489                                 XmNfontList, fontlist1,
1490                                 NULL);
1491 
1492         TNC_persistence = XtVaCreateManagedWidget("Config_TNC persistence", xmTextFieldWidgetClass, form2,
1493                           XmNnavigationType, XmTAB_GROUP,
1494                           XmNtraversalOn, TRUE,
1495                           XmNeditable,   TRUE,
1496                           XmNcursorPositionVisible, TRUE,
1497                           XmNsensitive, TRUE,
1498                           XmNshadowThickness,    1,
1499                           XmNcolumns, 3,
1500                           XmNwidth, ((6*7)+2),
1501                           XmNmaxLength, 3,
1502                           XmNbackground, colors[0x0f],
1503                           XmNtopAttachment,XmATTACH_WIDGET,
1504                           XmNtopWidget, setup1,
1505                           XmNtopOffset, 5,
1506                           XmNbottomAttachment,XmATTACH_NONE,
1507                           XmNleftAttachment,XmATTACH_POSITION,
1508                           XmNleftPosition, 2,
1509                           XmNrightAttachment,XmATTACH_NONE,
1510                           XmNfontList, fontlist1,
1511                           NULL);
1512 
1513         // SlotTime (10 ms units)
1514         setup3 = XtVaCreateManagedWidget(langcode("WPUPCFT037"), xmLabelWidgetClass, form2,
1515                                          XmNtopAttachment,XmATTACH_FORM,
1516                                          XmNtopOffset, 10,
1517                                          XmNbottomAttachment,XmATTACH_NONE,
1518                                          XmNleftAttachment, XmATTACH_POSITION,
1519                                          XmNleftPosition, 3,
1520                                          XmNrightAttachment,XmATTACH_NONE,
1521                                          XmNbackground, colors[0xff],
1522                                          XmNfontList, fontlist1,
1523                                          NULL);
1524 
1525         TNC_slottime = XtVaCreateManagedWidget("Config_TNC slottime", xmTextFieldWidgetClass, form2,
1526                                                XmNnavigationType, XmTAB_GROUP,
1527                                                XmNtraversalOn, TRUE,
1528                                                XmNeditable,   TRUE,
1529                                                XmNcursorPositionVisible, TRUE,
1530                                                XmNsensitive, TRUE,
1531                                                XmNshadowThickness,    1,
1532                                                XmNcolumns, 3,
1533                                                XmNwidth, ((6*7)+2),
1534                                                XmNmaxLength, 3,
1535                                                XmNbackground, colors[0x0f],
1536                                                XmNtopAttachment,XmATTACH_FORM,
1537                                                XmNtopOffset, 5,
1538                                                XmNbottomAttachment,XmATTACH_NONE,
1539                                                XmNleftAttachment,XmATTACH_POSITION,
1540                                                XmNleftPosition, 5,
1541                                                XmNrightAttachment,XmATTACH_NONE,
1542                                                XmNfontList, fontlist1,
1543                                                NULL);
1544 
1545         // TxTail (10 ms units)
1546         setup4 = XtVaCreateManagedWidget(langcode("WPUPCFT038"), xmLabelWidgetClass, form2,
1547                                          XmNtopAttachment,XmATTACH_WIDGET,
1548                                          XmNtopWidget, setup3,
1549                                          XmNtopOffset, 10,
1550                                          XmNbottomAttachment,XmATTACH_NONE,
1551                                          XmNleftAttachment, XmATTACH_POSITION,
1552                                          XmNleftPosition, 3,
1553                                          XmNrightAttachment,XmATTACH_NONE,
1554                                          XmNbackground, colors[0xff],
1555                                          XmNfontList, fontlist1,
1556                                          NULL);
1557 
1558         TNC_txtail = XtVaCreateManagedWidget("Config_TNC TxTail", xmTextFieldWidgetClass, form2,
1559                                              XmNnavigationType, XmTAB_GROUP,
1560                                              XmNtraversalOn, TRUE,
1561                                              XmNeditable,   TRUE,
1562                                              XmNcursorPositionVisible, TRUE,
1563                                              XmNsensitive, TRUE,
1564                                              XmNshadowThickness,    1,
1565                                              XmNcolumns, 3,
1566                                              XmNwidth, ((6*7)+2),
1567                                              XmNmaxLength, 3,
1568                                              XmNbackground, colors[0x0f],
1569                                              XmNtopAttachment,XmATTACH_WIDGET,
1570                                              XmNtopWidget, setup3,
1571                                              XmNtopOffset, 5,
1572                                              XmNbottomAttachment,XmATTACH_NONE,
1573                                              XmNleftAttachment,XmATTACH_POSITION,
1574                                              XmNleftPosition, 5,
1575                                              XmNrightAttachment,XmATTACH_NONE,
1576                                              XmNfontList, fontlist1,
1577                                              NULL);
1578 
1579         // Full Duplex
1580         TNC_fullduplex = XtVaCreateManagedWidget(langcode("WPUPCFT039"),xmToggleButtonWidgetClass,form2,
1581                          XmNnavigationType, XmTAB_GROUP,
1582                          XmNtraversalOn, TRUE,
1583                          XmNtopAttachment, XmATTACH_WIDGET,
1584                          XmNtopWidget, setup4,
1585                          XmNtopOffset, 5,
1586                          XmNbottomAttachment, XmATTACH_FORM,
1587                          XmNbottomOffset, 5,
1588                          XmNleftAttachment, XmATTACH_FORM,
1589                          XmNleftOffset, 10,
1590                          XmNrightAttachment, XmATTACH_NONE,
1591                          XmNbackground, colors[0xff],
1592                          XmNfontList, fontlist1,
1593                          NULL);
1594 
1595         // Button to enable KISS-mode at startup
1596         TNC_init_kiss = XtVaCreateManagedWidget(langcode("WPUPCFT047"),xmToggleButtonWidgetClass,form2,
1597                                                 XmNnavigationType, XmTAB_GROUP,
1598                                                 XmNtraversalOn, TRUE,
1599                                                 XmNtopAttachment, XmATTACH_WIDGET,
1600                                                 XmNtopWidget, setup4,
1601                                                 XmNtopOffset, 5,
1602                                                 XmNbottomAttachment, XmATTACH_FORM,
1603                                                 XmNbottomOffset, 5,
1604                                                 XmNleftAttachment, XmATTACH_FORM,
1605                                                 XmNleftOffset, 135,
1606                                                 XmNrightAttachment, XmATTACH_NONE,
1607                                                 XmNbackground, colors[0xff],
1608                                                 XmNfontList, fontlist1,
1609                                                 NULL);
1610         break;
1611       default:
1612         frame3 = XtVaCreateManagedWidget("Config_TNC frame3", xmFrameWidgetClass, form,
1613                                          XmNtopAttachment,XmATTACH_WIDGET,
1614                                          XmNtopOffset,10,
1615                                          XmNtopWidget, TNC_igate_data,
1616                                          XmNbottomAttachment,XmATTACH_NONE,
1617                                          XmNleftAttachment, XmATTACH_FORM,
1618                                          XmNleftOffset, 10,
1619                                          XmNrightAttachment,XmATTACH_FORM,
1620                                          XmNrightOffset, 10,
1621                                          XmNbackground, colors[0xff],
1622                                          NULL);
1623 
1624         //setup
1625         XtVaCreateManagedWidget(langcode("WPUPCFT031"),xmLabelWidgetClass, frame3,
1626                                 XmNchildType, XmFRAME_TITLE_CHILD,
1627                                 XmNbackground, colors[0xff],
1628                                 XmNfontList, fontlist1,
1629                                 NULL);
1630 
1631         form2 =  XtVaCreateWidget("Config_TNC form2",xmFormWidgetClass, frame3,
1632                                   XmNfractionBase, 5,
1633                                   XmNbackground, colors[0xff],
1634                                   NULL);
1635 
1636         setup1 = XtVaCreateManagedWidget(langcode("WPUPCFT032"), xmLabelWidgetClass, form2,
1637                                          XmNtopAttachment,XmATTACH_FORM,
1638                                          XmNtopOffset, 10,
1639                                          XmNbottomAttachment,XmATTACH_NONE,
1640                                          XmNleftAttachment, XmATTACH_FORM,
1641                                          XmNrightAttachment,XmATTACH_NONE,
1642                                          XmNbackground, colors[0xff],
1643                                          XmNfontList, fontlist1,
1644                                          NULL);
1645 
1646         TNC_up_file_data = XtVaCreateManagedWidget("Config_TNC up_file", xmTextFieldWidgetClass, form2,
1647                            XmNnavigationType, XmTAB_GROUP,
1648                            XmNtraversalOn, TRUE,
1649                            XmNeditable,   TRUE,
1650                            XmNcursorPositionVisible, TRUE,
1651                            XmNsensitive, TRUE,
1652                            XmNshadowThickness,    1,
1653                            XmNcolumns, 25,
1654                            XmNwidth, ((25*7)+2),
1655                            XmNmaxLength, 80,
1656                            XmNbackground, colors[0x0f],
1657                            XmNtopAttachment,XmATTACH_FORM,
1658                            XmNtopOffset, 5,
1659                            XmNbottomAttachment,XmATTACH_NONE,
1660                            XmNleftAttachment,XmATTACH_POSITION,
1661                            XmNleftPosition, 2,
1662                            XmNrightAttachment,XmATTACH_NONE,
1663                            XmNfontList, fontlist1,
1664                            NULL);
1665 
1666         //setup2
1667         XtVaCreateManagedWidget(langcode("WPUPCFT033"), xmLabelWidgetClass, form2,
1668                                 XmNtopAttachment,XmATTACH_WIDGET,
1669                                 XmNtopWidget, setup1,
1670                                 XmNtopOffset, 10,
1671                                 XmNbottomAttachment,XmATTACH_NONE,
1672                                 XmNleftAttachment, XmATTACH_FORM,
1673                                 XmNrightAttachment,XmATTACH_NONE,
1674                                 XmNbackground, colors[0xff],
1675                                 XmNfontList, fontlist1,
1676                                 NULL);
1677 
1678         TNC_down_file_data = XtVaCreateManagedWidget("Config_TNC down_file", xmTextFieldWidgetClass, form2,
1679                              XmNnavigationType, XmTAB_GROUP,
1680                              XmNtraversalOn, TRUE,
1681                              XmNeditable,   TRUE,
1682                              XmNcursorPositionVisible, TRUE,
1683                              XmNsensitive, TRUE,
1684                              XmNshadowThickness,    1,
1685                              XmNcolumns, 25,
1686                              XmNwidth, ((25*7)+2),
1687                              XmNmaxLength, 80,
1688                              XmNbackground, colors[0x0f],
1689                              XmNtopAttachment,XmATTACH_WIDGET,
1690                              XmNtopWidget, setup1,
1691                              XmNtopOffset, 5,
1692                              XmNbottomAttachment,XmATTACH_NONE,
1693                              XmNleftAttachment,XmATTACH_POSITION,
1694                              XmNleftPosition, 2,
1695                              XmNrightAttachment,XmATTACH_NONE,
1696                              XmNfontList, fontlist1,
1697                              NULL);
1698 
1699         break;
1700     }
1701 
1702 
1703 //------------------------------------------------------------
1704 
1705     button_ok = XtVaCreateManagedWidget(langcode("UNIOP00001"),xmPushButtonGadgetClass, form,
1706                                         XmNnavigationType, XmTAB_GROUP,
1707                                         XmNtraversalOn, TRUE,
1708                                         XmNtopAttachment, XmATTACH_WIDGET,
1709                                         XmNtopWidget, frame3,
1710                                         XmNtopOffset, 10,
1711                                         XmNbottomAttachment, XmATTACH_FORM,
1712                                         XmNbottomOffset, 5,
1713                                         XmNleftAttachment, XmATTACH_POSITION,
1714                                         XmNleftPosition, 1,
1715                                         XmNrightAttachment, XmATTACH_POSITION,
1716                                         XmNrightPosition, 2,
1717                                         XmNbackground, colors[0xff],
1718                                         XmNfontList, fontlist1,
1719                                         NULL);
1720 
1721     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
1722                                             XmNnavigationType, XmTAB_GROUP,
1723                                             XmNtraversalOn, TRUE,
1724                                             XmNtopAttachment, XmATTACH_WIDGET,
1725                                             XmNtopWidget, frame3,
1726                                             XmNtopOffset, 10,
1727                                             XmNbottomAttachment, XmATTACH_FORM,
1728                                             XmNbottomOffset, 5,
1729                                             XmNleftAttachment, XmATTACH_POSITION,
1730                                             XmNleftPosition, 3,
1731                                             XmNrightAttachment, XmATTACH_POSITION,
1732                                             XmNrightPosition, 4,
1733                                             XmNbackground, colors[0xff],
1734                                             XmNfontList, fontlist1,
1735                                             NULL);
1736 
1737     XtAddCallback(button_ok, XmNactivateCallback, Config_TNC_change_data, config_TNC_dialog);
1738     XtAddCallback(button_cancel, XmNactivateCallback, Config_TNC_destroy_shell, config_TNC_dialog);
1739 
1740     pos_dialog(config_TNC_dialog);
1741 
1742     delw = XmInternAtom(XtDisplay(config_TNC_dialog),"WM_DELETE_WINDOW", FALSE);
1743     XmAddWMProtocolCallback(config_TNC_dialog, delw, Config_TNC_destroy_shell, (XtPointer)config_TNC_dialog);
1744 
1745     if (config_type==0)
1746     {
1747       /* first time port */
1748       devices[TNC_port].gps_retrieve=DEFAULT_GPS_RETR;
1749       if (debug_level & 128)
1750       {
1751         fprintf(stderr,"Storing %d to gps_retrieve for %d\n",
1752                 DEFAULT_GPS_RETR, port);
1753       }
1754 
1755       XmTextFieldSetString(TNC_device_name_data,TNC_PORT);
1756 
1757       XmTextFieldSetString(TNC_converse_string,"k");
1758 
1759       XmTextFieldSetString(TNC_comment,"");
1760 
1761       if (device_type == DEVICE_SERIAL_MKISS_TNC)
1762       {
1763         XmTextFieldSetString(TNC_radio_port_data,"0");
1764 //fprintf(stderr,"Assigning default '0' to radio port\n");
1765       }
1766 
1767       XmToggleButtonSetState(TNC_active_on_startup,TRUE,FALSE);
1768       XmToggleButtonSetState(TNC_transmit_data,TRUE,FALSE);
1769 
1770       switch(device_type)
1771       {
1772         case DEVICE_SERIAL_TNC:
1773         case DEVICE_SERIAL_TNC_HSP_GPS:
1774         case DEVICE_SERIAL_TNC_AUX_GPS:
1775           XmToggleButtonSetState(TNC_extra_delay, FALSE, FALSE);
1776           break;
1777         default:
1778           break;
1779       }
1780 
1781       switch(device_type)
1782       {
1783         case DEVICE_SERIAL_TNC_HSP_GPS:
1784         case DEVICE_SERIAL_TNC_AUX_GPS:
1785           XmToggleButtonSetState(TNC_GPS_set_time, FALSE, FALSE);
1786           if (device_type == DEVICE_SERIAL_TNC_AUX_GPS)
1787             XmToggleButtonSetState(TNC_AUX_GPS_Retrieve_Needed,
1788                                    TRUE, FALSE);
1789           break;
1790         case DEVICE_SERIAL_KISS_TNC:
1791         case DEVICE_SERIAL_MKISS_TNC:
1792           XmToggleButtonSetState(TNC_relay_digipeat, FALSE, FALSE);
1793           XmToggleButtonSetState(TNC_fullduplex, FALSE, FALSE);
1794           XmToggleButtonSetState(TNC_init_kiss, FALSE, FALSE); // For KISS-Mode
1795           break;
1796         case DEVICE_SERIAL_TNC:
1797         default:
1798           break;
1799       }
1800 
1801       XmToggleButtonSetState(speed_4800,TRUE,FALSE);
1802       device_speed=4;
1803 
1804       if ( (device_type != DEVICE_SERIAL_KISS_TNC)
1805            && (device_type != DEVICE_SERIAL_MKISS_TNC) )
1806       {
1807         XmToggleButtonSetState(style_8n1,TRUE,FALSE);
1808       }
1809 
1810       device_style=0;
1811 
1812       device_igate_options=0;
1813       XmToggleButtonSetState(igate_o_0,TRUE,FALSE);
1814       XmTextFieldSetString(TNC_unproto1_data,"WIDE2-2");
1815       XmTextFieldSetString(TNC_unproto2_data,"");
1816       XmTextFieldSetString(TNC_unproto3_data,"");
1817       XmTextFieldSetString(TNC_igate_data,"");
1818 
1819 //WE7U
1820       if ( (device_type == DEVICE_SERIAL_KISS_TNC)
1821            || (device_type == DEVICE_SERIAL_MKISS_TNC) )
1822       {
1823         // We don't allow changing the selection for KISS
1824         // TNC's, as they require 8N1
1825         device_style = 0;
1826         XmTextFieldSetString(TNC_txdelay,"40");
1827         XmTextFieldSetString(TNC_persistence,"63");
1828         XmTextFieldSetString(TNC_slottime,"20");
1829         XmTextFieldSetString(TNC_txtail,"30");
1830       }
1831       else
1832       {
1833         XmTextFieldSetString(TNC_up_file_data,"tnc-startup.sys");
1834         XmTextFieldSetString(TNC_down_file_data,"tnc-stop.sys");
1835       }
1836 
1837     }
1838     else
1839     {
1840       /* reconfig */
1841 
1842       if (debug_level & 128)
1843       {
1844         fprintf(stderr,"Reconfiguring interface\n");
1845       }
1846 
1847       begin_critical_section(&devices_lock, "interface_gui.c:Config_TNC" );
1848 
1849       XmTextFieldSetString(TNC_device_name_data,devices[TNC_port].device_name);
1850 
1851       XmTextFieldSetString(TNC_converse_string,devices[TNC_port].device_converse_string);
1852 
1853       XmTextFieldSetString(TNC_comment,devices[TNC_port].comment);
1854 
1855       if (device_type == DEVICE_SERIAL_MKISS_TNC)
1856       {
1857         XmTextFieldSetString(TNC_radio_port_data, devices[TNC_port].radio_port);
1858 //fprintf(stderr,"Reconfig: %s\n", devices[TNC_port].radio_port);
1859       }
1860 
1861       if (devices[TNC_port].connect_on_startup)
1862       {
1863         XmToggleButtonSetState(TNC_active_on_startup,TRUE,FALSE);
1864       }
1865       else
1866       {
1867         XmToggleButtonSetState(TNC_active_on_startup,FALSE,FALSE);
1868       }
1869 
1870       if (devices[TNC_port].transmit_data)
1871       {
1872         XmToggleButtonSetState(TNC_transmit_data,TRUE,FALSE);
1873       }
1874       else
1875       {
1876         XmToggleButtonSetState(TNC_transmit_data,FALSE,FALSE);
1877       }
1878 
1879       switch(device_type)
1880       {
1881         case DEVICE_SERIAL_TNC:
1882         case DEVICE_SERIAL_TNC_HSP_GPS:
1883         case DEVICE_SERIAL_TNC_AUX_GPS:
1884           if (devices[TNC_port].tnc_extra_delay)
1885           {
1886             XmToggleButtonSetState(TNC_extra_delay, TRUE, FALSE);
1887           }
1888           else
1889           {
1890             XmToggleButtonSetState(TNC_extra_delay, FALSE, FALSE);
1891           }
1892           break;
1893         default:
1894           break;
1895       }
1896 
1897       switch(device_type)
1898       {
1899 
1900         case DEVICE_SERIAL_TNC_HSP_GPS:
1901         case DEVICE_SERIAL_TNC_AUX_GPS:
1902           if (devices[TNC_port].set_time)
1903           {
1904             XmToggleButtonSetState(TNC_GPS_set_time, TRUE, FALSE);
1905           }
1906           else
1907           {
1908             XmToggleButtonSetState(TNC_GPS_set_time, FALSE, FALSE);
1909           }
1910 
1911           if (device_type == DEVICE_SERIAL_TNC_AUX_GPS)
1912           {
1913             if (devices[TNC_port].gps_retrieve != 0)
1914               XmToggleButtonSetState(TNC_AUX_GPS_Retrieve_Needed,
1915                                      TRUE, FALSE);
1916             else
1917               XmToggleButtonSetState(TNC_AUX_GPS_Retrieve_Needed,
1918                                      FALSE, FALSE);
1919           }
1920 
1921           break;
1922 
1923         case  DEVICE_SERIAL_KISS_TNC:
1924         case  DEVICE_SERIAL_MKISS_TNC:
1925 
1926           if (devices[TNC_port].relay_digipeat)
1927           {
1928             XmToggleButtonSetState(TNC_relay_digipeat, TRUE, FALSE);
1929           }
1930           else
1931           {
1932             XmToggleButtonSetState(TNC_relay_digipeat, FALSE, FALSE);
1933           }
1934 
1935           if (devices[TNC_port].fullduplex)
1936           {
1937             XmToggleButtonSetState(TNC_fullduplex, TRUE, FALSE);
1938           }
1939           else
1940           {
1941             XmToggleButtonSetState(TNC_fullduplex, FALSE, FALSE);
1942           }
1943 
1944           // For KISS-Mode
1945           if (devices[TNC_port].init_kiss)
1946           {
1947             XmToggleButtonSetState(TNC_init_kiss, TRUE, FALSE);
1948           }
1949           else
1950           {
1951             XmToggleButtonSetState(TNC_init_kiss, FALSE, FALSE);
1952           }
1953 
1954           if (devices[TNC_port].transmit_data)
1955           {
1956 
1957 #ifdef SERIAL_KISS_RELAY_DIGI
1958             XtSetSensitive(TNC_relay_digipeat, TRUE);
1959 #else
1960             XtSetSensitive(TNC_relay_digipeat, FALSE);
1961 #endif  // SERIAL_KISS_RELAY_DIGI
1962 
1963           }
1964           else
1965           {
1966             XtSetSensitive(TNC_relay_digipeat, FALSE);
1967           }
1968           break;
1969 
1970         case DEVICE_SERIAL_TNC:
1971         default:
1972           break;
1973       }
1974 
1975       switch (devices[TNC_port].sp)
1976       {
1977         case(B300):
1978           XmToggleButtonSetState(speed_300,TRUE,FALSE);
1979           device_speed=1;
1980           break;
1981 
1982         case(B1200):
1983           XmToggleButtonSetState(speed_1200,TRUE,FALSE);
1984           device_speed=2;
1985           break;
1986 
1987         case(B2400):
1988           XmToggleButtonSetState(speed_2400,TRUE,FALSE);
1989           device_speed=3;
1990           break;
1991 
1992         case(B4800):
1993           XmToggleButtonSetState(speed_4800,TRUE,FALSE);
1994           device_speed=4;
1995           break;
1996 
1997         case(B9600):
1998           XmToggleButtonSetState(speed_9600,TRUE,FALSE);
1999           device_speed=5;
2000           break;
2001 
2002         case(B19200):
2003           XmToggleButtonSetState(speed_19200,TRUE,FALSE);
2004           device_speed=6;
2005           break;
2006 
2007         case(B38400):
2008           XmToggleButtonSetState(speed_38400,TRUE,FALSE);
2009           device_speed=7;
2010           break;
2011 
2012 #ifndef __LSB__
2013         case(B57600):
2014           XmToggleButtonSetState(speed_57600,TRUE,FALSE);
2015           device_speed=8;
2016           break;
2017 
2018         case(B115200):
2019           XmToggleButtonSetState(speed_115200,TRUE,FALSE);
2020           device_speed=9;
2021           break;
2022 
2023 #ifdef B230400
2024         case(B230400):
2025           XmToggleButtonSetState(speed_230400,TRUE,FALSE);
2026           device_speed=10;
2027           break;
2028 #endif  // B230400
2029 #endif  // __LSB__
2030 
2031         default:
2032           XmToggleButtonSetState(speed_4800,TRUE,FALSE);
2033           device_speed=4;
2034           break;
2035       }
2036 
2037       if ( (device_type == DEVICE_SERIAL_KISS_TNC)
2038            || (device_type == DEVICE_SERIAL_MKISS_TNC) )
2039       {
2040         // We don't allow changing the selection for KISS
2041         // TNC's, as they require 8N1
2042         device_style = 0;
2043       }
2044       else
2045       {
2046         switch (devices[TNC_port].style)
2047         {
2048           case(0):
2049             XmToggleButtonSetState(style_8n1,TRUE,FALSE);
2050             device_style=0;
2051             break;
2052 
2053           case(1):
2054             XmToggleButtonSetState(style_7e1,TRUE,FALSE);
2055             device_style=1;
2056             break;
2057 
2058           case(2):
2059             XmToggleButtonSetState(style_7o1,TRUE,FALSE);
2060             device_style=2;
2061             break;
2062 
2063           default:
2064             XmToggleButtonSetState(style_8n1,TRUE,FALSE);
2065             device_style=0;
2066             break;
2067         }
2068       }
2069 
2070       switch (devices[TNC_port].igate_options)
2071       {
2072         case(0):
2073           XmToggleButtonSetState(igate_o_0,TRUE,FALSE);
2074           device_igate_options=0;
2075           break;
2076 
2077         case(1):
2078           XmToggleButtonSetState(igate_o_1,TRUE,FALSE);
2079           device_igate_options=1;
2080           break;
2081 
2082         case(2):
2083           XmToggleButtonSetState(igate_o_2,TRUE,FALSE);
2084           device_igate_options=2;
2085           break;
2086 
2087         default:
2088           XmToggleButtonSetState(igate_o_0,TRUE,FALSE);
2089           device_igate_options=0;
2090           break;
2091       }
2092       XmTextFieldSetString(TNC_unproto1_data,devices[TNC_port].unproto1);
2093       XmTextFieldSetString(TNC_unproto2_data,devices[TNC_port].unproto2);
2094       XmTextFieldSetString(TNC_unproto3_data,devices[TNC_port].unproto3);
2095       XmTextFieldSetString(TNC_igate_data,devices[TNC_port].unproto_igate);
2096 
2097       if ( (device_type == DEVICE_SERIAL_KISS_TNC)
2098            || (device_type == DEVICE_SERIAL_MKISS_TNC) )
2099       {
2100         XmTextFieldSetString(TNC_txdelay,devices[TNC_port].txdelay);
2101         XmTextFieldSetString(TNC_persistence,devices[TNC_port].persistence);
2102         XmTextFieldSetString(TNC_slottime,devices[TNC_port].slottime);
2103         XmTextFieldSetString(TNC_txtail,devices[TNC_port].txtail);
2104       }
2105       else
2106       {
2107         XmTextFieldSetString(TNC_up_file_data,devices[TNC_port].tnc_up_file);
2108         XmTextFieldSetString(TNC_down_file_data,devices[TNC_port].tnc_down_file);
2109       }
2110 
2111       end_critical_section(&devices_lock, "interface_gui.c:Config_TNC" );
2112 
2113     }
2114 
2115     XtManageChild(form);
2116 
2117     XtManageChild(form2);
2118 
2119     XtManageChild(speed_box);
2120 
2121     if ( (device_type != DEVICE_SERIAL_KISS_TNC)
2122          && (device_type != DEVICE_SERIAL_MKISS_TNC) )
2123     {
2124       XtManageChild(style_box);
2125     }
2126 
2127     XtManageChild(igate_box);
2128     XtManageChild(pane);
2129 
2130     resize_dialog(form, config_TNC_dialog);
2131 
2132     XtPopup(config_TNC_dialog,XtGrabNone);
2133   }
2134   else
2135   {
2136     (void)XRaiseWindow(XtDisplay(config_TNC_dialog), XtWindow(config_TNC_dialog));
2137   }
2138 }
2139 
2140 
2141 
2142 
2143 
2144 /*****************************************************/
2145 /* Configure Serial GPS GUI                          */
2146 /*****************************************************/
2147 
2148 /**** GPS CONFIGURE ******/
2149 int GPS_port;
2150 Widget config_GPS_dialog = (Widget)NULL;
2151 Widget GPS_device_name_data;
2152 Widget GPS_comment;
2153 Widget GPS_active_on_startup;
2154 Widget GPS_set_time;
2155 
2156 
2157 
2158 
2159 
Config_GPS_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))2160 void Config_GPS_destroy_shell( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
2161 {
2162   Widget shell = (Widget) clientData;
2163   XtPopdown(shell);
2164   XtDestroyWidget(shell);
2165   config_GPS_dialog = (Widget)NULL;
2166   if (choose_interface_dialog != NULL)
2167   {
2168     Choose_interface_destroy_shell(choose_interface_dialog,choose_interface_dialog,NULL);
2169   }
2170   choose_interface_dialog = (Widget)NULL;
2171 }
2172 
2173 
2174 
2175 
2176 
Config_GPS_change_data(Widget widget,XtPointer clientData,XtPointer callData)2177 void Config_GPS_change_data(Widget widget, XtPointer clientData, XtPointer callData)
2178 {
2179   int was_up;
2180   char *temp_ptr;
2181 
2182 
2183   busy_cursor(appshell);
2184   was_up=0;
2185   if (get_device_status(GPS_port) == DEVICE_IN_USE)
2186   {
2187     /* if active shutdown before changes are made */
2188     /*fprintf(stderr,"Device is up, shutting down\n");*/
2189     (void)del_device(GPS_port);
2190     was_up=1;
2191     usleep(1000000); // Wait for one second
2192   }
2193 
2194   begin_critical_section(&devices_lock, "interface_gui.c:Config_GPS_change_data" );
2195 
2196   temp_ptr = XmTextFieldGetString(GPS_device_name_data);
2197   xastir_snprintf(devices[GPS_port].device_name,
2198                   sizeof(devices[GPS_port].device_name),
2199                   "%s",
2200                   temp_ptr);
2201   XtFree(temp_ptr);
2202 
2203   (void)remove_trailing_spaces(devices[GPS_port].device_name);
2204 
2205   temp_ptr = XmTextFieldGetString(GPS_comment);
2206   xastir_snprintf(devices[GPS_port].comment,
2207                   sizeof(devices[GPS_port].comment),
2208                   "%s",
2209                   temp_ptr);
2210   XtFree(temp_ptr);
2211 
2212   (void)remove_trailing_spaces(devices[GPS_port].comment);
2213 
2214   if(XmToggleButtonGetState(GPS_active_on_startup))
2215   {
2216     devices[GPS_port].connect_on_startup=1;
2217   }
2218   else
2219   {
2220     devices[GPS_port].connect_on_startup=0;
2221   }
2222 
2223   if (XmToggleButtonGetState(GPS_set_time))
2224   {
2225     devices[GPS_port].set_time=1;
2226   }
2227   else
2228   {
2229     devices[GPS_port].set_time=0;
2230   }
2231 
2232   set_port_speed(GPS_port);
2233   devices[GPS_port].style=device_style;
2234   /* reopen */
2235   if ( was_up )
2236   {
2237     (void)add_device(GPS_port,
2238                      DEVICE_SERIAL_GPS,
2239                      devices[GPS_port].device_name,
2240                      "",
2241                      -1,
2242                      devices[GPS_port].sp,
2243                      devices[GPS_port].style,
2244                      0,
2245                      "");
2246   }
2247 
2248   /* delete list */
2249 //    modify_device_list(4,0);
2250 
2251 
2252   /* add device type */
2253   devices[GPS_port].device_type=DEVICE_SERIAL_GPS;
2254 
2255   /* rebuild list */
2256 //    modify_device_list(3,0);
2257 
2258 
2259   end_critical_section(&devices_lock, "interface_gui.c:Config_GPS_change_data" );
2260 
2261   // Rebuild the interface control list
2262   update_interface_list();
2263 
2264   Config_GPS_destroy_shell(widget,clientData,callData);
2265 }
2266 
2267 
2268 
2269 
2270 
Config_GPS(Widget UNUSED (w),int config_type,int port)2271 void Config_GPS( Widget UNUSED(w), int config_type, int port)
2272 {
2273   static Widget  pane, scrollwindow, form, button_ok, button_cancel,
2274          frame, frame2,
2275          device, comment, speed_box,
2276          speed_300, speed_1200, speed_2400, speed_4800, speed_9600,
2277          speed_19200, speed_38400;
2278 //  static Widget speed;
2279 #ifndef __LSB__
2280   static Widget speed_57600, speed_115200, speed_230400;
2281 #endif  // __LSB__
2282   static Widget style_box,
2283          style_8n1, style_7e1, style_7o1,
2284          sep;
2285 //  static Widget style;
2286   Atom delw;
2287   Arg al[50];                    /* Arg List */
2288   register unsigned int ac = 0;           /* Arg Count */
2289 
2290   if(!config_GPS_dialog)
2291   {
2292     GPS_port=port;
2293     config_GPS_dialog = XtVaCreatePopupShell(langcode("WPUPCFG001"),
2294                         xmDialogShellWidgetClass, appshell,
2295                         XmNdeleteResponse,XmDESTROY,
2296                         XmNdefaultPosition, FALSE,
2297                         XmNfontList, fontlist1,
2298                         NULL);
2299 
2300     pane = XtVaCreateWidget("Config_GPS pane",xmPanedWindowWidgetClass, config_GPS_dialog,
2301                             XmNbackground, colors[0xff],
2302                             NULL);
2303 
2304     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
2305                                            xmScrolledWindowWidgetClass,
2306                                            pane,
2307                                            XmNscrollingPolicy, XmAUTOMATIC,
2308                                            NULL);
2309 
2310     form =  XtVaCreateWidget("Config_GPS form",
2311                              xmFormWidgetClass,
2312                              scrollwindow,
2313                              XmNfractionBase, 5,
2314                              XmNbackground, colors[0xff],
2315                              XmNautoUnmanage, FALSE,
2316                              XmNshadowThickness, 1,
2317                              NULL);
2318 
2319     device = XtVaCreateManagedWidget(langcode("WPUPCFG003"),xmLabelWidgetClass, form,
2320                                      XmNtopAttachment, XmATTACH_FORM,
2321                                      XmNtopOffset, 10,
2322                                      XmNbottomAttachment, XmATTACH_NONE,
2323                                      XmNleftAttachment, XmATTACH_FORM,
2324                                      XmNleftOffset, 10,
2325                                      XmNrightAttachment, XmATTACH_NONE,
2326                                      XmNbackground, colors[0xff],
2327                                      XmNfontList, fontlist1,
2328                                      NULL);
2329 
2330     GPS_device_name_data = XtVaCreateManagedWidget("Config_GPS device_data", xmTextFieldWidgetClass, form,
2331                            XmNnavigationType, XmTAB_GROUP,
2332                            XmNtraversalOn, TRUE,
2333                            XmNeditable,   TRUE,
2334                            XmNcursorPositionVisible, TRUE,
2335                            XmNsensitive, TRUE,
2336                            XmNshadowThickness,    1,
2337                            XmNcolumns, 25,
2338                            XmNwidth, ((25*7)+2),
2339                            XmNmaxLength, MAX_DEVICE_NAME,
2340                            XmNbackground, colors[0x0f],
2341                            XmNtopAttachment,XmATTACH_FORM,
2342                            XmNtopOffset, 5,
2343                            XmNbottomAttachment,XmATTACH_NONE,
2344                            XmNleftAttachment, XmATTACH_WIDGET,
2345                            XmNleftWidget, device,
2346                            XmNleftOffset, 10,
2347                            XmNrightAttachment,XmATTACH_FORM,
2348                            XmNrightOffset, 5,
2349                            XmNfontList, fontlist1,
2350                            NULL);
2351 
2352     comment = XtVaCreateManagedWidget(langcode("WPUPCFS017"),xmLabelWidgetClass, form,
2353                                       XmNtopAttachment, XmATTACH_WIDGET,
2354                                       XmNtopWidget, device,
2355                                       XmNtopOffset, 10,
2356                                       XmNbottomAttachment, XmATTACH_NONE,
2357                                       XmNleftAttachment, XmATTACH_FORM,
2358                                       XmNleftOffset, 15,
2359                                       XmNrightAttachment, XmATTACH_NONE,
2360                                       XmNbackground, colors[0xff],
2361                                       XmNfontList, fontlist1,
2362                                       NULL);
2363 
2364     GPS_comment = XtVaCreateManagedWidget("Config_GPS comment", xmTextFieldWidgetClass, form,
2365                                           XmNnavigationType, XmTAB_GROUP,
2366                                           XmNtraversalOn, TRUE,
2367                                           XmNeditable,   TRUE,
2368                                           XmNcursorPositionVisible, TRUE,
2369                                           XmNsensitive, TRUE,
2370                                           XmNshadowThickness,    1,
2371                                           XmNcolumns, 25,
2372                                           XmNwidth, ((25*7)+2),
2373                                           XmNmaxLength, 49,
2374                                           XmNbackground, colors[0x0f],
2375                                           XmNtopAttachment,XmATTACH_WIDGET,
2376                                           XmNtopWidget, device,
2377                                           XmNtopOffset, 10,
2378                                           XmNbottomAttachment,XmATTACH_NONE,
2379                                           XmNleftAttachment, XmATTACH_WIDGET,
2380                                           XmNleftWidget, comment,
2381                                           XmNleftOffset, 10,
2382                                           XmNrightAttachment,XmATTACH_FORM,
2383                                           XmNrightOffset, 5,
2384                                           XmNfontList, fontlist1,
2385                                           NULL);
2386 
2387     GPS_active_on_startup = XtVaCreateManagedWidget(langcode("UNIOP00011"),xmToggleButtonWidgetClass,form,
2388                             XmNnavigationType, XmTAB_GROUP,
2389                             XmNtraversalOn, TRUE,
2390                             XmNtopAttachment, XmATTACH_WIDGET,
2391                             XmNtopWidget, comment,
2392                             XmNtopOffset, 10,
2393                             XmNbottomAttachment, XmATTACH_NONE,
2394                             XmNleftAttachment, XmATTACH_FORM,
2395                             XmNleftOffset,10,
2396                             XmNrightAttachment, XmATTACH_NONE,
2397                             XmNbackground, colors[0xff],
2398                             XmNfontList, fontlist1,
2399                             NULL);
2400 
2401     GPS_set_time  = XtVaCreateManagedWidget(langcode("UNIOP00029"), xmToggleButtonWidgetClass, form,
2402                                             XmNnavigationType, XmTAB_GROUP,
2403                                             XmNtraversalOn, TRUE,
2404                                             XmNtopAttachment, XmATTACH_WIDGET,
2405                                             XmNtopWidget, GPS_active_on_startup,
2406                                             XmNtopOffset, 7,
2407                                             XmNbottomAttachment, XmATTACH_NONE,
2408                                             XmNleftAttachment, XmATTACH_FORM,
2409                                             XmNleftOffset,10,
2410                                             XmNrightAttachment, XmATTACH_NONE,
2411                                             XmNbackground, colors[0xff],
2412                                             XmNfontList, fontlist1,
2413                                             NULL);
2414 
2415 // We can only set the time properly on Linux systems
2416 #ifndef HAVE_SETTIMEOFDAY
2417     XtSetSensitive(GPS_set_time,FALSE);
2418 #endif  // HAVE_SETTIMEOFDAY
2419 #ifdef __CYGWIN__
2420     XtSetSensitive(GPS_set_time,FALSE);
2421 #endif  // __CYGWIN__
2422 
2423 
2424 
2425     frame = XtVaCreateManagedWidget("Config_GPS frame", xmFrameWidgetClass, form,
2426                                     XmNtopAttachment,XmATTACH_WIDGET,
2427                                     XmNtopOffset,10,
2428                                     XmNtopWidget, GPS_set_time,
2429                                     XmNbottomAttachment,XmATTACH_NONE,
2430                                     XmNleftAttachment, XmATTACH_FORM,
2431                                     XmNleftOffset, 10,
2432                                     XmNrightAttachment,XmATTACH_FORM,
2433                                     XmNrightOffset, 10,
2434                                     XmNbackground, colors[0xff],
2435                                     NULL);
2436 
2437     //speed
2438     XtVaCreateManagedWidget(langcode("WPUPCFT004"),xmLabelWidgetClass, frame,
2439                             XmNchildType, XmFRAME_TITLE_CHILD,
2440                             XmNbackground, colors[0xff],
2441                             XmNfontList, fontlist1,
2442                             NULL);
2443 
2444     /*set args for color */
2445     ac=0;
2446     XtSetArg(al[ac], XmNbackground, colors[0xff]);
2447     ac++;
2448 
2449 
2450     speed_box = XmCreateRadioBox(frame,"Config_GPS Speed_box",al,ac);
2451 
2452     XtVaSetValues(speed_box,XmNnumColumns,3,NULL);
2453 
2454     speed_300 = XtVaCreateManagedWidget(langcode("WPUPCFT005"),xmToggleButtonGadgetClass,
2455                                         speed_box,
2456                                         XmNbackground, colors[0xff],
2457                                         XmNfontList, fontlist1,
2458                                         NULL);
2459     XtAddCallback(speed_300,XmNvalueChangedCallback,speed_toggle,"1");
2460 
2461     speed_1200 = XtVaCreateManagedWidget(langcode("WPUPCFT006"),xmToggleButtonGadgetClass,
2462                                          speed_box,
2463                                          XmNbackground, colors[0xff],
2464                                          XmNfontList, fontlist1,
2465                                          NULL);
2466     XtAddCallback(speed_1200,XmNvalueChangedCallback,speed_toggle,"2");
2467 
2468     speed_2400 = XtVaCreateManagedWidget(langcode("WPUPCFT007"),xmToggleButtonGadgetClass,
2469                                          speed_box,
2470                                          XmNbackground, colors[0xff],
2471                                          XmNfontList, fontlist1,
2472                                          NULL);
2473     XtAddCallback(speed_2400,XmNvalueChangedCallback,speed_toggle,"3");
2474 
2475     speed_4800 = XtVaCreateManagedWidget(langcode("WPUPCFT008"),xmToggleButtonGadgetClass,
2476                                          speed_box,
2477                                          XmNbackground, colors[0xff],
2478                                          XmNfontList, fontlist1,
2479                                          NULL);
2480     XtAddCallback(speed_4800,XmNvalueChangedCallback,speed_toggle,"4");
2481 
2482     speed_9600 = XtVaCreateManagedWidget(langcode("WPUPCFT009"),xmToggleButtonGadgetClass,
2483                                          speed_box,
2484                                          XmNbackground, colors[0xff],
2485                                          XmNfontList, fontlist1,
2486                                          NULL);
2487     XtAddCallback(speed_9600,XmNvalueChangedCallback,speed_toggle,"5");
2488 
2489     speed_19200 = XtVaCreateManagedWidget(langcode("WPUPCFT010"),xmToggleButtonGadgetClass,
2490                                           speed_box,
2491                                           XmNbackground, colors[0xff],
2492                                           XmNfontList, fontlist1,
2493                                           NULL);
2494     XtAddCallback(speed_19200,XmNvalueChangedCallback,speed_toggle,"6");
2495 
2496     speed_38400 = XtVaCreateManagedWidget(langcode("WPUPCFT019"),xmToggleButtonGadgetClass,
2497                                           speed_box,
2498                                           XmNbackground, colors[0xff],
2499                                           XmNfontList, fontlist1,
2500                                           NULL);
2501     XtAddCallback(speed_38400,XmNvalueChangedCallback,speed_toggle,"7");
2502 
2503 #ifndef __LSB__
2504     speed_57600 = XtVaCreateManagedWidget(langcode("WPUPCFT020"),xmToggleButtonGadgetClass,
2505                                           speed_box,
2506                                           XmNbackground, colors[0xff],
2507                                           XmNfontList, fontlist1,
2508                                           NULL);
2509     XtAddCallback(speed_57600,XmNvalueChangedCallback,speed_toggle,"8");
2510 
2511     speed_115200 = XtVaCreateManagedWidget(langcode("WPUPCFT021"),xmToggleButtonGadgetClass,
2512                                            speed_box,
2513                                            XmNbackground, colors[0xff],
2514                                            XmNfontList, fontlist1,
2515                                            NULL);
2516     XtAddCallback(speed_115200,XmNvalueChangedCallback,speed_toggle,"9");
2517 
2518     speed_230400 = XtVaCreateManagedWidget(langcode("WPUPCFT022"),xmToggleButtonGadgetClass,
2519                                            speed_box,
2520                                            XmNbackground, colors[0xff],
2521                                            XmNfontList, fontlist1,
2522                                            NULL);
2523     XtAddCallback(speed_230400,XmNvalueChangedCallback,speed_toggle,"10");
2524 #endif  // __LSB__
2525 
2526     frame2 = XtVaCreateManagedWidget("Config_GPS frame2", xmFrameWidgetClass, form,
2527                                      XmNtopAttachment, XmATTACH_WIDGET,
2528                                      XmNtopWidget, frame,
2529                                      XmNtopOffset, 10,
2530                                      XmNbottomAttachment, XmATTACH_NONE,
2531                                      XmNleftAttachment, XmATTACH_FORM,
2532                                      XmNleftOffset, 10,
2533                                      XmNrightAttachment, XmATTACH_FORM,
2534                                      XmNrightOffset, 10,
2535                                      XmNbackground, colors[0xff],
2536                                      NULL);
2537 
2538     //style
2539     XtVaCreateManagedWidget(langcode("WPUPCFT015"),xmLabelWidgetClass, frame2,
2540                             XmNchildType, XmFRAME_TITLE_CHILD,
2541                             XmNbackground, colors[0xff],
2542                             XmNfontList, fontlist1,
2543                             NULL);
2544 
2545     style_box = XmCreateRadioBox(frame2,"Config_GPS Style box",al,ac);
2546 
2547     XtVaSetValues(style_box,
2548                   XmNorientation, XmHORIZONTAL,
2549                   NULL);
2550 
2551     style_8n1 = XtVaCreateManagedWidget(langcode("WPUPCFT016"),xmToggleButtonGadgetClass,
2552                                         style_box,
2553                                         XmNbackground, colors[0xff],
2554                                         XmNfontList, fontlist1,
2555                                         NULL);
2556     XtAddCallback(style_8n1,XmNvalueChangedCallback,style_toggle,"0");
2557 
2558     style_7e1 = XtVaCreateManagedWidget(langcode("WPUPCFT017"),xmToggleButtonGadgetClass,
2559                                         style_box,
2560                                         XmNbackground, colors[0xff],
2561                                         XmNfontList, fontlist1,
2562                                         NULL);
2563     XtAddCallback(style_7e1,XmNvalueChangedCallback,style_toggle,"1");
2564 
2565     style_7o1 = XtVaCreateManagedWidget(langcode("WPUPCFT018"),xmToggleButtonGadgetClass,
2566                                         style_box,
2567                                         XmNbackground, colors[0xff],
2568                                         XmNfontList, fontlist1,
2569                                         NULL);
2570     XtAddCallback(style_7o1,XmNvalueChangedCallback,style_toggle,"2");
2571 
2572     sep = XtVaCreateManagedWidget("Config_GPS sep", xmSeparatorGadgetClass,form,
2573                                   XmNorientation, XmHORIZONTAL,
2574                                   XmNtopAttachment,XmATTACH_WIDGET,
2575                                   XmNtopWidget, frame2,
2576                                   XmNtopOffset, 20,
2577                                   XmNbottomAttachment,XmATTACH_NONE,
2578                                   XmNleftAttachment, XmATTACH_FORM,
2579                                   XmNrightAttachment,XmATTACH_FORM,
2580                                   XmNbackground, colors[0xff],
2581                                   XmNfontList, fontlist1,
2582                                   NULL);
2583 
2584     button_ok = XtVaCreateManagedWidget(langcode("UNIOP00001"),xmPushButtonGadgetClass, form,
2585                                         XmNnavigationType, XmTAB_GROUP,
2586                                         XmNtraversalOn, TRUE,
2587                                         XmNtopAttachment, XmATTACH_WIDGET,
2588                                         XmNtopWidget, sep,
2589                                         XmNtopOffset, 10,
2590                                         XmNbottomAttachment, XmATTACH_FORM,
2591                                         XmNbottomOffset, 5,
2592                                         XmNleftAttachment, XmATTACH_POSITION,
2593                                         XmNleftPosition, 1,
2594                                         XmNrightAttachment, XmATTACH_POSITION,
2595                                         XmNrightPosition, 2,
2596                                         XmNbackground, colors[0xff],
2597                                         XmNfontList, fontlist1,
2598                                         NULL);
2599 
2600     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
2601                                             XmNnavigationType, XmTAB_GROUP,
2602                                             XmNtraversalOn, TRUE,
2603                                             XmNtopAttachment, XmATTACH_WIDGET,
2604                                             XmNtopWidget, sep,
2605                                             XmNtopOffset, 10,
2606                                             XmNbottomAttachment, XmATTACH_FORM,
2607                                             XmNbottomOffset, 5,
2608                                             XmNleftAttachment, XmATTACH_POSITION,
2609                                             XmNleftPosition, 3,
2610                                             XmNrightAttachment, XmATTACH_POSITION,
2611                                             XmNrightPosition, 4,
2612                                             XmNbackground, colors[0xff],
2613                                             XmNfontList, fontlist1,
2614                                             NULL);
2615 
2616     XtAddCallback(button_ok, XmNactivateCallback, Config_GPS_change_data, config_GPS_dialog);
2617     XtAddCallback(button_cancel, XmNactivateCallback, Config_GPS_destroy_shell, config_GPS_dialog);
2618 
2619     pos_dialog(config_GPS_dialog);
2620 
2621     delw = XmInternAtom(XtDisplay(config_GPS_dialog),"WM_DELETE_WINDOW", FALSE);
2622     XmAddWMProtocolCallback(config_GPS_dialog, delw, Config_GPS_destroy_shell, (XtPointer)config_GPS_dialog);
2623 
2624     if (config_type==0)
2625     {
2626       /* first time port */
2627       XmTextFieldSetString(GPS_device_name_data,GPS_PORT);
2628       XmTextFieldSetString(GPS_comment,"");
2629       XmToggleButtonSetState(GPS_active_on_startup,TRUE,FALSE);
2630       XmToggleButtonSetState(GPS_set_time, FALSE, FALSE);
2631       XmToggleButtonSetState(speed_4800,TRUE,FALSE);
2632       device_speed=4;
2633       XmToggleButtonSetState(style_8n1,TRUE,FALSE);
2634       device_style=0;
2635     }
2636     else
2637     {
2638       /* reconfig */
2639 
2640       begin_critical_section(&devices_lock, "interface_gui.c:Config_GPS" );
2641 
2642       XmTextFieldSetString(GPS_device_name_data,devices[GPS_port].device_name);
2643       XmTextFieldSetString(GPS_comment,devices[GPS_port].comment);
2644 
2645       if (devices[GPS_port].connect_on_startup)
2646       {
2647         XmToggleButtonSetState(GPS_active_on_startup,TRUE,FALSE);
2648       }
2649       else
2650       {
2651         XmToggleButtonSetState(GPS_active_on_startup,FALSE,FALSE);
2652       }
2653 
2654       if (devices[GPS_port].set_time)
2655       {
2656         XmToggleButtonSetState(GPS_set_time,TRUE,FALSE);
2657       }
2658       else
2659       {
2660         XmToggleButtonSetState(GPS_set_time,FALSE,FALSE);
2661       }
2662 
2663       switch (devices[GPS_port].sp)
2664       {
2665         case(B300):
2666           XmToggleButtonSetState(speed_300,TRUE,FALSE);
2667           device_speed=1;
2668           break;
2669 
2670         case(B1200):
2671           XmToggleButtonSetState(speed_1200,TRUE,FALSE);
2672           device_speed=2;
2673           break;
2674 
2675         case(B2400):
2676           XmToggleButtonSetState(speed_2400,TRUE,FALSE);
2677           device_speed=3;
2678           break;
2679 
2680         case(B4800):
2681           XmToggleButtonSetState(speed_4800,TRUE,FALSE);
2682           device_speed=4;
2683           break;
2684 
2685         case(B9600):
2686           XmToggleButtonSetState(speed_9600,TRUE,FALSE);
2687           device_speed=5;
2688           break;
2689 
2690         case(B19200):
2691           XmToggleButtonSetState(speed_19200,TRUE,FALSE);
2692           device_speed=6;
2693           break;
2694 
2695         case(B38400):
2696           XmToggleButtonSetState(speed_38400,TRUE,FALSE);
2697           device_speed=7;
2698           break;
2699 
2700 #ifndef __LSB__
2701         case(B57600):
2702           XmToggleButtonSetState(speed_57600,TRUE,FALSE);
2703           device_speed=8;
2704           break;
2705 
2706         case(B115200):
2707           XmToggleButtonSetState(speed_115200,TRUE,FALSE);
2708           device_speed=9;
2709           break;
2710 
2711 #ifdef B230400
2712         case(B230400):
2713           XmToggleButtonSetState(speed_230400,TRUE,FALSE);
2714           device_speed=10;
2715           break;
2716 #endif  // B230400
2717 #endif  // __LSB__
2718 
2719         default:
2720           XmToggleButtonSetState(speed_4800,TRUE,FALSE);
2721           device_speed=4;
2722           break;
2723       }
2724       switch (devices[GPS_port].style)
2725       {
2726         case(0):
2727           XmToggleButtonSetState(style_8n1,TRUE,FALSE);
2728           device_style=0;
2729           break;
2730 
2731         case(1):
2732           XmToggleButtonSetState(style_7e1,TRUE,FALSE);
2733           device_style=1;
2734           break;
2735 
2736         case(2):
2737           XmToggleButtonSetState(style_7o1,TRUE,FALSE);
2738           device_style=2;
2739           break;
2740 
2741         default:
2742           XmToggleButtonSetState(style_8n1,TRUE,FALSE);
2743           device_style=0;
2744           break;
2745       }
2746 
2747       end_critical_section(&devices_lock, "interface_gui.c:Config_GPS" );
2748 
2749     }
2750     XtManageChild(form);
2751     XtManageChild(speed_box);
2752     XtManageChild(style_box);
2753     XtManageChild(pane);
2754 
2755     resize_dialog(form, config_GPS_dialog);
2756 
2757     XtPopup(config_GPS_dialog,XtGrabNone);
2758   }
2759   else
2760   {
2761     (void)XRaiseWindow(XtDisplay(config_GPS_dialog), XtWindow(config_GPS_dialog));
2762   }
2763 }
2764 
2765 
2766 
2767 
2768 
2769 /*****************************************************/
2770 /* Configure Serial WX GUI                          */
2771 /*****************************************************/
2772 
2773 /**** WX CONFIGURE ******/
2774 int WX_port;
2775 int WX_rain_gauge_type;
2776 Widget config_WX_dialog = (Widget)NULL;
2777 Widget WX_transmit_data;
2778 Widget WX_device_name_data;
2779 Widget WX_comment;
2780 Widget WX_active_on_startup;
2781 Widget WX_tenths, WX_hundredths, WX_millimeters;
2782 
2783 
2784 
2785 
2786 
Config_WX_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))2787 void Config_WX_destroy_shell( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
2788 {
2789   Widget shell = (Widget) clientData;
2790   XtPopdown(shell);
2791   XtDestroyWidget(shell);
2792   config_WX_dialog = (Widget)NULL;
2793   if (choose_interface_dialog != NULL)
2794   {
2795     Choose_interface_destroy_shell(choose_interface_dialog,choose_interface_dialog,NULL);
2796   }
2797 
2798   choose_interface_dialog = (Widget)NULL;
2799 }
2800 
2801 
2802 
2803 
2804 
Config_WX_change_data(Widget widget,XtPointer clientData,XtPointer callData)2805 void Config_WX_change_data(Widget widget, XtPointer clientData, XtPointer callData)
2806 {
2807   int was_up;
2808   char *temp_ptr;
2809 
2810 
2811   busy_cursor(appshell);
2812   was_up=0;
2813   if (get_device_status(WX_port) == DEVICE_IN_USE)
2814   {
2815     /* if active shutdown before changes are made */
2816     /*fprintf(stderr,"Device is up, shutting down\n");*/
2817     (void)del_device(WX_port);
2818     was_up=1;
2819     usleep(1000000); // Wait for one second
2820   }
2821 
2822   begin_critical_section(&devices_lock, "interface_gui.c:Config_WX_change_data" );
2823 
2824   temp_ptr = XmTextFieldGetString(WX_device_name_data);
2825   xastir_snprintf(devices[WX_port].device_name,
2826                   sizeof(devices[WX_port].device_name),
2827                   "%s",
2828                   temp_ptr);
2829   XtFree(temp_ptr);
2830 
2831   (void)remove_trailing_spaces(devices[WX_port].device_name);
2832 
2833   temp_ptr = XmTextFieldGetString(WX_comment);
2834   xastir_snprintf(devices[WX_port].comment,
2835                   sizeof(devices[WX_port].comment),
2836                   "%s",
2837                   temp_ptr);
2838   XtFree(temp_ptr);
2839 
2840   (void)remove_trailing_spaces(devices[WX_port].comment);
2841 
2842   if(XmToggleButtonGetState(WX_active_on_startup))
2843   {
2844     devices[WX_port].connect_on_startup=1;
2845   }
2846   else
2847   {
2848     devices[WX_port].connect_on_startup=0;
2849   }
2850 
2851   set_port_speed(WX_port);
2852   devices[WX_port].style=device_style;
2853 
2854   xastir_snprintf(devices[WX_port].device_host_pswd,
2855                   sizeof( devices[WX_port].device_host_pswd), "%d", device_data_type);
2856 
2857   /* reopen */
2858   if ( was_up)
2859   {
2860     (void)add_device(WX_port,
2861                      DEVICE_SERIAL_WX,
2862                      devices[WX_port].device_name,
2863                      devices[WX_port].device_host_pswd,
2864                      -1,
2865                      devices[WX_port].sp,
2866                      devices[WX_port].style,
2867                      0,
2868                      "");
2869   }
2870 
2871   /* delete list */
2872 //    modify_device_list(4,0);
2873 
2874 
2875   /* add device type */
2876   devices[WX_port].device_type=DEVICE_SERIAL_WX;
2877 
2878   /* rebuild list */
2879 //    modify_device_list(3,0);
2880 
2881 
2882   end_critical_section(&devices_lock, "interface_gui.c:Config_WX_change_data" );
2883 
2884   // Rebuild the interface control list
2885   update_interface_list();
2886 
2887   Config_WX_destroy_shell(widget,clientData,callData);
2888 }
2889 
2890 
2891 
2892 
2893 
Config_WX(Widget UNUSED (w),int config_type,int port)2894 void Config_WX( Widget UNUSED(w), int config_type, int port)
2895 {
2896   static Widget  pane, scrollwindow, form, button_ok, button_cancel,
2897          frame, frame2, frame3, frame4, WX_none,
2898          device, comment, speed_box,
2899          speed_300, speed_1200, speed_2400, speed_4800, speed_9600,
2900          speed_19200, speed_38400;
2901 //  static Widget speed;
2902 #ifndef __LSB__
2903   static Widget speed_57600, speed_115200, speed_230400;
2904 #endif  // __LSB__
2905   static Widget style_box,
2906          style_8n1, style_7e1, style_7o1,
2907          data_box,
2908          data_auto, data_bin, data_ascii,
2909          gauge_box,
2910          sep;
2911 //  static Widget data_type, gauge_type;
2912 //  static Widget style;
2913   Atom delw;
2914   Arg al[50];                    /* Arg List */
2915   register unsigned int ac = 0;           /* Arg Count */
2916 
2917   if(!config_WX_dialog)
2918   {
2919     WX_port=port;
2920     config_WX_dialog = XtVaCreatePopupShell(langcode("WPUPCFWX01"),
2921                                             xmDialogShellWidgetClass, appshell,
2922                                             XmNdeleteResponse, XmDESTROY,
2923                                             XmNdefaultPosition, FALSE,
2924                                             XmNfontList, fontlist1,
2925                                             NULL);
2926 
2927     pane = XtVaCreateWidget("Config_WX pane",xmPanedWindowWidgetClass, config_WX_dialog,
2928                             XmNbackground, colors[0xff],
2929                             NULL);
2930 
2931     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
2932                                            xmScrolledWindowWidgetClass,
2933                                            pane,
2934                                            XmNscrollingPolicy, XmAUTOMATIC,
2935                                            NULL);
2936 
2937     form =  XtVaCreateWidget("Config_WX form",
2938                              xmFormWidgetClass,
2939                              scrollwindow,
2940                              XmNfractionBase, 5,
2941                              XmNbackground, colors[0xff],
2942                              XmNautoUnmanage, FALSE,
2943                              XmNshadowThickness, 1,
2944                              NULL);
2945 
2946     device = XtVaCreateManagedWidget(langcode("WPUPCFWX02"),xmLabelWidgetClass, form,
2947                                      XmNtopAttachment, XmATTACH_FORM,
2948                                      XmNtopOffset, 10,
2949                                      XmNbottomAttachment, XmATTACH_NONE,
2950                                      XmNleftAttachment, XmATTACH_FORM,
2951                                      XmNleftOffset, 10,
2952                                      XmNrightAttachment, XmATTACH_NONE,
2953                                      XmNbackground, colors[0xff],
2954                                      XmNfontList, fontlist1,
2955                                      NULL);
2956 
2957     WX_device_name_data = XtVaCreateManagedWidget("Config_WX device_data", xmTextFieldWidgetClass, form,
2958                           XmNnavigationType, XmTAB_GROUP,
2959                           XmNtraversalOn, TRUE,
2960                           XmNeditable,   TRUE,
2961                           XmNcursorPositionVisible, TRUE,
2962                           XmNsensitive, TRUE,
2963                           XmNshadowThickness,    1,
2964                           XmNcolumns, 15,
2965                           XmNwidth, ((15*7)+2),
2966                           XmNmaxLength, MAX_DEVICE_NAME,
2967                           XmNbackground, colors[0x0f],
2968                           XmNtopAttachment,XmATTACH_FORM,
2969                           XmNtopOffset, 5,
2970                           XmNbottomAttachment,XmATTACH_NONE,
2971                           XmNleftAttachment, XmATTACH_WIDGET,
2972                           XmNleftWidget, device,
2973                           XmNleftOffset, 10,
2974                           XmNrightAttachment,XmATTACH_FORM,
2975                           XmNrightOffset, 5,
2976                           XmNfontList, fontlist1,
2977                           NULL);
2978 
2979     comment = XtVaCreateManagedWidget(langcode("WPUPCFS017"),xmLabelWidgetClass, form,
2980                                       XmNtopAttachment, XmATTACH_WIDGET,
2981                                       XmNtopWidget, device,
2982                                       XmNtopOffset, 15,
2983                                       XmNbottomAttachment, XmATTACH_NONE,
2984                                       XmNleftAttachment, XmATTACH_FORM,
2985                                       XmNleftOffset, 10,
2986                                       XmNrightAttachment, XmATTACH_NONE,
2987                                       XmNbackground, colors[0xff],
2988                                       XmNfontList, fontlist1,
2989                                       NULL);
2990 
2991     WX_comment = XtVaCreateManagedWidget("Config_WX comment", xmTextFieldWidgetClass, form,
2992                                          XmNnavigationType, XmTAB_GROUP,
2993                                          XmNtraversalOn, TRUE,
2994                                          XmNeditable,   TRUE,
2995                                          XmNcursorPositionVisible, TRUE,
2996                                          XmNsensitive, TRUE,
2997                                          XmNshadowThickness,    1,
2998                                          XmNcolumns, 15,
2999                                          XmNwidth, ((15*7)+2),
3000                                          XmNmaxLength, 49,
3001                                          XmNbackground, colors[0x0f],
3002                                          XmNtopAttachment,XmATTACH_WIDGET,
3003                                          XmNtopWidget, device,
3004                                          XmNtopOffset, 10,
3005                                          XmNbottomAttachment,XmATTACH_NONE,
3006                                          XmNleftAttachment, XmATTACH_WIDGET,
3007                                          XmNleftWidget, comment,
3008                                          XmNleftOffset, 10,
3009                                          XmNrightAttachment,XmATTACH_FORM,
3010                                          XmNrightOffset, 5,
3011                                          XmNfontList, fontlist1,
3012                                          NULL);
3013 
3014     WX_active_on_startup = XtVaCreateManagedWidget(langcode("UNIOP00011"),xmToggleButtonWidgetClass,form,
3015                            XmNnavigationType, XmTAB_GROUP,
3016                            XmNtraversalOn, TRUE,
3017                            XmNtopAttachment, XmATTACH_WIDGET,
3018                            XmNtopWidget, comment,
3019                            XmNtopOffset, 10,
3020                            XmNbottomAttachment, XmATTACH_NONE,
3021                            XmNleftAttachment, XmATTACH_FORM,
3022                            XmNleftOffset,10,
3023                            XmNrightAttachment, XmATTACH_NONE,
3024                            XmNbackground, colors[0xff],
3025                            XmNfontList, fontlist1,
3026                            NULL);
3027 
3028     frame = XtVaCreateManagedWidget("Config_WX frame", xmFrameWidgetClass, form,
3029                                     XmNtopAttachment,XmATTACH_WIDGET,
3030                                     XmNtopOffset,10,
3031                                     XmNtopWidget, WX_active_on_startup,
3032                                     XmNbottomAttachment,XmATTACH_NONE,
3033                                     XmNleftAttachment, XmATTACH_FORM,
3034                                     XmNleftOffset, 10,
3035                                     XmNrightAttachment,XmATTACH_FORM,
3036                                     XmNrightOffset, 10,
3037                                     XmNbackground, colors[0xff],
3038                                     XmNfontList, fontlist1,
3039                                     NULL);
3040 
3041     // speed
3042     XtVaCreateManagedWidget(langcode("WPUPCFT004"),xmLabelWidgetClass, frame,
3043                             XmNchildType, XmFRAME_TITLE_CHILD,
3044                             XmNbackground, colors[0xff],
3045                             XmNfontList, fontlist1,
3046                             NULL);
3047 
3048     /*set args for color */
3049     ac=0;
3050     XtSetArg(al[ac], XmNbackground, colors[0xff]);
3051     ac++;
3052 
3053 
3054     speed_box = XmCreateRadioBox(frame,"Config_WX Speed_box",al,ac);
3055 
3056     XtVaSetValues(speed_box,
3057                   XmNnumColumns,3,
3058                   NULL);
3059 
3060     speed_300 = XtVaCreateManagedWidget(langcode("WPUPCFT005"),xmToggleButtonGadgetClass,
3061                                         speed_box,
3062                                         XmNbackground, colors[0xff],
3063                                         XmNfontList, fontlist1,
3064                                         NULL);
3065     XtAddCallback(speed_300,XmNvalueChangedCallback,speed_toggle,"1");
3066 
3067     speed_1200 = XtVaCreateManagedWidget(langcode("WPUPCFT006"),xmToggleButtonGadgetClass,
3068                                          speed_box,
3069                                          XmNbackground, colors[0xff],
3070                                          XmNfontList, fontlist1,
3071                                          NULL);
3072     XtAddCallback(speed_1200,XmNvalueChangedCallback,speed_toggle,"2");
3073 
3074     speed_2400 = XtVaCreateManagedWidget(langcode("WPUPCFT007"),xmToggleButtonGadgetClass,
3075                                          speed_box,
3076                                          XmNbackground, colors[0xff],
3077                                          XmNfontList, fontlist1,
3078                                          NULL);
3079     XtAddCallback(speed_2400,XmNvalueChangedCallback,speed_toggle,"3");
3080 
3081     speed_4800 = XtVaCreateManagedWidget(langcode("WPUPCFT008"),xmToggleButtonGadgetClass,
3082                                          speed_box,
3083                                          XmNbackground, colors[0xff],
3084                                          XmNfontList, fontlist1,
3085                                          NULL);
3086     XtAddCallback(speed_4800,XmNvalueChangedCallback,speed_toggle,"4");
3087 
3088     speed_9600 = XtVaCreateManagedWidget(langcode("WPUPCFT009"),xmToggleButtonGadgetClass,
3089                                          speed_box,
3090                                          XmNbackground, colors[0xff],
3091                                          XmNfontList, fontlist1,
3092                                          NULL);
3093     XtAddCallback(speed_9600,XmNvalueChangedCallback,speed_toggle,"5");
3094 
3095     speed_19200 = XtVaCreateManagedWidget(langcode("WPUPCFT010"),xmToggleButtonGadgetClass,
3096                                           speed_box,
3097                                           XmNbackground, colors[0xff],
3098                                           XmNfontList, fontlist1,
3099                                           NULL);
3100     XtAddCallback(speed_19200,XmNvalueChangedCallback,speed_toggle,"6");
3101 
3102     speed_38400 = XtVaCreateManagedWidget(langcode("WPUPCFT019"),xmToggleButtonGadgetClass,
3103                                           speed_box,
3104                                           XmNbackground, colors[0xff],
3105                                           XmNfontList, fontlist1,
3106                                           NULL);
3107     XtAddCallback(speed_38400,XmNvalueChangedCallback,speed_toggle,"7");
3108 
3109 #ifndef __LSB__
3110     speed_57600 = XtVaCreateManagedWidget(langcode("WPUPCFT020"),xmToggleButtonGadgetClass,
3111                                           speed_box,
3112                                           XmNbackground, colors[0xff],
3113                                           XmNfontList, fontlist1,
3114                                           NULL);
3115     XtAddCallback(speed_57600,XmNvalueChangedCallback,speed_toggle,"8");
3116 
3117     speed_115200 = XtVaCreateManagedWidget(langcode("WPUPCFT021"),xmToggleButtonGadgetClass,
3118                                            speed_box,
3119                                            XmNbackground, colors[0xff],
3120                                            XmNfontList, fontlist1,
3121                                            NULL);
3122     XtAddCallback(speed_115200,XmNvalueChangedCallback,speed_toggle,"9");
3123 
3124     speed_230400 = XtVaCreateManagedWidget(langcode("WPUPCFT022"),xmToggleButtonGadgetClass,
3125                                            speed_box,
3126                                            XmNbackground, colors[0xff],
3127                                            XmNfontList, fontlist1,
3128                                            NULL);
3129     XtAddCallback(speed_230400,XmNvalueChangedCallback,speed_toggle,"10");
3130 #endif  // __LSB__
3131 
3132     frame2 = XtVaCreateManagedWidget("Config_WX frame2", xmFrameWidgetClass, form,
3133                                      XmNtopAttachment, XmATTACH_WIDGET,
3134                                      XmNtopWidget, frame,
3135                                      XmNtopOffset, 10,
3136                                      XmNbottomAttachment, XmATTACH_NONE,
3137                                      XmNleftAttachment, XmATTACH_FORM,
3138                                      XmNleftOffset, 10,
3139                                      XmNrightAttachment, XmATTACH_FORM,
3140                                      XmNrightOffset, 10,
3141                                      XmNbackground, colors[0xff],
3142                                      NULL);
3143 
3144     // style
3145     XtVaCreateManagedWidget(langcode("WPUPCFT015"),xmLabelWidgetClass, frame2,
3146                             XmNchildType, XmFRAME_TITLE_CHILD,
3147                             XmNbackground, colors[0xff],
3148                             XmNfontList, fontlist1,
3149                             NULL);
3150 
3151     style_box = XmCreateRadioBox(frame2,"Config_WX Style box",al,ac);
3152 
3153     XtVaSetValues(style_box,
3154                   XmNorientation, XmHORIZONTAL,
3155                   NULL);
3156 
3157     style_8n1 = XtVaCreateManagedWidget(langcode("WPUPCFT016"),xmToggleButtonGadgetClass,
3158                                         style_box,
3159                                         XmNbackground, colors[0xff],
3160                                         XmNfontList, fontlist1,
3161                                         NULL);
3162     XtAddCallback(style_8n1,XmNvalueChangedCallback,style_toggle,"0");
3163 
3164     style_7e1 = XtVaCreateManagedWidget(langcode("WPUPCFT017"),xmToggleButtonGadgetClass,
3165                                         style_box,
3166                                         XmNbackground, colors[0xff],
3167                                         XmNfontList, fontlist1,
3168                                         NULL);
3169     XtAddCallback(style_7e1,XmNvalueChangedCallback,style_toggle,"1");
3170 
3171     style_7o1 = XtVaCreateManagedWidget(langcode("WPUPCFT018"),xmToggleButtonGadgetClass,
3172                                         style_box,
3173                                         XmNbackground, colors[0xff],
3174                                         XmNfontList, fontlist1,
3175                                         NULL);
3176     XtAddCallback(style_7o1,XmNvalueChangedCallback,style_toggle,"2");
3177 
3178     frame3 = XtVaCreateManagedWidget("Config_WX frame3", xmFrameWidgetClass, form,
3179                                      XmNtopAttachment, XmATTACH_WIDGET,
3180                                      XmNtopWidget, frame2,
3181                                      XmNtopOffset, 10,
3182                                      XmNbottomAttachment, XmATTACH_NONE,
3183                                      XmNleftAttachment, XmATTACH_FORM,
3184                                      XmNleftOffset, 10,
3185                                      XmNrightAttachment, XmATTACH_FORM,
3186                                      XmNrightOffset, 10,
3187                                      XmNbackground, colors[0xff],
3188                                      NULL);
3189 
3190     // data_type
3191     XtVaCreateManagedWidget(langcode("WPUPCFT024"),xmLabelWidgetClass, frame3,
3192                             XmNchildType, XmFRAME_TITLE_CHILD,
3193                             XmNbackground, colors[0xff],
3194                             XmNfontList, fontlist1,
3195                             NULL);
3196 
3197     data_box = XmCreateRadioBox(frame3,"Config_WX data box",al,ac);
3198 
3199     XtVaSetValues(data_box,
3200                   XmNorientation, XmHORIZONTAL,
3201                   NULL);
3202 
3203     data_auto = XtVaCreateManagedWidget(langcode("WPUPCFT025"),xmToggleButtonGadgetClass,
3204                                         data_box,
3205                                         XmNbackground, colors[0xff],
3206                                         XmNfontList, fontlist1,
3207                                         NULL);
3208     XtAddCallback(data_auto,XmNvalueChangedCallback,data_toggle,"0");
3209 
3210     data_bin = XtVaCreateManagedWidget(langcode("WPUPCFT026"),xmToggleButtonGadgetClass,
3211                                        data_box,
3212                                        XmNbackground, colors[0xff],
3213                                        XmNfontList, fontlist1,
3214                                        NULL);
3215     XtAddCallback(data_bin,XmNvalueChangedCallback,data_toggle,"1");
3216 
3217     data_ascii = XtVaCreateManagedWidget(langcode("WPUPCFT027"),xmToggleButtonGadgetClass,
3218                                          data_box,
3219                                          XmNbackground, colors[0xff],
3220                                          XmNfontList, fontlist1,
3221                                          NULL);
3222     XtAddCallback(data_ascii,XmNvalueChangedCallback,data_toggle,"2");
3223 
3224     frame4 = XtVaCreateManagedWidget("Config_WX frame4", xmFrameWidgetClass, form,
3225                                      XmNtopAttachment, XmATTACH_WIDGET,
3226                                      XmNtopWidget, frame3,
3227                                      XmNtopOffset, 10,
3228                                      XmNbottomAttachment, XmATTACH_NONE,
3229                                      XmNleftAttachment, XmATTACH_FORM,
3230                                      XmNleftOffset, 10,
3231                                      XmNrightAttachment, XmATTACH_FORM,
3232                                      XmNrightOffset, 10,
3233                                      XmNbackground, colors[0xff],
3234                                      NULL);
3235 
3236     // Rain Gauge Type
3237     // gauge_type
3238     XtVaCreateManagedWidget(langcode("WPUPCFWX03"),xmLabelWidgetClass, frame4,
3239                             XmNchildType, XmFRAME_TITLE_CHILD,
3240                             XmNbackground, colors[0xff],
3241                             XmNfontList, fontlist1,
3242                             NULL);
3243 
3244     gauge_box = XmCreateRadioBox(frame4,"Config_WX gauge box",al,ac);
3245 
3246     XtVaSetValues(gauge_box,
3247                   XmNorientation, XmHORIZONTAL,
3248                   NULL);
3249 
3250     WX_none = XtVaCreateManagedWidget(langcode("WPUPCFWX07"),xmToggleButtonGadgetClass,
3251                                       gauge_box,
3252                                       XmNbackground, colors[0xff],
3253                                       XmNfontList, fontlist1,
3254                                       NULL);
3255     WX_tenths = XtVaCreateManagedWidget(langcode("WPUPCFWX04"),xmToggleButtonGadgetClass,
3256                                         gauge_box,
3257                                         XmNbackground, colors[0xff],
3258                                         XmNfontList, fontlist1,
3259                                         NULL);
3260     WX_hundredths = XtVaCreateManagedWidget(langcode("WPUPCFWX05"),xmToggleButtonGadgetClass,
3261                                             gauge_box,
3262                                             XmNbackground, colors[0xff],
3263                                             XmNfontList, fontlist1,
3264                                             NULL);
3265     WX_millimeters = XtVaCreateManagedWidget(langcode("WPUPCFWX06"),xmToggleButtonGadgetClass,
3266                      gauge_box,
3267                      XmNbackground, colors[0xff],
3268                      XmNfontList, fontlist1,
3269                      NULL);
3270 
3271     XtAddCallback(WX_none,XmNvalueChangedCallback,rain_gauge_toggle,"0");
3272     XtAddCallback(WX_tenths,XmNvalueChangedCallback,rain_gauge_toggle,"1");
3273     XtAddCallback(WX_hundredths,XmNvalueChangedCallback,rain_gauge_toggle,"2");
3274     XtAddCallback(WX_millimeters,XmNvalueChangedCallback,rain_gauge_toggle,"3");
3275 
3276     sep = XtVaCreateManagedWidget("Config_WX sep", xmSeparatorGadgetClass,form,
3277                                   XmNorientation, XmHORIZONTAL,
3278                                   XmNtopAttachment,XmATTACH_WIDGET,
3279                                   XmNtopWidget, frame4,
3280                                   XmNtopOffset, 20,
3281                                   XmNbottomAttachment,XmATTACH_NONE,
3282                                   XmNleftAttachment, XmATTACH_FORM,
3283                                   XmNrightAttachment,XmATTACH_FORM,
3284                                   XmNbackground, colors[0xff],
3285                                   XmNfontList, fontlist1,
3286                                   NULL);
3287 
3288     button_ok = XtVaCreateManagedWidget(langcode("UNIOP00001"),xmPushButtonGadgetClass, form,
3289                                         XmNnavigationType, XmTAB_GROUP,
3290                                         XmNtraversalOn, TRUE,
3291                                         XmNtopAttachment, XmATTACH_WIDGET,
3292                                         XmNtopWidget, sep,
3293                                         XmNtopOffset, 10,
3294                                         XmNbottomAttachment, XmATTACH_FORM,
3295                                         XmNbottomOffset, 5,
3296                                         XmNleftAttachment, XmATTACH_POSITION,
3297                                         XmNleftPosition, 1,
3298                                         XmNrightAttachment, XmATTACH_POSITION,
3299                                         XmNrightPosition, 2,
3300                                         XmNbackground, colors[0xff],
3301                                         XmNfontList, fontlist1,
3302                                         NULL);
3303 
3304     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
3305                                             XmNnavigationType, XmTAB_GROUP,
3306                                             XmNtraversalOn, TRUE,
3307                                             XmNtopAttachment, XmATTACH_WIDGET,
3308                                             XmNtopWidget, sep,
3309                                             XmNtopOffset, 10,
3310                                             XmNbottomAttachment, XmATTACH_FORM,
3311                                             XmNbottomOffset, 5,
3312                                             XmNleftAttachment, XmATTACH_POSITION,
3313                                             XmNleftPosition, 3,
3314                                             XmNrightAttachment, XmATTACH_POSITION,
3315                                             XmNrightPosition, 4,
3316                                             XmNbackground, colors[0xff],
3317                                             XmNfontList, fontlist1,
3318                                             NULL);
3319 
3320     XtAddCallback(button_ok, XmNactivateCallback, Config_WX_change_data, config_WX_dialog);
3321     XtAddCallback(button_cancel, XmNactivateCallback, Config_WX_destroy_shell, config_WX_dialog);
3322 
3323     pos_dialog(config_WX_dialog);
3324 
3325     delw = XmInternAtom(XtDisplay(config_WX_dialog),"WM_DELETE_WINDOW", FALSE);
3326     XmAddWMProtocolCallback(config_WX_dialog, delw, Config_WX_destroy_shell, (XtPointer)config_WX_dialog);
3327 
3328     begin_critical_section(&devices_lock, "interface_gui.c:Config_WX" );
3329 
3330     if (config_type==0)
3331     {
3332       /* first time port */
3333       XmTextFieldSetString(WX_device_name_data,GPS_PORT);
3334       XmTextFieldSetString(WX_comment,"");
3335       XmToggleButtonSetState(WX_active_on_startup,TRUE,FALSE);
3336       XmToggleButtonSetState(speed_2400,TRUE,FALSE);
3337       device_speed=3;
3338       XmToggleButtonSetState(style_8n1,TRUE,FALSE);
3339       device_style=0;
3340       device_data_type=0;
3341       XmToggleButtonSetState(data_auto,TRUE,FALSE);
3342     }
3343     else
3344     {
3345       /* reconfig */
3346       XmTextFieldSetString(WX_device_name_data,devices[WX_port].device_name);
3347       XmTextFieldSetString(WX_comment,devices[WX_port].comment);
3348 
3349       if (devices[WX_port].connect_on_startup)
3350       {
3351         XmToggleButtonSetState(WX_active_on_startup,TRUE,FALSE);
3352       }
3353       else
3354       {
3355         XmToggleButtonSetState(WX_active_on_startup,FALSE,FALSE);
3356       }
3357 
3358       switch (devices[WX_port].sp)
3359       {
3360         case(B300):
3361           XmToggleButtonSetState(speed_300,TRUE,FALSE);
3362           device_speed=1;
3363           break;
3364 
3365         case(B1200):
3366           XmToggleButtonSetState(speed_1200,TRUE,FALSE);
3367           device_speed=2;
3368           break;
3369 
3370         case(B2400):
3371           XmToggleButtonSetState(speed_2400,TRUE,FALSE);
3372           device_speed=3;
3373           break;
3374 
3375         case(B4800):
3376           XmToggleButtonSetState(speed_4800,TRUE,FALSE);
3377           device_speed=4;
3378           break;
3379 
3380         case(B9600):
3381           XmToggleButtonSetState(speed_9600,TRUE,FALSE);
3382           device_speed=5;
3383           break;
3384 
3385         case(B19200):
3386           XmToggleButtonSetState(speed_19200,TRUE,FALSE);
3387           device_speed=6;
3388           break;
3389 
3390         case(B38400):
3391           XmToggleButtonSetState(speed_38400,TRUE,FALSE);
3392           device_speed=7;
3393           break;
3394 
3395 #ifndef __LSB__
3396         case(B57600):
3397           XmToggleButtonSetState(speed_57600,TRUE,FALSE);
3398           device_speed=8;
3399           break;
3400 
3401         case(B115200):
3402           XmToggleButtonSetState(speed_115200,TRUE,FALSE);
3403           device_speed=9;
3404           break;
3405 
3406 #ifdef B230400
3407         case(B230400):
3408           XmToggleButtonSetState(speed_230400,TRUE,FALSE);
3409           device_speed=10;
3410           break;
3411 #endif  // B230400
3412 #endif  // __LSB__
3413 
3414         default:
3415           XmToggleButtonSetState(speed_4800,TRUE,FALSE);
3416           device_speed=4;
3417           break;
3418       }
3419       switch (devices[WX_port].style)
3420       {
3421         case(0):
3422           XmToggleButtonSetState(style_8n1,TRUE,FALSE);
3423           device_style=0;
3424           break;
3425 
3426         case(1):
3427           XmToggleButtonSetState(style_7e1,TRUE,FALSE);
3428           device_style=1;
3429           break;
3430 
3431         case(2):
3432           XmToggleButtonSetState(style_7o1,TRUE,FALSE);
3433           device_style=2;
3434           break;
3435 
3436         default:
3437           XmToggleButtonSetState(style_8n1,TRUE,FALSE);
3438           device_style=0;
3439           break;
3440       }
3441       switch (atoi(devices[WX_port].device_host_pswd))
3442       {
3443         case(0):
3444           XmToggleButtonSetState(data_auto,TRUE,FALSE);
3445           device_data_type=0;
3446           break;
3447 
3448         case(1):
3449           XmToggleButtonSetState(data_bin,TRUE,FALSE);
3450           device_data_type=1;
3451           break;
3452 
3453         case(2):
3454           XmToggleButtonSetState(data_ascii,TRUE,FALSE);
3455           device_data_type=2;
3456           break;
3457 
3458         default:
3459           device_data_type=0;
3460           break;
3461       }
3462     }
3463 
3464     end_critical_section(&devices_lock, "interface_gui.c:Config_WX" );
3465 
3466     XmToggleButtonSetState(WX_none,FALSE,FALSE);
3467     XmToggleButtonSetState(WX_tenths,FALSE,FALSE);
3468     XmToggleButtonSetState(WX_hundredths,FALSE,FALSE);
3469     XmToggleButtonSetState(WX_millimeters,FALSE,FALSE);
3470     switch (WX_rain_gauge_type)
3471     {
3472       case(1):
3473         XmToggleButtonSetState(WX_tenths,TRUE,FALSE);
3474         break;
3475       case(2):
3476         XmToggleButtonSetState(WX_hundredths,TRUE,FALSE);
3477         break;
3478       case(3):
3479         XmToggleButtonSetState(WX_millimeters,TRUE,FALSE);
3480         break;
3481       default:
3482         XmToggleButtonSetState(WX_none,TRUE,FALSE);
3483         break;
3484     }
3485 
3486     XtManageChild(form);
3487     XtManageChild(speed_box);
3488     XtManageChild(style_box);
3489     XtManageChild(data_box);
3490     XtManageChild(gauge_box);
3491     XtManageChild(pane);
3492 
3493     resize_dialog(form, config_WX_dialog);
3494 
3495     XtPopup(config_WX_dialog,XtGrabNone);
3496   }
3497   else
3498   {
3499     (void)XRaiseWindow(XtDisplay(config_WX_dialog), XtWindow(config_WX_dialog));
3500   }
3501 
3502 }
3503 
3504 
3505 
3506 
3507 
3508 /**** net WX CONFIGURE ******/
3509 int NWX_port;
3510 Widget config_NWX_dialog = (Widget)NULL;
3511 Widget NWX_host_name_data;
3512 Widget NWX_host_port_data;
3513 Widget NWX_comment;
3514 Widget NWX_active_on_startup;
3515 Widget NWX_host_reconnect_data;
3516 
3517 
3518 
3519 
3520 
Config_NWX_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))3521 void Config_NWX_destroy_shell( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
3522 {
3523   Widget shell = (Widget) clientData;
3524   XtPopdown(shell);
3525   XtDestroyWidget(shell);
3526   config_NWX_dialog = (Widget)NULL;
3527 
3528   if (choose_interface_dialog != NULL)
3529   {
3530     Choose_interface_destroy_shell(choose_interface_dialog,choose_interface_dialog,NULL);
3531   }
3532 
3533   choose_interface_dialog = (Widget)NULL;
3534 }
3535 
3536 
3537 
3538 
3539 
Config_NWX_change_data(Widget widget,XtPointer clientData,XtPointer callData)3540 void Config_NWX_change_data(Widget widget, XtPointer clientData, XtPointer callData)
3541 {
3542   int was_up;
3543   char *temp_ptr;
3544 
3545 
3546   busy_cursor(appshell);
3547 
3548   was_up=0;
3549   if (get_device_status(NWX_port) == DEVICE_IN_USE)
3550   {
3551     /* if active shutdown before changes are made */
3552     /*fprintf(stderr,"Device is up, shutting down\n");*/
3553     (void)del_device(NWX_port);
3554     was_up=1;
3555     usleep(1000000); // Wait for one second
3556   }
3557 
3558   begin_critical_section(&devices_lock, "interface_gui.c:Config_NWX_change_data" );
3559 
3560   temp_ptr = XmTextFieldGetString(NWX_host_name_data);
3561   xastir_snprintf(devices[NWX_port].device_host_name,
3562                   sizeof(devices[NWX_port].device_host_name),
3563                   "%s",
3564                   temp_ptr);
3565   XtFree(temp_ptr);
3566 
3567   (void)remove_trailing_spaces(devices[NWX_port].device_host_name);
3568 
3569   temp_ptr = XmTextFieldGetString(NWX_host_port_data);
3570   devices[NWX_port].sp=atoi(temp_ptr);
3571   XtFree(temp_ptr);
3572 
3573   temp_ptr = XmTextFieldGetString(NWX_comment);
3574   xastir_snprintf(devices[NWX_port].comment,
3575                   sizeof(devices[NWX_port].comment),
3576                   "%s",
3577                   temp_ptr);
3578   XtFree(temp_ptr);
3579 
3580   (void)remove_trailing_spaces(devices[NWX_port].comment);
3581 
3582   if (XmToggleButtonGetState(NWX_active_on_startup))
3583   {
3584     devices[NWX_port].connect_on_startup=1;
3585   }
3586   else
3587   {
3588     devices[NWX_port].connect_on_startup=0;
3589   }
3590 
3591   if(XmToggleButtonGetState(NWX_host_reconnect_data))
3592   {
3593     devices[NWX_port].reconnect=1;
3594   }
3595   else
3596   {
3597     devices[NWX_port].reconnect=0;
3598   }
3599 
3600   xastir_snprintf(devices[NWX_port].device_host_pswd,
3601                   sizeof(devices[NWX_port].device_host_pswd), "%d", device_data_type);
3602 
3603   /* reopen if was up*/
3604   if ( was_up)
3605   {
3606     (void)add_device(NWX_port,
3607                      DEVICE_NET_WX,
3608                      devices[NWX_port].device_host_name,
3609                      devices[NWX_port].device_host_pswd,
3610                      devices[NWX_port].sp,
3611                      0,
3612                      0,
3613                      devices[NWX_port].reconnect,
3614                      "");
3615   }
3616 
3617 
3618   /* delete list */
3619 //    modify_device_list(4,0);
3620 
3621 
3622   /* add device type */
3623   devices[NWX_port].device_type=DEVICE_NET_WX;
3624 
3625   /* rebuild list */
3626 //    modify_device_list(3,0);
3627 
3628 
3629   end_critical_section(&devices_lock, "interface_gui.c:Config_NWX_change_data" );
3630 
3631   // Rebuild the interface control list
3632   update_interface_list();
3633 
3634   Config_NWX_destroy_shell(widget,clientData,callData);
3635 }
3636 
3637 
3638 
3639 
3640 
Config_NWX(Widget UNUSED (w),int config_type,int port)3641 void Config_NWX( Widget UNUSED(w), int config_type, int port)
3642 {
3643   static Widget  pane, scrollwindow, form, frame3, frame4, WX_none,
3644          button_ok, button_cancel,
3645          hostn, portn, comment,
3646          data_box,
3647          data_auto, data_bin, data_ascii,
3648          gauge_box,
3649          sep;
3650 //  static Widget data_type, gauge_type;
3651   char temp[20];
3652   Arg al[50];                    /* Arg List */
3653   register unsigned int ac = 0;           /* Arg Count */
3654   Atom delw;
3655 
3656   if(!config_NWX_dialog)
3657   {
3658     NWX_port=port;
3659     config_NWX_dialog = XtVaCreatePopupShell(langcode("WPUPCFG021"),
3660                         xmDialogShellWidgetClass, appshell,
3661                         XmNdeleteResponse, XmDESTROY,
3662                         XmNdefaultPosition, FALSE,
3663                         XmNfontList, fontlist1,
3664                         NULL);
3665 
3666     pane = XtVaCreateWidget("Config_NWX pane",xmPanedWindowWidgetClass, config_NWX_dialog,
3667                             XmNbackground, colors[0xff],
3668                             NULL);
3669 
3670     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
3671                                            xmScrolledWindowWidgetClass,
3672                                            pane,
3673                                            XmNscrollingPolicy, XmAUTOMATIC,
3674                                            NULL);
3675 
3676     form =  XtVaCreateWidget("Config_NWX form",
3677                              xmFormWidgetClass,
3678                              scrollwindow,
3679                              XmNfractionBase, 5,
3680                              XmNbackground, colors[0xff],
3681                              XmNautoUnmanage, FALSE,
3682                              XmNshadowThickness, 1,
3683                              NULL);
3684 
3685     hostn = XtVaCreateManagedWidget(langcode("WPUPCFG022"),xmLabelWidgetClass, form,
3686                                     XmNtopAttachment, XmATTACH_FORM,
3687                                     XmNtopOffset, 10,
3688                                     XmNbottomAttachment, XmATTACH_NONE,
3689                                     XmNleftAttachment, XmATTACH_FORM,
3690                                     XmNleftOffset, 10,
3691                                     XmNrightAttachment, XmATTACH_NONE,
3692                                     XmNbackground, colors[0xff],
3693                                     XmNfontList, fontlist1,
3694                                     NULL);
3695 
3696     NWX_host_name_data = XtVaCreateManagedWidget("Config_NWX host_data", xmTextFieldWidgetClass, form,
3697                          XmNnavigationType, XmTAB_GROUP,
3698                          XmNtraversalOn, TRUE,
3699                          XmNeditable,   TRUE,
3700                          XmNcursorPositionVisible, TRUE,
3701                          XmNsensitive, TRUE,
3702                          XmNshadowThickness,    1,
3703                          XmNcolumns, 25,
3704                          XmNwidth, ((25*7)+2),
3705                          XmNmaxLength, MAX_DEVICE_NAME,
3706                          XmNbackground, colors[0x0f],
3707                          XmNtopAttachment,XmATTACH_FORM,
3708                          XmNtopOffset, 5,
3709                          XmNbottomAttachment,XmATTACH_NONE,
3710                          XmNleftAttachment, XmATTACH_WIDGET,
3711                          XmNleftWidget, hostn,
3712                          XmNleftOffset, 10,
3713                          XmNrightAttachment,XmATTACH_FORM,
3714                          XmNrightOffset, 5,
3715                          XmNfontList, fontlist1,
3716                          NULL);
3717 
3718     portn = XtVaCreateManagedWidget(langcode("WPUPCFG023"),xmLabelWidgetClass, form,
3719                                     XmNtopAttachment, XmATTACH_WIDGET,
3720                                     XmNtopWidget, hostn,
3721                                     XmNtopOffset, 12,
3722                                     XmNbottomAttachment, XmATTACH_NONE,
3723                                     XmNleftAttachment, XmATTACH_FORM,
3724                                     XmNleftOffset, 10,
3725                                     XmNrightAttachment, XmATTACH_NONE,
3726                                     XmNbackground, colors[0xff],
3727                                     XmNfontList, fontlist1,
3728                                     NULL);
3729 
3730     NWX_host_port_data = XtVaCreateManagedWidget("Config_NWX port_data", xmTextFieldWidgetClass, form,
3731                          XmNnavigationType, XmTAB_GROUP,
3732                          XmNtraversalOn, TRUE,
3733                          XmNeditable,   TRUE,
3734                          XmNcursorPositionVisible, TRUE,
3735                          XmNsensitive, TRUE,
3736                          XmNshadowThickness,    1,
3737                          XmNcolumns, 25,
3738                          XmNwidth, ((25*7)+2),
3739                          XmNmaxLength, 40,
3740                          XmNbackground, colors[0x0f],
3741                          XmNtopAttachment,XmATTACH_WIDGET,
3742                          XmNtopWidget, hostn,
3743                          XmNtopOffset, 8,
3744                          XmNbottomAttachment,XmATTACH_NONE,
3745                          XmNleftAttachment, XmATTACH_WIDGET,
3746                          XmNleftWidget, portn,
3747                          XmNleftOffset, 10,
3748                          XmNrightAttachment,XmATTACH_FORM,
3749                          XmNrightOffset, 5,
3750                          XmNfontList, fontlist1,
3751                          NULL);
3752 
3753     comment = XtVaCreateManagedWidget(langcode("WPUPCFS017"),xmLabelWidgetClass, form,
3754                                       XmNtopAttachment, XmATTACH_WIDGET,
3755                                       XmNtopWidget, portn,
3756                                       XmNtopOffset, 12,
3757                                       XmNbottomAttachment, XmATTACH_NONE,
3758                                       XmNleftAttachment, XmATTACH_FORM,
3759                                       XmNleftOffset, 10,
3760                                       XmNrightAttachment, XmATTACH_NONE,
3761                                       XmNbackground, colors[0xff],
3762                                       XmNfontList, fontlist1,
3763                                       NULL);
3764 
3765     NWX_comment = XtVaCreateManagedWidget("Config_NWX comment", xmTextFieldWidgetClass, form,
3766                                           XmNnavigationType, XmTAB_GROUP,
3767                                           XmNtraversalOn, TRUE,
3768                                           XmNeditable,   TRUE,
3769                                           XmNcursorPositionVisible, TRUE,
3770                                           XmNsensitive, TRUE,
3771                                           XmNshadowThickness,    1,
3772                                           XmNcolumns, 25,
3773                                           XmNwidth, ((25*7)+2),
3774                                           XmNmaxLength, 49,
3775                                           XmNbackground, colors[0x0f],
3776                                           XmNtopAttachment,XmATTACH_WIDGET,
3777                                           XmNtopWidget, portn,
3778                                           XmNtopOffset, 8,
3779                                           XmNbottomAttachment,XmATTACH_NONE,
3780                                           XmNleftAttachment, XmATTACH_WIDGET,
3781                                           XmNleftWidget, comment,
3782                                           XmNleftOffset, 10,
3783                                           XmNrightAttachment,XmATTACH_FORM,
3784                                           XmNrightOffset, 5,
3785                                           XmNfontList, fontlist1,
3786                                           NULL);
3787 
3788     NWX_active_on_startup  = XtVaCreateManagedWidget(langcode("UNIOP00011"),xmToggleButtonWidgetClass,form,
3789                              XmNnavigationType, XmTAB_GROUP,
3790                              XmNtraversalOn, TRUE,
3791                              XmNtopAttachment, XmATTACH_WIDGET,
3792                              XmNtopWidget, comment,
3793                              XmNtopOffset, 15,
3794                              XmNbottomAttachment, XmATTACH_NONE,
3795                              XmNleftAttachment, XmATTACH_FORM,
3796                              XmNleftOffset,10,
3797                              XmNrightAttachment, XmATTACH_NONE,
3798                              XmNbackground, colors[0xff],
3799                              XmNfontList, fontlist1,
3800                              NULL);
3801 
3802     NWX_host_reconnect_data  = XtVaCreateManagedWidget(langcode("WPUPCFG020"),xmToggleButtonWidgetClass,form,
3803                                XmNnavigationType, XmTAB_GROUP,
3804                                XmNtraversalOn, TRUE,
3805                                XmNtopAttachment, XmATTACH_WIDGET,
3806                                XmNtopWidget, NWX_active_on_startup,
3807                                XmNtopOffset, 5,
3808                                XmNbottomAttachment, XmATTACH_NONE,
3809                                XmNleftAttachment, XmATTACH_FORM,
3810                                XmNleftOffset,10,
3811                                XmNrightAttachment, XmATTACH_NONE,
3812                                XmNbackground, colors[0xff],
3813                                XmNfontList, fontlist1,
3814                                NULL);
3815 
3816     /*set args for color */
3817     ac=0;
3818     XtSetArg(al[ac], XmNbackground, colors[0xff]);
3819     ac++;
3820 
3821 
3822     frame3 = XtVaCreateManagedWidget("Config_NWX frame3", xmFrameWidgetClass, form,
3823                                      XmNtopAttachment, XmATTACH_WIDGET,
3824                                      XmNtopWidget, NWX_host_reconnect_data,
3825                                      XmNtopOffset, 10,
3826                                      XmNbottomAttachment, XmATTACH_NONE,
3827                                      XmNleftAttachment, XmATTACH_FORM,
3828                                      XmNleftOffset, 10,
3829                                      XmNrightAttachment, XmATTACH_FORM,
3830                                      XmNrightOffset, 10,
3831                                      XmNbackground, colors[0xff],
3832                                      NULL);
3833 
3834     // data_type
3835     XtVaCreateManagedWidget(langcode("WPUPCFT024"),xmLabelWidgetClass, frame3,
3836                             XmNchildType, XmFRAME_TITLE_CHILD,
3837                             XmNbackground, colors[0xff],
3838                             XmNfontList, fontlist1,
3839                             NULL);
3840 
3841     data_box = XmCreateRadioBox(frame3,"Config_NWX data box",al,ac);
3842 
3843     XtVaSetValues(data_box,
3844                   XmNorientation, XmHORIZONTAL,
3845                   NULL);
3846 
3847     data_auto = XtVaCreateManagedWidget(langcode("WPUPCFT025"),xmToggleButtonGadgetClass,
3848                                         data_box,
3849                                         XmNbackground, colors[0xff],
3850                                         XmNfontList, fontlist1,
3851                                         NULL);
3852     XtAddCallback(data_auto,XmNvalueChangedCallback,data_toggle,"0");
3853 
3854     data_bin = XtVaCreateManagedWidget(langcode("WPUPCFT026"),xmToggleButtonGadgetClass,
3855                                        data_box,
3856                                        XmNbackground, colors[0xff],
3857                                        XmNfontList, fontlist1,
3858                                        NULL);
3859     XtAddCallback(data_bin,XmNvalueChangedCallback,data_toggle,"1");
3860 
3861     data_ascii = XtVaCreateManagedWidget(langcode("WPUPCFT027"),xmToggleButtonGadgetClass,
3862                                          data_box,
3863                                          XmNbackground, colors[0xff],
3864                                          XmNfontList, fontlist1,
3865                                          NULL);
3866     XtAddCallback(data_ascii,XmNvalueChangedCallback,data_toggle,"2");
3867 
3868     frame4 = XtVaCreateManagedWidget("Config_WX frame4", xmFrameWidgetClass, form,
3869                                      XmNtopAttachment, XmATTACH_WIDGET,
3870                                      XmNtopWidget, frame3,
3871                                      XmNtopOffset, 10,
3872                                      XmNbottomAttachment, XmATTACH_NONE,
3873                                      XmNleftAttachment, XmATTACH_FORM,
3874                                      XmNleftOffset, 10,
3875                                      XmNrightAttachment, XmATTACH_FORM,
3876                                      XmNrightOffset, 10,
3877                                      XmNbackground, colors[0xff],
3878                                      NULL);
3879 
3880     // Rain Gauge Type
3881     // gauge_type
3882     XtVaCreateManagedWidget(langcode("WPUPCFWX03"),xmLabelWidgetClass, frame4,
3883                             XmNchildType, XmFRAME_TITLE_CHILD,
3884                             XmNbackground, colors[0xff],
3885                             XmNfontList, fontlist1,
3886                             NULL);
3887 
3888     gauge_box = XmCreateRadioBox(frame4,"Config_WX gauge box",al,ac);
3889 
3890     XtVaSetValues(gauge_box,
3891                   XmNorientation, XmHORIZONTAL,
3892                   NULL);
3893 
3894     WX_none = XtVaCreateManagedWidget(langcode("WPUPCFWX07"),xmToggleButtonGadgetClass,
3895                                       gauge_box,
3896                                       XmNbackground, colors[0xff],
3897                                       XmNfontList, fontlist1,
3898                                       NULL);
3899     WX_tenths = XtVaCreateManagedWidget(langcode("WPUPCFWX04"),xmToggleButtonGadgetClass,
3900                                         gauge_box,
3901                                         XmNbackground, colors[0xff],
3902                                         XmNfontList, fontlist1,
3903                                         NULL);
3904     WX_hundredths = XtVaCreateManagedWidget(langcode("WPUPCFWX05"),xmToggleButtonGadgetClass,
3905                                             gauge_box,
3906                                             XmNbackground, colors[0xff],
3907                                             XmNfontList, fontlist1,
3908                                             NULL);
3909     WX_millimeters = XtVaCreateManagedWidget(langcode("WPUPCFWX06"),xmToggleButtonGadgetClass,
3910                      gauge_box,
3911                      XmNbackground, colors[0xff],
3912                      XmNfontList, fontlist1,
3913                      NULL);
3914 
3915     XtAddCallback(WX_none,XmNvalueChangedCallback,rain_gauge_toggle,"0");
3916     XtAddCallback(WX_tenths,XmNvalueChangedCallback,rain_gauge_toggle,"1");
3917     XtAddCallback(WX_hundredths,XmNvalueChangedCallback,rain_gauge_toggle,"2");
3918     XtAddCallback(WX_millimeters,XmNvalueChangedCallback,rain_gauge_toggle,"3");
3919 
3920 
3921     sep = XtVaCreateManagedWidget("Config_NWX sep", xmSeparatorGadgetClass,form,
3922                                   XmNorientation, XmHORIZONTAL,
3923                                   XmNtopAttachment,XmATTACH_WIDGET,
3924                                   XmNtopWidget, frame4,
3925                                   XmNtopOffset, 20,
3926                                   XmNbottomAttachment,XmATTACH_NONE,
3927                                   XmNleftAttachment, XmATTACH_FORM,
3928                                   XmNrightAttachment,XmATTACH_FORM,
3929                                   XmNbackground, colors[0xff],
3930                                   XmNfontList, fontlist1,
3931                                   NULL);
3932 
3933     button_ok = XtVaCreateManagedWidget(langcode("UNIOP00001"),xmPushButtonGadgetClass, form,
3934                                         XmNnavigationType, XmTAB_GROUP,
3935                                         XmNtraversalOn, TRUE,
3936                                         XmNtopAttachment, XmATTACH_WIDGET,
3937                                         XmNtopWidget, sep,
3938                                         XmNtopOffset, 10,
3939                                         XmNbottomAttachment, XmATTACH_FORM,
3940                                         XmNbottomOffset, 5,
3941                                         XmNleftAttachment, XmATTACH_POSITION,
3942                                         XmNleftPosition, 1,
3943                                         XmNrightAttachment, XmATTACH_POSITION,
3944                                         XmNrightPosition, 2,
3945                                         XmNbackground, colors[0xff],
3946                                         XmNfontList, fontlist1,
3947                                         NULL);
3948 
3949     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
3950                                             XmNnavigationType, XmTAB_GROUP,
3951                                             XmNtraversalOn, TRUE,
3952                                             XmNtopAttachment, XmATTACH_WIDGET,
3953                                             XmNtopWidget, sep,
3954                                             XmNtopOffset, 10,
3955                                             XmNbottomAttachment, XmATTACH_FORM,
3956                                             XmNbottomOffset, 5,
3957                                             XmNleftAttachment, XmATTACH_POSITION,
3958                                             XmNleftPosition, 3,
3959                                             XmNrightAttachment, XmATTACH_POSITION,
3960                                             XmNrightPosition, 4,
3961                                             XmNbackground, colors[0xff],
3962                                             XmNfontList, fontlist1,
3963                                             NULL);
3964 
3965     XtAddCallback(button_ok, XmNactivateCallback, Config_NWX_change_data, config_NWX_dialog);
3966     XtAddCallback(button_cancel, XmNactivateCallback, Config_NWX_destroy_shell, config_NWX_dialog);
3967 
3968     pos_dialog(config_NWX_dialog);
3969 
3970     delw = XmInternAtom(XtDisplay(config_NWX_dialog),"WM_DELETE_WINDOW", FALSE);
3971     XmAddWMProtocolCallback(config_NWX_dialog, delw, Config_NWX_destroy_shell, (XtPointer)config_NWX_dialog);
3972 
3973     begin_critical_section(&devices_lock, "interface_gui.c:Config_NWX" );
3974 
3975     if (config_type==0)
3976     {
3977       /* first time port */
3978       XmTextFieldSetString(NWX_host_name_data,"localhost");
3979       XmTextFieldSetString(NWX_host_port_data,"1234");
3980       XmTextFieldSetString(NWX_comment,"");
3981       XmToggleButtonSetState(NWX_active_on_startup,TRUE,FALSE);
3982       XmToggleButtonSetState(NWX_host_reconnect_data,TRUE,FALSE);
3983       device_data_type=0;
3984       XmToggleButtonSetState(data_auto,TRUE,FALSE);
3985     }
3986     else
3987     {
3988       /* reconfig */
3989 
3990       XmTextFieldSetString(NWX_host_name_data,devices[NWX_port].device_host_name);
3991       xastir_snprintf(temp, sizeof(temp), "%d", devices[NWX_port].sp); /* port number */
3992       XmTextFieldSetString(NWX_host_port_data,temp);
3993 
3994       XmTextFieldSetString(NWX_comment,devices[NWX_port].comment);
3995 
3996       if (devices[NWX_port].connect_on_startup)
3997       {
3998         XmToggleButtonSetState(NWX_active_on_startup,TRUE,FALSE);
3999       }
4000       else
4001       {
4002         XmToggleButtonSetState(NWX_active_on_startup,FALSE,FALSE);
4003       }
4004 
4005       if (devices[NWX_port].reconnect)
4006       {
4007         XmToggleButtonSetState(NWX_host_reconnect_data,TRUE,FALSE);
4008       }
4009       else
4010       {
4011         XmToggleButtonSetState(NWX_host_reconnect_data,FALSE,FALSE);
4012       }
4013 
4014       switch (atoi(devices[NWX_port].device_host_pswd))
4015       {
4016         case(0):
4017           XmToggleButtonSetState(data_auto,TRUE,FALSE);
4018           device_data_type=0;
4019           break;
4020 
4021         case(1):
4022           XmToggleButtonSetState(data_bin,TRUE,FALSE);
4023           device_data_type=1;
4024           break;
4025 
4026         case(2):
4027           XmToggleButtonSetState(data_ascii,TRUE,FALSE);
4028           device_data_type=2;
4029           break;
4030 
4031         default:
4032           device_data_type=0;
4033           break;
4034       }
4035     }
4036 
4037     XmToggleButtonSetState(WX_none,FALSE,FALSE);
4038     XmToggleButtonSetState(WX_tenths,FALSE,FALSE);
4039     XmToggleButtonSetState(WX_hundredths,FALSE,FALSE);
4040     XmToggleButtonSetState(WX_millimeters,FALSE,FALSE);
4041     switch (WX_rain_gauge_type)
4042     {
4043       case(1):
4044         XmToggleButtonSetState(WX_tenths,TRUE,FALSE);
4045         break;
4046       case(2):
4047         XmToggleButtonSetState(WX_hundredths,TRUE,FALSE);
4048         break;
4049       case(3):
4050         XmToggleButtonSetState(WX_millimeters,TRUE,FALSE);
4051         break;
4052       default:
4053         XmToggleButtonSetState(WX_none,TRUE,FALSE);
4054         break;
4055     }
4056 
4057     end_critical_section(&devices_lock, "interface_gui.c:Config_NWX" );
4058 
4059     XtManageChild(form);
4060     XtManageChild(data_box);
4061     XtManageChild(frame3);
4062     XtManageChild(gauge_box);
4063     XtManageChild(pane);
4064 
4065     resize_dialog(form, config_NWX_dialog);
4066 
4067     XtPopup(config_NWX_dialog,XtGrabNone);
4068   }
4069   else
4070   {
4071     (void)XRaiseWindow(XtDisplay(config_NWX_dialog), XtWindow(config_NWX_dialog));
4072   }
4073 }
4074 
4075 
4076 
4077 
4078 
4079 /*****************************************************/
4080 /* Configure net GPS GUI                             */
4081 /*****************************************************/
4082 
4083 /**** net GPS CONFIGURE ******/
4084 int NGPS_port;
4085 Widget config_NGPS_dialog = (Widget)NULL;
4086 Widget NGPS_host_name_data;
4087 Widget NGPS_host_port_data;
4088 Widget NGPS_comment;
4089 Widget NGPS_active_on_startup;
4090 Widget NGPS_host_reconnect_data;
4091 Widget NGPS_set_time;
4092 
4093 
4094 
4095 
4096 
4097 
Config_NGPS_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))4098 void Config_NGPS_destroy_shell( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
4099 {
4100   Widget shell = (Widget) clientData;
4101   XtPopdown(shell);
4102   XtDestroyWidget(shell);
4103   config_NGPS_dialog = (Widget)NULL;
4104   if (choose_interface_dialog != NULL)
4105   {
4106     Choose_interface_destroy_shell(choose_interface_dialog,choose_interface_dialog,NULL);
4107   }
4108 
4109   choose_interface_dialog = (Widget)NULL;
4110 }
4111 
4112 
4113 
4114 
4115 
Config_NGPS_change_data(Widget widget,XtPointer clientData,XtPointer callData)4116 void Config_NGPS_change_data(Widget widget, XtPointer clientData, XtPointer callData)
4117 {
4118   int was_up;
4119   char *temp_ptr;
4120 
4121 
4122   busy_cursor(appshell);
4123   was_up=0;
4124   if (get_device_status(NGPS_port) == DEVICE_IN_USE)
4125   {
4126     /* if active shutdown before changes are made */
4127     /*fprintf(stderr,"Device is up, shutting down\n");*/
4128     (void)del_device(NGPS_port);
4129     was_up=1;
4130     usleep(1000000); // Wait for one second
4131   }
4132 
4133   begin_critical_section(&devices_lock, "interface_gui.c:Config_NGPS_change_data" );
4134 
4135   temp_ptr = XmTextFieldGetString(NGPS_host_name_data);
4136   xastir_snprintf(devices[NGPS_port].device_host_name,
4137                   sizeof(devices[NGPS_port].device_host_name),
4138                   "%s",
4139                   temp_ptr);
4140   XtFree(temp_ptr);
4141 
4142   (void)remove_trailing_spaces(devices[NGPS_port].device_host_name);
4143 
4144   temp_ptr = XmTextFieldGetString(NGPS_host_port_data);
4145   devices[NGPS_port].sp=atoi(temp_ptr);
4146   XtFree(temp_ptr);
4147 
4148   temp_ptr = XmTextFieldGetString(NGPS_comment);
4149   xastir_snprintf(devices[NGPS_port].comment,
4150                   sizeof(devices[NGPS_port].comment),
4151                   "%s",
4152                   temp_ptr);
4153   XtFree(temp_ptr);
4154 
4155   (void)remove_trailing_spaces(devices[NGPS_port].comment);
4156 
4157   if(XmToggleButtonGetState(NGPS_active_on_startup))
4158   {
4159     devices[NGPS_port].connect_on_startup=1;
4160   }
4161   else
4162   {
4163     devices[NGPS_port].connect_on_startup=0;
4164   }
4165 
4166   if (XmToggleButtonGetState(NGPS_host_reconnect_data))
4167   {
4168     devices[NGPS_port].reconnect=1;
4169   }
4170   else
4171   {
4172     devices[NGPS_port].reconnect=0;
4173   }
4174 
4175   if (XmToggleButtonGetState(NGPS_set_time))
4176   {
4177     devices[NGPS_port].set_time=1;
4178   }
4179   else
4180   {
4181     devices[NGPS_port].set_time=0;
4182   }
4183 
4184   /* reopen */
4185   if ( was_up )
4186   {
4187     (void)add_device(NGPS_port,
4188                      DEVICE_NET_GPSD,
4189                      devices[NGPS_port].device_host_name,
4190                      "",
4191                      devices[NGPS_port].sp,
4192                      0,
4193                      0,
4194                      devices[NGPS_port].reconnect,
4195                      "");
4196   }
4197 
4198 
4199   /* delete list */
4200 //    modify_device_list(4,0);
4201 
4202 
4203   /* add device type */
4204   devices[NGPS_port].device_type=DEVICE_NET_GPSD;
4205 
4206   /* rebuild list */
4207 //    modify_device_list(3,0);
4208 
4209 
4210   end_critical_section(&devices_lock, "interface_gui.c:Config_NGPS_change_data" );
4211 
4212   // Rebuild the interface control list
4213   update_interface_list();
4214 
4215   Config_NGPS_destroy_shell(widget,clientData,callData);
4216 }
4217 
4218 
4219 
4220 
4221 
Config_NGPS(Widget UNUSED (w),int config_type,int port)4222 void Config_NGPS( Widget UNUSED(w), int config_type, int port)
4223 {
4224   static Widget  pane, scrollwindow, form, button_ok, button_cancel,
4225          hostn, portn, comment,
4226          sep;
4227   char temp[20];
4228   Atom delw;
4229 
4230   if (!config_NGPS_dialog)
4231   {
4232     NGPS_port=port;
4233     config_NGPS_dialog = XtVaCreatePopupShell(langcode("WPUPCFG019"),
4234                          xmDialogShellWidgetClass, appshell,
4235                          XmNdeleteResponse, XmDESTROY,
4236                          XmNdefaultPosition, FALSE,
4237                          XmNfontList, fontlist1,
4238                          NULL);
4239 
4240     pane = XtVaCreateWidget("Config_NGPS pane",xmPanedWindowWidgetClass, config_NGPS_dialog,
4241                             XmNbackground, colors[0xff],
4242                             NULL);
4243 
4244     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
4245                                            xmScrolledWindowWidgetClass,
4246                                            pane,
4247                                            XmNscrollingPolicy, XmAUTOMATIC,
4248                                            NULL);
4249 
4250     form =  XtVaCreateWidget("Config_NGPS form",
4251                              xmFormWidgetClass,
4252                              scrollwindow,
4253                              XmNfractionBase, 5,
4254                              XmNbackground, colors[0xff],
4255                              XmNautoUnmanage, FALSE,
4256                              XmNshadowThickness, 1,
4257                              NULL);
4258 
4259     hostn = XtVaCreateManagedWidget(langcode("WPUPCFG017"),xmLabelWidgetClass, form,
4260                                     XmNtopAttachment, XmATTACH_FORM,
4261                                     XmNtopOffset, 10,
4262                                     XmNbottomAttachment, XmATTACH_NONE,
4263                                     XmNleftAttachment, XmATTACH_FORM,
4264                                     XmNleftOffset, 10,
4265                                     XmNrightAttachment, XmATTACH_NONE,
4266                                     XmNbackground, colors[0xff],
4267                                     XmNfontList, fontlist1,
4268                                     NULL);
4269 
4270     NGPS_host_name_data = XtVaCreateManagedWidget("Config_NGPS host_data", xmTextFieldWidgetClass, form,
4271                           XmNnavigationType, XmTAB_GROUP,
4272                           XmNtraversalOn, TRUE,
4273                           XmNeditable,   TRUE,
4274                           XmNcursorPositionVisible, TRUE,
4275                           XmNsensitive, TRUE,
4276                           XmNshadowThickness,    1,
4277                           XmNcolumns, 25,
4278                           XmNwidth, ((25*7)+2),
4279                           XmNmaxLength, MAX_DEVICE_NAME,
4280                           XmNbackground, colors[0x0f],
4281                           XmNtopAttachment,XmATTACH_FORM,
4282                           XmNtopOffset, 5,
4283                           XmNbottomAttachment,XmATTACH_NONE,
4284                           XmNleftAttachment, XmATTACH_WIDGET,
4285                           XmNleftWidget, hostn,
4286                           XmNleftOffset, 10,
4287                           XmNrightAttachment,XmATTACH_FORM,
4288                           XmNrightOffset, 5,
4289                           XmNfontList, fontlist1,
4290                           NULL);
4291 
4292     portn = XtVaCreateManagedWidget(langcode("WPUPCFG018"),xmLabelWidgetClass, form,
4293                                     XmNtopAttachment, XmATTACH_WIDGET,
4294                                     XmNtopWidget, hostn,
4295                                     XmNtopOffset, 12,
4296                                     XmNbottomAttachment, XmATTACH_NONE,
4297                                     XmNleftAttachment, XmATTACH_FORM,
4298                                     XmNleftOffset, 10,
4299                                     XmNrightAttachment, XmATTACH_NONE,
4300                                     XmNbackground, colors[0xff],
4301                                     XmNfontList, fontlist1,
4302                                     NULL);
4303 
4304     NGPS_host_port_data = XtVaCreateManagedWidget("Config_NGPS port_data", xmTextFieldWidgetClass, form,
4305                           XmNnavigationType, XmTAB_GROUP,
4306                           XmNtraversalOn, TRUE,
4307                           XmNeditable,   TRUE,
4308                           XmNcursorPositionVisible, TRUE,
4309                           XmNsensitive, TRUE,
4310                           XmNshadowThickness,    1,
4311                           XmNcolumns, 25,
4312                           XmNwidth, ((25*7)+2),
4313                           XmNmaxLength, 40,
4314                           XmNbackground, colors[0x0f],
4315                           XmNtopAttachment,XmATTACH_WIDGET,
4316                           XmNtopWidget, hostn,
4317                           XmNtopOffset, 8,
4318                           XmNbottomAttachment,XmATTACH_NONE,
4319                           XmNleftAttachment, XmATTACH_WIDGET,
4320                           XmNleftWidget, portn,
4321                           XmNleftOffset, 10,
4322                           XmNrightAttachment,XmATTACH_FORM,
4323                           XmNrightOffset, 5,
4324                           XmNfontList, fontlist1,
4325                           NULL);
4326 
4327     comment = XtVaCreateManagedWidget(langcode("WPUPCFS017"),xmLabelWidgetClass, form,
4328                                       XmNtopAttachment, XmATTACH_WIDGET,
4329                                       XmNtopWidget, portn,
4330                                       XmNtopOffset, 12,
4331                                       XmNbottomAttachment, XmATTACH_NONE,
4332                                       XmNleftAttachment, XmATTACH_FORM,
4333                                       XmNleftOffset, 10,
4334                                       XmNrightAttachment, XmATTACH_NONE,
4335                                       XmNbackground, colors[0xff],
4336                                       XmNfontList, fontlist1,
4337                                       NULL);
4338 
4339     NGPS_comment = XtVaCreateManagedWidget("Config_NGPS comment", xmTextFieldWidgetClass, form,
4340                                            XmNnavigationType, XmTAB_GROUP,
4341                                            XmNtraversalOn, TRUE,
4342                                            XmNeditable,   TRUE,
4343                                            XmNcursorPositionVisible, TRUE,
4344                                            XmNsensitive, TRUE,
4345                                            XmNshadowThickness,    1,
4346                                            XmNcolumns, 25,
4347                                            XmNwidth, ((25*7)+2),
4348                                            XmNmaxLength, 49,
4349                                            XmNbackground, colors[0x0f],
4350                                            XmNtopAttachment,XmATTACH_WIDGET,
4351                                            XmNtopWidget, portn,
4352                                            XmNtopOffset, 8,
4353                                            XmNbottomAttachment,XmATTACH_NONE,
4354                                            XmNleftAttachment, XmATTACH_WIDGET,
4355                                            XmNleftWidget, comment,
4356                                            XmNleftOffset, 10,
4357                                            XmNrightAttachment,XmATTACH_FORM,
4358                                            XmNrightOffset, 5,
4359                                            XmNfontList, fontlist1,
4360                                            NULL);
4361 
4362     NGPS_active_on_startup  = XtVaCreateManagedWidget(langcode("UNIOP00011"),xmToggleButtonWidgetClass,form,
4363                               XmNnavigationType, XmTAB_GROUP,
4364                               XmNtraversalOn, TRUE,
4365                               XmNtopAttachment, XmATTACH_WIDGET,
4366                               XmNtopWidget, comment,
4367                               XmNtopOffset, 15,
4368                               XmNbottomAttachment, XmATTACH_NONE,
4369                               XmNleftAttachment, XmATTACH_FORM,
4370                               XmNleftOffset,10,
4371                               XmNrightAttachment, XmATTACH_NONE,
4372                               XmNbackground, colors[0xff],
4373                               XmNfontList, fontlist1,
4374                               NULL);
4375 
4376     NGPS_host_reconnect_data  = XtVaCreateManagedWidget(langcode("WPUPCFG020"),xmToggleButtonWidgetClass,form,
4377                                 XmNnavigationType, XmTAB_GROUP,
4378                                 XmNtraversalOn, TRUE,
4379                                 XmNtopAttachment, XmATTACH_WIDGET,
4380                                 XmNtopWidget, NGPS_active_on_startup,
4381                                 XmNtopOffset, 5,
4382                                 XmNbottomAttachment, XmATTACH_NONE,
4383                                 XmNleftAttachment, XmATTACH_FORM,
4384                                 XmNleftOffset,10,
4385                                 XmNrightAttachment, XmATTACH_NONE,
4386                                 XmNbackground, colors[0xff],
4387                                 XmNfontList, fontlist1,
4388                                 NULL);
4389 
4390     NGPS_set_time  = XtVaCreateManagedWidget(langcode("UNIOP00029"), xmToggleButtonWidgetClass, form,
4391                      XmNnavigationType, XmTAB_GROUP,
4392                      XmNtraversalOn, TRUE,
4393                      XmNtopAttachment, XmATTACH_WIDGET,
4394                      XmNtopWidget, NGPS_host_reconnect_data,
4395                      XmNtopOffset, 5,
4396                      XmNbottomAttachment, XmATTACH_NONE,
4397                      XmNleftAttachment, XmATTACH_FORM,
4398                      XmNleftOffset,10,
4399                      XmNrightAttachment, XmATTACH_NONE,
4400                      XmNbackground, colors[0xff],
4401                      XmNfontList, fontlist1,
4402                      NULL);
4403 
4404 // We can only set the time properly on Linux systems
4405 #ifndef HAVE_SETTIMEOFDAY
4406     XtSetSensitive(NGPS_set_time,FALSE);
4407 #endif  // HAVE_SETTIMEOFDAY
4408 #ifdef __CYGWIN__
4409     XtSetSensitive(NGPS_set_time,FALSE);
4410 #endif  // __CYGWIN__
4411 
4412 
4413 
4414     sep = XtVaCreateManagedWidget("Config_NGPS sep", xmSeparatorGadgetClass,form,
4415                                   XmNorientation, XmHORIZONTAL,
4416                                   XmNtopAttachment,XmATTACH_WIDGET,
4417                                   XmNtopWidget, NGPS_set_time,
4418                                   XmNtopOffset, 20,
4419                                   XmNbottomAttachment,XmATTACH_NONE,
4420                                   XmNleftAttachment, XmATTACH_FORM,
4421                                   XmNrightAttachment,XmATTACH_FORM,
4422                                   XmNbackground, colors[0xff],
4423                                   XmNfontList, fontlist1,
4424                                   NULL);
4425 
4426     button_ok = XtVaCreateManagedWidget(langcode("UNIOP00001"),xmPushButtonGadgetClass, form,
4427                                         XmNnavigationType, XmTAB_GROUP,
4428                                         XmNtraversalOn, TRUE,
4429                                         XmNtopAttachment, XmATTACH_WIDGET,
4430                                         XmNtopWidget, sep,
4431                                         XmNtopOffset, 10,
4432                                         XmNbottomAttachment, XmATTACH_FORM,
4433                                         XmNbottomOffset, 5,
4434                                         XmNleftAttachment, XmATTACH_POSITION,
4435                                         XmNleftPosition, 1,
4436                                         XmNrightAttachment, XmATTACH_POSITION,
4437                                         XmNrightPosition, 2,
4438                                         XmNbackground, colors[0xff],
4439                                         XmNfontList, fontlist1,
4440                                         NULL);
4441 
4442     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
4443                                             XmNnavigationType, XmTAB_GROUP,
4444                                             XmNtraversalOn, TRUE,
4445                                             XmNtopAttachment, XmATTACH_WIDGET,
4446                                             XmNtopWidget, sep,
4447                                             XmNtopOffset, 10,
4448                                             XmNbottomAttachment, XmATTACH_FORM,
4449                                             XmNbottomOffset, 5,
4450                                             XmNleftAttachment, XmATTACH_POSITION,
4451                                             XmNleftPosition, 3,
4452                                             XmNrightAttachment, XmATTACH_POSITION,
4453                                             XmNrightPosition, 4,
4454                                             XmNbackground, colors[0xff],
4455                                             XmNfontList, fontlist1,
4456                                             NULL);
4457 
4458     XtAddCallback(button_ok, XmNactivateCallback, Config_NGPS_change_data, config_NGPS_dialog);
4459     XtAddCallback(button_cancel, XmNactivateCallback, Config_NGPS_destroy_shell, config_NGPS_dialog);
4460 
4461     pos_dialog(config_NGPS_dialog);
4462 
4463     delw = XmInternAtom(XtDisplay(config_NGPS_dialog),"WM_DELETE_WINDOW", FALSE);
4464     XmAddWMProtocolCallback(config_NGPS_dialog, delw, Config_NGPS_destroy_shell, (XtPointer)config_NGPS_dialog);
4465 
4466     if (config_type==0)
4467     {
4468       /* first time port */
4469       XmTextFieldSetString(NGPS_host_name_data,"localhost");
4470       XmTextFieldSetString(NGPS_host_port_data,"2947");
4471       XmTextFieldSetString(NGPS_comment,"");
4472       XmToggleButtonSetState(NGPS_active_on_startup,TRUE,FALSE);
4473       XmToggleButtonSetState(NGPS_host_reconnect_data,TRUE,FALSE);
4474       XmToggleButtonSetState(NGPS_set_time, FALSE, FALSE);
4475     }
4476     else
4477     {
4478       /* reconfig */
4479 
4480       begin_critical_section(&devices_lock, "interface_gui.c:Config_NGPS" );
4481 
4482       XmTextFieldSetString(NGPS_host_name_data,devices[NGPS_port].device_host_name);
4483       xastir_snprintf(temp, sizeof(temp), "%d", devices[NGPS_port].sp); /* port number */
4484       XmTextFieldSetString(NGPS_host_port_data,temp);
4485       XmTextFieldSetString(NGPS_comment,devices[NGPS_port].comment);
4486 
4487       if (devices[NGPS_port].connect_on_startup)
4488       {
4489         XmToggleButtonSetState(NGPS_active_on_startup,TRUE,FALSE);
4490       }
4491       else
4492       {
4493         XmToggleButtonSetState(NGPS_active_on_startup,FALSE,FALSE);
4494       }
4495 
4496       if (devices[NGPS_port].reconnect)
4497       {
4498         XmToggleButtonSetState(NGPS_host_reconnect_data,TRUE,FALSE);
4499       }
4500       else
4501       {
4502         XmToggleButtonSetState(NGPS_host_reconnect_data,FALSE,FALSE);
4503       }
4504 
4505       if (devices[NGPS_port].set_time)
4506       {
4507         XmToggleButtonSetState(NGPS_set_time, TRUE, FALSE);
4508       }
4509       else
4510       {
4511         XmToggleButtonSetState(NGPS_set_time, FALSE, FALSE);
4512       }
4513 
4514       end_critical_section(&devices_lock, "interface_gui.c:Config_NGPS" );
4515 
4516     }
4517     XtManageChild(form);
4518     XtManageChild(pane);
4519 
4520     resize_dialog(form, config_NGPS_dialog);
4521 
4522     XtPopup(config_NGPS_dialog,XtGrabNone);
4523   }
4524   else
4525   {
4526     (void)XRaiseWindow(XtDisplay(config_NGPS_dialog), XtWindow(config_NGPS_dialog));
4527   }
4528 }
4529 
4530 
4531 
4532 
4533 
4534 /*****************************************************/
4535 /* Configure AX.25 TNC GUI                           */
4536 /*****************************************************/
4537 
4538 /**** AX.25 CONFIGURE ******/
4539 int AX25_port;
4540 Widget config_AX25_dialog = (Widget)NULL;
4541 Widget AX25_device_name_data;
4542 Widget AX25_comment;
4543 Widget AX25_unproto1_data;
4544 Widget AX25_unproto2_data;
4545 Widget AX25_unproto3_data;
4546 Widget AX25_igate_data;
4547 Widget AX25_active_on_startup;
4548 Widget AX25_transmit_data;
4549 Widget AX25_relay_digipeat;
4550 
4551 
4552 
4553 
4554 
Config_AX25_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))4555 void Config_AX25_destroy_shell( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
4556 {
4557   Widget shell = (Widget) clientData;
4558   XtPopdown(shell);
4559   XtDestroyWidget(shell);
4560   config_AX25_dialog = (Widget)NULL;
4561   if (choose_interface_dialog != NULL)
4562   {
4563     Choose_interface_destroy_shell(choose_interface_dialog,choose_interface_dialog,NULL);
4564   }
4565 
4566   choose_interface_dialog = (Widget)NULL;
4567 }
4568 
4569 
4570 
4571 
4572 
Config_AX25_change_data(Widget widget,XtPointer clientData,XtPointer callData)4573 void Config_AX25_change_data(Widget widget, XtPointer clientData, XtPointer callData)
4574 {
4575   int was_up;
4576   char *temp_ptr;
4577 
4578   busy_cursor(appshell);
4579 
4580   was_up=0;
4581   if (get_device_status(AX25_port) == DEVICE_IN_USE)
4582   {
4583     /* if active shutdown before changes are made */
4584     /*fprintf(stderr,"Device is up, shutting down\n");*/
4585     (void)del_device(AX25_port);
4586     was_up=1;
4587     usleep(1000000); // Wait for one second
4588   }
4589 
4590   begin_critical_section(&devices_lock, "interface_gui.c:Config_AX25_change_data" );
4591 
4592   temp_ptr = XmTextFieldGetString(AX25_device_name_data);
4593   xastir_snprintf(devices[AX25_port].device_name,
4594                   sizeof(devices[AX25_port].device_name),
4595                   "%s",
4596                   temp_ptr);
4597   XtFree(temp_ptr);
4598 
4599   (void)remove_trailing_spaces(devices[AX25_port].device_name);
4600 
4601   temp_ptr = XmTextFieldGetString(AX25_comment);
4602   xastir_snprintf(devices[AX25_port].comment,
4603                   sizeof(devices[AX25_port].comment),
4604                   "%s",
4605                   temp_ptr);
4606   XtFree(temp_ptr);
4607 
4608   (void)remove_trailing_spaces(devices[AX25_port].comment);
4609 
4610   if(XmToggleButtonGetState(AX25_active_on_startup))
4611   {
4612     devices[AX25_port].connect_on_startup=1;
4613   }
4614   else
4615   {
4616     devices[AX25_port].connect_on_startup=0;
4617   }
4618 
4619   if(XmToggleButtonGetState(AX25_transmit_data))
4620   {
4621     devices[AX25_port].transmit_data=1;
4622     XtSetSensitive(AX25_relay_digipeat, TRUE);
4623   }
4624   else
4625   {
4626     devices[AX25_port].transmit_data=0;
4627     XtSetSensitive(AX25_relay_digipeat, FALSE);
4628   }
4629 
4630   if(XmToggleButtonGetState(AX25_relay_digipeat))
4631   {
4632     devices[AX25_port].relay_digipeat=1;
4633   }
4634   else
4635   {
4636     devices[AX25_port].relay_digipeat=0;
4637   }
4638 
4639   devices[AX25_port].igate_options=device_igate_options;
4640 
4641   temp_ptr = XmTextFieldGetString(AX25_unproto1_data);
4642   xastir_snprintf(devices[AX25_port].unproto1,
4643                   sizeof(devices[AX25_port].unproto1),
4644                   "%s",
4645                   temp_ptr);
4646   XtFree(temp_ptr);
4647 
4648   (void)remove_trailing_spaces(devices[AX25_port].unproto1);
4649 
4650   if(check_unproto_path(devices[AX25_port].unproto1))
4651   {
4652     popup_message_always(langcode("WPUPCFT042"),
4653                          langcode("WPUPCFT043"));
4654   }
4655 
4656   temp_ptr = XmTextFieldGetString(AX25_unproto2_data);
4657   xastir_snprintf(devices[AX25_port].unproto2,
4658                   sizeof(devices[AX25_port].unproto2),
4659                   "%s",
4660                   temp_ptr);
4661   XtFree(temp_ptr);
4662 
4663   (void)remove_trailing_spaces(devices[AX25_port].unproto2);
4664 
4665   if(check_unproto_path(devices[AX25_port].unproto2))
4666   {
4667     popup_message_always(langcode("WPUPCFT042"),
4668                          langcode("WPUPCFT043"));
4669   }
4670 
4671   temp_ptr = XmTextFieldGetString(AX25_unproto3_data);
4672   xastir_snprintf(devices[AX25_port].unproto3,
4673                   sizeof(devices[AX25_port].unproto3),
4674                   "%s",
4675                   temp_ptr);
4676   XtFree(temp_ptr);
4677 
4678   (void)remove_trailing_spaces(devices[AX25_port].unproto3);
4679 
4680   if(check_unproto_path(devices[AX25_port].unproto3))
4681   {
4682     popup_message_always(langcode("WPUPCFT042"),
4683                          langcode("WPUPCFT043"));
4684   }
4685 
4686   temp_ptr = XmTextFieldGetString(AX25_igate_data);
4687   xastir_snprintf(devices[AX25_port].unproto_igate,
4688                   sizeof(devices[AX25_port].unproto_igate),
4689                   "%s",
4690                   temp_ptr);
4691   XtFree(temp_ptr);
4692 
4693   (void)remove_trailing_spaces(devices[AX25_port].unproto_igate);
4694 
4695   if(check_unproto_path(devices[AX25_port].unproto_igate))
4696   {
4697     popup_message_always(langcode("WPUPCFT044"),
4698                          langcode("WPUPCFT043"));
4699   }
4700 
4701 
4702   devices[AX25_port].reconnect=1;
4703 
4704 // reopen if open before - n8ysz 20041213
4705 //    if (devices[AX25_port].connect_on_startup==1 || was_up) {
4706   if ( was_up)
4707   {
4708     (void)add_device(AX25_port,
4709                      DEVICE_AX25_TNC,
4710                      devices[AX25_port].device_name,
4711                      "",
4712                      -1,
4713                      -1,
4714                      -1,
4715                      0,
4716                      "");
4717   }
4718 
4719 
4720   /* delete list */
4721 //    modify_device_list(4,0);
4722 
4723 
4724   /* add device type */
4725   devices[AX25_port].device_type=DEVICE_AX25_TNC;
4726 
4727   /* rebuild list */
4728 //    modify_device_list(3,0);
4729 
4730 
4731   end_critical_section(&devices_lock, "interface_gui.c:Config_AX25_change_data" );
4732 
4733   // Rebuild the interface control list
4734   update_interface_list();
4735 
4736   Config_AX25_destroy_shell(widget,clientData,callData);
4737 }
4738 
4739 
4740 
4741 
4742 
Config_AX25(Widget UNUSED (w),int config_type,int port)4743 void Config_AX25( Widget UNUSED(w), int config_type, int port)
4744 {
4745   static Widget  pane, scrollwindow, form, button_ok, button_cancel, frame,
4746          devn, comment,
4747          proto, proto1, proto2, proto3,
4748          igate_box,
4749          igate_o_0, igate_o_1, igate_o_2,
4750          igate_label,
4751          sep;
4752 //  static Widget igate;
4753 
4754   char temp[50];
4755   Atom delw;
4756   Arg al[50];                    /* Arg List */
4757   register unsigned int ac = 0;           /* Arg Count */
4758 
4759   if(!config_AX25_dialog)
4760   {
4761     AX25_port=port;
4762     config_AX25_dialog = XtVaCreatePopupShell(langcode("WPUPCAX001"),
4763                          xmDialogShellWidgetClass, appshell,
4764                          XmNdeleteResponse, XmDESTROY,
4765                          XmNdefaultPosition, FALSE,
4766                          XmNfontList, fontlist1,
4767                          NULL);
4768 
4769     pane = XtVaCreateWidget("Config_AX25 pane",xmPanedWindowWidgetClass, config_AX25_dialog,
4770                             XmNbackground, colors[0xff],
4771                             NULL);
4772 
4773     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
4774                                            xmScrolledWindowWidgetClass,
4775                                            pane,
4776                                            XmNscrollingPolicy, XmAUTOMATIC,
4777                                            NULL);
4778 
4779     form =  XtVaCreateWidget("Config_AX25 form",
4780                              xmFormWidgetClass,
4781                              scrollwindow,
4782                              XmNfractionBase, 5,
4783                              XmNbackground, colors[0xff],
4784                              XmNautoUnmanage, FALSE,
4785                              XmNshadowThickness, 1,
4786                              NULL);
4787 
4788     AX25_active_on_startup  = XtVaCreateManagedWidget(langcode("UNIOP00011"),xmToggleButtonWidgetClass,form,
4789                               XmNnavigationType, XmTAB_GROUP,
4790                               XmNtraversalOn, TRUE,
4791                               XmNtopAttachment, XmATTACH_FORM,
4792                               XmNtopOffset, 5,
4793                               XmNbottomAttachment, XmATTACH_NONE,
4794                               XmNleftAttachment, XmATTACH_FORM,
4795                               XmNleftOffset,10,
4796                               XmNrightAttachment, XmATTACH_NONE,
4797                               XmNbackground, colors[0xff],
4798                               XmNfontList, fontlist1,
4799                               NULL);
4800 
4801     AX25_transmit_data = XtVaCreateManagedWidget(langcode("UNIOP00010"),xmToggleButtonWidgetClass,form,
4802                          XmNnavigationType, XmTAB_GROUP,
4803                          XmNtraversalOn, TRUE,
4804                          XmNtopAttachment, XmATTACH_FORM,
4805                          XmNtopOffset, 5,
4806                          XmNbottomAttachment, XmATTACH_NONE,
4807                          XmNleftAttachment, XmATTACH_WIDGET,
4808                          XmNleftWidget, AX25_active_on_startup,
4809                          XmNleftOffset,35,
4810                          XmNrightAttachment, XmATTACH_NONE,
4811                          XmNbackground, colors[0xff],
4812                          XmNfontList, fontlist1,
4813                          NULL);
4814 
4815     AX25_relay_digipeat = XtVaCreateManagedWidget(langcode("UNIOP00030"),xmToggleButtonWidgetClass,form,
4816                           XmNnavigationType, XmTAB_GROUP,
4817                           XmNtraversalOn, TRUE,
4818                           XmNtopAttachment, XmATTACH_FORM,
4819                           XmNtopOffset, 5,
4820                           XmNbottomAttachment, XmATTACH_NONE,
4821                           XmNleftAttachment, XmATTACH_WIDGET,
4822                           XmNleftWidget, AX25_transmit_data,
4823                           XmNleftOffset,35,
4824                           XmNrightAttachment, XmATTACH_NONE,
4825                           XmNbackground, colors[0xff],
4826                           XmNfontList, fontlist1,
4827                           NULL);
4828 
4829     devn = XtVaCreateManagedWidget(langcode("WPUPCAX002"),xmLabelWidgetClass, form,
4830                                    XmNtopAttachment, XmATTACH_WIDGET,
4831                                    XmNtopWidget, AX25_active_on_startup,
4832                                    XmNtopOffset, 5,
4833                                    XmNbottomAttachment, XmATTACH_NONE,
4834                                    XmNleftAttachment, XmATTACH_FORM,
4835                                    XmNleftOffset, 10,
4836                                    XmNrightAttachment, XmATTACH_NONE,
4837                                    XmNbackground, colors[0xff],
4838                                    XmNfontList, fontlist1,
4839                                    NULL);
4840 
4841     AX25_device_name_data = XtVaCreateManagedWidget("Config_AX25 device_data", xmTextFieldWidgetClass, form,
4842                             XmNnavigationType, XmTAB_GROUP,
4843                             XmNtraversalOn, TRUE,
4844                             XmNeditable,   TRUE,
4845                             XmNcursorPositionVisible, TRUE,
4846                             XmNsensitive, TRUE,
4847                             XmNshadowThickness,    1,
4848                             XmNcolumns, 15,
4849                             XmNwidth, ((15*7)+2),
4850                             XmNmaxLength, MAX_DEVICE_NAME,
4851                             XmNbackground, colors[0x0f],
4852                             XmNtopAttachment,XmATTACH_WIDGET,
4853                             XmNtopWidget, AX25_active_on_startup,
4854                             XmNtopOffset, 2,
4855                             XmNbottomAttachment,XmATTACH_NONE,
4856                             XmNleftAttachment, XmATTACH_WIDGET,
4857                             XmNleftWidget, devn,
4858                             XmNleftOffset, 10,
4859                             XmNrightAttachment,XmATTACH_NONE,
4860                             XmNfontList, fontlist1,
4861                             NULL);
4862 
4863     comment = XtVaCreateManagedWidget(langcode("WPUPCFS017"),xmLabelWidgetClass, form,
4864                                       XmNtopAttachment, XmATTACH_WIDGET,
4865                                       XmNtopWidget, AX25_active_on_startup,
4866                                       XmNtopOffset, 5,
4867                                       XmNbottomAttachment, XmATTACH_NONE,
4868                                       XmNleftAttachment, XmATTACH_WIDGET,
4869                                       XmNleftWidget, AX25_device_name_data,
4870                                       XmNleftOffset, 10,
4871                                       XmNrightAttachment, XmATTACH_NONE,
4872                                       XmNbackground, colors[0xff],
4873                                       XmNfontList, fontlist1,
4874                                       NULL);
4875 
4876     AX25_comment = XtVaCreateManagedWidget("Config_AX25 comment", xmTextFieldWidgetClass, form,
4877                                            XmNnavigationType, XmTAB_GROUP,
4878                                            XmNtraversalOn, TRUE,
4879                                            XmNeditable,   TRUE,
4880                                            XmNcursorPositionVisible, TRUE,
4881                                            XmNsensitive, TRUE,
4882                                            XmNshadowThickness,    1,
4883                                            XmNcolumns, 15,
4884                                            XmNwidth, ((15*7)+2),
4885                                            XmNmaxLength, 40,
4886                                            XmNbackground, colors[0x0f],
4887                                            XmNtopAttachment,XmATTACH_WIDGET,
4888                                            XmNtopWidget, AX25_active_on_startup,
4889                                            XmNtopOffset, 2,
4890                                            XmNbottomAttachment,XmATTACH_NONE,
4891                                            XmNleftAttachment, XmATTACH_WIDGET,
4892                                            XmNleftWidget, comment,
4893                                            XmNleftOffset, 10,
4894                                            XmNrightAttachment,XmATTACH_NONE,
4895                                            XmNfontList, fontlist1,
4896                                            NULL);
4897 
4898     frame = XtVaCreateManagedWidget("Config_AX25 frame", xmFrameWidgetClass, form,
4899                                     XmNtopAttachment, XmATTACH_WIDGET,
4900                                     XmNtopWidget, devn,
4901                                     XmNtopOffset, 10,
4902                                     XmNbottomAttachment, XmATTACH_NONE,
4903                                     XmNleftAttachment, XmATTACH_FORM,
4904                                     XmNleftOffset, 10,
4905                                     XmNrightAttachment, XmATTACH_FORM,
4906                                     XmNrightOffset, 10,
4907                                     XmNbackground, colors[0xff],
4908                                     NULL);
4909 
4910     // igate
4911     XtVaCreateManagedWidget(langcode("IGPUPCF000"),xmLabelWidgetClass, frame,
4912                             XmNchildType, XmFRAME_TITLE_CHILD,
4913                             XmNbackground, colors[0xff],
4914                             XmNfontList, fontlist1,
4915                             NULL);
4916 
4917     /* set args for color */
4918     ac=0;
4919     XtSetArg(al[ac], XmNbackground, colors[0xff]);
4920     ac++;
4921 
4922 
4923     igate_box = XmCreateRadioBox(frame,"Config_AX25 IGate box",al,ac);
4924 
4925     XtVaSetValues(igate_box,
4926                   XmNorientation, XmVERTICAL,
4927                   XmNnumColumns,2,
4928                   NULL);
4929 
4930     igate_o_0 = XtVaCreateManagedWidget(langcode("IGPUPCF001"),xmToggleButtonGadgetClass,
4931                                         igate_box,
4932                                         XmNbackground, colors[0xff],
4933                                         XmNfontList, fontlist1,
4934                                         NULL);
4935 
4936     XtAddCallback(igate_o_0,XmNvalueChangedCallback,igate_toggle,"0");
4937 
4938     igate_o_1 = XtVaCreateManagedWidget(langcode("IGPUPCF002"),xmToggleButtonGadgetClass,
4939                                         igate_box,
4940                                         XmNbackground, colors[0xff],
4941                                         XmNfontList, fontlist1,
4942                                         NULL);
4943 
4944     XtAddCallback(igate_o_1,XmNvalueChangedCallback,igate_toggle,"1");
4945 
4946     igate_o_2 = XtVaCreateManagedWidget(langcode("IGPUPCF003"),xmToggleButtonGadgetClass,
4947                                         igate_box,
4948                                         XmNbackground, colors[0xff],
4949                                         XmNfontList, fontlist1,
4950                                         NULL);
4951 
4952     XtAddCallback(igate_o_2,XmNvalueChangedCallback,igate_toggle,"2");
4953 
4954     proto = XtVaCreateManagedWidget(langcode("WPUPCFT011"), xmLabelWidgetClass, form,
4955                                     XmNorientation, XmHORIZONTAL,
4956                                     XmNtopAttachment,XmATTACH_WIDGET,
4957                                     XmNtopWidget, frame,
4958                                     XmNtopOffset, 10,
4959                                     XmNbottomAttachment,XmATTACH_NONE,
4960                                     XmNleftAttachment, XmATTACH_FORM,
4961                                     XmNleftOffset,5,
4962                                     XmNrightAttachment,XmATTACH_FORM,
4963                                     XmNrightOffset,5,
4964                                     XmNbackground, colors[0xff],
4965                                     XmNfontList, fontlist1,
4966                                     NULL);
4967 
4968     xastir_snprintf(temp, sizeof(temp), langcode("WPUPCFT012"), VERSIONFRM);
4969 
4970     proto1 = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
4971                                      XmNorientation, XmHORIZONTAL,
4972                                      XmNtopAttachment,XmATTACH_WIDGET,
4973                                      XmNtopWidget, proto,
4974                                      XmNtopOffset, 12,
4975                                      XmNbottomAttachment,XmATTACH_NONE,
4976                                      XmNleftAttachment, XmATTACH_FORM,
4977                                      XmNleftOffset, 60,
4978                                      XmNrightAttachment,XmATTACH_NONE,
4979                                      XmNbackground, colors[0xff],
4980                                      XmNfontList, fontlist1,
4981                                      NULL);
4982 
4983     AX25_unproto1_data = XtVaCreateManagedWidget("Config_AX25 protopath1", xmTextFieldWidgetClass, form,
4984                          XmNnavigationType, XmTAB_GROUP,
4985                          XmNtraversalOn, TRUE,
4986                          XmNeditable,   TRUE,
4987                          XmNcursorPositionVisible, TRUE,
4988                          XmNsensitive, TRUE,
4989                          XmNshadowThickness,    1,
4990                          XmNcolumns, 25,
4991                          XmNwidth, ((25*7)+2),
4992                          XmNmaxLength, 40,
4993                          XmNbackground, colors[0x0f],
4994                          XmNtopAttachment,XmATTACH_WIDGET,
4995                          XmNtopWidget, proto,
4996                          XmNtopOffset, 5,
4997                          XmNbottomAttachment,XmATTACH_NONE,
4998                          XmNleftAttachment,XmATTACH_WIDGET,
4999                          XmNleftWidget, proto1,
5000                          XmNleftOffset, 5,
5001                          XmNrightAttachment,XmATTACH_NONE,
5002                          XmNfontList, fontlist1,
5003                          NULL);
5004 
5005     xastir_snprintf(temp, sizeof(temp), langcode("WPUPCFT013"), VERSIONFRM);
5006 
5007     proto2 = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
5008                                      XmNorientation, XmHORIZONTAL,
5009                                      XmNtopAttachment,XmATTACH_WIDGET,
5010                                      XmNtopWidget, proto1,
5011                                      XmNtopOffset, 15,
5012                                      XmNbottomAttachment,XmATTACH_NONE,
5013                                      XmNleftAttachment, XmATTACH_FORM,
5014                                      XmNleftOffset, 60,
5015                                      XmNrightAttachment,XmATTACH_NONE,
5016                                      XmNbackground, colors[0xff],
5017                                      XmNfontList, fontlist1,
5018                                      NULL);
5019 
5020     AX25_unproto2_data = XtVaCreateManagedWidget("Config_AX25 protopath2", xmTextFieldWidgetClass, form,
5021                          XmNnavigationType, XmTAB_GROUP,
5022                          XmNtraversalOn, TRUE,
5023                          XmNeditable,   TRUE,
5024                          XmNcursorPositionVisible, TRUE,
5025                          XmNsensitive, TRUE,
5026                          XmNshadowThickness,    1,
5027                          XmNcolumns, 25,
5028                          XmNwidth, ((25*7)+2),
5029                          XmNmaxLength, 40,
5030                          XmNbackground, colors[0x0f],
5031                          XmNtopAttachment,XmATTACH_WIDGET,
5032                          XmNtopWidget, AX25_unproto1_data,
5033                          XmNtopOffset, 5,
5034                          XmNbottomAttachment,XmATTACH_NONE,
5035                          XmNleftAttachment, XmATTACH_WIDGET,
5036                          XmNleftWidget, proto2,
5037                          XmNleftOffset, 5,
5038                          XmNrightAttachment,XmATTACH_NONE,
5039                          XmNfontList, fontlist1,
5040                          NULL);
5041 
5042     xastir_snprintf(temp, sizeof(temp), langcode("WPUPCFT014"), VERSIONFRM);
5043 
5044     proto3 = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
5045                                      XmNorientation, XmHORIZONTAL,
5046                                      XmNtopAttachment,XmATTACH_WIDGET,
5047                                      XmNtopWidget, proto2,
5048                                      XmNtopOffset, 15,
5049                                      XmNbottomAttachment,XmATTACH_NONE,
5050                                      XmNleftAttachment, XmATTACH_FORM,
5051                                      XmNleftOffset, 60,
5052                                      XmNrightAttachment,XmATTACH_NONE,
5053                                      XmNbackground, colors[0xff],
5054                                      XmNfontList, fontlist1,
5055                                      NULL);
5056 
5057     AX25_unproto3_data = XtVaCreateManagedWidget("Config_AX25 protopath3", xmTextFieldWidgetClass, form,
5058                          XmNnavigationType, XmTAB_GROUP,
5059                          XmNtraversalOn, TRUE,
5060                          XmNeditable,   TRUE,
5061                          XmNcursorPositionVisible, TRUE,
5062                          XmNsensitive, TRUE,
5063                          XmNshadowThickness,    1,
5064                          XmNcolumns, 25,
5065                          XmNwidth, ((25*7)+2),
5066                          XmNmaxLength, 40,
5067                          XmNbackground, colors[0x0f],
5068                          XmNtopAttachment,XmATTACH_WIDGET,
5069                          XmNtopWidget, AX25_unproto2_data,
5070                          XmNtopOffset, 5,
5071                          XmNbottomAttachment,XmATTACH_NONE,
5072                          XmNleftAttachment,XmATTACH_WIDGET,
5073                          XmNleftWidget, proto3,
5074                          XmNleftOffset, 5,
5075                          XmNrightAttachment,XmATTACH_NONE,
5076                          XmNfontList, fontlist1,
5077                          NULL);
5078 
5079     xastir_snprintf(temp, sizeof(temp), "%s", langcode("IGPUPCF004"));
5080     igate_label = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
5081                                           XmNorientation, XmHORIZONTAL,
5082                                           XmNtopAttachment,XmATTACH_WIDGET,
5083                                           XmNtopWidget, proto3,
5084                                           XmNtopOffset, 15,
5085                                           XmNbottomAttachment,XmATTACH_NONE,
5086                                           XmNleftAttachment, XmATTACH_FORM,
5087                                           XmNleftOffset, 60,
5088                                           XmNrightAttachment,XmATTACH_NONE,
5089                                           XmNbackground, colors[0xff],
5090                                           XmNfontList, fontlist1,
5091                                           NULL);
5092 
5093     AX25_igate_data = XtVaCreateManagedWidget("Config_TNC igate_data", xmTextFieldWidgetClass, form,
5094                       XmNnavigationType, XmTAB_GROUP,
5095                       XmNtraversalOn, TRUE,
5096                       XmNeditable,   TRUE,
5097                       XmNcursorPositionVisible, TRUE,
5098                       XmNsensitive, TRUE,
5099                       XmNshadowThickness,    1,
5100                       XmNcolumns, 25,
5101                       XmNwidth, ((25*7)+2),
5102                       XmNmaxLength, 40,
5103                       XmNbackground, colors[0x0f],
5104                       XmNtopAttachment,XmATTACH_WIDGET,
5105                       XmNtopWidget, AX25_unproto3_data,
5106                       XmNtopOffset, 5,
5107                       XmNbottomAttachment,XmATTACH_NONE,
5108                       XmNleftAttachment,XmATTACH_WIDGET,
5109                       XmNleftWidget, igate_label,
5110                       XmNleftOffset, 5,
5111                       XmNrightAttachment,XmATTACH_NONE,
5112                       XmNfontList, fontlist1,
5113                       NULL);
5114 
5115     sep = XtVaCreateManagedWidget("Config_AX25 sep", xmSeparatorGadgetClass,form,
5116                                   XmNorientation, XmHORIZONTAL,
5117                                   XmNtopAttachment,XmATTACH_WIDGET,
5118                                   XmNtopWidget, igate_label,
5119                                   XmNtopOffset, 20,
5120                                   XmNbottomAttachment,XmATTACH_NONE,
5121                                   XmNleftAttachment, XmATTACH_FORM,
5122                                   XmNrightAttachment,XmATTACH_FORM,
5123                                   XmNbackground, colors[0xff],
5124                                   XmNfontList, fontlist1,
5125                                   NULL);
5126 
5127     button_ok = XtVaCreateManagedWidget(langcode("UNIOP00001"),xmPushButtonGadgetClass, form,
5128                                         XmNnavigationType, XmTAB_GROUP,
5129                                         XmNtraversalOn, TRUE,
5130                                         XmNtopAttachment, XmATTACH_WIDGET,
5131                                         XmNtopWidget, sep,
5132                                         XmNtopOffset, 10,
5133                                         XmNbottomAttachment, XmATTACH_FORM,
5134                                         XmNbottomOffset, 5,
5135                                         XmNleftAttachment, XmATTACH_POSITION,
5136                                         XmNleftPosition, 1,
5137                                         XmNrightAttachment, XmATTACH_POSITION,
5138                                         XmNrightPosition, 2,
5139                                         XmNbackground, colors[0xff],
5140                                         XmNfontList, fontlist1,
5141                                         NULL);
5142 
5143     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
5144                                             XmNnavigationType, XmTAB_GROUP,
5145                                             XmNtraversalOn, TRUE,
5146                                             XmNtopAttachment, XmATTACH_WIDGET,
5147                                             XmNtopWidget, sep,
5148                                             XmNtopOffset, 10,
5149                                             XmNbottomAttachment, XmATTACH_FORM,
5150                                             XmNbottomOffset, 5,
5151                                             XmNleftAttachment, XmATTACH_POSITION,
5152                                             XmNleftPosition, 3,
5153                                             XmNrightAttachment, XmATTACH_POSITION,
5154                                             XmNrightPosition, 4,
5155                                             XmNbackground, colors[0xff],
5156                                             XmNfontList, fontlist1,
5157                                             NULL);
5158 
5159 #ifdef HAVE_LIBAX25
5160     XtAddCallback(button_ok, XmNactivateCallback, Config_AX25_change_data, config_AX25_dialog);
5161 #else
5162     // Need code to use button_ok variable to quiet a compiler warning
5163     //when we don't have LIBAX25 linked-in.
5164     if (button_ok != button_cancel)
5165     {
5166       // Do nothing (to shut up a compiler warning)
5167     }
5168 #endif /* USE_AX25 */
5169     XtAddCallback(button_cancel, XmNactivateCallback, Config_AX25_destroy_shell, config_AX25_dialog);
5170 
5171     pos_dialog(config_AX25_dialog);
5172 
5173     delw = XmInternAtom(XtDisplay(config_AX25_dialog),"WM_DELETE_WINDOW", FALSE);
5174     XmAddWMProtocolCallback(config_AX25_dialog, delw, Config_AX25_destroy_shell, (XtPointer)config_AX25_dialog);
5175 
5176     if (config_type==0)
5177     {
5178       /* first time port */
5179       XmToggleButtonSetState(AX25_active_on_startup,TRUE,FALSE);
5180       XmToggleButtonSetState(AX25_transmit_data,TRUE,FALSE);
5181       XmToggleButtonSetState(AX25_relay_digipeat,FALSE,FALSE);
5182       XmTextFieldSetString(AX25_device_name_data,"");
5183       XmTextFieldSetString(AX25_comment,"");
5184       device_igate_options=0;
5185       XmToggleButtonSetState(igate_o_0,TRUE,FALSE);
5186       XmTextFieldSetString(AX25_unproto1_data,"WIDE2-2");
5187       XmTextFieldSetString(AX25_unproto2_data,"");
5188       XmTextFieldSetString(AX25_unproto3_data,"");
5189       XmTextFieldSetString(AX25_igate_data,"");
5190     }
5191     else
5192     {
5193       /* reconfig */
5194 
5195       begin_critical_section(&devices_lock, "interface_gui.c:Config_AX25" );
5196 
5197       if (devices[AX25_port].connect_on_startup)
5198       {
5199         XmToggleButtonSetState(AX25_active_on_startup,TRUE,FALSE);
5200       }
5201       else
5202       {
5203         XmToggleButtonSetState(AX25_active_on_startup,FALSE,FALSE);
5204       }
5205 
5206       switch (devices[AX25_port].igate_options)
5207       {
5208         case(0):
5209           XmToggleButtonSetState(igate_o_0,TRUE,FALSE);
5210           device_igate_options=0;
5211           break;
5212 
5213         case(1):
5214           XmToggleButtonSetState(igate_o_1,TRUE,FALSE);
5215           device_igate_options=1;
5216           break;
5217 
5218         case(2):
5219           XmToggleButtonSetState(igate_o_2,TRUE,FALSE);
5220           device_igate_options=2;
5221           break;
5222 
5223         default:
5224           XmToggleButtonSetState(igate_o_0,TRUE,FALSE);
5225           device_igate_options=0;
5226           break;
5227       }
5228       if (devices[AX25_port].transmit_data)
5229       {
5230         XmToggleButtonSetState(AX25_transmit_data,TRUE,FALSE);
5231       }
5232       else
5233       {
5234         XmToggleButtonSetState(AX25_transmit_data,FALSE,FALSE);
5235       }
5236 
5237       if (devices[AX25_port].relay_digipeat)
5238       {
5239         XmToggleButtonSetState(AX25_relay_digipeat,TRUE,FALSE);
5240       }
5241       else
5242       {
5243         XmToggleButtonSetState(AX25_relay_digipeat,FALSE,FALSE);
5244       }
5245 
5246       XmTextFieldSetString(AX25_device_name_data,devices[AX25_port].device_name);
5247       XmTextFieldSetString(AX25_comment,devices[AX25_port].comment);
5248       XmTextFieldSetString(AX25_unproto1_data,devices[AX25_port].unproto1);
5249       XmTextFieldSetString(AX25_unproto2_data,devices[AX25_port].unproto2);
5250       XmTextFieldSetString(AX25_unproto3_data,devices[AX25_port].unproto3);
5251       XmTextFieldSetString(AX25_igate_data,devices[AX25_port].unproto_igate);
5252 
5253       end_critical_section(&devices_lock, "interface_gui.c:Config_AX25" );
5254 
5255     }
5256     XtManageChild(form);
5257     XtManageChild(igate_box);
5258     XtManageChild(pane);
5259 
5260     resize_dialog(form, config_AX25_dialog);
5261 
5262     XtPopup(config_AX25_dialog,XtGrabNone);
5263   }
5264   else
5265   {
5266     (void)XRaiseWindow(XtDisplay(config_AX25_dialog), XtWindow(config_AX25_dialog));
5267   }
5268 }
5269 
5270 
5271 
5272 
5273 
5274 /*****************************************************/
5275 /* Configure Network server GUI                      */
5276 /*****************************************************/
5277 
5278 /**** INTERNET CONFIGURE ******/
5279 Widget config_Inet_dialog = (Widget)NULL;
5280 Widget Inet_active_on_startup;
5281 Widget Inet_host_data;
5282 Widget Inet_port_data;
5283 Widget Inet_comment;
5284 Widget Inet_password_data;
5285 Widget Inet_filter_data;
5286 Widget Inet_transmit_data;
5287 Widget Inet_reconnect_data;
5288 int    Inet_port;
5289 
5290 
5291 
5292 
5293 
Inet_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))5294 void Inet_destroy_shell( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
5295 {
5296   Widget shell = (Widget) clientData;
5297   XtPopdown(shell);
5298   XtDestroyWidget(shell);
5299   config_Inet_dialog = (Widget)NULL;
5300   if (choose_interface_dialog != NULL)
5301   {
5302     Choose_interface_destroy_shell(choose_interface_dialog,choose_interface_dialog,NULL);
5303   }
5304 
5305   choose_interface_dialog = (Widget)NULL;
5306 }
5307 
5308 
5309 
5310 
5311 
Inet_change_data(Widget widget,XtPointer clientData,XtPointer callData)5312 void Inet_change_data(Widget widget, XtPointer clientData, XtPointer callData)
5313 {
5314   int was_up;
5315   char *temp_ptr;
5316 
5317 
5318   busy_cursor(appshell);
5319   was_up=0;
5320   if (get_device_status(Inet_port) == DEVICE_IN_USE)
5321   {
5322     /* if active shutdown before changes are made */
5323     /*fprintf(stderr,"Device is up, shutting down\n");*/
5324     (void)del_device(Inet_port);
5325     was_up=1;
5326     usleep(1000000); // Wait for one second
5327   }
5328 
5329   begin_critical_section(&devices_lock, "interface_gui.c:Inet_change_data" );
5330 
5331   temp_ptr = XmTextFieldGetString(Inet_host_data);
5332   xastir_snprintf(devices[Inet_port].device_host_name,
5333                   sizeof(devices[Inet_port].device_host_name),
5334                   "%s",
5335                   temp_ptr);
5336   XtFree(temp_ptr);
5337 
5338   (void)remove_trailing_spaces(devices[Inet_port].device_host_name);
5339 
5340   temp_ptr = XmTextFieldGetString(Inet_password_data);
5341   xastir_snprintf(devices[Inet_port].device_host_pswd,
5342                   sizeof(devices[Inet_port].device_host_pswd),
5343                   "%s",
5344                   temp_ptr);
5345   XtFree(temp_ptr);
5346 
5347   (void)remove_trailing_spaces(devices[Inet_port].device_host_pswd);
5348 
5349   temp_ptr = XmTextFieldGetString(Inet_filter_data);
5350   xastir_snprintf(devices[Inet_port].device_host_filter_string,
5351                   sizeof(devices[Inet_port].device_host_filter_string),
5352                   "%s",
5353                   temp_ptr);
5354   XtFree(temp_ptr);
5355 
5356   (void)remove_trailing_spaces(devices[Inet_port].device_host_filter_string);
5357 
5358   temp_ptr = XmTextFieldGetString(Inet_comment);
5359   xastir_snprintf(devices[Inet_port].comment,
5360                   sizeof(devices[Inet_port].comment),
5361                   "%s",
5362                   temp_ptr);
5363   XtFree(temp_ptr);
5364 
5365   (void)remove_trailing_spaces(devices[Inet_port].comment);
5366 
5367   temp_ptr = XmTextFieldGetString(Inet_port_data);
5368   devices[Inet_port].sp=atoi(temp_ptr);
5369   XtFree(temp_ptr);
5370 
5371   if(XmToggleButtonGetState(Inet_active_on_startup))
5372   {
5373     devices[Inet_port].connect_on_startup=1;
5374   }
5375   else
5376   {
5377     devices[Inet_port].connect_on_startup=0;
5378   }
5379 
5380   if(XmToggleButtonGetState(Inet_transmit_data))
5381   {
5382     devices[Inet_port].transmit_data=1;
5383   }
5384   else
5385   {
5386     devices[Inet_port].transmit_data=0;
5387   }
5388 
5389   if(XmToggleButtonGetState(Inet_reconnect_data))
5390   {
5391     devices[Inet_port].reconnect=1;
5392   }
5393   else
5394   {
5395     devices[Inet_port].reconnect=0;
5396   }
5397 
5398 //    Changed 20041213 per emails with we7u - n8ysz
5399 //    if (devices[Inet_port].connect_on_startup==1 || was_up) {
5400 
5401   if ( was_up)
5402   {
5403     (void)add_device(Inet_port,
5404                      DEVICE_NET_STREAM,
5405                      devices[Inet_port].device_host_name,
5406                      devices[Inet_port].device_host_pswd,
5407                      devices[Inet_port].sp,
5408                      0,
5409                      0,
5410                      devices[Inet_port].reconnect,
5411                      devices[Inet_port].device_host_filter_string);
5412   }
5413 
5414   /* delete list */
5415 //    modify_device_list(4,0);
5416 
5417 
5418   /* add device type */
5419   devices[Inet_port].device_type=DEVICE_NET_STREAM;
5420 
5421   /* rebuild list */
5422 //    modify_device_list(3,0);
5423 
5424 
5425   end_critical_section(&devices_lock, "interface_gui.c:Inet_change_data" );
5426 
5427   // Rebuild the interface control list
5428   update_interface_list();
5429 
5430   Inet_destroy_shell(widget,clientData,callData);
5431 }
5432 
5433 
5434 
5435 
5436 
Config_Inet(Widget UNUSED (w),int config_type,int port)5437 void Config_Inet( Widget UNUSED(w), int config_type, int port)
5438 {
5439   static Widget  pane, scrollwindow, form, button_ok, button_cancel,
5440          ihost, iport, password,
5441          filter, comment, sep;
5442 //  static Widget password_fl;
5443 
5444   Atom delw;
5445   char temp[40];
5446 
5447   if(!config_Inet_dialog)
5448   {
5449     Inet_port=port;
5450     config_Inet_dialog = XtVaCreatePopupShell(langcode("WPUPCFI001"),
5451                          xmDialogShellWidgetClass, appshell,
5452                          XmNdeleteResponse, XmDESTROY,
5453                          XmNdefaultPosition, FALSE,
5454                          XmNfontList, fontlist1,
5455                          NULL);
5456 
5457     pane = XtVaCreateWidget("Config_Inet pane",xmPanedWindowWidgetClass, config_Inet_dialog,
5458                             XmNbackground, colors[0xff],
5459                             NULL);
5460 
5461     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
5462                                            xmScrolledWindowWidgetClass,
5463                                            pane,
5464                                            XmNscrollingPolicy, XmAUTOMATIC,
5465                                            NULL);
5466 
5467     form =  XtVaCreateWidget("Config_Inet form",
5468                              xmFormWidgetClass,
5469                              scrollwindow,
5470                              XmNfractionBase, 5,
5471                              XmNbackground, colors[0xff],
5472                              XmNautoUnmanage, FALSE,
5473                              XmNshadowThickness, 1,
5474                              NULL);
5475 
5476     Inet_active_on_startup  = XtVaCreateManagedWidget(langcode("UNIOP00011"),xmToggleButtonWidgetClass,form,
5477                               XmNnavigationType, XmTAB_GROUP,
5478                               XmNtraversalOn, TRUE,
5479                               XmNtopAttachment, XmATTACH_FORM,
5480                               XmNtopOffset, 5,
5481                               XmNbottomAttachment, XmATTACH_NONE,
5482                               XmNleftAttachment, XmATTACH_FORM,
5483                               XmNleftOffset,10,
5484                               XmNrightAttachment, XmATTACH_NONE,
5485                               XmNbackground, colors[0xff],
5486                               XmNfontList, fontlist1,
5487                               NULL);
5488 
5489     Inet_transmit_data  = XtVaCreateManagedWidget(langcode("UNIOP00010"),xmToggleButtonWidgetClass,form,
5490                           XmNnavigationType, XmTAB_GROUP,
5491                           XmNtraversalOn, TRUE,
5492                           XmNtopAttachment, XmATTACH_WIDGET,
5493                           XmNtopWidget, Inet_active_on_startup,
5494                           XmNtopOffset, 5,
5495                           XmNbottomAttachment, XmATTACH_NONE,
5496                           XmNleftAttachment, XmATTACH_FORM,
5497                           XmNleftOffset,10,
5498                           XmNrightAttachment, XmATTACH_NONE,
5499                           XmNbackground, colors[0xff],
5500                           XmNfontList, fontlist1,
5501                           NULL);
5502 
5503     ihost = XtVaCreateManagedWidget(langcode("WPUPCFI002"),xmLabelWidgetClass, form,
5504                                     XmNtopAttachment, XmATTACH_WIDGET,
5505                                     XmNtopWidget, Inet_transmit_data,
5506                                     XmNtopOffset, 5,
5507                                     XmNbottomAttachment, XmATTACH_NONE,
5508                                     XmNleftAttachment, XmATTACH_FORM,
5509                                     XmNleftOffset, 10,
5510                                     XmNrightAttachment, XmATTACH_NONE,
5511                                     XmNbackground, colors[0xff],
5512                                     XmNfontList, fontlist1,
5513                                     NULL);
5514 
5515     Inet_host_data = XtVaCreateManagedWidget("Config_Inet host_data", xmTextFieldWidgetClass, form,
5516                      XmNnavigationType, XmTAB_GROUP,
5517                      XmNtraversalOn, TRUE,
5518                      XmNeditable,   TRUE,
5519                      XmNcursorPositionVisible, TRUE,
5520                      XmNsensitive, TRUE,
5521                      XmNshadowThickness,    1,
5522                      XmNcolumns, 25,
5523                      XmNwidth, ((25*7)+2),
5524                      XmNmaxLength, MAX_DEVICE_NAME,
5525                      XmNbackground, colors[0x0f],
5526                      XmNtopAttachment,XmATTACH_WIDGET,
5527                      XmNtopWidget, Inet_transmit_data,
5528                      XmNbottomAttachment,XmATTACH_NONE,
5529                      XmNleftAttachment, XmATTACH_WIDGET,
5530                      XmNleftWidget, ihost,
5531                      XmNrightAttachment,XmATTACH_NONE,
5532                      XmNfontList, fontlist1,
5533                      NULL);
5534 
5535     iport = XtVaCreateManagedWidget(langcode("WPUPCFI003"),xmLabelWidgetClass, form,
5536                                     XmNtopAttachment, XmATTACH_WIDGET,
5537                                     XmNtopWidget,Inet_transmit_data,
5538                                     XmNtopOffset, 5,
5539                                     XmNbottomAttachment, XmATTACH_NONE,
5540                                     XmNleftAttachment, XmATTACH_WIDGET,
5541                                     XmNleftWidget,Inet_host_data,
5542                                     XmNleftOffset, 20,
5543                                     XmNrightAttachment, XmATTACH_NONE,
5544                                     XmNbackground, colors[0xff],
5545                                     XmNfontList, fontlist1,
5546                                     NULL);
5547 
5548     Inet_port_data = XtVaCreateManagedWidget("Config_Inet port_data", xmTextFieldWidgetClass, form,
5549                      XmNnavigationType, XmTAB_GROUP,
5550                      XmNtraversalOn, TRUE,
5551                      XmNeditable,   TRUE,
5552                      XmNcursorPositionVisible, TRUE,
5553                      XmNsensitive, TRUE,
5554                      XmNshadowThickness,    1,
5555                      XmNcolumns, 5,
5556                      XmNmaxLength, 6,
5557                      XmNbackground, colors[0x0f],
5558                      XmNtopAttachment, XmATTACH_WIDGET,
5559                      XmNtopWidget, Inet_transmit_data,
5560                      XmNbottomAttachment,XmATTACH_NONE,
5561                      XmNleftAttachment, XmATTACH_WIDGET,
5562                      XmNleftWidget, iport,
5563                      XmNrightAttachment,XmATTACH_FORM,
5564                      XmNrightOffset,10,
5565                      XmNfontList, fontlist1,
5566                      NULL);
5567 
5568     password = XtVaCreateManagedWidget(langcode("WPUPCFI009"),xmLabelWidgetClass, form,
5569                                        XmNtopAttachment, XmATTACH_WIDGET,
5570                                        XmNtopWidget, ihost,
5571                                        XmNtopOffset, 20,
5572                                        XmNbottomAttachment, XmATTACH_NONE,
5573                                        XmNleftAttachment, XmATTACH_FORM,
5574                                        XmNleftOffset, 10,
5575                                        XmNrightAttachment, XmATTACH_NONE,
5576                                        XmNbackground, colors[0xff],
5577                                        XmNfontList, fontlist1,
5578                                        NULL);
5579 
5580     Inet_password_data = XtVaCreateManagedWidget("Config_Inet password_data", xmTextFieldWidgetClass, form,
5581                          XmNnavigationType, XmTAB_GROUP,
5582                          XmNtraversalOn, TRUE,
5583                          XmNeditable,   TRUE,
5584                          XmNcursorPositionVisible, TRUE,
5585                          XmNsensitive, TRUE,
5586                          XmNshadowThickness,    1,
5587                          XmNcolumns, 20,
5588                          XmNmaxLength, 20,
5589                          XmNbackground, colors[0x0f],
5590                          XmNleftAttachment,XmATTACH_WIDGET,
5591                          XmNleftWidget, password,
5592                          XmNleftOffset, 10,
5593                          XmNtopAttachment,XmATTACH_WIDGET,
5594                          XmNtopWidget, ihost,
5595                          XmNtopOffset, 15,
5596                          XmNbottomAttachment,XmATTACH_NONE,
5597                          XmNrightAttachment,XmATTACH_NONE,
5598                          XmNfontList, fontlist1,
5599                          NULL);
5600 
5601     // password_fl
5602     XtVaCreateManagedWidget(langcode("WPUPCFI010"),xmLabelWidgetClass, form,
5603                             XmNtopAttachment, XmATTACH_WIDGET,
5604                             XmNtopWidget, ihost,
5605                             XmNtopOffset, 20,
5606                             XmNbottomAttachment, XmATTACH_NONE,
5607                             XmNleftAttachment, XmATTACH_WIDGET,
5608                             XmNleftWidget,Inet_password_data,
5609                             XmNleftOffset,20,
5610                             XmNrightAttachment, XmATTACH_NONE,
5611                             XmNbackground, colors[0xff],
5612                             XmNfontList, fontlist1,
5613                             NULL);
5614 
5615     filter = XtVaCreateManagedWidget(langcode("WPUPCFI015"),xmLabelWidgetClass, form,
5616                                      XmNtopAttachment, XmATTACH_WIDGET,
5617                                      XmNtopWidget, password,
5618                                      XmNtopOffset, 20,
5619                                      XmNbottomAttachment, XmATTACH_NONE,
5620                                      XmNleftAttachment, XmATTACH_FORM,
5621                                      XmNleftOffset, 10,
5622                                      XmNrightAttachment, XmATTACH_NONE,
5623                                      XmNbackground, colors[0xff],
5624                                      XmNfontList, fontlist1,
5625                                      NULL);
5626 
5627     Inet_filter_data = XtVaCreateManagedWidget("Config_Inet filter_data", xmTextFieldWidgetClass, form,
5628                        XmNnavigationType, XmTAB_GROUP,
5629                        XmNtraversalOn, TRUE,
5630                        XmNeditable,   TRUE,
5631                        XmNcursorPositionVisible, TRUE,
5632                        XmNsensitive, TRUE,
5633                        XmNshadowThickness,    1,
5634                        XmNcolumns, 30,
5635                        XmNmaxLength, 190,
5636                        XmNbackground, colors[0x0f],
5637                        XmNleftAttachment,XmATTACH_WIDGET,
5638                        XmNleftWidget, filter,
5639                        XmNleftOffset, 10,
5640                        XmNtopAttachment,XmATTACH_WIDGET,
5641                        XmNtopWidget, password,
5642                        XmNtopOffset, 15,
5643                        XmNbottomAttachment,XmATTACH_NONE,
5644                        XmNrightAttachment,XmATTACH_NONE,
5645                        XmNfontList, fontlist1,
5646                        NULL);
5647 
5648     comment = XtVaCreateManagedWidget(langcode("WPUPCFS017"),xmLabelWidgetClass, form,
5649                                       XmNtopAttachment, XmATTACH_WIDGET,
5650                                       XmNtopWidget, Inet_filter_data,
5651                                       XmNtopOffset, 5,
5652                                       XmNbottomAttachment, XmATTACH_NONE,
5653                                       XmNleftAttachment, XmATTACH_FORM,
5654                                       XmNleftOffset, 10,
5655                                       XmNrightAttachment, XmATTACH_NONE,
5656                                       XmNbackground, colors[0xff],
5657                                       XmNfontList, fontlist1,
5658                                       NULL);
5659 
5660     Inet_comment = XtVaCreateManagedWidget("Config_Inet comment", xmTextFieldWidgetClass, form,
5661                                            XmNnavigationType, XmTAB_GROUP,
5662                                            XmNtraversalOn, TRUE,
5663                                            XmNeditable,   TRUE,
5664                                            XmNcursorPositionVisible, TRUE,
5665                                            XmNsensitive, TRUE,
5666                                            XmNshadowThickness,    1,
5667                                            XmNcolumns, 25,
5668                                            XmNwidth, ((25*7)+2),
5669                                            XmNmaxLength, 49,
5670                                            XmNbackground, colors[0x0f],
5671                                            XmNtopAttachment,XmATTACH_WIDGET,
5672                                            XmNtopWidget, Inet_filter_data,
5673                                            XmNbottomAttachment,XmATTACH_NONE,
5674                                            XmNleftAttachment, XmATTACH_WIDGET,
5675                                            XmNleftWidget, comment,
5676                                            XmNrightAttachment,XmATTACH_NONE,
5677                                            XmNfontList, fontlist1,
5678                                            NULL);
5679 
5680     Inet_reconnect_data = XtVaCreateManagedWidget(langcode("WPUPCFI011"),xmToggleButtonWidgetClass,form,
5681                           XmNnavigationType, XmTAB_GROUP,
5682                           XmNtraversalOn, TRUE,
5683                           XmNtopAttachment, XmATTACH_WIDGET,
5684                           XmNtopWidget, comment,
5685                           XmNtopOffset, 20,
5686                           XmNbottomAttachment, XmATTACH_NONE,
5687                           XmNleftAttachment, XmATTACH_FORM,
5688                           XmNleftOffset,10,
5689                           XmNrightAttachment, XmATTACH_NONE,
5690                           XmNbackground, colors[0xff],
5691                           XmNfontList, fontlist1,
5692                           NULL);
5693 
5694     sep = XtVaCreateManagedWidget("Config_Inet sep", xmSeparatorGadgetClass,form,
5695                                   XmNorientation, XmHORIZONTAL,
5696                                   XmNtopAttachment,XmATTACH_WIDGET,
5697                                   XmNtopWidget, Inet_reconnect_data,
5698                                   XmNtopOffset, 14,
5699                                   XmNbottomAttachment,XmATTACH_NONE,
5700                                   XmNleftAttachment, XmATTACH_FORM,
5701                                   XmNrightAttachment,XmATTACH_FORM,
5702                                   XmNbackground, colors[0xff],
5703                                   XmNfontList, fontlist1,
5704                                   NULL);
5705 
5706     button_ok = XtVaCreateManagedWidget(langcode("UNIOP00001"),xmPushButtonGadgetClass, form,
5707                                         XmNnavigationType, XmTAB_GROUP,
5708                                         XmNtraversalOn, TRUE,
5709                                         XmNtopAttachment, XmATTACH_WIDGET,
5710                                         XmNtopWidget, sep,
5711                                         XmNtopOffset, 10,
5712                                         XmNbottomAttachment, XmATTACH_FORM,
5713                                         XmNbottomOffset, 5,
5714                                         XmNleftAttachment, XmATTACH_POSITION,
5715                                         XmNleftPosition, 1,
5716                                         XmNrightAttachment, XmATTACH_POSITION,
5717                                         XmNrightPosition, 2,
5718                                         XmNbackground, colors[0xff],
5719                                         XmNfontList, fontlist1,
5720                                         NULL);
5721 
5722     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
5723                                             XmNnavigationType, XmTAB_GROUP,
5724                                             XmNtraversalOn, TRUE,
5725                                             XmNtopAttachment, XmATTACH_WIDGET,
5726                                             XmNtopWidget, sep,
5727                                             XmNtopOffset, 10,
5728                                             XmNbottomAttachment, XmATTACH_FORM,
5729                                             XmNbottomOffset, 5,
5730                                             XmNleftAttachment, XmATTACH_POSITION,
5731                                             XmNleftPosition, 3,
5732                                             XmNrightAttachment, XmATTACH_POSITION,
5733                                             XmNrightPosition, 4,
5734                                             XmNbackground, colors[0xff],
5735                                             XmNfontList, fontlist1,
5736                                             NULL);
5737 
5738     XtAddCallback(button_ok, XmNactivateCallback, Inet_change_data, config_Inet_dialog);
5739     XtAddCallback(button_cancel, XmNactivateCallback, Inet_destroy_shell, config_Inet_dialog);
5740 
5741     pos_dialog(config_Inet_dialog);
5742 
5743     delw = XmInternAtom(XtDisplay(config_Inet_dialog),"WM_DELETE_WINDOW", FALSE);
5744     XmAddWMProtocolCallback(config_Inet_dialog, delw, Inet_destroy_shell, (XtPointer)config_Inet_dialog);
5745 
5746     if (config_type==0)
5747     {
5748       /* first time port */
5749       XmToggleButtonSetState(Inet_active_on_startup,TRUE,FALSE);
5750       XmToggleButtonSetState(Inet_transmit_data,TRUE,FALSE);
5751 
5752       // Core APRS-IS Servers
5753       XmTextFieldSetString(Inet_host_data,"rotate.aprs.net");
5754 
5755       // Filtered port
5756       XmTextFieldSetString(Inet_port_data,"14580");
5757 
5758       // Filter of 500 miles around my location. But only if I
5759       // enable transmit on that interface and globally!
5760       XmTextFieldSetString(Inet_filter_data,"m/500");
5761 
5762       XmTextFieldSetString(Inet_comment,"Core INET Servers");
5763       XmToggleButtonSetState(Inet_reconnect_data,TRUE,FALSE);
5764     }
5765     else
5766     {
5767       /* reconfig */
5768 
5769       begin_critical_section(&devices_lock, "interface_gui.c:Config_Inet" );
5770 
5771       if (devices[Inet_port].connect_on_startup)
5772       {
5773         XmToggleButtonSetState(Inet_active_on_startup,TRUE,FALSE);
5774       }
5775       else
5776       {
5777         XmToggleButtonSetState(Inet_active_on_startup,FALSE,FALSE);
5778       }
5779 
5780       if (devices[Inet_port].transmit_data)
5781       {
5782         XmToggleButtonSetState(Inet_transmit_data,TRUE,FALSE);
5783       }
5784       else
5785       {
5786         XmToggleButtonSetState(Inet_transmit_data,FALSE,FALSE);
5787       }
5788 
5789       XmTextFieldSetString(Inet_host_data,devices[Inet_port].device_host_name);
5790       xastir_snprintf(temp, sizeof(temp), "%d", devices[Inet_port].sp);
5791       XmTextFieldSetString(Inet_port_data,temp);
5792       XmTextFieldSetString(Inet_password_data,devices[Inet_port].device_host_pswd);
5793       XmTextFieldSetString(Inet_filter_data,devices[Inet_port].device_host_filter_string);
5794       XmTextFieldSetString(Inet_comment,devices[Inet_port].comment);
5795 
5796       if (devices[Inet_port].reconnect)
5797       {
5798         XmToggleButtonSetState(Inet_reconnect_data,TRUE,FALSE);
5799       }
5800       else
5801       {
5802         XmToggleButtonSetState(Inet_reconnect_data,FALSE,FALSE);
5803       }
5804 
5805       end_critical_section(&devices_lock, "interface_gui.c:Config_Inet" );
5806 
5807     }
5808     XtManageChild(form);
5809     XtManageChild(pane);
5810 
5811     resize_dialog(form, config_Inet_dialog);
5812 
5813     XtPopup(config_Inet_dialog,XtGrabNone);
5814   }
5815   else
5816   {
5817     (void)XRaiseWindow(XtDisplay(config_Inet_dialog), XtWindow(config_Inet_dialog));
5818   }
5819 }
5820 
5821 
5822 
5823 
5824 
5825 //WE7U-DATABASE
5826 /*****************************************************/
5827 /* Configure Database Server GUI                     */
5828 /*****************************************************/
5829 
5830 /**** DATABASE CONFIGURE ******/
5831 Widget config_Database_dialog = (Widget)NULL;
5832 Widget Database_active_on_startup;
5833 Widget Database_host_data;
5834 Widget Database_port_data;
5835 Widget Database_comment;
5836 Widget Database_password_data;
5837 Widget Database_filter_data;
5838 Widget Database_transmit_data;
5839 Widget Database_reconnect_data;
5840 int    Database_port;
5841 
5842 
5843 
5844 
5845 
Database_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))5846 void Database_destroy_shell( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
5847 {
5848   Widget shell = (Widget) clientData;
5849   XtPopdown(shell);
5850   XtDestroyWidget(shell);
5851   config_Database_dialog = (Widget)NULL;
5852   if (choose_interface_dialog != NULL)
5853   {
5854     Choose_interface_destroy_shell(choose_interface_dialog,choose_interface_dialog,NULL);
5855   }
5856 
5857   choose_interface_dialog = (Widget)NULL;
5858 }
5859 
5860 
5861 
5862 
5863 
Database_change_data(Widget widget,XtPointer clientData,XtPointer callData)5864 void Database_change_data(Widget widget, XtPointer clientData, XtPointer callData)
5865 {
5866   int was_up;
5867   char *temp_ptr;
5868 
5869 
5870   busy_cursor(appshell);
5871   was_up=0;
5872   if (get_device_status(Database_port) == DEVICE_IN_USE)
5873   {
5874     /* if active shutdown before changes are made */
5875     /*fprintf(stderr,"Device is up, shutting down\n");*/
5876     (void)del_device(Database_port);
5877     was_up=1;
5878     usleep(1000000); // Wait for one second
5879   }
5880 
5881   begin_critical_section(&devices_lock, "interface_gui.c:Database_change_data" );
5882 
5883   temp_ptr = XmTextFieldGetString(Database_host_data);
5884   xastir_snprintf(devices[Database_port].device_host_name,
5885                   sizeof(devices[Database_port].device_host_name),
5886                   "%s",
5887                   temp_ptr);
5888   XtFree(temp_ptr);
5889 
5890   (void)remove_trailing_spaces(devices[Database_port].device_host_name);
5891 
5892   temp_ptr = XmTextFieldGetString(Database_password_data);
5893   xastir_snprintf(devices[Database_port].device_host_pswd,
5894                   sizeof(devices[Database_port].device_host_pswd),
5895                   "%s",
5896                   temp_ptr);
5897   XtFree(temp_ptr);
5898 
5899   (void)remove_trailing_spaces(devices[Database_port].device_host_pswd);
5900 
5901   temp_ptr = XmTextFieldGetString(Database_filter_data);
5902   xastir_snprintf(devices[Database_port].device_host_filter_string,
5903                   sizeof(devices[Database_port].device_host_filter_string),
5904                   "%s",
5905                   temp_ptr);
5906   XtFree(temp_ptr);
5907 
5908   (void)remove_trailing_spaces(devices[Database_port].device_host_filter_string);
5909 
5910   temp_ptr = XmTextFieldGetString(Database_comment);
5911   xastir_snprintf(devices[Database_port].comment,
5912                   sizeof(devices[Database_port].comment),
5913                   "%s",
5914                   temp_ptr);
5915   XtFree(temp_ptr);
5916 
5917   (void)remove_trailing_spaces(devices[Database_port].comment);
5918 
5919   temp_ptr = XmTextFieldGetString(Database_port_data);
5920   devices[Database_port].sp=atoi(temp_ptr);
5921   XtFree(temp_ptr);
5922 
5923   if(XmToggleButtonGetState(Database_active_on_startup))
5924   {
5925     devices[Database_port].connect_on_startup=1;
5926   }
5927   else
5928   {
5929     devices[Database_port].connect_on_startup=0;
5930   }
5931 
5932   if(XmToggleButtonGetState(Database_transmit_data))
5933   {
5934     devices[Database_port].transmit_data=1;
5935   }
5936   else
5937   {
5938     devices[Database_port].transmit_data=0;
5939   }
5940 
5941   if(XmToggleButtonGetState(Database_reconnect_data))
5942   {
5943     devices[Database_port].reconnect=1;
5944   }
5945   else
5946   {
5947     devices[Database_port].reconnect=0;
5948   }
5949 
5950 //    n8ysz 20041213
5951 //    if (devices[Database_port].connect_on_startup==1 || was_up) {
5952   if ( was_up)
5953   {
5954     (void)add_device(Database_port,
5955                      DEVICE_NET_DATABASE,
5956                      devices[Database_port].device_host_name,
5957                      devices[Database_port].device_host_pswd,
5958                      devices[Database_port].sp,
5959                      0,
5960                      0,
5961                      devices[Database_port].reconnect,
5962                      devices[Database_port].device_host_filter_string);
5963   }
5964 
5965   /* delete list */
5966 //    modify_device_list(4,0);
5967 
5968 
5969   /* add device type */
5970   devices[Database_port].device_type=DEVICE_NET_DATABASE;
5971 
5972   /* rebuild list */
5973 //    modify_device_list(3,0);
5974 
5975 
5976   end_critical_section(&devices_lock, "interface_gui.c:Database_change_data" );
5977 
5978   // Rebuild the interface control list
5979   update_interface_list();
5980 
5981   Database_destroy_shell(widget,clientData,callData);
5982 }
5983 
5984 
5985 
5986 
5987 
Config_Database(Widget UNUSED (w),int config_type,int port)5988 void Config_Database( Widget UNUSED(w), int config_type, int port)
5989 {
5990   static Widget  pane, scrollwindow, form, button_ok, button_cancel,
5991          ihost, iport, password,
5992          filter, sep, comment;
5993 //  static Widget password_fl;
5994 
5995   Atom delw;
5996   char temp[40];
5997 
5998   if(!config_Database_dialog)
5999   {
6000     Database_port=port;
6001     config_Database_dialog = XtVaCreatePopupShell(langcode("WPUPCFID01"),
6002                              xmDialogShellWidgetClass, appshell,
6003                              XmNdeleteResponse, XmDESTROY,
6004                              XmNdefaultPosition, FALSE,
6005                              XmNfontList, fontlist1,
6006                              NULL);
6007 
6008     pane = XtVaCreateWidget("Config_Database pane",xmPanedWindowWidgetClass, config_Database_dialog,
6009                             XmNbackground, colors[0xff],
6010                             NULL);
6011 
6012     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
6013                                            xmScrolledWindowWidgetClass,
6014                                            pane,
6015                                            XmNscrollingPolicy, XmAUTOMATIC,
6016                                            NULL);
6017 
6018     form =  XtVaCreateWidget("Config_Database form",
6019                              xmFormWidgetClass,
6020                              scrollwindow,
6021                              XmNfractionBase, 5,
6022                              XmNbackground, colors[0xff],
6023                              XmNautoUnmanage, FALSE,
6024                              XmNshadowThickness, 1,
6025                              NULL);
6026 
6027     Database_active_on_startup  = XtVaCreateManagedWidget(langcode("UNIOP00011"),xmToggleButtonWidgetClass,form,
6028                                   XmNnavigationType, XmTAB_GROUP,
6029                                   XmNtraversalOn, TRUE,
6030                                   XmNtopAttachment, XmATTACH_FORM,
6031                                   XmNtopOffset, 5,
6032                                   XmNbottomAttachment, XmATTACH_NONE,
6033                                   XmNleftAttachment, XmATTACH_FORM,
6034                                   XmNleftOffset,10,
6035                                   XmNrightAttachment, XmATTACH_NONE,
6036                                   XmNbackground, colors[0xff],
6037                                   XmNfontList, fontlist1,
6038                                   NULL);
6039 
6040     Database_transmit_data  = XtVaCreateManagedWidget(langcode("UNIOP00010"),xmToggleButtonWidgetClass,form,
6041                               XmNnavigationType, XmTAB_GROUP,
6042                               XmNtraversalOn, TRUE,
6043                               XmNtopAttachment, XmATTACH_WIDGET,
6044                               XmNtopWidget, Database_active_on_startup,
6045                               XmNtopOffset, 5,
6046                               XmNbottomAttachment, XmATTACH_NONE,
6047                               XmNleftAttachment, XmATTACH_FORM,
6048                               XmNleftOffset,10,
6049                               XmNrightAttachment, XmATTACH_NONE,
6050                               XmNbackground, colors[0xff],
6051                               XmNfontList, fontlist1,
6052                               NULL);
6053 
6054     ihost = XtVaCreateManagedWidget(langcode("WPUPCFID02"),xmLabelWidgetClass, form,
6055                                     XmNtopAttachment, XmATTACH_WIDGET,
6056                                     XmNtopWidget, Database_transmit_data,
6057                                     XmNtopOffset, 5,
6058                                     XmNbottomAttachment, XmATTACH_NONE,
6059                                     XmNleftAttachment, XmATTACH_FORM,
6060                                     XmNleftOffset, 10,
6061                                     XmNrightAttachment, XmATTACH_NONE,
6062                                     XmNbackground, colors[0xff],
6063                                     XmNfontList, fontlist1,
6064                                     NULL);
6065 
6066     Database_host_data = XtVaCreateManagedWidget("Config_Database host_data", xmTextFieldWidgetClass, form,
6067                          XmNnavigationType, XmTAB_GROUP,
6068                          XmNtraversalOn, TRUE,
6069                          XmNeditable,   TRUE,
6070                          XmNcursorPositionVisible, TRUE,
6071                          XmNsensitive, TRUE,
6072                          XmNshadowThickness,    1,
6073                          XmNcolumns, 25,
6074                          XmNwidth, ((25*7)+2),
6075                          XmNmaxLength, MAX_DEVICE_NAME,
6076                          XmNbackground, colors[0x0f],
6077                          XmNtopAttachment,XmATTACH_WIDGET,
6078                          XmNtopWidget, Database_transmit_data,
6079                          XmNbottomAttachment,XmATTACH_NONE,
6080                          XmNleftAttachment, XmATTACH_WIDGET,
6081                          XmNleftWidget, ihost,
6082                          XmNrightAttachment,XmATTACH_NONE,
6083                          XmNfontList, fontlist1,
6084                          NULL);
6085 
6086     iport = XtVaCreateManagedWidget(langcode("WPUPCFID03"),xmLabelWidgetClass, form,
6087                                     XmNtopAttachment, XmATTACH_WIDGET,
6088                                     XmNtopWidget,Database_transmit_data,
6089                                     XmNtopOffset, 5,
6090                                     XmNbottomAttachment, XmATTACH_NONE,
6091                                     XmNleftAttachment, XmATTACH_WIDGET,
6092                                     XmNleftWidget,Database_host_data,
6093                                     XmNleftOffset, 20,
6094                                     XmNrightAttachment, XmATTACH_NONE,
6095                                     XmNbackground, colors[0xff],
6096                                     XmNfontList, fontlist1,
6097                                     NULL);
6098 
6099     Database_port_data = XtVaCreateManagedWidget("Config_Database port_data", xmTextFieldWidgetClass, form,
6100                          XmNnavigationType, XmTAB_GROUP,
6101                          XmNtraversalOn, TRUE,
6102                          XmNeditable,   TRUE,
6103                          XmNcursorPositionVisible, TRUE,
6104                          XmNsensitive, TRUE,
6105                          XmNshadowThickness,    1,
6106                          XmNcolumns, 5,
6107                          XmNmaxLength, 6,
6108                          XmNbackground, colors[0x0f],
6109                          XmNtopAttachment, XmATTACH_WIDGET,
6110                          XmNtopWidget, Database_transmit_data,
6111                          XmNbottomAttachment,XmATTACH_NONE,
6112                          XmNleftAttachment, XmATTACH_WIDGET,
6113                          XmNleftWidget, iport,
6114                          XmNrightAttachment,XmATTACH_FORM,
6115                          XmNrightOffset,10,
6116                          XmNfontList, fontlist1,
6117                          NULL);
6118 
6119     password = XtVaCreateManagedWidget(langcode("WPUPCFID09"),xmLabelWidgetClass, form,
6120                                        XmNtopAttachment, XmATTACH_WIDGET,
6121                                        XmNtopWidget, ihost,
6122                                        XmNtopOffset, 20,
6123                                        XmNbottomAttachment, XmATTACH_NONE,
6124                                        XmNleftAttachment, XmATTACH_FORM,
6125                                        XmNleftOffset, 10,
6126                                        XmNrightAttachment, XmATTACH_NONE,
6127                                        XmNbackground, colors[0xff],
6128                                        XmNfontList, fontlist1,
6129                                        NULL);
6130 
6131     Database_password_data = XtVaCreateManagedWidget("Config_Database password_data", xmTextFieldWidgetClass, form,
6132                              XmNnavigationType, XmTAB_GROUP,
6133                              XmNtraversalOn, TRUE,
6134                              XmNeditable,   TRUE,
6135                              XmNcursorPositionVisible, TRUE,
6136                              XmNsensitive, TRUE,
6137                              XmNshadowThickness,    1,
6138                              XmNcolumns, 20,
6139                              XmNmaxLength, 20,
6140                              XmNbackground, colors[0x0f],
6141                              XmNleftAttachment,XmATTACH_WIDGET,
6142                              XmNleftWidget, password,
6143                              XmNleftOffset, 10,
6144                              XmNtopAttachment,XmATTACH_WIDGET,
6145                              XmNtopWidget, ihost,
6146                              XmNtopOffset, 15,
6147                              XmNbottomAttachment,XmATTACH_NONE,
6148                              XmNrightAttachment,XmATTACH_NONE,
6149                              XmNfontList, fontlist1,
6150                              NULL);
6151 
6152     // password_fl
6153     XtVaCreateManagedWidget(langcode("WPUPCFID10"),xmLabelWidgetClass, form,
6154                             XmNtopAttachment, XmATTACH_WIDGET,
6155                             XmNtopWidget, ihost,
6156                             XmNtopOffset, 20,
6157                             XmNbottomAttachment, XmATTACH_NONE,
6158                             XmNleftAttachment, XmATTACH_WIDGET,
6159                             XmNleftWidget,Database_password_data,
6160                             XmNleftOffset,20,
6161                             XmNrightAttachment, XmATTACH_NONE,
6162                             XmNbackground, colors[0xff],
6163                             XmNfontList, fontlist1,
6164                             NULL);
6165 
6166     filter = XtVaCreateManagedWidget(langcode("WPUPCFID15"),xmLabelWidgetClass, form,
6167                                      XmNtopAttachment, XmATTACH_WIDGET,
6168                                      XmNtopWidget, password,
6169                                      XmNtopOffset, 20,
6170                                      XmNbottomAttachment, XmATTACH_NONE,
6171                                      XmNleftAttachment, XmATTACH_FORM,
6172                                      XmNleftOffset, 10,
6173                                      XmNrightAttachment, XmATTACH_NONE,
6174                                      XmNbackground, colors[0xff],
6175                                      XmNfontList, fontlist1,
6176                                      NULL);
6177 
6178     Database_filter_data = XtVaCreateManagedWidget("Config_Database filter_data", xmTextFieldWidgetClass, form,
6179                            XmNnavigationType, XmTAB_GROUP,
6180                            XmNtraversalOn, TRUE,
6181                            XmNeditable,   TRUE,
6182                            XmNcursorPositionVisible, TRUE,
6183                            XmNsensitive, TRUE,
6184                            XmNshadowThickness,    1,
6185                            XmNcolumns, 30,
6186                            XmNmaxLength, 190,
6187                            XmNbackground, colors[0x0f],
6188                            XmNleftAttachment,XmATTACH_WIDGET,
6189                            XmNleftWidget, filter,
6190                            XmNleftOffset, 10,
6191                            XmNtopAttachment,XmATTACH_WIDGET,
6192                            XmNtopWidget, password,
6193                            XmNtopOffset, 15,
6194                            XmNbottomAttachment,XmATTACH_NONE,
6195                            XmNrightAttachment,XmATTACH_NONE,
6196                            XmNfontList, fontlist1,
6197                            NULL);
6198 
6199     comment = XtVaCreateManagedWidget(langcode("WPUPCFS017"),xmLabelWidgetClass, form,
6200                                       XmNtopAttachment, XmATTACH_WIDGET,
6201                                       XmNtopWidget, filter,
6202                                       XmNtopOffset, 20,
6203                                       XmNbottomAttachment, XmATTACH_NONE,
6204                                       XmNleftAttachment, XmATTACH_FORM,
6205                                       XmNleftOffset, 10,
6206                                       XmNrightAttachment, XmATTACH_NONE,
6207                                       XmNbackground, colors[0xff],
6208                                       XmNfontList, fontlist1,
6209                                       NULL);
6210 
6211     Database_comment = XtVaCreateManagedWidget("Config_Database comment", xmTextFieldWidgetClass, form,
6212                        XmNnavigationType, XmTAB_GROUP,
6213                        XmNtraversalOn, TRUE,
6214                        XmNeditable,   TRUE,
6215                        XmNcursorPositionVisible, TRUE,
6216                        XmNsensitive, TRUE,
6217                        XmNshadowThickness,    1,
6218                        XmNcolumns, 25,
6219                        XmNwidth, ((25*7)+2),
6220                        XmNmaxLength, 49,
6221                        XmNbackground, colors[0x0f],
6222                        XmNtopAttachment,XmATTACH_WIDGET,
6223                        XmNtopWidget, filter,
6224                        XmNtopOffset, 15,
6225                        XmNbottomAttachment,XmATTACH_NONE,
6226                        XmNleftAttachment, XmATTACH_WIDGET,
6227                        XmNleftWidget, comment,
6228                        XmNrightAttachment,XmATTACH_NONE,
6229                        XmNfontList, fontlist1,
6230                        NULL);
6231 
6232     Database_reconnect_data = XtVaCreateManagedWidget(langcode("WPUPCFID11"),xmToggleButtonWidgetClass,form,
6233                               XmNnavigationType, XmTAB_GROUP,
6234                               XmNtraversalOn, TRUE,
6235                               XmNtopAttachment, XmATTACH_WIDGET,
6236                               XmNtopWidget, comment,
6237                               XmNtopOffset, 20,
6238                               XmNbottomAttachment, XmATTACH_NONE,
6239                               XmNleftAttachment, XmATTACH_FORM,
6240                               XmNleftOffset,10,
6241                               XmNrightAttachment, XmATTACH_NONE,
6242                               XmNbackground, colors[0xff],
6243                               XmNfontList, fontlist1,
6244                               NULL);
6245 
6246     sep = XtVaCreateManagedWidget("Config_Database sep", xmSeparatorGadgetClass,form,
6247                                   XmNorientation, XmHORIZONTAL,
6248                                   XmNtopAttachment,XmATTACH_WIDGET,
6249                                   XmNtopWidget, Database_reconnect_data,
6250                                   XmNtopOffset, 14,
6251                                   XmNbottomAttachment,XmATTACH_NONE,
6252                                   XmNleftAttachment, XmATTACH_FORM,
6253                                   XmNrightAttachment,XmATTACH_FORM,
6254                                   XmNbackground, colors[0xff],
6255                                   XmNfontList, fontlist1,
6256                                   NULL);
6257 
6258     button_ok = XtVaCreateManagedWidget(langcode("UNIOP00001"),xmPushButtonGadgetClass, form,
6259                                         XmNnavigationType, XmTAB_GROUP,
6260                                         XmNtraversalOn, TRUE,
6261                                         XmNtopAttachment, XmATTACH_WIDGET,
6262                                         XmNtopWidget, sep,
6263                                         XmNtopOffset, 10,
6264                                         XmNbottomAttachment, XmATTACH_FORM,
6265                                         XmNbottomOffset, 5,
6266                                         XmNleftAttachment, XmATTACH_POSITION,
6267                                         XmNleftPosition, 1,
6268                                         XmNrightAttachment, XmATTACH_POSITION,
6269                                         XmNrightPosition, 2,
6270                                         XmNbackground, colors[0xff],
6271                                         XmNfontList, fontlist1,
6272                                         NULL);
6273 
6274     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
6275                                             XmNnavigationType, XmTAB_GROUP,
6276                                             XmNtraversalOn, TRUE,
6277                                             XmNtopAttachment, XmATTACH_WIDGET,
6278                                             XmNtopWidget, sep,
6279                                             XmNtopOffset, 10,
6280                                             XmNbottomAttachment, XmATTACH_FORM,
6281                                             XmNbottomOffset, 5,
6282                                             XmNleftAttachment, XmATTACH_POSITION,
6283                                             XmNleftPosition, 3,
6284                                             XmNrightAttachment, XmATTACH_POSITION,
6285                                             XmNrightPosition, 4,
6286                                             XmNbackground, colors[0xff],
6287                                             XmNfontList, fontlist1,
6288                                             NULL);
6289 
6290     XtAddCallback(button_ok, XmNactivateCallback, Database_change_data, config_Database_dialog);
6291     XtAddCallback(button_cancel, XmNactivateCallback, Database_destroy_shell, config_Database_dialog);
6292 
6293     pos_dialog(config_Database_dialog);
6294 
6295     delw = XmInternAtom(XtDisplay(config_Database_dialog),"WM_DELETE_WINDOW", FALSE);
6296     XmAddWMProtocolCallback(config_Database_dialog, delw, Database_destroy_shell, (XtPointer)config_Database_dialog);
6297 
6298     if (config_type==0)
6299     {
6300       /* first time port */
6301       XmToggleButtonSetState(Database_active_on_startup,TRUE,FALSE);
6302       XmToggleButtonSetState(Database_transmit_data,TRUE,FALSE);
6303       //XmTextFieldSetString(Database_host_data,"first.aprs.net");
6304       XmTextFieldSetString(Database_host_data,"");
6305       XmTextFieldSetString(Database_port_data,"");
6306       XmTextFieldSetString(Database_filter_data,"");
6307       XmTextFieldSetString(Database_comment,"");
6308       XmToggleButtonSetState(Database_reconnect_data,FALSE,FALSE);
6309     }
6310     else
6311     {
6312       /* reconfig */
6313 
6314       begin_critical_section(&devices_lock, "interface_gui.c:Config_Database" );
6315 
6316       if (devices[Database_port].connect_on_startup)
6317       {
6318         XmToggleButtonSetState(Database_active_on_startup,TRUE,FALSE);
6319       }
6320       else
6321       {
6322         XmToggleButtonSetState(Database_active_on_startup,FALSE,FALSE);
6323       }
6324 
6325       if (devices[Database_port].transmit_data)
6326       {
6327         XmToggleButtonSetState(Database_transmit_data,TRUE,FALSE);
6328       }
6329       else
6330       {
6331         XmToggleButtonSetState(Database_transmit_data,FALSE,FALSE);
6332       }
6333 
6334       XmTextFieldSetString(Database_host_data,devices[Database_port].device_host_name);
6335       xastir_snprintf(temp, sizeof(temp), "%d", devices[Database_port].sp);
6336       XmTextFieldSetString(Database_port_data,temp);
6337       XmTextFieldSetString(Database_password_data,devices[Database_port].device_host_pswd);
6338       XmTextFieldSetString(Database_filter_data,devices[Database_port].device_host_filter_string);
6339       XmTextFieldSetString(Database_comment,devices[Database_port].comment);
6340 
6341       if (devices[Database_port].reconnect)
6342       {
6343         XmToggleButtonSetState(Database_reconnect_data,TRUE,FALSE);
6344       }
6345       else
6346       {
6347         XmToggleButtonSetState(Database_reconnect_data,FALSE,FALSE);
6348       }
6349 
6350       end_critical_section(&devices_lock, "interface_gui.c:Config_Database" );
6351 
6352     }
6353     XtManageChild(form);
6354     XtManageChild(pane);
6355 
6356     resize_dialog(form, config_Database_dialog);
6357 
6358     XtPopup(config_Database_dialog,XtGrabNone);
6359   }
6360   else
6361   {
6362     (void)XRaiseWindow(XtDisplay(config_Database_dialog), XtWindow(config_Database_dialog));
6363   }
6364 }
6365 
6366 
6367 #ifdef HAVE_DB
6368 //AA3SD-SQL SERVER DATABASE, for db_gis spatial databases
6369 /*****************************************************/
6370 /* Configure SQL Database Server GUI                 */
6371 /*****************************************************/
6372 
6373 /**** DATABASE CONFIGURE ******/
6374 Widget config_Sql_Database_dialog = (Widget)NULL;  // dialog for sql server database connections used in db_gis.c
6375 Widget Sql_Database_active_on_startup;
6376 Widget Sql_Database_query_on_startup_data;
6377 Widget Sql_Database_host_data;
6378 Widget Sql_Database_iport_data;   // = sp, tcp port number on which to connect to database server
6379 Widget Sql_Database_comment;
6380 Widget Sql_Database_password_data;
6381 Widget Sql_Database_transmit_data;
6382 Widget Sql_Database_reconnect_data;
6383 int    Sql_Database_port;   // xastir interface port number, not tcp/ip port
6384 Widget Sql_Database_username_data;
6385 Widget Sql_Database_schema_name_data;
6386 
6387 // lesstif combo boxes are not fully implemented.
6388 // replace combo box with a fake combo box made out of a menu when only lesstif is available
6389 #ifdef USE_COMBO_BOX
6390   Widget Sql_Database_dbms_data;
6391 #else
6392   int    sddd_value;  // integer value of the currently selected item (replicating ordinal position in picklist)
6393   Widget sddd_button;  // button to bring up the picklist
6394   Widget sddd_buttons[3];
6395   Widget sddd_menuPane;  /// menu that acts as the picklist of dbms types
6396   Widget sddd_menu;  /// menu top level
6397 #endif // USE_COMBO_BOX
6398 Widget sddd_widget; // widget used to bind next control in either use combo box or not cases.
6399 
6400 Widget Sql_Database_unix_socket_data;
6401 Widget Sql_Database_schema_type_data;
6402 Widget Sql_Database_errormessage_data;   // display most recent error message on connection
6403 
6404 
6405 
6406 
6407 
6408 #ifdef HAVE_MYSQL
6409 // Set the values on the user interface to an appropriate set
6410 // of defaults for connecting to a mysql database.
Sql_Database_set_defaults_mysql(Widget widget,XtPointer clientData,XtPointer callData)6411 void Sql_Database_set_defaults_mysql(Widget widget, XtPointer clientData,  XtPointer callData)
6412 {
6413   XmString cb_item;
6414   //cb_item = XmStringCreateLtoR("MySQL (lat/long)", XmFONTLIST_DEFAULT_TAG);
6415   cb_item = XmStringCreateLtoR(&xastir_dbms_type[DB_MYSQL][0], XmFONTLIST_DEFAULT_TAG);
6416   //cb_item = XmStringCreateLtoR("MySQL (spatial)", XmFONTLIST_DEFAULT_TAG);
6417 #ifdef HAVE_MYSQL_SPATIAL
6418   cb_item = XmStringCreateLtoR(&xastir_dbms_type[DB_MYSQL_SPATIAL][0], XmFONTLIST_DEFAULT_TAG);
6419 #endif /* HAVE_MYSQL_SPATIAL */
6420 #ifdef USE_COMBO_BOX
6421   XmComboBoxSelectItem(Sql_Database_dbms_data,cb_item);
6422 #else
6423   XtVaSetValues(sddd_menu, XmNmenuHistory, sddd_buttons[DB_MYSQL_SPATIAL], NULL);
6424   sddd_value = DB_MYSQL_SPATIAL;
6425 #endif // USE_COMBO_BOX
6426   XmStringFree(cb_item);
6427   //cb_item = XmStringCreateLtoR("Xastir - simple", XmFONTLIST_DEFAULT_TAG);
6428   cb_item = XmStringCreateLtoR(&xastir_schema_type[XASTIR_SCHEMA_SIMPLE][0], XmFONTLIST_DEFAULT_TAG);
6429   XmComboBoxSelectItem(Sql_Database_schema_type_data,cb_item);
6430   XmStringFree(cb_item);
6431   XmToggleButtonSetState(Sql_Database_active_on_startup,TRUE,FALSE);
6432   XmToggleButtonSetState(Sql_Database_transmit_data,TRUE,FALSE);
6433   XmTextFieldSetString(Sql_Database_host_data,"localhost");
6434   XmTextFieldSetString(Sql_Database_iport_data,"3306");
6435   XmTextFieldSetString(Sql_Database_username_data,"xastir_user");
6436   XmTextFieldSetString(Sql_Database_schema_name_data,"xastir");
6437   // **  get default from mysql_config at configure time
6438   XmTextFieldSetString(Sql_Database_unix_socket_data,"/var/lib/mysql/mysql.sock");
6439   XmTextFieldSetString(Sql_Database_comment,"");
6440   XmToggleButtonSetState(Sql_Database_reconnect_data,FALSE,FALSE);
6441   // don't set Sql_Database_errormessage_data - leave most recent error message visible
6442 }
6443 #endif /* HAVE_MYSQL */
6444 
6445 
6446 
6447 
6448 
6449 #ifdef HAVE_POSTGIS
6450 // Set the values on the user interface to an appropriate set
6451 // of defaults for connecting to a postgresql database.
Sql_Database_set_defaults_postgis(Widget widget,XtPointer clientData,XtPointer callData)6452 void Sql_Database_set_defaults_postgis(Widget widget, XtPointer clientData,  XtPointer callData)
6453 {
6454   XmString cb_item;
6455   //cb_item = XmStringCreateLtoR("Postgres/Postgis", XmFONTLIST_DEFAULT_TAG);
6456   cb_item = XmStringCreateLtoR(&xastir_dbms_type[DB_POSTGIS][0], XmFONTLIST_DEFAULT_TAG);
6457 #ifdef USE_COMBO_BOX
6458   XmComboBoxSelectItem(Sql_Database_dbms_data,cb_item);
6459 #else
6460   XtVaSetValues(sddd_menu, XmNmenuHistory, sddd_buttons[DB_POSTGIS], NULL);
6461   sddd_value = DB_POSTGIS;
6462 #endif // USE_COMBO_BOX
6463   XmStringFree(cb_item);
6464   //cb_item = XmStringCreateLtoR("Xastir - simple", XmFONTLIST_DEFAULT_TAG);
6465   cb_item = XmStringCreateLtoR(&xastir_schema_type[XASTIR_SCHEMA_SIMPLE][0], XmFONTLIST_DEFAULT_TAG);
6466   XmComboBoxSelectItem(Sql_Database_schema_type_data,cb_item);
6467   XmStringFree(cb_item);
6468   XmToggleButtonSetState(Sql_Database_active_on_startup,TRUE,FALSE);
6469   XmToggleButtonSetState(Sql_Database_transmit_data,TRUE,FALSE);
6470   XmTextFieldSetString(Sql_Database_host_data,"localhost");
6471   XmTextFieldSetString(Sql_Database_iport_data,"5432");
6472   XmTextFieldSetString(Sql_Database_username_data,"xastir_user");
6473   XmTextFieldSetString(Sql_Database_schema_name_data,"xastir");
6474   // **  get default from mysql_config at configure time
6475   XmTextFieldSetString(Sql_Database_unix_socket_data,"");
6476   XmTextFieldSetString(Sql_Database_comment,"");
6477   XmToggleButtonSetState(Sql_Database_reconnect_data,FALSE,FALSE);
6478   // don't set Sql_Database_errormessage_data - leave most recent error message visible
6479 }
6480 #endif /* HAVE_POSTGIS */
6481 
6482 
6483 
6484 
6485 
6486 // Destroy the dialog used to set properties for a SQL database interface.
Sql_Database_destroy_shell(Widget widget,XtPointer clientData,XtPointer callData)6487 void Sql_Database_destroy_shell( Widget widget, XtPointer clientData,  XtPointer callData)
6488 {
6489   Widget shell = (Widget) clientData;
6490   XtPopdown(shell);
6491   XtDestroyWidget(shell);
6492   config_Sql_Database_dialog = (Widget)NULL;
6493   if (choose_interface_dialog != NULL)
6494   {
6495     Choose_interface_destroy_shell(choose_interface_dialog,choose_interface_dialog,NULL);
6496   }
6497 
6498   choose_interface_dialog = (Widget)NULL;
6499 }
6500 
6501 
6502 
6503 
6504 
6505 
6506 /* Callback for OK button on SQL database interface properties dialog.
6507    Creates a new interface with the parameters provided in the dialog, or
6508    alters the values of the selected interface that was displayed in the
6509    dialog.
6510    Differs from other interfaces in that an active database connection needs
6511    to be started from the interface parameters.
6512 */
Sql_Database_change_data(Widget widget,XtPointer clientData,XtPointer callData)6513 void Sql_Database_change_data(Widget widget, XtPointer clientData, XtPointer callData)
6514 {
6515   int was_up;      // flag to restart connection with new parameters
6516   char *temp_ptr;  // temporary variable for retrieving string data from XmTextFields
6517   int cb_selected; // temporary variable for retrieving combo box selections
6518 
6519   // change to use code from db_gis.c
6520 
6521   busy_cursor(appshell);
6522   was_up=0;
6523 
6524   if (debug_level & 2)
6525   {
6526     fprintf(stderr,"Storing SQL Database interface on port %d\n",Sql_Database_port);
6527   }
6528   // determine if there is an active connection based on this interface,
6529   // if so, stop it and restart after changes have been made.
6530   if (get_device_status(Sql_Database_port) == DEVICE_IN_USE)
6531   {
6532     /* if active shutdown before changes are made */
6533     fprintf(stderr,"Device is up, disconnecting from database \n");
6534     was_up=1;
6535 
6536     // close connection
6537 
6538   }
6539 
6540 // This needs to be a unitary transaction for other interfaces as we don't
6541 // want to read/write data from an interface while its configuration is in an
6542 // inconsistent state.  In this case (SQL databases, we still need this to be
6543 // a unitary transaction in case a new connection is created while the
6544 // configuration is in an inconsistent state.
6545   begin_critical_section(&devices_lock, "interface_gui.c:Sql_Database_change_data" );
6546 
6547   // ** set the interface values needed to make a connection to a database **
6548 
6549   // hostname
6550   temp_ptr = XmTextFieldGetString(Sql_Database_host_data);
6551   xastir_snprintf(devices[Sql_Database_port].device_host_name,
6552                   sizeof(devices[Sql_Database_port].device_host_name),
6553                   "%s",
6554                   temp_ptr);
6555   XtFree(temp_ptr);
6556   (void)remove_trailing_spaces(devices[Sql_Database_port].device_host_name);
6557 
6558   //port
6559   temp_ptr = XmTextFieldGetString(Sql_Database_iport_data);
6560   devices[Sql_Database_port].sp=atoi(temp_ptr);
6561   XtFree(temp_ptr);
6562 
6563   //username
6564   temp_ptr = XmTextFieldGetString(Sql_Database_username_data);
6565   xastir_snprintf(devices[Sql_Database_port].database_username,
6566                   sizeof(devices[Sql_Database_port].database_username),
6567                   "%s",
6568                   temp_ptr);
6569   XtFree(temp_ptr);
6570   (void)remove_trailing_spaces(devices[Sql_Database_port].device_host_pswd);
6571 
6572   //password
6573   temp_ptr = XmTextFieldGetString(Sql_Database_password_data);
6574   xastir_snprintf(devices[Sql_Database_port].device_host_pswd,
6575                   sizeof(devices[Sql_Database_port].device_host_pswd),
6576                   "%s",
6577                   temp_ptr);
6578   XtFree(temp_ptr);
6579   (void)remove_trailing_spaces(devices[Sql_Database_port].device_host_pswd);
6580 
6581   // schema name
6582   temp_ptr = XmTextFieldGetString(Sql_Database_schema_name_data);
6583   xastir_snprintf(devices[Sql_Database_port].database_schema,
6584                   sizeof(devices[Sql_Database_port].database_schema),
6585                   "%s",
6586                   temp_ptr);
6587   XtFree(temp_ptr);
6588   (void)remove_trailing_spaces(devices[Sql_Database_port].database_schema);
6589 
6590   // database type
6591   cb_selected = FALSE;
6592 #ifdef USE_COMBO_BOX
6593   XtVaGetValues(Sql_Database_dbms_data,XmNselectedPosition, &cb_selected, NULL);
6594 #else
6595   // find out the value of the latest selection from the Sql_Databas_dbms_data_menu
6596   cb_selected = sddd_value;
6597 #endif
6598 
6599   if (cb_selected)
6600   {
6601     devices[Sql_Database_port].database_type = cb_selected;
6602   }
6603   else
6604   {
6605     // If no selection,
6606     // default to mysql non-spatial, unless postgis is available.
6607 #ifdef HAVE_POSTGIS
6608     devices[Sql_Database_port].database_type = DB_POSTGIS;
6609 #endif /* HAVE_POSTGIS */
6610 #ifdef HAVE_MYSQL
6611     devices[Sql_Database_port].database_type = DB_MYSQL;
6612 #endif /* HAVE_MYSQL */
6613   }
6614 
6615   // schema type
6616   cb_selected = FALSE;
6617   XtVaGetValues(Sql_Database_schema_type_data,XmNselectedPosition, &cb_selected, NULL);
6618 
6619   if (cb_selected)
6620   {
6621     devices[Sql_Database_port].database_schema_type = cb_selected;
6622   }
6623   else
6624   {
6625     // If no selection, default to simple schema.
6626     devices[Sql_Database_port].database_schema_type = XASTIR_SCHEMA_SIMPLE;
6627   }
6628 
6629   // unix socket
6630   temp_ptr = XmTextFieldGetString(Sql_Database_unix_socket_data);
6631   xastir_snprintf(devices[Sql_Database_port].database_unix_socket,
6632                   sizeof(devices[Sql_Database_port].database_unix_socket),
6633                   "%s",
6634                   temp_ptr);
6635   XtFree(temp_ptr);
6636   (void)remove_trailing_spaces(devices[Sql_Database_port].database_unix_socket);
6637 
6638   // reset the error message to a blank
6639   xastir_snprintf(devices[Sql_Database_port].database_errormessage,
6640                   sizeof(devices[Sql_Database_port].database_errormessage),
6641                   " ");
6642 
6643   // ** set additional interface values **
6644 
6645   // comment to display on interface list
6646   temp_ptr = XmTextFieldGetString(Sql_Database_comment);
6647   xastir_snprintf(devices[Sql_Database_port].comment,
6648                   sizeof(devices[Sql_Database_port].comment),
6649                   "%s",
6650                   temp_ptr);
6651   XtFree(temp_ptr);
6652   (void)remove_trailing_spaces(devices[Sql_Database_port].comment);
6653 
6654   // activate on startup
6655   if(XmToggleButtonGetState(Sql_Database_active_on_startup))
6656   {
6657     devices[Sql_Database_port].connect_on_startup=1;
6658   }
6659   else
6660   {
6661     devices[Sql_Database_port].connect_on_startup=0;
6662   }
6663 
6664   // query on startup
6665   if(XmToggleButtonGetState(Sql_Database_query_on_startup_data))
6666   {
6667     devices[Sql_Database_port].query_on_startup=1;
6668   }
6669   else
6670   {
6671     devices[Sql_Database_port].query_on_startup=0;
6672   }
6673 
6674   // allow saving data
6675   if(XmToggleButtonGetState(Sql_Database_transmit_data))
6676   {
6677     devices[Sql_Database_port].transmit_data=1;
6678   }
6679   else
6680   {
6681     devices[Sql_Database_port].transmit_data=0;
6682   }
6683 
6684   // reconnect on database connection failure
6685   if(XmToggleButtonGetState(Sql_Database_reconnect_data))
6686   {
6687     devices[Sql_Database_port].reconnect=1;
6688   }
6689   else
6690   {
6691     devices[Sql_Database_port].reconnect=0;
6692   }
6693 
6694   if (was_up)
6695   {
6696     // If the connection was allready open when we started then reconnect
6697     // and reopen the database connection with the new parameters.
6698     if (openConnection(&devices[Sql_Database_port],&connections[Sql_Database_port])==1)
6699     {
6700       port_data[Sql_Database_port].status = DEVICE_UP;
6701     }
6702     else
6703     {
6704       port_data[Sql_Database_port].status = DEVICE_ERROR;
6705     }
6706   }
6707 
6708   /* add device type */
6709   devices[Sql_Database_port].device_type=DEVICE_SQL_DATABASE;
6710 
6711   end_critical_section(&devices_lock, "interface_gui.c:Sql_Database_change_data" );
6712 
6713   // Rebuild the interface control list
6714   update_interface_list();
6715 
6716   // close the dialog
6717   Sql_Database_destroy_shell(widget,clientData,callData);
6718   if (debug_level & 2)
6719   {
6720     fprintf(stderr,"Done storing sql interface parameters\n");
6721   }
6722 }
6723 
6724 
6725 
6726 #ifndef USE_COMBO_BOX
sddd_menuCallback(Widget widget,XtPointer ptr,XtPointer callData)6727 void sddd_menuCallback(Widget widget, XtPointer ptr, XtPointer callData)
6728 {
6729   XtPointer userData;
6730 
6731   XtVaGetValues(widget, XmNuserData, &userData, NULL);
6732   //sddd_menu is zero based, constants for database types are one based.
6733   sddd_value = (int)userData + 1;
6734   if (debug_level & 4096)
6735   {
6736     fprintf(stderr,"Selected value on dbms pulldown: %d\n",sddd_value);
6737   }
6738 }
6739 #endif // USE_COMBO_BOX
6740 
6741 
6742 
6743 
6744 
6745 /* dialog to obtain connection parameters for a SQL server (MySQL/Postgresql)
6746  * database for spatialy enabled database support
6747  */
Config_sql_Database(Widget w,int config_type,int port)6748 void Config_sql_Database( Widget w, int config_type, int port)
6749 {
6750   static Widget  pane, scrollwindow, form, button_ok, button_cancel, label_dbms, label_schema_type,
6751          ihost, iport, password, unix_socket, error_message,
6752          sep, comment, username, schema_name;
6753   static Widget button_mysql_defaults;    // set form values to defaults for mysql
6754   static Widget button_postgis_defaults;  // set form values to deaults for postgresql/postgis
6755   Dimension width, height;
6756   int defaults_set;  // Have defaults been set on form for new interface?
6757   // Used to make only a single set defaults call when
6758   // support for multiple types of dbms are available.
6759 
6760   Atom delw;
6761   char temp[40];
6762   XmString cb_item;
6763   XmString *cb_items[2];
6764   int x;
6765 #ifndef USE_COMBO_BOX
6766   int i; // loop counter
6767   Arg args[12]; // available for XtSetArguments
6768   char buf[18];
6769   char *tmp;
6770 #endif // !USE_COMBO_BOX
6771   /*
6772   // configuration parameters for a sql server database
6773   char   database_username[20];                 // username to use to connect to database
6774                                                 // default xastir
6775   int    database_type;                         // type of dbms (posgresql, mysql, etc)
6776                                                 // default mysql
6777   char   database_schema[20];                   // name of database or schema to use
6778                                                 // default xastir
6779   char   database_errormessage[255];            // most recent error message from
6780                                                    attempting to make a
6781                                                    connection with using this descriptor.
6782   int    database_schema_type;         // table structures to use in the database
6783                                            A database schema could contain both APRSWorld
6784                                            and XASTIR table structures, but a separate database
6785                                            descriptor should be defined for each.
6786                                        // default simple
6787   char   database_unix_socket[255];             // MySQL - unix socket parameter (path and
6788                                                    filename)
6789   // device_host_name = hostname for database server
6790   // sp = port on which to connect to database server (Not database_port)
6791   // device_host_password =  password to use to connect to database -- security issue needs to be addressed
6792   */
6793 
6794   if(!config_Sql_Database_dialog)
6795   {
6796     // port is position in xastir interface list, not tcp port on which to connect
6797     Sql_Database_port=port;
6798 
6799     // SQL Server Database
6800     config_Sql_Database_dialog = XtVaCreatePopupShell("SQL Server Database",
6801                                  xmDialogShellWidgetClass, appshell,
6802                                  XmNdeleteResponse,        XmDESTROY,
6803                                  XmNdefaultPosition,       FALSE,
6804                                  XmNfontList, fontlist1,
6805                                  NULL);
6806 
6807     pane = XtVaCreateWidget("Config_Database pane",xmPanedWindowWidgetClass, config_Sql_Database_dialog,
6808                             XmNbackground, colors[0xff],
6809                             NULL);
6810 
6811     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
6812                                            xmScrolledWindowWidgetClass,
6813                                            pane,
6814                                            XmNscrollingPolicy, XmAUTOMATIC,
6815                                            NULL);
6816 
6817     form =  XtVaCreateWidget("Config_Database form",
6818                              xmFormWidgetClass,
6819                              scrollwindow,
6820                              XmNfractionBase,    13,
6821                              XmNbackground,      colors[0xff],
6822                              XmNautoUnmanage,    FALSE,
6823                              XmNshadowThickness, 1,
6824                              NULL);
6825 
6826     // Activate on startup
6827     Sql_Database_active_on_startup  = XtVaCreateManagedWidget(langcode("UNIOP00011"),xmToggleButtonWidgetClass,form,
6828                                       XmNnavigationType,   XmTAB_GROUP,
6829                                       XmNtraversalOn,      TRUE,
6830                                       XmNtopAttachment,    XmATTACH_FORM,
6831                                       XmNtopOffset,        10,
6832                                       XmNbottomAttachment, XmATTACH_NONE,
6833                                       XmNleftAttachment,   XmATTACH_FORM,
6834                                       XmNleftOffset,       10,
6835                                       XmNrightAttachment,  XmATTACH_NONE,
6836                                       XmNbackground,       colors[0xff],
6837                                       XmNfontList, fontlist1,
6838                                       NULL);
6839 
6840     // DMBS
6841     label_dbms = XtVaCreateManagedWidget("Database:",xmLabelWidgetClass, form,
6842                                          XmNtopAttachment,     XmATTACH_FORM,
6843                                          XmNtopOffset,         15,
6844                                          XmNbottomAttachment,  XmATTACH_NONE,
6845                                          XmNleftAttachment,    XmATTACH_WIDGET,
6846                                          XmNleftWidget,        Sql_Database_active_on_startup,
6847                                          XmNleftOffset,        10,
6848                                          XmNrightAttachment,   XmATTACH_NONE,
6849                                          XmNbackground,        colors[0xff],
6850                                          XmNfontList, fontlist1,
6851                                          NULL);
6852     // Combo box to pick dbms
6853     cb_items [0] = (XmString *) XtMalloc ( sizeof (XmString) * 4 );
6854     // Combo box items are defined by xastir_dbms_type, defined in db_gis.c
6855     cb_items[0][0] = XmStringCreateLtoR( &xastir_dbms_type[1][0], XmFONTLIST_DEFAULT_TAG);
6856     cb_items[0][1] = XmStringCreateLtoR( &xastir_dbms_type[2][0], XmFONTLIST_DEFAULT_TAG);
6857     cb_items[0][2] = XmStringCreateLtoR( &xastir_dbms_type[3][0], XmFONTLIST_DEFAULT_TAG);
6858     // mysql
6859     //cb_items[0][0] = XmStringCreateLtoR("MySQL (lat/long)", XmFONTLIST_DEFAULT_TAG);
6860     // postgresql
6861     //cb_items[0][1] = XmStringCreateLtoR("Postgres/Postgis", XmFONTLIST_DEFAULT_TAG);
6862     // mysql with spatial extensions
6863     //cb_items[0][2] = XmStringCreateLtoR("MySQL (spatial)", XmFONTLIST_DEFAULT_TAG);
6864     cb_items[0][3] = NULL;
6865 #ifdef USE_COMBO_BOX
6866     Sql_Database_dbms_data = XtVaCreateManagedWidget("select dbms", xmComboBoxWidgetClass, form,
6867                              XmNtopAttachment,     XmATTACH_FORM,
6868                              XmNtopOffset,         5,
6869                              XmNbottomAttachment,  XmATTACH_NONE,
6870                              XmNleftAttachment,    XmATTACH_WIDGET,
6871                              XmNleftWidget,        label_dbms,
6872                              XmNleftOffset,        1,
6873                              XmNrightAttachment,   XmATTACH_NONE,
6874                              XmNitems,             cb_items[0],
6875                              XmNitemCount,         3,
6876                              XmNnavigationType,    XmTAB_GROUP,
6877                              XmNcomboBoxType,      XmDROP_DOWN_LIST,
6878                              XmNpositionMode,      XmONE_BASED,
6879                              XmNmatchBehavior,     XmQUICK_NAVIGATE,
6880                              MY_FOREGROUND_COLOR,
6881                              MY_BACKGROUND_COLOR,
6882                              XmNfontList, fontlist1,
6883                              NULL);
6884     sddd_widget = Sql_Database_dbms_data;
6885 #else
6886     // lesstif, at least as of version 0.95 in 2008, doesn't fully support combo boxes.
6887     //
6888     // lesstif 0.94 doesn't support adding items to the list on creation through XmNitems
6889     // lesstif 0.94 combo boxes don't have means to set currently selected value
6890     // or to retrieve currently selected value.
6891     //
6892     // Need to replace combo boxes with a pull down menu when lesstif is used.
6893     // See xpdf's  XPDFViewer.cc/XPDFViewer.h for an example.
6894     //
6895     // Fake a combo box with a menu, as done by xpdf in in XPDFViewer.cc
6896     //
6897     // create widgets and populate menu
6898     // sddd_ abbreviates name of single control that is being replaced: Sql_Database_dbms_data
6899     // sddd_value  // numberic value for the database dbms type
6900     // sddd_button  // picklist item
6901     // sddd_menu  // menu that acts as the picklist of dbms types
6902     x = 0;
6903     XtSetArg(args[x], XmNmarginWidth, 0);
6904     ++x;
6905     XtSetArg(args[x], XmNmarginHeight, 0);
6906     ++x;
6907     sddd_menuPane = XmCreatePulldownMenu(form,"sddd_menuPane", args, x);
6908     //sddd_menu is zero based, constants for database types are one based.
6909     //sddd_value is set to match constants in callback.
6910     for (i=0; i<3; i++)
6911     {
6912       x = 0;
6913       XmStringGetLtoR(cb_items[0][i],XmFONTLIST_DEFAULT_TAG,&tmp);
6914       XtSetArg(args[x], XmNlabelString, cb_items[0][i]);
6915       x++;
6916       XtSetArg(args[x], XmNuserData, (XtPointer)i);
6917       x++;
6918       XtSetArg(args[x], XmNfontList, fontlist1);
6919       x++;
6920       sprintf(buf,"button%d",i);
6921       sddd_button = XmCreatePushButton(sddd_menuPane, buf, args, x);
6922       XtManageChild(sddd_button);
6923       XtAddCallback(sddd_button, XmNactivateCallback, sddd_menuCallback, config_Sql_Database_dialog);
6924       sddd_buttons[i] = sddd_button;
6925     }
6926     x = 0;
6927     XtSetArg(args[x], XmNleftAttachment, XmATTACH_WIDGET);
6928     ++x;
6929     XtSetArg(args[x], XmNleftWidget, label_dbms);
6930     ++x;
6931     XtSetArg(args[x], XmNtopAttachment, XmATTACH_FORM);
6932     ++x;
6933     XtSetArg(args[x], XmNmarginWidth, 0);
6934     ++x;
6935     XtSetArg(args[x], XmNmarginHeight, 0);
6936     ++x;
6937     XtSetArg(args[x], XmNtopOffset, 7);
6938     ++x;
6939     XtSetArg(args[x], XmNleftOffset, 1);
6940     ++x;
6941     XtSetArg(args[x], XmNsubMenuId, sddd_menuPane);
6942     ++x;
6943     sddd_menu = XmCreateOptionMenu(form, "sddd_Menu", args, x);
6944     XtManageChild(sddd_menu);
6945     sddd_widget = sddd_menu;
6946 #endif
6947     // free up the XmStrings used to create the picklist
6948     x=0;
6949     while ( cb_items[0][x] )
6950     {
6951       XmStringFree ( cb_items[0][x++] );
6952     }
6953     x=0;
6954     XtFree ( (char *) cb_items[0] );
6955 
6956     // *** when localizing these strings propagate the localizations to
6957     // the set default functions above and to constants for picklist
6958     // selection recognition.  ***
6959     //cb_item = XmStringCreateLtoR(&xastir_dbms_type[DB_MYSQL][0], XmFONTLIST_DEFAULT_TAG);
6960     //XmComboBoxAddItem(Sql_Database_dbms_data,cb_item,1,1);
6961     //XmStringFree(cb_item);
6962     //cb_item = XmStringCreateLtoR(&xastir_dbms_type[DB_POSTGIS][0], XmFONTLIST_DEFAULT_TAG);
6963     //XmComboBoxAddItem(Sql_Database_dbms_data,cb_item,2,1);
6964     //XmStringFree(cb_item);
6965     //cb_item = XmStringCreateLtoR(&xastir_dbms_type[DB_MYSQL_SPATIAL][0], XmFONTLIST_DEFAULT_TAG);
6966     //XmComboBoxAddItem(Sql_Database_dbms_data,cb_item,3,1);
6967     //XmStringFree(cb_item);
6968 
6969     // Schema Type
6970     label_schema_type = XtVaCreateManagedWidget("With Tables for",xmLabelWidgetClass, form,
6971                         XmNtopAttachment,    XmATTACH_FORM,
6972                         XmNtopOffset,        15,
6973                         XmNbottomAttachment, XmATTACH_NONE,
6974                         XmNleftAttachment,   XmATTACH_WIDGET,
6975                         XmNleftWidget,       sddd_widget,
6976                         XmNleftOffset,       10,
6977                         XmNrightAttachment,  XmATTACH_NONE,
6978                         XmNbackground,       colors[0xff],
6979                         XmNfontList, fontlist1,
6980                         NULL);
6981     // Combo box to pick schema
6982     Sql_Database_schema_type_data = XtVaCreateManagedWidget("Tables to use", xmComboBoxWidgetClass, form,
6983                                     XmNtopAttachment,    XmATTACH_FORM,
6984                                     XmNtopOffset,        5,
6985                                     XmNbottomAttachment, XmATTACH_NONE,
6986                                     XmNleftAttachment,   XmATTACH_WIDGET,
6987                                     XmNleftWidget,       label_schema_type,
6988                                     XmNleftOffset,       1,
6989                                     XmNrightAttachment,  XmATTACH_NONE,
6990                                     XmNnavigationType,   XmTAB_GROUP,
6991                                     XmNcomboBoxType,     XmDROP_DOWN_LIST,
6992                                     XmNpositionMode,     XmONE_BASED,
6993                                     XmNvisibleItemCount, 3,
6994                                     MY_FOREGROUND_COLOR,
6995                                     MY_BACKGROUND_COLOR,
6996                                     XmNfontList, fontlist1,
6997                                     NULL);
6998     // *** need to add constants for order and localization ***
6999     // ? use an array - schm_typ[XASTIR_SCHEMA_SIMPLE]=langcode("codeforxastirsimple").... ?
7000     // ?or some other form of key-value pairs?
7001 
7002     // simple
7003     //cb_item = XmStringCreateLtoR("Xastir - simple", XmFONTLIST_DEFAULT_TAG);
7004     cb_item = XmStringCreateLtoR(&xastir_schema_type[XASTIR_SCHEMA_SIMPLE][0], XmFONTLIST_DEFAULT_TAG);
7005     XmComboBoxAddItem(Sql_Database_schema_type_data,cb_item,1,1);
7006     XmStringFree(cb_item);
7007 
7008     /* not yet implemented
7009             // aprs world
7010             cb_item = XmStringCreateLtoR("APRSWorld", XmFONTLIST_DEFAULT_TAG);
7011             XmComboBoxAddItem(cad_line_style_data,cb_item,2,1);
7012             XmStringFree(cb_item);
7013 
7014             // full
7015             cb_item = XmStringCreateLtoR("Xastir - full", XmFONTLIST_DEFAULT_TAG);
7016             XmComboBoxAddItem(cad_line_style_data,cb_item,2,1);
7017             XmStringFree(cb_item);
7018 
7019             // cad
7020             cb_item = XmStringCreateLtoR("Xastir - CAD", XmFONTLIST_DEFAULT_TAG);
7021             XmComboBoxAddItem(cad_line_style_data,cb_item,2,1);
7022             XmStringFree(cb_item);
7023     */
7024 
7025     // Store data
7026     Sql_Database_transmit_data  = XtVaCreateManagedWidget("Store incoming data",xmToggleButtonWidgetClass,form,
7027                                   XmNnavigationType,   XmTAB_GROUP,
7028                                   XmNtraversalOn,      TRUE,
7029                                   XmNtopAttachment,    XmATTACH_WIDGET,
7030                                   XmNtopWidget,        sddd_widget,
7031                                   XmNtopOffset,        5,
7032                                   XmNbottomAttachment, XmATTACH_NONE,
7033                                   XmNleftAttachment,   XmATTACH_FORM,
7034                                   XmNleftOffset,       10,
7035                                   XmNrightAttachment,  XmATTACH_NONE,
7036                                   XmNbackground,       colors[0xff],
7037                                   XmNfontList, fontlist1,
7038                                   NULL);
7039 
7040     // Retrieve data on start
7041     Sql_Database_query_on_startup_data  = XtVaCreateManagedWidget("Load data on start",xmToggleButtonWidgetClass,form,
7042                                           XmNnavigationType,   XmTAB_GROUP,
7043                                           XmNtraversalOn,      TRUE,
7044                                           XmNtopAttachment,    XmATTACH_WIDGET,
7045                                           XmNtopWidget,        sddd_widget,
7046                                           XmNtopOffset,        5,
7047                                           XmNbottomAttachment, XmATTACH_NONE,
7048                                           XmNleftAttachment,   XmATTACH_WIDGET,
7049                                           XmNleftWidget,       Sql_Database_transmit_data,
7050                                           XmNleftOffset,       15,
7051                                           XmNrightAttachment,  XmATTACH_NONE,
7052                                           XmNbackground,       colors[0xff],
7053                                           XmNfontList, fontlist1,
7054                                           NULL);
7055 
7056     // put retieve now button here.
7057 
7058     // hostname
7059     ihost = XtVaCreateManagedWidget(langcode("WPUPCFID02"),xmLabelWidgetClass, form,
7060                                     XmNtopAttachment,    XmATTACH_WIDGET,
7061                                     XmNtopWidget,        Sql_Database_transmit_data,
7062                                     XmNtopOffset,        5,
7063                                     XmNbottomAttachment, XmATTACH_NONE,
7064                                     XmNleftAttachment,   XmATTACH_FORM,
7065                                     XmNleftOffset,       10,
7066                                     XmNrightAttachment,  XmATTACH_NONE,
7067                                     XmNbackground,       colors[0xff],
7068                                     XmNfontList, fontlist1,
7069                                     NULL);
7070     Sql_Database_host_data = XtVaCreateManagedWidget("Config_Database host_data", xmTextFieldWidgetClass, form,
7071                              XmNnavigationType,   XmTAB_GROUP,
7072                              XmNtraversalOn,      TRUE,
7073                              XmNeditable,         TRUE,
7074                              XmNcursorPositionVisible, TRUE,
7075                              XmNsensitive,        TRUE,
7076                              XmNshadowThickness,  1,
7077                              XmNcolumns,          55,
7078                              XmNmaxLength,        255,
7079                              XmNbackground,       colors[0x0f],
7080                              XmNtopAttachment,    XmATTACH_WIDGET,
7081                              XmNtopWidget,        Sql_Database_transmit_data,
7082                              XmNbottomAttachment, XmATTACH_NONE,
7083                              XmNleftAttachment,   XmATTACH_WIDGET,
7084                              XmNleftWidget,       ihost,
7085                              XmNleftOffset,       1,
7086                              XmNrightAttachment,  XmATTACH_NONE,
7087                              XmNfontList, fontlist1,
7088                              NULL);
7089 
7090     // tcp port for server, not xastir interface port
7091     // port
7092     iport = XtVaCreateManagedWidget(langcode("WPUPCFID03"),xmLabelWidgetClass, form,
7093                                     XmNtopAttachment,    XmATTACH_WIDGET,
7094                                     XmNtopWidget,        Sql_Database_transmit_data,
7095                                     XmNtopOffset,        5,
7096                                     XmNbottomAttachment, XmATTACH_NONE,
7097                                     XmNleftAttachment,   XmATTACH_WIDGET,
7098                                     XmNleftWidget,       Sql_Database_host_data,
7099                                     XmNleftOffset,       10,
7100                                     XmNrightAttachment,  XmATTACH_NONE,
7101                                     XmNbackground,       colors[0xff],
7102                                     XmNfontList, fontlist1,
7103                                     NULL);
7104 
7105     Sql_Database_iport_data = XtVaCreateManagedWidget("Config_Database port_data", xmTextFieldWidgetClass, form,
7106                               XmNnavigationType,   XmTAB_GROUP,
7107                               XmNtraversalOn,      TRUE,
7108                               XmNeditable,         TRUE,
7109                               XmNcursorPositionVisible, TRUE,
7110                               XmNsensitive,        TRUE,
7111                               XmNshadowThickness,  1,
7112                               XmNcolumns,          5,
7113                               XmNmaxLength,        6,
7114                               XmNbackground,       colors[0x0f],
7115                               XmNtopAttachment,    XmATTACH_WIDGET,
7116                               XmNtopWidget,        Sql_Database_transmit_data,
7117                               XmNbottomAttachment, XmATTACH_NONE,
7118                               XmNleftAttachment,   XmATTACH_WIDGET,
7119                               XmNleftWidget,       iport,
7120                               XmNleftOffset,       1,
7121                               XmNrightAttachment,  XmATTACH_NONE,
7122                               XmNfontList, fontlist1,
7123                               NULL);
7124 
7125     // Username
7126     username = XtVaCreateManagedWidget("Username",xmLabelWidgetClass, form,
7127                                        XmNtopAttachment,    XmATTACH_WIDGET,
7128                                        XmNtopWidget,        Sql_Database_host_data,
7129                                        XmNtopOffset,        5,
7130                                        XmNbottomAttachment, XmATTACH_NONE,
7131                                        XmNleftAttachment,   XmATTACH_FORM,
7132                                        XmNleftOffset,       10,
7133                                        XmNrightAttachment,  XmATTACH_NONE,
7134                                        XmNbackground,       colors[0xff],
7135                                        XmNfontList, fontlist1,
7136                                        NULL);
7137 
7138     Sql_Database_username_data = XtVaCreateManagedWidget("Config_Database username_data", xmTextFieldWidgetClass, form,
7139                                  XmNnavigationType,   XmTAB_GROUP,
7140                                  XmNtraversalOn,      TRUE,
7141                                  XmNeditable,         TRUE,
7142                                  XmNcursorPositionVisible, TRUE,
7143                                  XmNsensitive,        TRUE,
7144                                  XmNshadowThickness,  1,
7145                                  XmNcolumns,          15,
7146                                  XmNmaxLength,        25,
7147                                  XmNbackground,       colors[0x0f],
7148                                  XmNtopAttachment,    XmATTACH_WIDGET,
7149                                  XmNtopWidget,        Sql_Database_host_data,
7150                                  XmNbottomAttachment, XmATTACH_NONE,
7151                                  XmNleftAttachment,   XmATTACH_WIDGET,
7152                                  XmNleftWidget,       username,
7153                                  XmNleftOffset,       1,
7154                                  XmNrightAttachment,  XmATTACH_NONE,
7155                                  XmNfontList, fontlist1,
7156                                  NULL);
7157     // Password
7158     password = XtVaCreateManagedWidget("Password",xmLabelWidgetClass, form,
7159                                        XmNtopAttachment,    XmATTACH_WIDGET,
7160                                        XmNtopWidget,        Sql_Database_host_data,
7161                                        XmNtopOffset,        5,
7162                                        XmNbottomAttachment, XmATTACH_NONE,
7163                                        XmNleftAttachment,   XmATTACH_WIDGET,
7164                                        XmNleftWidget,       Sql_Database_username_data,
7165                                        XmNleftOffset,       10,
7166                                        XmNrightAttachment,  XmATTACH_NONE,
7167                                        XmNbackground,       colors[0xff],
7168                                        XmNfontList, fontlist1,
7169                                        NULL);
7170 
7171     Sql_Database_password_data = XtVaCreateManagedWidget("Config_Database password_data", xmTextFieldWidgetClass, form,
7172                                  XmNnavigationType,   XmTAB_GROUP,
7173                                  XmNtraversalOn,      TRUE,
7174                                  XmNeditable,         TRUE,
7175                                  XmNcursorPositionVisible, TRUE,
7176                                  XmNsensitive,        TRUE,
7177                                  XmNshadowThickness,  1,
7178                                  XmNcolumns,          15,
7179                                  XmNmaxLength,        20,
7180                                  XmNbackground,       colors[0x0f],
7181                                  XmNleftAttachment,   XmATTACH_WIDGET,
7182                                  XmNleftWidget,       password,
7183                                  XmNleftOffset,       1,
7184                                  XmNtopAttachment,    XmATTACH_WIDGET,
7185                                  XmNtopWidget,        Sql_Database_host_data,
7186                                  XmNbottomAttachment, XmATTACH_NONE,
7187                                  XmNrightAttachment,  XmATTACH_NONE,
7188                                  XmNfontList, fontlist1,
7189                                  NULL);
7190     //  Schema/Database name
7191     schema_name = XtVaCreateManagedWidget("Schema/Database name",xmLabelWidgetClass, form,
7192                                           XmNtopAttachment,    XmATTACH_WIDGET,
7193                                           XmNtopWidget,        Sql_Database_username_data,
7194                                           XmNtopOffset,        10,
7195                                           XmNbottomAttachment, XmATTACH_NONE,
7196                                           XmNleftAttachment,   XmATTACH_FORM,
7197                                           XmNleftOffset,       10,
7198                                           XmNrightAttachment,  XmATTACH_NONE,
7199                                           XmNbackground,       colors[0xff],
7200                                           XmNfontList, fontlist1,
7201                                           NULL);
7202 
7203     Sql_Database_schema_name_data= XtVaCreateManagedWidget("Config_Database schema_name_data", xmTextFieldWidgetClass, form,
7204                                    XmNnavigationType,   XmTAB_GROUP,
7205                                    XmNtraversalOn,      TRUE,
7206                                    XmNeditable,         TRUE,
7207                                    XmNcursorPositionVisible, TRUE,
7208                                    XmNsensitive,        TRUE,
7209                                    XmNshadowThickness,  1,
7210                                    XmNcolumns,          25,
7211                                    XmNmaxLength,        50,
7212                                    XmNbackground,       colors[0x0f],
7213                                    XmNleftAttachment,   XmATTACH_WIDGET,
7214                                    XmNleftWidget,       schema_name,
7215                                    XmNleftOffset,       1,
7216                                    XmNtopAttachment,    XmATTACH_WIDGET,
7217                                    XmNtopWidget,        Sql_Database_username_data,
7218                                    XmNtopOffset,        5,
7219                                    XmNbottomAttachment, XmATTACH_NONE,
7220                                    XmNrightAttachment,  XmATTACH_NONE,
7221                                    XmNfontList, fontlist1,
7222                                    NULL);
7223 
7224     // MySQL unix socket
7225     unix_socket = XtVaCreateManagedWidget("MySQL unix socket",xmLabelWidgetClass, form,
7226                                           XmNtopAttachment,    XmATTACH_WIDGET,
7227                                           XmNtopWidget,        Sql_Database_username_data,
7228                                           XmNtopOffset,        10,
7229                                           XmNbottomAttachment, XmATTACH_NONE,
7230                                           XmNleftAttachment,   XmATTACH_WIDGET,
7231                                           XmNleftWidget,       Sql_Database_schema_name_data,
7232                                           XmNleftOffset,       10,
7233                                           XmNrightAttachment,  XmATTACH_NONE,
7234                                           XmNbackground,       colors[0xff],
7235                                           XmNfontList, fontlist1,
7236                                           NULL);
7237 
7238     Sql_Database_unix_socket_data = XtVaCreateManagedWidget("Config_Database unix_socket_data", xmTextFieldWidgetClass, form,
7239                                     XmNnavigationType,   XmTAB_GROUP,
7240                                     XmNtraversalOn,      TRUE,
7241                                     XmNeditable,         TRUE,
7242                                     XmNcursorPositionVisible, TRUE,
7243                                     XmNsensitive,        TRUE,
7244                                     XmNshadowThickness,  1,
7245                                     XmNcolumns,          30,
7246                                     XmNmaxLength,        190,
7247                                     XmNbackground,       colors[0x0f],
7248                                     XmNleftAttachment,   XmATTACH_WIDGET,
7249                                     XmNleftWidget,       unix_socket,
7250                                     XmNleftOffset,       1,
7251                                     XmNtopAttachment,    XmATTACH_WIDGET,
7252                                     XmNtopWidget,        Sql_Database_username_data,
7253                                     XmNtopOffset,        5,
7254                                     XmNbottomAttachment, XmATTACH_NONE,
7255                                     XmNrightAttachment,  XmATTACH_NONE,
7256                                     XmNfontList, fontlist1,
7257                                     NULL);
7258 
7259     // comment
7260     comment = XtVaCreateManagedWidget(langcode("WPUPCFS017"),xmLabelWidgetClass, form,
7261                                       XmNtopAttachment,    XmATTACH_WIDGET,
7262                                       XmNtopWidget,        Sql_Database_schema_name_data,
7263                                       XmNtopOffset,        10,
7264                                       XmNbottomAttachment, XmATTACH_NONE,
7265                                       XmNleftAttachment,   XmATTACH_FORM,
7266                                       XmNleftOffset,       10,
7267                                       XmNrightAttachment,  XmATTACH_NONE,
7268                                       XmNbackground,       colors[0xff],
7269                                       XmNfontList, fontlist1,
7270                                       NULL);
7271     Sql_Database_comment = XtVaCreateManagedWidget("Config_Database comment", xmTextFieldWidgetClass, form,
7272                            XmNnavigationType,   XmTAB_GROUP,
7273                            XmNtraversalOn,      TRUE,
7274                            XmNeditable,         TRUE,
7275                            XmNcursorPositionVisible, TRUE,
7276                            XmNsensitive,        TRUE,
7277                            XmNshadowThickness,  1,
7278                            XmNcolumns,          25,
7279                            XmNwidth,            ((25*7)+2),
7280                            XmNmaxLength,        49,
7281                            XmNbackground,       colors[0x0f],
7282                            XmNtopAttachment,    XmATTACH_WIDGET,
7283                            XmNtopWidget,        Sql_Database_schema_name_data,
7284                            XmNtopOffset,        5,
7285                            XmNbottomAttachment, XmATTACH_NONE,
7286                            XmNleftAttachment,   XmATTACH_WIDGET,
7287                            XmNleftWidget,       comment,
7288                            XmNrightAttachment,  XmATTACH_NONE,
7289                            XmNfontList, fontlist1,
7290                            NULL);
7291 
7292     // reconnect on network failure
7293     Sql_Database_reconnect_data = XtVaCreateManagedWidget(langcode("WPUPCFID11"),xmToggleButtonWidgetClass,form,
7294                                   XmNnavigationType,   XmTAB_GROUP,
7295                                   XmNtraversalOn,      TRUE,
7296                                   XmNtopAttachment,    XmATTACH_WIDGET,
7297                                   XmNtopWidget,        Sql_Database_comment,
7298                                   XmNtopOffset,        5,
7299                                   XmNbottomAttachment, XmATTACH_NONE,
7300                                   XmNleftAttachment,   XmATTACH_FORM,
7301                                   XmNleftOffset,       10,
7302                                   XmNrightAttachment,  XmATTACH_NONE,
7303                                   XmNbackground,       colors[0xff],
7304                                   XmNfontList, fontlist1,
7305                                   NULL);
7306 
7307     // most recent error
7308     error_message = XtVaCreateManagedWidget("Most Recent Error:",xmLabelWidgetClass, form,
7309                                             XmNtopAttachment,    XmATTACH_WIDGET,
7310                                             XmNtopWidget,        Sql_Database_reconnect_data,
7311                                             XmNtopOffset,        10,
7312                                             XmNbottomAttachment, XmATTACH_NONE,
7313                                             XmNleftAttachment,   XmATTACH_FORM,
7314                                             XmNleftOffset,       10,
7315                                             XmNrightAttachment,  XmATTACH_NONE,
7316                                             XmNbackground,       colors[0xff],
7317                                             XmNfontList, fontlist1,
7318                                             NULL);
7319     // error message isn't editable and isn't saved
7320     Sql_Database_errormessage_data = XtVaCreateManagedWidget("Config_Database error_message", xmTextFieldWidgetClass, form,
7321                                      XmNnavigationType,   XmTAB_GROUP,
7322                                      XmNtraversalOn,      TRUE,
7323                                      XmNeditable,         FALSE,
7324                                      XmNcursorPositionVisible, TRUE,
7325                                      XmNsensitive,        TRUE,
7326                                      XmNshadowThickness,  1,
7327                                      XmNcolumns,          79,
7328                                      XmNwidth,            ((79*7)+2),
7329                                      XmNmaxLength,        255,
7330                                      XmNbackground,       colors[0x0f],
7331                                      XmNtopAttachment,    XmATTACH_WIDGET,
7332                                      XmNtopWidget,        Sql_Database_reconnect_data,
7333                                      XmNtopOffset,        5,
7334                                      XmNbottomAttachment, XmATTACH_NONE,
7335                                      XmNleftAttachment,   XmATTACH_WIDGET,
7336                                      XmNleftWidget,       error_message,
7337                                      XmNrightAttachment,  XmATTACH_NONE,
7338                                      XmNfontList, fontlist1,
7339                                      NULL);
7340 
7341     // separator line
7342     sep = XtVaCreateManagedWidget("Config_Database sep", xmSeparatorGadgetClass,form,
7343                                   XmNorientation,      XmHORIZONTAL,
7344                                   XmNtopAttachment,    XmATTACH_WIDGET,
7345                                   XmNtopWidget,        Sql_Database_errormessage_data,
7346                                   XmNtopOffset,        5,
7347                                   XmNbottomAttachment, XmATTACH_NONE,
7348                                   XmNleftAttachment,   XmATTACH_FORM,
7349                                   XmNrightAttachment,  XmATTACH_FORM,
7350                                   XmNbackground,       colors[0xff],
7351                                   XmNfontList, fontlist1,
7352                                   NULL);
7353 
7354     // button: MySQL Defaults
7355     button_mysql_defaults = XtVaCreateManagedWidget("MySQL Defaults",xmPushButtonGadgetClass, form,
7356                             XmNnavigationType,   XmTAB_GROUP,
7357                             XmNtraversalOn,      TRUE,
7358                             XmNtopAttachment,    XmATTACH_WIDGET,
7359                             XmNtopWidget,        sep,
7360                             XmNtopOffset,        10,
7361                             XmNbottomAttachment, XmATTACH_FORM,
7362                             XmNbottomOffset,     5,
7363                             XmNleftAttachment,   XmATTACH_POSITION,
7364                             XmNleftPosition,     1,
7365                             XmNrightAttachment,  XmATTACH_POSITION,
7366                             XmNrightPosition,    3,
7367                             XmNbackground,       colors[0xff],
7368                             XmNfontList, fontlist1,
7369                             NULL);
7370     // button: Postgis Defaults
7371     button_postgis_defaults = XtVaCreateManagedWidget("Postgis Defaults",xmPushButtonGadgetClass, form,
7372                               XmNnavigationType,   XmTAB_GROUP,
7373                               XmNtraversalOn,      TRUE,
7374                               XmNtopAttachment,    XmATTACH_WIDGET,
7375                               XmNtopWidget,        sep,
7376                               XmNtopOffset,        10,
7377                               XmNbottomAttachment, XmATTACH_FORM,
7378                               XmNbottomOffset,     5,
7379                               XmNleftAttachment,   XmATTACH_POSITION,
7380                               XmNleftPosition,     4,
7381                               XmNrightAttachment,  XmATTACH_POSITION,
7382                               XmNrightPosition,    6,
7383                               XmNbackground,       colors[0xff],
7384                               XmNfontList, fontlist1,
7385                               NULL);
7386     // button: OK
7387     button_ok = XtVaCreateManagedWidget(langcode("UNIOP00001"),xmPushButtonGadgetClass, form,
7388                                         XmNnavigationType,   XmTAB_GROUP,
7389                                         XmNtraversalOn,      TRUE,
7390                                         XmNtopAttachment,    XmATTACH_WIDGET,
7391                                         XmNtopWidget,        sep,
7392                                         XmNtopOffset,        10,
7393                                         XmNbottomAttachment, XmATTACH_FORM,
7394                                         XmNbottomOffset,     5,
7395                                         XmNleftAttachment,   XmATTACH_POSITION,
7396                                         XmNleftPosition,     7,
7397                                         XmNrightAttachment,  XmATTACH_POSITION,
7398                                         XmNrightPosition,    9,
7399                                         XmNbackground,       colors[0xff],
7400                                         XmNfontList, fontlist1,
7401                                         NULL);
7402     // button: Cancel
7403     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
7404                                             XmNnavigationType,   XmTAB_GROUP,
7405                                             XmNtraversalOn,      TRUE,
7406                                             XmNtopAttachment,    XmATTACH_WIDGET,
7407                                             XmNtopWidget,        sep,
7408                                             XmNtopOffset,        10,
7409                                             XmNbottomAttachment, XmATTACH_FORM,
7410                                             XmNbottomOffset,     5,
7411                                             XmNleftAttachment,   XmATTACH_POSITION,
7412                                             XmNleftPosition,     10,
7413                                             XmNrightAttachment,  XmATTACH_POSITION,
7414                                             XmNrightPosition,    12,
7415                                             XmNbackground,       colors[0xff],
7416                                             XmNfontList, fontlist1,
7417                                             NULL);
7418 
7419     XtSetSensitive(button_mysql_defaults,FALSE);
7420 #ifdef HAVE_MYSQL
7421     XtSetSensitive(button_mysql_defaults,TRUE);
7422     XtAddCallback(button_mysql_defaults,
7423                   XmNactivateCallback, Sql_Database_set_defaults_mysql, config_Sql_Database_dialog);
7424 #endif /* HAVE_MYSQL */
7425     XtSetSensitive(button_postgis_defaults,FALSE);
7426 #ifdef HAVE_POSTGIS
7427     XtSetSensitive(button_postgis_defaults,TRUE);
7428     XtAddCallback(button_postgis_defaults,
7429                   XmNactivateCallback, Sql_Database_set_defaults_postgis, config_Sql_Database_dialog);
7430 #endif /* HAVE_POSTGIS */
7431     XtAddCallback(button_ok,
7432                   XmNactivateCallback, Sql_Database_change_data, config_Sql_Database_dialog);
7433     XtAddCallback(button_cancel,
7434                   XmNactivateCallback, Sql_Database_destroy_shell, config_Sql_Database_dialog);
7435 
7436     pos_dialog(config_Sql_Database_dialog);
7437 
7438     delw = XmInternAtom(XtDisplay(config_Sql_Database_dialog),"WM_DELETE_WINDOW", FALSE);
7439     XmAddWMProtocolCallback(config_Sql_Database_dialog,
7440                             delw, Sql_Database_destroy_shell, (XtPointer)config_Sql_Database_dialog);
7441 
7442     if (config_type==0)
7443     {
7444       /* first time port */
7445       // Default settings for a new interface.
7446       defaults_set = 0;
7447 #ifdef HAVE_MYSQL
7448       Sql_Database_set_defaults_mysql(config_Sql_Database_dialog,NULL,NULL);
7449       defaults_set = 1;
7450 #endif /* HAVE_MYSQL */
7451 #ifdef HAVE_POSTGIS
7452       if (defaults_set==0)
7453       {
7454         // mysql support not available, use postgis
7455         Sql_Database_set_defaults_postgis(config_Sql_Database_dialog,NULL,NULL);
7456       }
7457 #endif /* HAVE_POSTGIS */
7458     }
7459     else
7460     {
7461       /* reconfigure an existing interface */
7462 
7463 // why critical section here?  We are reading data from an existing configuration,
7464 // not changing the configuration while the interface might be in use.
7465       begin_critical_section(&devices_lock, "interface_gui.c:Config_sql_Database" );
7466 
7467       // *** need to look up localized string for database_type ***
7468       cb_item = XmStringCreateLtoR(&xastir_dbms_type[devices[Sql_Database_port].database_type][0], XmFONTLIST_DEFAULT_TAG);
7469 #ifdef USE_COMBO_BOX
7470       XmComboBoxSelectItem(Sql_Database_dbms_data,cb_item);
7471       XmComboBoxSetItem(Sql_Database_dbms_data,cb_item);
7472 #else
7473       //sddd_menu is zero based, constants for database types are one based.
7474       //sddd_value matches constants.
7475       XtVaSetValues(sddd_menu, XmNmenuHistory,
7476                     sddd_buttons[devices[Sql_Database_port].database_type - 1 ], NULL);
7477       sddd_value = devices[Sql_Database_port].database_type;
7478 #endif
7479       XmStringFree(cb_item);
7480 
7481       cb_item = XmStringCreateLtoR(&xastir_schema_type[devices[Sql_Database_port].database_schema_type][0], XmFONTLIST_DEFAULT_TAG);
7482       XmComboBoxSelectItem(Sql_Database_schema_type_data,cb_item);
7483       XmComboBoxSetItem(Sql_Database_schema_type_data,cb_item);
7484       XmStringFree(cb_item);
7485 
7486       if (devices[Sql_Database_port].connect_on_startup)
7487       {
7488         XmToggleButtonSetState(Sql_Database_active_on_startup,TRUE,FALSE);
7489       }
7490       else
7491       {
7492         XmToggleButtonSetState(Sql_Database_active_on_startup,FALSE,FALSE);
7493       }
7494 
7495       if (devices[Sql_Database_port].query_on_startup)
7496       {
7497         XmToggleButtonSetState(Sql_Database_query_on_startup_data,TRUE,FALSE);
7498       }
7499       else
7500       {
7501         XmToggleButtonSetState(Sql_Database_query_on_startup_data,FALSE,FALSE);
7502       }
7503 
7504 
7505       if (devices[Sql_Database_port].transmit_data)
7506       {
7507         XmToggleButtonSetState(Sql_Database_transmit_data,TRUE,FALSE);
7508       }
7509       else
7510       {
7511         XmToggleButtonSetState(Sql_Database_transmit_data,FALSE,FALSE);
7512       }
7513 
7514       XmTextFieldSetString(Sql_Database_host_data,devices[Sql_Database_port].device_host_name);
7515       XmTextFieldSetString(Sql_Database_schema_name_data,devices[Sql_Database_port].database_schema);
7516       xastir_snprintf(temp, sizeof(temp), "%d", devices[Sql_Database_port].sp);
7517       XmTextFieldSetString(Sql_Database_iport_data,temp);
7518       XmTextFieldSetString(Sql_Database_username_data,devices[Sql_Database_port].database_username);
7519       XmTextFieldSetString(Sql_Database_password_data,devices[Sql_Database_port].device_host_pswd);
7520       XmTextFieldSetString(Sql_Database_unix_socket_data,devices[Sql_Database_port].database_unix_socket);
7521       XmTextFieldSetString(Sql_Database_comment,devices[Sql_Database_port].comment);
7522       // display most recent error message
7523       XmTextFieldSetString(Sql_Database_errormessage_data,devices[Sql_Database_port].database_errormessage);
7524 
7525       if (devices[Sql_Database_port].reconnect)
7526       {
7527         XmToggleButtonSetState(Sql_Database_reconnect_data,TRUE,FALSE);
7528       }
7529       else
7530       {
7531         XmToggleButtonSetState(Sql_Database_reconnect_data,FALSE,FALSE);
7532       }
7533 
7534       end_critical_section(&devices_lock, "interface_gui.c:Config_sql_Database" );
7535 
7536     }
7537     XtManageChild(form);
7538     XtManageChild(pane);
7539 
7540     resize_dialog(form, config_Sql_Database_dialog);
7541 
7542     XtPopup(config_Sql_Database_dialog,XtGrabNone);
7543   }
7544   else
7545   {
7546     (void)XRaiseWindow(XtDisplay(config_Sql_Database_dialog), XtWindow(config_Sql_Database_dialog));
7547   }
7548 }
7549 #endif /* HAVE_DB */
7550 
7551 
7552 
7553 
7554 /*****************************************************/
7555 /* Configure AGWPE Server GUI                        */
7556 /*****************************************************/
7557 
7558 /**** AGWPE CONFIGURE ******/
7559 Widget config_AGWPE_dialog = (Widget)NULL;
7560 Widget AGWPE_active_on_startup;
7561 Widget AGWPE_host_data;
7562 Widget AGWPE_port_data;
7563 Widget AGWPE_comment;
7564 Widget AGWPE_password_data;
7565 Widget AGWPE_transmit_data;
7566 Widget AGWPE_igate_data;
7567 Widget AGWPE_reconnect_data;
7568 Widget AGWPE_unproto1_data;
7569 Widget AGWPE_unproto2_data;
7570 Widget AGWPE_unproto3_data;
7571 Widget AGWPE_relay_digipeat;
7572 Widget AGWPE_radioport_data;
7573 int    AGWPE_port;
7574 
7575 
7576 
7577 
7578 
AGWPE_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))7579 void AGWPE_destroy_shell( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
7580 {
7581   Widget shell = (Widget) clientData;
7582   XtPopdown(shell);
7583   XtDestroyWidget(shell);
7584   config_AGWPE_dialog = (Widget)NULL;
7585   if (choose_interface_dialog != NULL)
7586   {
7587     Choose_interface_destroy_shell(choose_interface_dialog,choose_interface_dialog,NULL);
7588   }
7589 
7590   choose_interface_dialog = (Widget)NULL;
7591 }
7592 
7593 
7594 
7595 
7596 
AGWPE_change_data(Widget widget,XtPointer clientData,XtPointer callData)7597 void AGWPE_change_data(Widget widget, XtPointer clientData, XtPointer callData)
7598 {
7599   int was_up;
7600   char *temp_ptr;
7601 
7602 
7603   busy_cursor(appshell);
7604   was_up=0;
7605   if (get_device_status(AGWPE_port) == DEVICE_IN_USE)
7606   {
7607     /* if active shutdown before changes are made */
7608     /*fprintf(stderr,"Device is up, shutting down\n");*/
7609     (void)del_device(AGWPE_port);
7610     was_up=1;
7611     usleep(1000000); // Wait for one second
7612   }
7613 
7614   begin_critical_section(&devices_lock, "interface_gui.c:AGWPE_change_data" );
7615 
7616   devices[AGWPE_port].igate_options=device_igate_options;
7617 
7618   temp_ptr = XmTextFieldGetString(AGWPE_host_data);
7619   xastir_snprintf(devices[AGWPE_port].device_host_name,
7620                   sizeof(devices[AGWPE_port].device_host_name),
7621                   "%s",
7622                   temp_ptr);
7623   XtFree(temp_ptr);
7624 
7625   (void)remove_trailing_spaces(devices[AGWPE_port].device_host_name);
7626 
7627   temp_ptr = XmTextFieldGetString(AGWPE_password_data);
7628   xastir_snprintf(devices[AGWPE_port].device_host_pswd,
7629                   sizeof(devices[AGWPE_port].device_host_pswd),
7630                   "%s",
7631                   temp_ptr);
7632   XtFree(temp_ptr);
7633 
7634   (void)remove_trailing_spaces(devices[AGWPE_port].device_host_pswd);
7635 
7636   temp_ptr = XmTextFieldGetString(AGWPE_comment);
7637   xastir_snprintf(devices[AGWPE_port].comment,
7638                   sizeof(devices[AGWPE_port].comment),
7639                   "%s",
7640                   temp_ptr);
7641   XtFree(temp_ptr);
7642 
7643   (void)remove_trailing_spaces(devices[AGWPE_port].comment);
7644 
7645   temp_ptr = XmTextFieldGetString(AGWPE_port_data);
7646   devices[AGWPE_port].sp=atoi(temp_ptr);
7647   XtFree(temp_ptr);
7648 
7649   temp_ptr = XmTextFieldGetString(AGWPE_unproto1_data);
7650   xastir_snprintf(devices[AGWPE_port].unproto1,
7651                   sizeof(devices[AGWPE_port].unproto1),
7652                   "%s",
7653                   temp_ptr);
7654   XtFree(temp_ptr);
7655 
7656   (void)remove_trailing_spaces(devices[AGWPE_port].unproto1);
7657 
7658   if(check_unproto_path(devices[AGWPE_port].unproto1))
7659   {
7660     popup_message_always(langcode("WPUPCFT042"),
7661                          langcode("WPUPCFT043"));
7662   }
7663 
7664   temp_ptr = XmTextFieldGetString(AGWPE_unproto2_data);
7665   xastir_snprintf(devices[AGWPE_port].unproto2,
7666                   sizeof(devices[AGWPE_port].unproto2),
7667                   "%s",
7668                   temp_ptr);
7669   XtFree(temp_ptr);
7670 
7671   (void)remove_trailing_spaces(devices[AGWPE_port].unproto2);
7672 
7673   if(check_unproto_path(devices[AGWPE_port].unproto2))
7674   {
7675     popup_message_always(langcode("WPUPCFT042"),
7676                          langcode("WPUPCFT043"));
7677   }
7678 
7679   temp_ptr = XmTextFieldGetString(AGWPE_unproto3_data);
7680   xastir_snprintf(devices[AGWPE_port].unproto3,
7681                   sizeof(devices[AGWPE_port].unproto3),
7682                   "%s",
7683                   temp_ptr);
7684   XtFree(temp_ptr);
7685 
7686   (void)remove_trailing_spaces(devices[AGWPE_port].unproto3);
7687 
7688   if(check_unproto_path(devices[AGWPE_port].unproto3))
7689   {
7690     popup_message_always(langcode("WPUPCFT042"),
7691                          langcode("WPUPCFT043"));
7692   }
7693 
7694   temp_ptr = XmTextFieldGetString(AGWPE_igate_data);
7695   xastir_snprintf(devices[AGWPE_port].unproto_igate,
7696                   sizeof(devices[AGWPE_port].unproto_igate),
7697                   "%s",
7698                   temp_ptr);
7699   XtFree(temp_ptr);
7700 
7701   (void)remove_trailing_spaces(devices[AGWPE_port].unproto_igate);
7702 
7703   if(check_unproto_path(devices[AGWPE_port].unproto_igate))
7704   {
7705     popup_message_always(langcode("WPUPCFT044"),
7706                          langcode("WPUPCFT043"));
7707   }
7708 
7709 
7710   temp_ptr = XmTextFieldGetString(AGWPE_radioport_data);
7711   xastir_snprintf(devices[AGWPE_port].device_host_filter_string,
7712                   sizeof(devices[AGWPE_port].device_host_filter_string),
7713                   "%s",
7714                   temp_ptr);
7715   XtFree(temp_ptr);
7716 
7717   (void)remove_trailing_spaces(devices[AGWPE_port].device_host_filter_string);
7718 
7719   if(XmToggleButtonGetState(AGWPE_active_on_startup))
7720   {
7721     devices[AGWPE_port].connect_on_startup=1;
7722   }
7723   else
7724   {
7725     devices[AGWPE_port].connect_on_startup=0;
7726   }
7727 
7728   if(XmToggleButtonGetState(AGWPE_transmit_data))
7729   {
7730     devices[AGWPE_port].transmit_data=1;
7731   }
7732   else
7733   {
7734     devices[AGWPE_port].transmit_data=0;
7735   }
7736 
7737 //WE7U
7738 //    if(XmToggleButtonGetState(AGWPE_relay_digipeat))
7739 //        devices[AGWPE_port].relay_digipeat=1;
7740 //    else
7741   devices[AGWPE_port].relay_digipeat=0;
7742 
7743   if(XmToggleButtonGetState(AGWPE_reconnect_data))
7744   {
7745     devices[AGWPE_port].reconnect=1;
7746   }
7747   else
7748   {
7749     devices[AGWPE_port].reconnect=0;
7750   }
7751 
7752 //  n8ysz 20041213
7753 //    if (devices[AGWPE_port].connect_on_startup==1 || was_up) {
7754   if ( was_up)
7755   {
7756     (void)add_device(AGWPE_port,
7757                      DEVICE_NET_AGWPE,
7758                      devices[AGWPE_port].device_host_name,
7759                      devices[AGWPE_port].device_host_pswd,
7760                      devices[AGWPE_port].sp,
7761                      0,
7762                      0,
7763                      devices[AGWPE_port].reconnect,
7764                      "");
7765   }
7766 
7767   /* delete list */
7768 //    modify_device_list(4,0);
7769 
7770 
7771   /* add device type */
7772   devices[AGWPE_port].device_type=DEVICE_NET_AGWPE;
7773 
7774   /* rebuild list */
7775 //    modify_device_list(3,0);
7776 
7777 
7778   end_critical_section(&devices_lock, "interface_gui.c:AGWPE_change_data" );
7779 
7780   // Rebuild the interface control list
7781   update_interface_list();
7782 
7783   AGWPE_destroy_shell(widget,clientData,callData);
7784 }
7785 
7786 
7787 
7788 
7789 
Config_AGWPE(Widget UNUSED (w),int config_type,int port)7790 void Config_AGWPE( Widget UNUSED(w), int config_type, int port)
7791 {
7792   static Widget  pane, scrollwindow, form, button_ok, button_cancel,
7793          ihost, iport, password, sep,
7794          igate_box, igate_o_0, igate_o_1, igate_o_2,
7795          igate_label, frame, proto, proto1, proto2, proto3,
7796          radioport_label, comment;
7797 //  static Widget igate, password_fl;
7798   Atom delw;
7799   char temp[40];
7800   Arg al[50];                      // Arg list
7801   register unsigned int ac = 0;    // Arg Count
7802 
7803   if(!config_AGWPE_dialog)
7804   {
7805     AGWPE_port=port;
7806     config_AGWPE_dialog = XtVaCreatePopupShell(langcode("WPUPCFIA01"),
7807                           xmDialogShellWidgetClass, appshell,
7808                           XmNdeleteResponse, XmDESTROY,
7809                           XmNdefaultPosition, FALSE,
7810                           XmNfontList, fontlist1,
7811                           NULL);
7812 
7813     pane = XtVaCreateWidget("Config_AGWPE pane",xmPanedWindowWidgetClass, config_AGWPE_dialog,
7814                             XmNbackground, colors[0xff],
7815                             NULL);
7816 
7817     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
7818                                            xmScrolledWindowWidgetClass,
7819                                            pane,
7820                                            XmNscrollingPolicy, XmAUTOMATIC,
7821                                            NULL);
7822 
7823     form =  XtVaCreateWidget("Config_AGWPE form",
7824                              xmFormWidgetClass,
7825                              scrollwindow,
7826                              XmNfractionBase, 5,
7827                              XmNbackground, colors[0xff],
7828                              XmNautoUnmanage, FALSE,
7829                              XmNshadowThickness, 1,
7830                              NULL);
7831 
7832     AGWPE_active_on_startup  = XtVaCreateManagedWidget(langcode("UNIOP00011"),xmToggleButtonWidgetClass,form,
7833                                XmNnavigationType, XmTAB_GROUP,
7834                                XmNtraversalOn, TRUE,
7835                                XmNtopAttachment, XmATTACH_FORM,
7836                                XmNtopOffset, 5,
7837                                XmNbottomAttachment, XmATTACH_NONE,
7838                                XmNleftAttachment, XmATTACH_FORM,
7839                                XmNleftOffset,10,
7840                                XmNrightAttachment, XmATTACH_NONE,
7841                                XmNbackground, colors[0xff],
7842                                XmNfontList, fontlist1,
7843                                NULL);
7844 
7845     AGWPE_transmit_data  = XtVaCreateManagedWidget(langcode("UNIOP00010"),xmToggleButtonWidgetClass,form,
7846                            XmNnavigationType, XmTAB_GROUP,
7847                            XmNtraversalOn, TRUE,
7848                            XmNtopAttachment, XmATTACH_FORM,
7849                            XmNtopOffset, 5,
7850                            XmNbottomAttachment, XmATTACH_NONE,
7851                            XmNleftAttachment, XmATTACH_WIDGET,
7852                            XmNleftWidget, AGWPE_active_on_startup,
7853                            XmNleftOffset,35,
7854                            XmNrightAttachment, XmATTACH_NONE,
7855                            XmNbackground, colors[0xff],
7856                            XmNfontList, fontlist1,
7857                            NULL);
7858 
7859     AGWPE_relay_digipeat = XtVaCreateManagedWidget(langcode("UNIOP00030"),xmToggleButtonWidgetClass,form,
7860                            XmNnavigationType, XmTAB_GROUP,
7861                            XmNtraversalOn, TRUE,
7862                            XmNtopAttachment, XmATTACH_FORM,
7863                            XmNtopOffset, 5,
7864                            XmNbottomAttachment, XmATTACH_NONE,
7865                            XmNleftAttachment, XmATTACH_WIDGET,
7866                            XmNleftWidget, AGWPE_transmit_data,
7867                            XmNleftOffset,35,
7868                            XmNrightAttachment, XmATTACH_NONE,
7869                            XmNbackground, colors[0xff],
7870                            XmNfontList, fontlist1,
7871                            NULL);
7872 
7873     ihost = XtVaCreateManagedWidget(langcode("WPUPCFIA02"),xmLabelWidgetClass, form,
7874                                     XmNtopAttachment, XmATTACH_WIDGET,
7875                                     XmNtopWidget, AGWPE_transmit_data,
7876                                     XmNtopOffset, 5,
7877                                     XmNbottomAttachment, XmATTACH_NONE,
7878                                     XmNleftAttachment, XmATTACH_FORM,
7879                                     XmNleftOffset, 10,
7880                                     XmNrightAttachment, XmATTACH_NONE,
7881                                     XmNbackground, colors[0xff],
7882                                     XmNfontList, fontlist1,
7883                                     NULL);
7884 
7885     AGWPE_host_data = XtVaCreateManagedWidget("Config_AGWPE host_data", xmTextFieldWidgetClass, form,
7886                       XmNnavigationType, XmTAB_GROUP,
7887                       XmNtraversalOn, TRUE,
7888                       XmNeditable,   TRUE,
7889                       XmNcursorPositionVisible, TRUE,
7890                       XmNsensitive, TRUE,
7891                       XmNshadowThickness,    1,
7892                       XmNcolumns, 25,
7893                       XmNwidth, ((25*7)+2),
7894                       XmNmaxLength, MAX_DEVICE_NAME,
7895                       XmNbackground, colors[0x0f],
7896                       XmNtopAttachment,XmATTACH_WIDGET,
7897                       XmNtopWidget, AGWPE_transmit_data,
7898                       XmNbottomAttachment,XmATTACH_NONE,
7899                       XmNleftAttachment, XmATTACH_WIDGET,
7900                       XmNleftWidget, ihost,
7901                       XmNrightAttachment,XmATTACH_NONE,
7902                       XmNfontList, fontlist1,
7903                       NULL);
7904 
7905     iport = XtVaCreateManagedWidget(langcode("WPUPCFIA03"),xmLabelWidgetClass, form,
7906                                     XmNtopAttachment, XmATTACH_WIDGET,
7907                                     XmNtopWidget,AGWPE_transmit_data,
7908                                     XmNtopOffset, 5,
7909                                     XmNbottomAttachment, XmATTACH_NONE,
7910                                     XmNleftAttachment, XmATTACH_WIDGET,
7911                                     XmNleftWidget,AGWPE_host_data,
7912                                     XmNleftOffset, 10,
7913                                     XmNrightAttachment, XmATTACH_NONE,
7914                                     XmNbackground, colors[0xff],
7915                                     XmNfontList, fontlist1,
7916                                     NULL);
7917 
7918     AGWPE_port_data = XtVaCreateManagedWidget("Config_AGWPE port_data", xmTextFieldWidgetClass, form,
7919                       XmNnavigationType, XmTAB_GROUP,
7920                       XmNtraversalOn, TRUE,
7921                       XmNeditable,   TRUE,
7922                       XmNcursorPositionVisible, TRUE,
7923                       XmNsensitive, TRUE,
7924                       XmNshadowThickness,    1,
7925                       XmNcolumns, 5,
7926                       XmNwidth, ((5*7)+2),
7927                       XmNmaxLength, 6,
7928                       XmNbackground, colors[0x0f],
7929                       XmNtopAttachment, XmATTACH_WIDGET,
7930                       XmNtopWidget, AGWPE_transmit_data,
7931                       XmNbottomAttachment,XmATTACH_NONE,
7932                       XmNleftAttachment, XmATTACH_WIDGET,
7933                       XmNleftWidget, iport,
7934                       XmNrightAttachment,XmATTACH_NONE,
7935                       XmNfontList, fontlist1,
7936                       NULL);
7937 
7938     comment = XtVaCreateManagedWidget(langcode("WPUPCFS017"),xmLabelWidgetClass, form,
7939                                       XmNtopAttachment, XmATTACH_WIDGET,
7940                                       XmNtopWidget, AGWPE_transmit_data,
7941                                       XmNtopOffset, 5,
7942                                       XmNbottomAttachment, XmATTACH_NONE,
7943                                       XmNleftAttachment, XmATTACH_WIDGET,
7944                                       XmNleftWidget, AGWPE_port_data,
7945                                       XmNleftOffset, 10,
7946                                       XmNrightAttachment, XmATTACH_NONE,
7947                                       XmNbackground, colors[0xff],
7948                                       XmNfontList, fontlist1,
7949                                       NULL);
7950 
7951     AGWPE_comment = XtVaCreateManagedWidget("Config_AGWPE comment", xmTextFieldWidgetClass, form,
7952                                             XmNnavigationType, XmTAB_GROUP,
7953                                             XmNtraversalOn, TRUE,
7954                                             XmNeditable,   TRUE,
7955                                             XmNcursorPositionVisible, TRUE,
7956                                             XmNsensitive, TRUE,
7957                                             XmNshadowThickness,    1,
7958                                             XmNcolumns, 25,
7959                                             XmNwidth, ((25*7)+2),
7960                                             XmNmaxLength, 49,
7961                                             XmNbackground, colors[0x0f],
7962                                             XmNtopAttachment,XmATTACH_WIDGET,
7963                                             XmNtopWidget, AGWPE_transmit_data,
7964                                             XmNbottomAttachment,XmATTACH_NONE,
7965                                             XmNleftAttachment, XmATTACH_WIDGET,
7966                                             XmNleftWidget, comment,
7967                                             XmNrightAttachment,XmATTACH_NONE,
7968                                             XmNfontList, fontlist1,
7969                                             NULL);
7970 
7971     password = XtVaCreateManagedWidget(langcode("WPUPCFIA09"),xmLabelWidgetClass, form,
7972                                        XmNtopAttachment, XmATTACH_WIDGET,
7973                                        XmNtopWidget, ihost,
7974                                        XmNtopOffset, 20,
7975                                        XmNbottomAttachment, XmATTACH_NONE,
7976                                        XmNleftAttachment, XmATTACH_FORM,
7977                                        XmNleftOffset, 10,
7978                                        XmNrightAttachment, XmATTACH_NONE,
7979                                        XmNbackground, colors[0xff],
7980                                        XmNfontList, fontlist1,
7981                                        NULL);
7982 
7983     AGWPE_password_data = XtVaCreateManagedWidget("Config_AGWPE password_data", xmTextFieldWidgetClass, form,
7984                           XmNnavigationType, XmTAB_GROUP,
7985                           XmNtraversalOn, TRUE,
7986                           XmNeditable,   TRUE,
7987                           XmNcursorPositionVisible, TRUE,
7988                           XmNsensitive, TRUE,
7989                           XmNshadowThickness,    1,
7990                           XmNcolumns, 20,
7991                           XmNmaxLength, 20,
7992                           XmNbackground, colors[0x0f],
7993                           XmNleftAttachment,XmATTACH_WIDGET,
7994                           XmNleftWidget, password,
7995                           XmNleftOffset, 10,
7996                           XmNtopAttachment,XmATTACH_WIDGET,
7997                           XmNtopWidget, ihost,
7998                           XmNtopOffset, 15,
7999                           XmNbottomAttachment,XmATTACH_NONE,
8000                           XmNrightAttachment,XmATTACH_NONE,
8001                           XmNfontList, fontlist1,
8002                           NULL);
8003 
8004     // password_fl
8005     XtVaCreateManagedWidget(langcode("WPUPCFIA10"),xmLabelWidgetClass, form,
8006                             XmNtopAttachment, XmATTACH_WIDGET,
8007                             XmNtopWidget, ihost,
8008                             XmNtopOffset, 20,
8009                             XmNbottomAttachment, XmATTACH_NONE,
8010                             XmNleftAttachment, XmATTACH_WIDGET,
8011                             XmNleftWidget,AGWPE_password_data,
8012                             XmNleftOffset,20,
8013                             XmNrightAttachment, XmATTACH_NONE,
8014                             XmNbackground, colors[0xff],
8015                             NULL);
8016 
8017     AGWPE_reconnect_data = XtVaCreateManagedWidget(langcode("WPUPCFIA11"),xmToggleButtonWidgetClass,form,
8018                            XmNnavigationType, XmTAB_GROUP,
8019                            XmNtraversalOn, TRUE,
8020                            XmNtopAttachment, XmATTACH_WIDGET,
8021                            XmNtopWidget, password,
8022                            XmNtopOffset, 20,
8023                            XmNbottomAttachment, XmATTACH_NONE,
8024                            XmNleftAttachment, XmATTACH_FORM,
8025                            XmNleftOffset,10,
8026                            XmNrightAttachment, XmATTACH_NONE,
8027                            XmNbackground, colors[0xff],
8028                            XmNfontList, fontlist1,
8029                            NULL);
8030 
8031     radioport_label = XtVaCreateManagedWidget(langcode("WPUPCFIA15"),xmLabelWidgetClass, form,
8032                       XmNtopAttachment, XmATTACH_WIDGET,
8033                       XmNtopWidget, password,
8034                       XmNtopOffset, 25,
8035                       XmNbottomAttachment, XmATTACH_NONE,
8036                       XmNleftAttachment, XmATTACH_WIDGET,
8037                       XmNleftWidget, AGWPE_reconnect_data,
8038                       XmNleftOffset, 50,
8039                       XmNrightAttachment, XmATTACH_NONE,
8040                       XmNbackground, colors[0xff],
8041                       XmNfontList, fontlist1,
8042                       NULL);
8043 
8044     AGWPE_radioport_data = XtVaCreateManagedWidget("Config_AGWPE radioport_data", xmTextFieldWidgetClass, form,
8045                            XmNnavigationType, XmTAB_GROUP,
8046                            XmNtraversalOn, TRUE,
8047                            XmNeditable,   TRUE,
8048                            XmNcursorPositionVisible, TRUE,
8049                            XmNsensitive, TRUE,
8050                            XmNshadowThickness,    1,
8051                            XmNcolumns, 3,
8052                            XmNmaxLength, 3,
8053                            XmNbackground, colors[0x0f],
8054                            XmNleftAttachment,XmATTACH_WIDGET,
8055                            XmNleftWidget, radioport_label,
8056                            XmNleftOffset, 10,
8057                            XmNtopAttachment,XmATTACH_WIDGET,
8058                            XmNtopWidget, password,
8059                            XmNtopOffset, 20,
8060                            XmNbottomAttachment,XmATTACH_NONE,
8061                            XmNrightAttachment,XmATTACH_NONE,
8062                            XmNfontList, fontlist1,
8063                            NULL);
8064 
8065     frame = XtVaCreateManagedWidget("Config_AGWPE frame", xmFrameWidgetClass, form,
8066                                     XmNtopAttachment, XmATTACH_WIDGET,
8067                                     XmNtopWidget, AGWPE_reconnect_data,
8068                                     XmNtopOffset, 10,
8069                                     XmNbottomAttachment, XmATTACH_NONE,
8070                                     XmNleftAttachment, XmATTACH_FORM,
8071                                     XmNleftOffset, 10,
8072                                     XmNrightAttachment, XmATTACH_FORM,
8073                                     XmNrightOffset, 10,
8074                                     XmNbackground, colors[0xff],
8075                                     NULL);
8076 
8077     // igate
8078     XtVaCreateManagedWidget(langcode("IGPUPCF000"),xmLabelWidgetClass, frame,
8079                             XmNchildType, XmFRAME_TITLE_CHILD,
8080                             XmNbackground, colors[0xff],
8081                             XmNfontList, fontlist1,
8082                             NULL);
8083 
8084     // Set args for color
8085     ac=0;
8086     XtSetArg(al[ac], XmNbackground, colors[0xff]);
8087     ac++;
8088 
8089 
8090     igate_box = XmCreateRadioBox(frame,"Config_AGWPE IGate box",al,ac);
8091 
8092     XtVaSetValues(igate_box,XmNorientation, XmVERTICAL,XmNnumColumns,2,NULL);
8093 
8094     igate_o_0 = XtVaCreateManagedWidget(langcode("IGPUPCF001"),xmToggleButtonGadgetClass,
8095                                         igate_box,
8096                                         XmNbackground, colors[0xff],
8097                                         XmNfontList, fontlist1,
8098                                         NULL);
8099     XtAddCallback(igate_o_0,XmNvalueChangedCallback,igate_toggle,"0");
8100 
8101     igate_o_1 = XtVaCreateManagedWidget(langcode("IGPUPCF002"),xmToggleButtonGadgetClass,
8102                                         igate_box,
8103                                         XmNbackground, colors[0xff],
8104                                         XmNfontList, fontlist1,
8105                                         NULL);
8106     XtAddCallback(igate_o_1,XmNvalueChangedCallback,igate_toggle,"1");
8107 
8108     igate_o_2 = XtVaCreateManagedWidget(langcode("IGPUPCF003"),xmToggleButtonGadgetClass,
8109                                         igate_box,
8110                                         XmNbackground, colors[0xff],
8111                                         XmNfontList, fontlist1,
8112                                         NULL);
8113     XtAddCallback(igate_o_2,XmNvalueChangedCallback,igate_toggle,"2");
8114 
8115     proto = XtVaCreateManagedWidget(langcode("WPUPCFT011"), xmLabelWidgetClass, form,
8116                                     XmNorientation, XmHORIZONTAL,
8117                                     XmNtopAttachment,XmATTACH_WIDGET,
8118                                     XmNtopWidget, frame,
8119                                     XmNtopOffset, 10,
8120                                     XmNbottomAttachment,XmATTACH_NONE,
8121                                     XmNleftAttachment, XmATTACH_FORM,
8122                                     XmNleftOffset, 5,
8123                                     XmNrightAttachment,XmATTACH_FORM,
8124                                     XmNrightOffset, 5,
8125                                     XmNbackground, colors[0xff],
8126                                     XmNfontList, fontlist1,
8127                                     NULL);
8128 
8129     xastir_snprintf(temp, sizeof(temp), langcode("WPUPCFT012"), VERSIONFRM);
8130 
8131     proto1 = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
8132                                      XmNorientation, XmHORIZONTAL,
8133                                      XmNtopAttachment,XmATTACH_WIDGET,
8134                                      XmNtopWidget, proto,
8135                                      XmNtopOffset, 12,
8136                                      XmNbottomAttachment,XmATTACH_NONE,
8137                                      XmNleftAttachment, XmATTACH_FORM,
8138                                      XmNleftOffset, 45,
8139                                      XmNrightAttachment,XmATTACH_NONE,
8140                                      XmNbackground, colors[0xff],
8141                                      XmNfontList, fontlist1,
8142                                      NULL);
8143 
8144     AGWPE_unproto1_data = XtVaCreateManagedWidget("Config_AGWPE protopath1", xmTextFieldWidgetClass, form,
8145                           XmNnavigationType, XmTAB_GROUP,
8146                           XmNtraversalOn, TRUE,
8147                           XmNeditable,   TRUE,
8148                           XmNcursorPositionVisible, TRUE,
8149                           XmNsensitive, TRUE,
8150                           XmNshadowThickness,    1,
8151                           XmNcolumns, 25,
8152                           XmNwidth, ((25*7)+2),
8153                           XmNmaxLength, 40,
8154                           XmNbackground, colors[0x0f],
8155                           XmNtopAttachment,XmATTACH_WIDGET,
8156                           XmNtopWidget, proto,
8157                           XmNtopOffset, 5,
8158                           XmNbottomAttachment,XmATTACH_NONE,
8159                           XmNleftAttachment,XmATTACH_WIDGET,
8160                           XmNleftWidget, proto1,
8161                           XmNleftOffset, 5,
8162                           XmNrightAttachment,XmATTACH_NONE,
8163                           XmNfontList, fontlist1,
8164                           NULL);
8165 
8166     xastir_snprintf(temp, sizeof(temp), langcode("WPUPCFT013"), VERSIONFRM);
8167 
8168     proto2 = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
8169                                      XmNorientation, XmHORIZONTAL,
8170                                      XmNtopAttachment,XmATTACH_WIDGET,
8171                                      XmNtopWidget, proto1,
8172                                      XmNtopOffset, 15,
8173                                      XmNbottomAttachment,XmATTACH_NONE,
8174                                      XmNleftAttachment, XmATTACH_FORM,
8175                                      XmNleftOffset, 45,
8176                                      XmNrightAttachment,XmATTACH_NONE,
8177                                      XmNbackground, colors[0xff],
8178                                      XmNfontList, fontlist1,
8179                                      NULL);
8180 
8181     AGWPE_unproto2_data = XtVaCreateManagedWidget("Config_AGWPE protopath2", xmTextFieldWidgetClass, form,
8182                           XmNnavigationType, XmTAB_GROUP,
8183                           XmNtraversalOn, TRUE,
8184                           XmNeditable,   TRUE,
8185                           XmNcursorPositionVisible, TRUE,
8186                           XmNsensitive, TRUE,
8187                           XmNshadowThickness,    1,
8188                           XmNcolumns, 25,
8189                           XmNwidth, ((25*7)+2),
8190                           XmNmaxLength, 40,
8191                           XmNbackground, colors[0x0f],
8192                           XmNtopAttachment,XmATTACH_WIDGET,
8193                           XmNtopWidget, AGWPE_unproto1_data,
8194                           XmNtopOffset, 5,
8195                           XmNbottomAttachment,XmATTACH_NONE,
8196                           XmNleftAttachment, XmATTACH_WIDGET,
8197                           XmNleftWidget, proto2,
8198                           XmNleftOffset, 5,
8199                           XmNrightAttachment,XmATTACH_NONE,
8200                           XmNfontList, fontlist1,
8201                           NULL);
8202 
8203     xastir_snprintf(temp, sizeof(temp), langcode("WPUPCFT014"), VERSIONFRM);
8204 
8205     proto3 = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
8206                                      XmNorientation, XmHORIZONTAL,
8207                                      XmNtopAttachment,XmATTACH_WIDGET,
8208                                      XmNtopWidget, proto2,
8209                                      XmNtopOffset, 15,
8210                                      XmNbottomAttachment,XmATTACH_NONE,
8211                                      XmNleftAttachment, XmATTACH_FORM,
8212                                      XmNleftOffset, 45,
8213                                      XmNrightAttachment,XmATTACH_NONE,
8214                                      XmNbackground, colors[0xff],
8215                                      XmNfontList, fontlist1,
8216                                      NULL);
8217 
8218 
8219     AGWPE_unproto3_data = XtVaCreateManagedWidget("Config_AGWPE protopath3", xmTextFieldWidgetClass, form,
8220                           XmNnavigationType, XmTAB_GROUP,
8221                           XmNtraversalOn, TRUE,
8222                           XmNeditable,   TRUE,
8223                           XmNcursorPositionVisible, TRUE,
8224                           XmNsensitive, TRUE,
8225                           XmNshadowThickness,    1,
8226                           XmNcolumns, 25,
8227                           XmNwidth, ((25*7)+2),
8228                           XmNmaxLength, 40,
8229                           XmNbackground, colors[0x0f],
8230                           XmNtopAttachment,XmATTACH_WIDGET,
8231                           XmNtopWidget, AGWPE_unproto2_data,
8232                           XmNtopOffset, 5,
8233                           XmNbottomAttachment,XmATTACH_NONE,
8234                           XmNleftAttachment,XmATTACH_WIDGET,
8235                           XmNleftWidget, proto3,
8236                           XmNleftOffset, 5,
8237                           XmNrightAttachment,XmATTACH_NONE,
8238                           XmNfontList, fontlist1,
8239                           NULL);
8240 
8241 
8242     xastir_snprintf(temp, sizeof(temp), "%s", langcode("IGPUPCF004"));
8243     igate_label = XtVaCreateManagedWidget(temp, xmLabelWidgetClass, form,
8244                                           XmNorientation, XmHORIZONTAL,
8245                                           XmNtopAttachment,XmATTACH_WIDGET,
8246                                           XmNtopWidget, proto3,
8247                                           XmNtopOffset, 15,
8248                                           XmNbottomAttachment,XmATTACH_NONE,
8249                                           XmNleftAttachment, XmATTACH_FORM,
8250                                           XmNleftOffset, 45,
8251                                           XmNrightAttachment,XmATTACH_NONE,
8252                                           XmNbackground, colors[0xff],
8253                                           XmNfontList, fontlist1,
8254                                           NULL);
8255 
8256     AGWPE_igate_data = XtVaCreateManagedWidget("Config_AGWPE igate_data", xmTextFieldWidgetClass, form,
8257                        XmNnavigationType, XmTAB_GROUP,
8258                        XmNtraversalOn, TRUE,
8259                        XmNeditable,   TRUE,
8260                        XmNcursorPositionVisible, TRUE,
8261                        XmNsensitive, TRUE,
8262                        XmNshadowThickness,    1,
8263                        XmNcolumns, 25,
8264                        XmNwidth, ((25*7)+2),
8265                        XmNmaxLength, 40,
8266                        XmNbackground, colors[0x0f],
8267                        XmNtopAttachment,XmATTACH_WIDGET,
8268                        XmNtopWidget, AGWPE_unproto3_data,
8269                        XmNtopOffset, 5,
8270                        XmNbottomAttachment,XmATTACH_NONE,
8271                        XmNleftAttachment,XmATTACH_WIDGET,
8272                        XmNleftWidget, igate_label,
8273                        XmNleftOffset, 5,
8274                        XmNrightAttachment,XmATTACH_NONE,
8275                        XmNfontList, fontlist1,
8276                        NULL);
8277 
8278 
8279     sep = XtVaCreateManagedWidget("Config_AGWPE sep", xmSeparatorGadgetClass,form,
8280                                   XmNorientation, XmHORIZONTAL,
8281                                   XmNtopAttachment,XmATTACH_WIDGET,
8282                                   XmNtopWidget, AGWPE_igate_data,
8283                                   XmNtopOffset, 14,
8284                                   XmNbottomAttachment,XmATTACH_NONE,
8285                                   XmNleftAttachment, XmATTACH_FORM,
8286                                   XmNrightAttachment,XmATTACH_FORM,
8287                                   XmNbackground, colors[0xff],
8288                                   XmNfontList, fontlist1,
8289                                   NULL);
8290 
8291     button_ok = XtVaCreateManagedWidget(langcode("UNIOP00001"),xmPushButtonGadgetClass, form,
8292                                         XmNnavigationType, XmTAB_GROUP,
8293                                         XmNtraversalOn, TRUE,
8294                                         XmNtopAttachment, XmATTACH_WIDGET,
8295                                         XmNtopWidget, sep,
8296                                         XmNtopOffset, 10,
8297                                         XmNbottomAttachment, XmATTACH_FORM,
8298                                         XmNbottomOffset, 5,
8299                                         XmNleftAttachment, XmATTACH_POSITION,
8300                                         XmNleftPosition, 1,
8301                                         XmNrightAttachment, XmATTACH_POSITION,
8302                                         XmNrightPosition, 2,
8303                                         XmNbackground, colors[0xff],
8304                                         XmNfontList, fontlist1,
8305                                         NULL);
8306 
8307     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
8308                                             XmNnavigationType, XmTAB_GROUP,
8309                                             XmNtraversalOn, TRUE,
8310                                             XmNtopAttachment, XmATTACH_WIDGET,
8311                                             XmNtopWidget, sep,
8312                                             XmNtopOffset, 10,
8313                                             XmNbottomAttachment, XmATTACH_FORM,
8314                                             XmNbottomOffset, 5,
8315                                             XmNleftAttachment, XmATTACH_POSITION,
8316                                             XmNleftPosition, 3,
8317                                             XmNrightAttachment, XmATTACH_POSITION,
8318                                             XmNrightPosition, 4,
8319                                             XmNbackground, colors[0xff],
8320                                             XmNfontList, fontlist1,
8321                                             NULL);
8322 
8323     XtAddCallback(button_ok, XmNactivateCallback, AGWPE_change_data, config_AGWPE_dialog);
8324     XtAddCallback(button_cancel, XmNactivateCallback, AGWPE_destroy_shell, config_AGWPE_dialog);
8325 
8326     pos_dialog(config_AGWPE_dialog);
8327 
8328     delw = XmInternAtom(XtDisplay(config_AGWPE_dialog),"WM_DELETE_WINDOW", FALSE);
8329     XmAddWMProtocolCallback(config_AGWPE_dialog, delw, AGWPE_destroy_shell, (XtPointer)config_AGWPE_dialog);
8330 
8331     if (config_type==0)
8332     {
8333       /* first time port */
8334       XmToggleButtonSetState(AGWPE_active_on_startup,TRUE,FALSE);
8335       XmToggleButtonSetState(AGWPE_transmit_data,TRUE,FALSE);
8336       //XmTextFieldSetString(AGWPE_host_data,"first.aprs.net");
8337       XmTextFieldSetString(AGWPE_host_data,"localhost");
8338       XmTextFieldSetString(AGWPE_port_data,"8000");
8339       XmTextFieldSetString(AGWPE_comment,"");
8340       XmToggleButtonSetState(AGWPE_reconnect_data,FALSE,FALSE);
8341       XmToggleButtonSetState(AGWPE_relay_digipeat, FALSE, FALSE);
8342       device_igate_options=0;
8343       XmToggleButtonSetState(igate_o_0,TRUE,FALSE);
8344       XmTextFieldSetString(AGWPE_unproto1_data,"WIDE2-2");
8345       XmTextFieldSetString(AGWPE_unproto2_data,"");
8346       XmTextFieldSetString(AGWPE_unproto3_data,"");
8347       XmTextFieldSetString(AGWPE_igate_data,"");
8348       XmTextFieldSetString(AGWPE_radioport_data,"1");
8349 
8350 //WE7U
8351 // Keep this statement until we get relay digipeating functional for
8352 // this interface.
8353       XtSetSensitive(AGWPE_relay_digipeat, FALSE);
8354 
8355     }
8356     else
8357     {
8358       /* reconfig */
8359 
8360       begin_critical_section(&devices_lock, "interface_gui.c:Config_AGWPE" );
8361 
8362       if (devices[AGWPE_port].connect_on_startup)
8363       {
8364         XmToggleButtonSetState(AGWPE_active_on_startup,TRUE,FALSE);
8365       }
8366       else
8367       {
8368         XmToggleButtonSetState(AGWPE_active_on_startup,FALSE,FALSE);
8369       }
8370 
8371       if (devices[AGWPE_port].transmit_data)
8372       {
8373         XmToggleButtonSetState(AGWPE_transmit_data,TRUE,FALSE);
8374       }
8375       else
8376       {
8377         XmToggleButtonSetState(AGWPE_transmit_data,FALSE,FALSE);
8378       }
8379 
8380 //            if (devices[AGWPE_port].relay_digipeat)
8381 //                XmToggleButtonSetState(AGWPE_relay_digipeat, TRUE, FALSE);
8382 //            else
8383       XmToggleButtonSetState(AGWPE_relay_digipeat, FALSE, FALSE);
8384 
8385 //            if (devices[AGWPE_port].transmit_data) {
8386 //                XtSetSensitive(AGWPE_relay_digipeat, TRUE);
8387 //            }
8388 //            else
8389       XtSetSensitive(AGWPE_relay_digipeat, FALSE);
8390 
8391       XmTextFieldSetString(AGWPE_host_data,devices[AGWPE_port].device_host_name);
8392       xastir_snprintf(temp, sizeof(temp), "%d", devices[AGWPE_port].sp);
8393       XmTextFieldSetString(AGWPE_port_data,temp);
8394       XmTextFieldSetString(AGWPE_password_data,devices[AGWPE_port].device_host_pswd);
8395       XmTextFieldSetString(AGWPE_comment,devices[AGWPE_port].comment);
8396 
8397       if (devices[AGWPE_port].reconnect)
8398       {
8399         XmToggleButtonSetState(AGWPE_reconnect_data,TRUE,FALSE);
8400       }
8401       else
8402       {
8403         XmToggleButtonSetState(AGWPE_reconnect_data,FALSE,FALSE);
8404       }
8405 
8406       XmTextFieldSetString(AGWPE_radioport_data,devices[AGWPE_port].device_host_filter_string);
8407 
8408       switch (devices[AGWPE_port].igate_options)
8409       {
8410         case(0):
8411           XmToggleButtonSetState(igate_o_0,TRUE,FALSE);
8412           device_igate_options=0;
8413           break;
8414 
8415         case(1):
8416           XmToggleButtonSetState(igate_o_1,TRUE,FALSE);
8417           device_igate_options=1;
8418           break;
8419 
8420         case(2):
8421           XmToggleButtonSetState(igate_o_2,TRUE,FALSE);
8422           device_igate_options=2;
8423           break;
8424 
8425         default:
8426           XmToggleButtonSetState(igate_o_0,TRUE,FALSE);
8427           device_igate_options=0;
8428           break;
8429       }
8430 
8431       XmTextFieldSetString(AGWPE_unproto1_data,devices[AGWPE_port].unproto1);
8432       XmTextFieldSetString(AGWPE_unproto2_data,devices[AGWPE_port].unproto2);
8433       XmTextFieldSetString(AGWPE_unproto3_data,devices[AGWPE_port].unproto3);
8434       XmTextFieldSetString(AGWPE_igate_data,devices[AGWPE_port].unproto_igate);
8435 
8436       end_critical_section(&devices_lock, "interface_gui.c:Config_AGWPE" );
8437 
8438     }
8439     XtManageChild(igate_box);
8440     XtManageChild(form);
8441     XtManageChild(pane);
8442 
8443     resize_dialog(form, config_AGWPE_dialog);
8444 
8445     XtPopup(config_AGWPE_dialog,XtGrabNone);
8446   }
8447   else
8448   {
8449     (void)XRaiseWindow(XtDisplay(config_AGWPE_dialog), XtWindow(config_AGWPE_dialog));
8450   }
8451 }
8452 
8453 
8454 
8455 
8456 
8457 /*****************************************************/
8458 /* Configure Interface GUI                           */
8459 /*****************************************************/
8460 
are_shells_up(void)8461 int are_shells_up(void)
8462 {
8463   int up;
8464 
8465   up=1;
8466   if (config_TNC_dialog)
8467   {
8468     (void)XRaiseWindow(XtDisplay(config_TNC_dialog), XtWindow(config_TNC_dialog));
8469   }
8470   else
8471   {
8472     if (config_GPS_dialog)
8473     {
8474       (void)XRaiseWindow(XtDisplay(config_GPS_dialog), XtWindow(config_GPS_dialog));
8475     }
8476     else
8477     {
8478       if (config_WX_dialog)
8479       {
8480         (void)XRaiseWindow(XtDisplay(config_WX_dialog), XtWindow(config_WX_dialog));
8481       }
8482       else
8483       {
8484         if (config_NGPS_dialog)
8485         {
8486           (void)XRaiseWindow(XtDisplay(config_NGPS_dialog), XtWindow(config_NGPS_dialog));
8487         }
8488         else
8489         {
8490           if (config_AX25_dialog)
8491           {
8492             (void)XRaiseWindow(XtDisplay(config_AX25_dialog), XtWindow(config_AX25_dialog));
8493           }
8494           else
8495           {
8496             if (config_Inet_dialog)
8497             {
8498               (void)XRaiseWindow(XtDisplay(config_Inet_dialog), XtWindow(config_Inet_dialog));
8499             }
8500             else
8501             {
8502               if (config_NWX_dialog)
8503               {
8504                 (void)XRaiseWindow(XtDisplay(config_NWX_dialog), XtWindow(config_NWX_dialog));
8505               }
8506               else
8507               {
8508                 if (config_Database_dialog)
8509                 {
8510                   (void)XRaiseWindow(XtDisplay(config_Database_dialog), XtWindow(config_Database_dialog));
8511                 }
8512                 else
8513                 {
8514 #ifdef HAVE_DB
8515                   if (config_Sql_Database_dialog)
8516                   {
8517                     (void)XRaiseWindow(XtDisplay(config_Sql_Database_dialog), XtWindow(config_Sql_Database_dialog));
8518                   }
8519                   else
8520                   {
8521 
8522 #endif /* HAVE_DB */
8523                     if (config_AGWPE_dialog)
8524                     {
8525                       (void)XRaiseWindow(XtDisplay(config_AGWPE_dialog), XtWindow(config_AGWPE_dialog));
8526                     }
8527                     else
8528                     {
8529                       up=0;
8530                     }
8531 #ifdef HAVE_DB
8532                   }
8533 #endif /* HAVE_DB */
8534                 }
8535               }
8536             }
8537           }
8538         }
8539       }
8540     }
8541   }
8542   return(up);
8543 }
8544 
8545 
8546 
8547 
8548 
Choose_interface_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))8549 void Choose_interface_destroy_shell( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
8550 {
8551   Widget shell = (Widget) clientData;
8552   if (are_shells_up()==0)
8553   {
8554     XtPopdown(shell);
8555     XtDestroyWidget(shell);
8556     choose_interface_dialog = (Widget)NULL;
8557   }
8558 }
8559 
8560 
8561 
8562 
8563 
modify_device_list(int option,int port)8564 void modify_device_list(int option, int port)
8565 {
8566   int i,n;
8567   char temp[150];
8568   char temp2[150];
8569   XmString str_ptr;
8570 
8571 
8572   n=1;
8573   for (i=0; i < MAX_IFACE_DEVICES; i++)
8574   {
8575     if (devices[i].device_type!=DEVICE_NONE)
8576     {
8577       switch (option)
8578       {
8579         case 0 :
8580           /* delete entire list available */
8581           XmListDeleteAllItems(control_iface_list);
8582           return; // Exit routine
8583           break;
8584 
8585         case 1 :
8586           /* delete item pointed to by port */
8587           if (i==port)
8588           {
8589             XmListDeletePos(control_iface_list,n);
8590           }
8591           n++;
8592           break;
8593 
8594         case 2 :
8595           /* create item list */
8596           /* format list for device modify*/
8597           switch (devices[i].device_type)
8598           {
8599             case DEVICE_SERIAL_TNC:
8600             case DEVICE_SERIAL_TNC_HSP_GPS:
8601             case DEVICE_SERIAL_TNC_AUX_GPS:
8602             case DEVICE_SERIAL_KISS_TNC:
8603             case DEVICE_SERIAL_GPS:
8604             case DEVICE_SERIAL_WX:
8605               xastir_snprintf(temp,
8606                               sizeof(temp),
8607                               langcode("IFDIN00000"),
8608                               langcode("UNIOP00006"),
8609                               i,
8610                               dtype[devices[i].device_type].device_name,
8611                               devices[i].device_name,
8612                               devices[i].comment);
8613               strncat(temp,
8614                       "    ",
8615                       sizeof(temp) - 1 - strlen(temp));
8616               break;
8617 
8618             case DEVICE_SERIAL_MKISS_TNC:
8619               xastir_snprintf(temp,
8620                               sizeof(temp),
8621                               langcode("IFDIN00001"),
8622                               langcode("UNIOP00006"),
8623                               i,
8624                               dtype[devices[i].device_type].device_name,
8625                               devices[i].device_name,
8626                               atoi(devices[i].radio_port),
8627                               devices[i].comment);
8628               strncat(temp,
8629                       "    ",
8630                       sizeof(temp) - 1 - strlen(temp));
8631               break;
8632 
8633             case DEVICE_NET_DATABASE:
8634             case DEVICE_SQL_DATABASE:
8635             case DEVICE_NET_STREAM:
8636             case DEVICE_NET_GPSD:
8637             case DEVICE_NET_WX:
8638             case DEVICE_NET_AGWPE:
8639               xastir_snprintf(temp,
8640                               sizeof(temp),
8641                               langcode("IFDIN00001"),
8642                               langcode("UNIOP00006"),
8643                               i,
8644                               dtype[devices[i].device_type].device_name,
8645                               devices[i].device_host_name,
8646                               devices[i].sp,
8647                               devices[i].comment);
8648               strncat(temp,
8649                       "    ",
8650                       sizeof(temp) - 1 - strlen(temp));
8651               break;
8652 
8653             case DEVICE_AX25_TNC:
8654               xastir_snprintf(temp,
8655                               sizeof(temp),
8656                               langcode("IFDIN00002"),
8657                               langcode("UNIOP00006"),
8658                               i,
8659                               dtype[devices[i].device_type].device_name,
8660                               devices[i].device_name,
8661                               devices[i].comment);
8662               strncat(temp,
8663                       "    ",
8664                       sizeof(temp) - 1 - strlen(temp));
8665               break;
8666 
8667             default:
8668               break;
8669           }
8670           /* look at list data (Must be "Device" port#) */
8671           XmListAddItem(control_iface_list, str_ptr = XmStringCreateLtoR(temp,XmFONTLIST_DEFAULT_TAG),n++);
8672 
8673           XmStringFree(str_ptr);
8674           break;
8675 
8676         case 3 :
8677           /* create item list */
8678           /* format list for device control*/
8679           if (port_data[i].active==DEVICE_IN_USE)
8680           {
8681             switch (port_data[i].status)
8682             {
8683               case DEVICE_DOWN:
8684                 xastir_snprintf(temp2,
8685                                 sizeof(temp2),
8686                                 "%s",
8687                                 langcode("IFDIN00006"));
8688                 break;
8689 
8690               case DEVICE_UP:
8691                 xastir_snprintf(temp2,
8692                                 sizeof(temp2),
8693                                 "%s",
8694                                 langcode("IFDIN00007"));
8695                 break;
8696 
8697               case DEVICE_ERROR:
8698                 xastir_snprintf(temp2,
8699                                 sizeof(temp2),
8700                                 "%s",
8701                                 langcode("IFDIN00008"));
8702                 break;
8703 
8704               default:
8705                 xastir_snprintf(temp2,
8706                                 sizeof(temp2),
8707                                 "%s",
8708                                 langcode("IFDIN00009"));
8709                 break;
8710             }
8711           }
8712           else
8713           {
8714             xastir_snprintf(temp2,
8715                             sizeof(temp2),
8716                             "%s",
8717                             langcode("IFDIN00006"));
8718           }
8719           switch (devices[i].device_type)
8720           {
8721             case DEVICE_SERIAL_TNC:
8722             case DEVICE_SERIAL_KISS_TNC:
8723             case DEVICE_SERIAL_TNC_HSP_GPS:
8724             case DEVICE_SERIAL_TNC_AUX_GPS:
8725             case DEVICE_SERIAL_GPS:
8726             case DEVICE_SERIAL_WX:
8727               xastir_snprintf(temp,
8728                               sizeof(temp),
8729                               langcode("IFDIN00003"),
8730                               langcode("UNIOP00006"),
8731                               i,
8732                               temp2,
8733                               dtype[devices[i].device_type].device_name,
8734                               devices[i].device_name,
8735                               devices[i].comment);
8736               strncat(temp,
8737                       "    ",
8738                       sizeof(temp) - 1 - strlen(temp));
8739               break;
8740 
8741             case DEVICE_SERIAL_MKISS_TNC:
8742               xastir_snprintf(temp,
8743                               sizeof(temp),
8744                               langcode("IFDIN00004"),
8745                               langcode("UNIOP00006"),
8746                               i,
8747                               temp2,
8748                               dtype[devices[i].device_type].device_name,
8749                               devices[i].device_name,
8750                               atoi(devices[i].radio_port),
8751                               devices[i].comment);
8752               strncat(temp,
8753                       "    ",
8754                       sizeof(temp) - 1 - strlen(temp));
8755               break;
8756 
8757             case DEVICE_NET_DATABASE:
8758             case DEVICE_SQL_DATABASE:
8759             case DEVICE_NET_STREAM:
8760             case DEVICE_NET_GPSD:
8761             case DEVICE_NET_WX:
8762             case DEVICE_NET_AGWPE:
8763               xastir_snprintf(temp,
8764                               sizeof(temp),
8765                               langcode("IFDIN00004"),
8766                               langcode("UNIOP00006"),
8767                               i,
8768                               temp2,
8769                               dtype[devices[i].device_type].device_name,
8770                               devices[i].device_host_name,
8771                               devices[i].sp,
8772                               devices[i].comment);
8773               strncat(temp,
8774                       "    ",
8775                       sizeof(temp) - 1 - strlen(temp));
8776               break;
8777 
8778             case DEVICE_AX25_TNC:
8779               xastir_snprintf(temp,
8780                               sizeof(temp),
8781                               langcode("IFDIN00005"),
8782                               langcode("UNIOP00006"),
8783                               i,
8784                               temp2,
8785                               dtype[devices[i].device_type].device_name,
8786                               devices[i].device_name,
8787                               devices[i].comment);
8788               strncat(temp,
8789                       "    ",
8790                       sizeof(temp) - 1 - strlen(temp));
8791               break;
8792 
8793             default:
8794               break;
8795           }
8796           /* look at list data (Must be "Device" port#) */
8797           XmListAddItem(control_iface_list, str_ptr = XmStringCreateLtoR(temp,XmFONTLIST_DEFAULT_TAG),n++);
8798           XmStringFree(str_ptr);
8799           break;
8800 
8801         case 4 :
8802           /* delete entire list available */
8803           XmListDeleteAllItems(control_iface_list);
8804           return; // Exit routine
8805           break;
8806 
8807         default:
8808           break;
8809       }
8810     }
8811   }
8812 }
8813 
8814 
8815 
8816 
8817 
8818 // Rebuild the list in the interface control dialog so that the
8819 // current status of each interface is shown.
8820 //
update_interface_list(void)8821 void update_interface_list(void)
8822 {
8823 
8824   // If the interface control dialog exists
8825   if (control_interface_dialog)
8826   {
8827 
8828     // Delete the entire list
8829     modify_device_list(4,0);
8830 
8831     // Create the list again with updated values
8832     modify_device_list(3,0);
8833   }
8834 }
8835 
8836 
8837 
8838 
8839 
interface_setup(Widget w,XtPointer clientData,XtPointer UNUSED (callData))8840 void interface_setup(Widget w, XtPointer clientData,  XtPointer UNUSED(callData) )
8841 {
8842   char *what = (char *)clientData;
8843   int x,i,do_w;
8844   char *temp;
8845   /*char temp2[100];*/
8846   XmString *list;
8847   int port;
8848   int found;
8849 
8850   port=-1;
8851   found=0;
8852   do_w=atoi(what);
8853 
8854   /* get option selected */
8855   XtVaGetValues(interface_type_list,
8856                 XmNitemCount,&i,
8857                 XmNitems,&list,
8858                 NULL);
8859 
8860   for (x=1; x<=i; x++)
8861   {
8862     if (XmListPosSelected(interface_type_list,x))
8863     {
8864       found=x;
8865       if (XmStringGetLtoR(list[(x-1)],XmFONTLIST_DEFAULT_TAG,&temp))
8866       {
8867         x=i+1;
8868       }
8869     }
8870   }
8871 
8872   /* if selection was made */
8873   if (found)
8874   {
8875     if (do_w==0)    // Add an interface
8876     {
8877       /* add */
8878       /*fprintf(stderr,"ADD DEVICE\n");*/
8879 
8880       /* delete list */
8881 
8882       begin_critical_section(&devices_lock, "interface_gui.c:interface_setup" );
8883       modify_device_list(0,0);
8884       end_critical_section(&devices_lock, "interface_gui.c:interface_setup" );
8885 
8886       port=get_open_device();     // Find an unused port number
8887       /*fprintf(stderr,"Open_port %d\n",port);*/
8888 
8889       if(port!=-1)
8890       {
8891         /*devices[port].device_type=found;*/
8892         /*fprintf(stderr,"adding device %s on port %d\n",dtype[found].device_name,port);*/
8893 
8894         switch (found)
8895         {
8896 
8897 //WE7U:  Set up for new KISS device type
8898           case DEVICE_SERIAL_KISS_TNC:
8899             // configure this port
8900             if (debug_level & 1)
8901             {
8902               fprintf(stderr,"ADD SERIAL KISS TNC\n");
8903             }
8904             Config_TNC(w, DEVICE_SERIAL_KISS_TNC, 0, port);
8905             break;
8906 
8907           case DEVICE_SERIAL_MKISS_TNC:
8908             // configure this port
8909             if (debug_level & 1)
8910             {
8911               fprintf(stderr,"ADD SERIAL MKISS TNC\n");
8912             }
8913             Config_TNC(w, DEVICE_SERIAL_MKISS_TNC, 0, port);
8914             break;
8915 
8916           case DEVICE_SERIAL_TNC:
8917             /* configure this port */
8918             if (debug_level & 1)
8919             {
8920               fprintf(stderr,"ADD SERIAL TNC\n");
8921             }
8922             Config_TNC(w, DEVICE_SERIAL_TNC, 0, port);
8923             break;
8924 
8925           case DEVICE_SERIAL_TNC_HSP_GPS:
8926             /* configure this port */
8927             if (debug_level & 1)
8928             {
8929               fprintf(stderr,"ADD SERIAL TNC w HSP GPS\n");
8930             }
8931             Config_TNC(w, DEVICE_SERIAL_TNC_HSP_GPS, 0, port);
8932             break;
8933 
8934           case DEVICE_SERIAL_TNC_AUX_GPS:
8935             /* configure this port */
8936             if (debug_level & 1)
8937             {
8938               fprintf(stderr,"ADD SERIAL TNC w AUX GPS\n");
8939             }
8940             Config_TNC(w, DEVICE_SERIAL_TNC_AUX_GPS, 0, port);
8941             break;
8942 
8943           case DEVICE_SERIAL_GPS:
8944             /* configure this port */
8945             if (debug_level & 1)
8946             {
8947               fprintf(stderr,"ADD SERIAL GPS\n");
8948             }
8949             Config_GPS(w, 0, port);
8950             break;
8951 
8952           case DEVICE_SERIAL_WX:
8953             /* configure this port */
8954             if (debug_level & 1)
8955             {
8956               fprintf(stderr,"ADD SERIAL WX\n");
8957             }
8958             Config_WX(w, 0, port);
8959             break;
8960 
8961           case DEVICE_NET_WX:
8962             /* configure this port */
8963             if (debug_level & 1)
8964             {
8965               fprintf(stderr,"ADD Network WX\n");
8966             }
8967             Config_NWX(w, 0, port);
8968             break;
8969 
8970           case DEVICE_NET_GPSD:
8971             /* configure this port */
8972             if (debug_level & 1)
8973             {
8974               fprintf(stderr,"ADD Network GPS\n");
8975             }
8976             Config_NGPS(w, 0, port);
8977             break;
8978 
8979           case DEVICE_AX25_TNC:
8980             /* configure this port */
8981             if (debug_level & 1)
8982 #ifdef HAVE_LIBAX25
8983               fprintf(stderr,"ADD AX.25 TNC\n");
8984             Config_AX25(w, 0, port);
8985 #else   // HAVE_LIBAX25
8986               fprintf(stderr,"AX.25 support not compiled into Xastir!\n");
8987             popup_message(langcode("POPEM00004"),langcode("POPEM00021"));
8988 
8989 #endif  // HAVE_LIBAX25
8990             break;
8991 
8992           case DEVICE_NET_STREAM:
8993             /* configure this port */
8994             if (debug_level & 1)
8995             {
8996               fprintf(stderr,"ADD NET STREAM\n");
8997             }
8998             Config_Inet(w, 0, port);
8999             break;
9000 
9001           case DEVICE_NET_DATABASE:
9002             /* configure this port */
9003             if (debug_level & 1)
9004             {
9005               fprintf(stderr,"ADD NET DATABASE\n");
9006             }
9007             Config_Database(w, 0, port);
9008             break;
9009 #ifdef HAVE_DB
9010           case DEVICE_SQL_DATABASE:
9011             /* configure this port */
9012             if (debug_level & 1)
9013             {
9014               fprintf(stderr,"ADD SQL DATABASE\n");
9015             }
9016             Config_sql_Database(w, 0, port);
9017             break;
9018 #endif /* HAVE_DB */
9019           case DEVICE_NET_AGWPE:
9020             /* configure this port */
9021             if (debug_level & 1)
9022             {
9023               fprintf(stderr,"ADD NET AGWPE\n");
9024             }
9025             Config_AGWPE(w, 0, port);
9026             break;
9027 
9028           default:
9029             break;
9030         }
9031       }
9032 
9033       /* rebuild list */
9034 
9035       begin_critical_section(&devices_lock, "interface_gui.c:interface_setup" );
9036       modify_device_list(2,0);
9037       end_critical_section(&devices_lock, "interface_gui.c:interface_setup" );
9038 
9039     }
9040     /*fprintf(stderr,"SELECTION is %s\n",temp);*/
9041     XtFree(temp);
9042   }
9043 }
9044 
9045 
9046 
9047 
9048 
9049 // clientData:
9050 //      0 = Add
9051 //      1 = Delete
9052 //      2 = Properties
9053 //
interface_option(Widget w,XtPointer clientData,XtPointer UNUSED (callData))9054 void interface_option(Widget w, XtPointer clientData,  XtPointer UNUSED(callData) )
9055 {
9056   Widget pane, scrollwindow, form, label, button_add, button_cancel;
9057   char *what = (char *)clientData;
9058   int i,x,n,do_w;
9059   char *temp;
9060   char temp2[50];
9061   int port;
9062   XmString *list;
9063 //  int data_on,pos;
9064   int found;
9065   Atom delw;
9066   XmString str_ptr;
9067   Arg al[50];                    /* Arg List */
9068   register unsigned int ac = 0;           /* Arg Count */
9069 
9070 //  data_on=0;
9071 //  pos=0;
9072   found=0;
9073   do_w=atoi(what);
9074   switch (do_w)
9075   {
9076     case 0:/* add interface */
9077       if (!choose_interface_dialog)
9078       {
9079         choose_interface_dialog = XtVaCreatePopupShell(langcode("WPUPCIF002"),
9080                                   xmDialogShellWidgetClass, appshell,
9081                                   XmNdeleteResponse, XmDESTROY,
9082                                   XmNdefaultPosition, FALSE,
9083                                   XmNresize, FALSE,
9084                                   XmNfontList, fontlist1,
9085                                   NULL);
9086 
9087         pane = XtVaCreateWidget("interface_option pane",xmPanedWindowWidgetClass, choose_interface_dialog,
9088                                 XmNbackground, colors[0xff],
9089                                 NULL);
9090 
9091         scrollwindow = XtVaCreateManagedWidget("scrollwindow",
9092                                                xmScrolledWindowWidgetClass,
9093                                                pane,
9094                                                XmNscrollingPolicy, XmAUTOMATIC,
9095                                                NULL);
9096 
9097         form =  XtVaCreateWidget("interface_option form",
9098                                  xmFormWidgetClass,
9099                                  scrollwindow,
9100                                  XmNfractionBase, 5,
9101                                  XmNbackground, colors[0xff],
9102                                  XmNautoUnmanage, FALSE,
9103                                  XmNshadowThickness, 1,
9104                                  NULL);
9105 
9106         label = XtVaCreateManagedWidget(langcode("WPUPCIF002"),xmLabelWidgetClass, form,
9107                                         XmNtopAttachment, XmATTACH_FORM,
9108                                         XmNtopOffset, 10,
9109                                         XmNbottomAttachment, XmATTACH_NONE,
9110                                         XmNleftAttachment, XmATTACH_FORM,
9111                                         XmNleftOffset, 5,
9112                                         XmNrightAttachment, XmATTACH_NONE,
9113                                         XmNbackground, colors[0xff],
9114                                         XmNfontList, fontlist1,
9115                                         NULL);
9116 
9117         /*set args for color */
9118         ac=0;
9119         XtSetArg(al[ac], XmNbackground, colors[0xff]);
9120         ac++;
9121         XtSetArg(al[ac], XmNvisibleItemCount, MAX_IFACE_DEVICE_TYPES);
9122         ac++;
9123         XtSetArg(al[ac], XmNtraversalOn, TRUE);
9124         ac++;
9125         XtSetArg(al[ac], XmNshadowThickness, 3);
9126         ac++;
9127         XtSetArg(al[ac], XmNselectionPolicy, XmSINGLE_SELECT);
9128         ac++;
9129         XtSetArg(al[ac], XmNscrollBarPlacement, XmBOTTOM_RIGHT);
9130         ac++;
9131         XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET);
9132         ac++;
9133         XtSetArg(al[ac], XmNtopWidget, label);
9134         ac++;
9135         XtSetArg(al[ac], XmNtopOffset, 5);
9136         ac++;
9137         XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE);
9138         ac++;
9139         XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM);
9140         ac++;
9141         XtSetArg(al[ac], XmNrightOffset, 5);
9142         ac++;
9143         XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM);
9144         ac++;
9145         XtSetArg(al[ac], XmNleftOffset, 5);
9146         ac++;
9147         XtSetArg(al[ac], XmNfontList, fontlist1);
9148         ac++;
9149 
9150         interface_type_list = XmCreateScrolledList(form,"interface_option list",al,ac);
9151         n=1;
9152         for (i=1; i<MAX_IFACE_DEVICE_TYPES; i++)
9153         {
9154           XmListAddItem(interface_type_list, str_ptr = XmStringCreateLtoR(dtype[i].device_name,XmFONTLIST_DEFAULT_TAG),n++);
9155           XmStringFree(str_ptr);
9156         }
9157         button_add = XtVaCreateManagedWidget(langcode("UNIOP00007"),xmPushButtonGadgetClass, form,
9158                                              XmNnavigationType, XmTAB_GROUP,
9159                                              XmNtraversalOn, TRUE,
9160                                              XmNtopAttachment, XmATTACH_WIDGET,
9161                                              XmNtopWidget, XtParent(interface_type_list),
9162                                              XmNtopOffset,10,
9163                                              XmNbottomAttachment, XmATTACH_FORM,
9164                                              XmNbottomOffset, 5,
9165                                              XmNleftAttachment, XmATTACH_POSITION,
9166                                              XmNleftPosition, 1,
9167                                              XmNrightAttachment, XmATTACH_POSITION,
9168                                              XmNrightPosition, 2,
9169                                              XmNbackground, colors[0xff],
9170                                              XmNfontList, fontlist1,
9171                                              NULL);
9172 
9173         button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00003"),xmPushButtonGadgetClass, form,
9174                                                 XmNnavigationType, XmTAB_GROUP,
9175                                                 XmNtraversalOn, TRUE,
9176                                                 XmNtopAttachment, XmATTACH_WIDGET,
9177                                                 XmNtopWidget, XtParent(interface_type_list),
9178                                                 XmNtopOffset,10,
9179                                                 XmNbottomAttachment, XmATTACH_FORM,
9180                                                 XmNbottomOffset, 5,
9181                                                 XmNleftAttachment, XmATTACH_POSITION,
9182                                                 XmNleftPosition, 3,
9183                                                 XmNrightAttachment, XmATTACH_POSITION,
9184                                                 XmNrightPosition, 4,
9185                                                 XmNbackground, colors[0xff],
9186                                                 XmNfontList, fontlist1,
9187                                                 NULL);
9188 
9189         XtAddCallback(button_cancel, XmNactivateCallback, Choose_interface_destroy_shell, choose_interface_dialog);
9190         XtAddCallback(button_add, XmNactivateCallback, interface_setup, "0");
9191 
9192         pos_dialog(choose_interface_dialog);
9193 
9194         delw = XmInternAtom(XtDisplay(choose_interface_dialog),"WM_DELETE_WINDOW", FALSE);
9195         XmAddWMProtocolCallback(choose_interface_dialog, delw, Choose_interface_destroy_shell, (XtPointer)configure_interface_dialog);
9196 
9197         XtManageChild(form);
9198         XtManageChild(interface_type_list);
9199         XtVaSetValues(interface_type_list, XmNbackground, colors[0x0f], NULL);
9200         XtManageChild(pane);
9201 
9202         resize_dialog(form, choose_interface_dialog);
9203 
9204         XtPopup(choose_interface_dialog,XtGrabNone);
9205 
9206         // Move focus to the Cancel button.  This appears to highlight the
9207         // button fine, but we're not able to hit the <Enter> key to
9208         // have that default function happen.  Note:  We _can_ hit the
9209         // <SPACE> key, and that activates the option.
9210 //                XmUpdateDisplay(choose_interface_dialog);
9211         XmProcessTraversal(button_cancel, XmTRAVERSE_CURRENT);
9212 
9213       }
9214       else
9215       {
9216         (void)XRaiseWindow(XtDisplay(choose_interface_dialog), XtWindow(choose_interface_dialog));
9217       }
9218       break;
9219 
9220     case 1:/* delete interface */
9221 
9222     case 2:/* interface properties */
9223       /* get option selected */
9224       XtVaGetValues(control_iface_list,
9225                     XmNitemCount,&i,
9226                     XmNitems,&list,
9227                     NULL);
9228 
9229       for (x=1; x<=i; x++)
9230       {
9231         if(XmListPosSelected(control_iface_list,x))
9232         {
9233           found=1;
9234           if (XmStringGetLtoR(list[(x-1)],XmFONTLIST_DEFAULT_TAG,&temp))
9235           {
9236             x=i+1;
9237           }
9238         }
9239       }
9240 
9241       /* if selection was made */
9242       if (found)
9243       {
9244         /* look at list data (Must be "Device" port#) */
9245         if (2 != sscanf(temp,"%49s %d",temp2,&port))
9246         {
9247           fprintf(stderr,"interface_option:sscanf parsing error\n");
9248         }
9249         if(do_w==1)
9250         {
9251           /* delete interface */
9252           /*fprintf(stderr,"delete interface port %d\n",port);*/
9253 
9254           if (port_data[port].active==DEVICE_IN_USE)
9255           {
9256             /* shut down and delete port */
9257             /*fprintf(stderr,"Shutting down port %d\n",port);*/
9258             (void)del_device(port);
9259           }
9260 
9261           begin_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9262 
9263           /* delete item at that port */
9264           modify_device_list(1,port);
9265           /* Clear device */
9266           devices[port].device_type=DEVICE_NONE;
9267           devices[port].device_name[0] = '\0';
9268           devices[port].radio_port[0] = '\0';
9269           devices[port].device_converse_string[0] = '\0';
9270           devices[port].device_host_name[0] = '\0';
9271           devices[port].device_host_pswd[0] = '\0';
9272           devices[port].device_host_filter_string[0] = '\0';
9273           devices[port].comment[0] = '\0';
9274           devices[port].unproto1[0] = '\0';
9275           devices[port].unproto2[0] = '\0';
9276           devices[port].unproto3[0] = '\0';
9277           devices[port].unproto_igate[0] = '\0';
9278           devices[port].style=0;
9279           devices[port].igate_options=0;
9280           devices[port].transmit_data=0;
9281           devices[port].reconnect=0;
9282           devices[port].connect_on_startup=0;
9283 
9284           end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9285 
9286         }
9287         else
9288         {
9289           /* Properties */
9290 
9291           begin_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9292 
9293           if (debug_level & 1)
9294           {
9295             fprintf(stderr,"Changing device  %s on port %d\n",
9296                     dtype[devices[port].device_type].device_name,port);
9297           }
9298           switch (devices[port].device_type)
9299           {
9300             case DEVICE_SERIAL_TNC:
9301 
9302               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9303 
9304               /* configure this port */
9305               if (debug_level & 1)
9306               {
9307                 fprintf(stderr,"Modify SERIAL TNC\n");
9308               }
9309               Config_TNC(w, DEVICE_SERIAL_TNC, 1, port);
9310               break;
9311 
9312             case DEVICE_SERIAL_KISS_TNC:
9313 
9314               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9315 
9316               /* configure this port */
9317               if (debug_level & 1)
9318               {
9319                 fprintf(stderr,"Modify SERIAL KISS TNC\n");
9320               }
9321               Config_TNC(w, DEVICE_SERIAL_KISS_TNC, 1, port);
9322               break;
9323 
9324             case DEVICE_SERIAL_MKISS_TNC:
9325 
9326               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9327 
9328               /* configure this port */
9329               if (debug_level & 1)
9330               {
9331                 fprintf(stderr,"Modify SERIAL MKISS TNC\n");
9332               }
9333               Config_TNC(w, DEVICE_SERIAL_MKISS_TNC, 1, port);
9334               break;
9335 
9336             case DEVICE_SERIAL_TNC_HSP_GPS:
9337 
9338               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9339 
9340               /* configure this port */
9341               if (debug_level & 1)
9342               {
9343                 fprintf(stderr,"Modify SERIAL TNC with HSP GPS\n");
9344               }
9345               Config_TNC(w, DEVICE_SERIAL_TNC_HSP_GPS, 1, port);
9346               break;
9347 
9348             case DEVICE_SERIAL_TNC_AUX_GPS:
9349 
9350               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9351 
9352               /* configure this port */
9353               if (debug_level & 1)
9354               {
9355                 fprintf(stderr,"Modify SERIAL TNC with AUX GPS\n");
9356               }
9357               Config_TNC(w, DEVICE_SERIAL_TNC_AUX_GPS, 1, port);
9358               break;
9359 
9360             case DEVICE_SERIAL_GPS:
9361 
9362               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9363 
9364               /* configure this port */
9365               if (debug_level & 1)
9366               {
9367                 fprintf(stderr,"Modify SERIAL GPS\n");
9368               }
9369               Config_GPS(w, 1, port);
9370               break;
9371 
9372             case DEVICE_SERIAL_WX:
9373 
9374               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9375 
9376               /* configure this port */
9377               if (debug_level & 1)
9378               {
9379                 fprintf(stderr,"Modify SERIAL WX\n");
9380               }
9381               Config_WX(w, 1, port);
9382               break;
9383 
9384             case DEVICE_NET_WX:
9385 
9386               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9387 
9388               /* configure this port */
9389               if (debug_level & 1)
9390               {
9391                 fprintf(stderr,"Modify Network WX\n");
9392               }
9393               Config_NWX(w, 1, port);
9394               break;
9395 
9396             case DEVICE_NET_GPSD:
9397 
9398               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9399 
9400               /* configure this port */
9401               if (debug_level & 1)
9402               {
9403                 fprintf(stderr,"Modify Network GPS\n");
9404               }
9405               Config_NGPS(w, 1, port);
9406               break;
9407 
9408             case DEVICE_AX25_TNC:
9409 
9410               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9411 
9412               /* configure this port */
9413               if (debug_level & 1)
9414               {
9415                 fprintf(stderr,"Modify AX.25 TNC\n");
9416               }
9417               Config_AX25(w, 1, port);
9418               break;
9419 
9420             case DEVICE_NET_STREAM:
9421 
9422               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9423 
9424               /* configure this port */
9425               if (debug_level & 1)
9426               {
9427                 fprintf(stderr,"Modify NET STREAM\n");
9428               }
9429               Config_Inet(w, 1, port);
9430               break;
9431 
9432             case DEVICE_NET_DATABASE:
9433 
9434               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9435 
9436               /* configure this port */
9437               if (debug_level & 1)
9438               {
9439                 fprintf(stderr,"Modify NET DATABASE\n");
9440               }
9441               Config_Database(w, 1, port);
9442               break;
9443 #ifdef HAVE_DB
9444             case DEVICE_SQL_DATABASE:
9445 
9446               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9447 
9448               /* configure this port */
9449               if (debug_level & 1)
9450               {
9451                 fprintf(stderr,"Modify SQL DATABASE\n");
9452               }
9453               Config_sql_Database(w, 1, port);
9454               break;
9455 #endif /* HAVE_DB */
9456             case DEVICE_NET_AGWPE:
9457 
9458               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9459 
9460               /* configure this port */
9461               if (debug_level & 1)
9462               {
9463                 fprintf(stderr,"Modify NET AGWPE\n");
9464               }
9465               Config_AGWPE(w, 1, port);
9466               break;
9467 
9468             default:
9469 
9470               end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
9471 
9472               break;
9473           }
9474         }
9475         /*fprintf(stderr,"interface - %s\n",temp);*/
9476         XtFree(temp);
9477       }
9478       break;
9479 
9480     default:
9481       break;
9482   }
9483 }
9484 
9485 
9486 
9487 
9488 
9489 /*****************************************************/
9490 /* Control Interface GUI                           */
9491 /*****************************************************/
9492 extern void startup_all_or_defined_port(int port);
9493 extern void shutdown_all_active_or_defined_port(int port);
9494 
9495 
9496 
9497 
9498 
start_stop_interface(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))9499 void start_stop_interface( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
9500 {
9501   char *which = (char *)clientData;
9502   int do_w;
9503   char temp2[50];
9504   int i,x;
9505   char *temp;
9506   int port;
9507   XmString *list;
9508   int found;
9509 
9510   busy_cursor(appshell);
9511 
9512   found=0;
9513   /* get option selected */
9514   XtVaGetValues(control_iface_list,
9515                 XmNitemCount,&i,
9516                 XmNitems,&list,
9517                 NULL);
9518 
9519   for (x=1; x<=i; x++)
9520   {
9521     if (XmListPosSelected(control_iface_list,x))
9522     {
9523       found=1;
9524       if (XmStringGetLtoR(list[(x-1)],XmFONTLIST_DEFAULT_TAG,&temp))
9525       {
9526         x=i+1;
9527       }
9528     }
9529   }
9530 
9531   /* if selection was made */
9532   if (found)
9533   {
9534 
9535     /* delete list */
9536 
9537 //begin_critical_section(&devices_lock, "interface_gui.c:start_stop_interface" );
9538 //        modify_device_list(4,0);
9539 //end_critical_section(&devices_lock, "interface_gui.c:start_stop_interface" );
9540 
9541     /* look at list data (Must be "Device" port#) */
9542     if (2 != sscanf(temp,"%49s %d",temp2,&port))
9543     {
9544       fprintf(stderr,"start_stop_interface:sscanf parsing error\n");
9545     }
9546     /*fprintf(stderr,"Port to change %d\n",port);*/
9547     do_w = atoi(which);
9548     if (do_w)
9549     {
9550       shutdown_all_active_or_defined_port(port);
9551     }
9552     else
9553     {
9554       /*fprintf(stderr,"DO port up\n");*/
9555       if (port_data[port].active==DEVICE_IN_USE)
9556       {
9557         /*fprintf(stderr,"Device was up, Shutting down\n");*/
9558         shutdown_all_active_or_defined_port(port);
9559       }
9560       /* now start port */
9561       startup_all_or_defined_port(port);
9562     }
9563     /* rebuild list */
9564 
9565 //begin_critical_section(&devices_lock, "interface_gui.c:start_stop_interface" );
9566 //        modify_device_list(3,0);
9567 //end_critical_section(&devices_lock, "interface_gui.c:start_stop_interface" );
9568 
9569     // Rebuild the interface control list
9570     update_interface_list();
9571 
9572     XtFree(temp);
9573   }
9574 }
9575 
9576 
9577 
9578 
9579 
start_stop_all_interfaces(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))9580 void start_stop_all_interfaces( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
9581 {
9582   char *which = (char *)clientData;   // Whether to start or stop the interfaces
9583   int do_w;
9584 
9585   busy_cursor(appshell);
9586 
9587 //begin_critical_section(&devices_lock, "interface_gui.c:start_stop_all_interfaces" );
9588 //    modify_device_list(4,0);
9589 //end_critical_section(&devices_lock, "interface_gui.c:start_stop_all_interfaces" );
9590 
9591   do_w = atoi(which);
9592   if (do_w)       // We wish to shut down all ports
9593   {
9594     shutdown_all_active_or_defined_port(-1);
9595   }
9596   else          // We wish to start up all ports
9597   {
9598     startup_all_or_defined_port(-2);
9599   }
9600   /* rebuild list */
9601 
9602 //begin_critical_section(&devices_lock, "interface_gui.c:start_stop_all_interfaces" );
9603 //    modify_device_list(3,0);
9604 //end_critical_section(&devices_lock, "interface_gui.c:start_stop_all_interfaces" );
9605 
9606   // Rebuild the interface control list
9607   update_interface_list();
9608 
9609 }
9610 
9611 
9612 
9613 
9614 
Control_interface_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))9615 void Control_interface_destroy_shell( Widget UNUSED(widget), XtPointer clientData,  XtPointer UNUSED(callData) )
9616 {
9617   Widget shell = (Widget) clientData;
9618   XtPopdown(shell);
9619 
9620   begin_critical_section(&control_interface_dialog_lock, "interface_gui.c:Control_interface_destroy_shell" );
9621 
9622   XtDestroyWidget(shell);
9623   control_interface_dialog = (Widget)NULL;
9624 
9625   end_critical_section(&control_interface_dialog_lock, "interface_gui.c:Control_interface_destroy_shell" );
9626 
9627 }
9628 
9629 
9630 
9631 
9632 
control_interface(Widget UNUSED (w),XtPointer UNUSED (clientData),XtPointer UNUSED (callData))9633 void control_interface( Widget UNUSED(w),  XtPointer UNUSED(clientData),  XtPointer UNUSED(callData) )
9634 {
9635   static Widget scrollwindow, rowcol, form, button_start, button_stop, button_start_all, button_stop_all, button_cancel;
9636   static Widget button_add, button_delete, button_properties;
9637   Atom delw;
9638   Arg al[50];                    /* Arg List */
9639   register unsigned int ac = 0;           /* Arg Count */
9640 
9641 
9642   if(!control_interface_dialog)
9643   {
9644 
9645     begin_critical_section(&control_interface_dialog_lock, "interface_gui.c:control_interface" );
9646 
9647     control_interface_dialog = XtVaCreatePopupShell(langcode("IFPUPCT000"),
9648                                xmDialogShellWidgetClass, appshell,
9649                                XmNdeleteResponse, XmDESTROY,
9650                                XmNdefaultPosition, FALSE,
9651                                XmNresize, TRUE,
9652                                XmNfontList, fontlist1,
9653                                NULL);
9654 
9655     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
9656                                            xmScrolledWindowWidgetClass,
9657                                            control_interface_dialog,
9658                                            XmNscrollingPolicy, XmAUTOMATIC,
9659                                            NULL);
9660 
9661     rowcol =  XtVaCreateWidget("control_interface rowcol",
9662                                xmRowColumnWidgetClass,
9663                                scrollwindow,
9664                                XmNorientation, XmVERTICAL,
9665                                XmNnumColumns, 1,
9666                                XmNpacking, XmPACK_TIGHT,
9667                                XmNisAligned, TRUE,
9668                                XmNentryAlignment, XmALIGNMENT_CENTER,
9669                                XmNkeyboardFocusPolicy, XmEXPLICIT,
9670                                XmNbackground, colors[0xff],
9671                                XmNautoUnmanage, FALSE,
9672                                XmNshadowThickness, 1,
9673                                NULL);
9674 
9675     /*set args for color */
9676     ac=0;
9677     XtSetArg(al[ac], XmNbackground, colors[0xff]);
9678     ac++;
9679     XtSetArg(al[ac], XmNvisibleItemCount, MAX_IFACE_DEVICES);
9680     ac++;
9681     XtSetArg(al[ac], XmNtraversalOn, TRUE);
9682     ac++;
9683     XtSetArg(al[ac], XmNshadowThickness, 3);
9684     ac++;
9685     XtSetArg(al[ac], XmNselectionPolicy, XmSINGLE_SELECT);
9686     ac++;
9687     XtSetArg(al[ac], XmNscrollBarPlacement, XmBOTTOM_RIGHT);
9688     ac++;
9689     XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM);
9690     ac++;
9691     XtSetArg(al[ac], XmNtopOffset, 5);
9692     ac++;
9693     XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM);
9694     ac++;
9695     XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM);
9696     ac++;
9697     XtSetArg(al[ac], XmNrightOffset, 5);
9698     ac++;
9699     XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM);
9700     ac++;
9701     XtSetArg(al[ac], XmNleftOffset, 5);
9702     ac++;
9703     XtSetArg(al[ac], XmNfontList, fontlist1);
9704     ac++;
9705     control_iface_list = XmCreateScrolledList(rowcol,"control_interface list",al,ac);
9706 
9707     /* build device list */
9708 
9709     begin_critical_section(&devices_lock, "interface_gui.c:control_interface" );
9710     modify_device_list(3,0);
9711     end_critical_section(&devices_lock, "interface_gui.c:control_interface" );
9712 
9713     form =  XtVaCreateWidget("control_interface form",xmFormWidgetClass, rowcol,
9714                              XmNfractionBase, 4,
9715                              XmNbackground, colors[0xff],
9716                              XmNautoUnmanage, FALSE,
9717                              XmNshadowThickness, 1,
9718                              NULL);
9719 
9720     button_start = XtVaCreateManagedWidget(langcode("IFPUPCT001"),xmPushButtonGadgetClass, form,
9721                                            XmNnavigationType, XmTAB_GROUP,
9722                                            XmNtraversalOn, TRUE,
9723                                            XmNtopAttachment, XmATTACH_FORM,
9724                                            XmNtopOffset, 5,
9725                                            XmNleftAttachment, XmATTACH_FORM,
9726                                            XmNrightAttachment, XmATTACH_POSITION,
9727                                            XmNrightPosition, 1,
9728                                            XmNbottomAttachment, XmATTACH_NONE,
9729                                            XmNbackground, colors[0xff],
9730                                            XmNnavigationType, XmTAB_GROUP,
9731                                            XmNfontList, fontlist1,
9732                                            NULL);
9733 
9734     button_start_all = XtVaCreateManagedWidget(langcode("IFPUPCT003"),xmPushButtonGadgetClass, form,
9735                        XmNnavigationType, XmTAB_GROUP,
9736                        XmNtraversalOn, TRUE,
9737                        XmNtopAttachment, XmATTACH_FORM,
9738                        XmNtopOffset, 5,
9739                        XmNleftAttachment, XmATTACH_POSITION,
9740                        XmNleftPosition, 1,
9741                        XmNrightAttachment, XmATTACH_POSITION,
9742                        XmNrightPosition, 2,
9743                        XmNbottomAttachment, XmATTACH_NONE,
9744                        XmNbackground, colors[0xff],
9745                        XmNnavigationType, XmTAB_GROUP,
9746                        XmNfontList, fontlist1,
9747                        NULL);
9748 
9749     button_add = XtVaCreateManagedWidget(langcode("UNIOP00007"),xmPushButtonGadgetClass, form,
9750                                          XmNnavigationType, XmTAB_GROUP,
9751                                          XmNtraversalOn, TRUE,
9752                                          XmNtopAttachment, XmATTACH_FORM,
9753                                          XmNtopOffset,5,
9754                                          XmNbottomAttachment, XmATTACH_NONE,
9755                                          XmNleftAttachment, XmATTACH_POSITION,
9756                                          XmNleftPosition, 2,
9757                                          XmNrightAttachment, XmATTACH_POSITION,
9758                                          XmNrightPosition, 3,
9759                                          XmNbackground, colors[0xff],
9760                                          XmNfontList, fontlist1,
9761                                          NULL);
9762 
9763     button_delete = XtVaCreateManagedWidget(langcode("UNIOP00008"),xmPushButtonGadgetClass, form,
9764                                             XmNnavigationType, XmTAB_GROUP,
9765                                             XmNtraversalOn, TRUE,
9766                                             XmNtopAttachment, XmATTACH_FORM,
9767                                             XmNtopOffset,5,
9768                                             XmNbottomAttachment, XmATTACH_NONE,
9769                                             XmNleftAttachment, XmATTACH_POSITION,
9770                                             XmNleftPosition, 3,
9771                                             XmNrightAttachment, XmATTACH_POSITION,
9772                                             XmNrightPosition, 4,
9773                                             XmNbackground, colors[0xff],
9774                                             XmNfontList, fontlist1,
9775                                             NULL);
9776 
9777     button_stop = XtVaCreateManagedWidget(langcode("IFPUPCT002"),xmPushButtonGadgetClass, form,
9778                                           XmNnavigationType, XmTAB_GROUP,
9779                                           XmNtraversalOn, TRUE,
9780                                           XmNtopAttachment, XmATTACH_WIDGET,
9781                                           XmNtopWidget, button_start,
9782                                           XmNleftAttachment, XmATTACH_POSITION,
9783                                           XmNleftPosition, 0,
9784                                           XmNrightAttachment, XmATTACH_POSITION,
9785                                           XmNrightPosition, 1,
9786                                           XmNbottomAttachment, XmATTACH_FORM,
9787                                           XmNbackground, colors[0xff],
9788                                           XmNnavigationType, XmTAB_GROUP,
9789                                           XmNfontList, fontlist1,
9790                                           NULL);
9791 
9792     button_stop_all = XtVaCreateManagedWidget(langcode("IFPUPCT004"),xmPushButtonGadgetClass, form,
9793                       XmNnavigationType, XmTAB_GROUP,
9794                       XmNtraversalOn, TRUE,
9795                       XmNtopAttachment, XmATTACH_WIDGET,
9796                       XmNtopWidget, button_start,
9797                       XmNleftAttachment, XmATTACH_POSITION,
9798                       XmNleftPosition, 1,
9799                       XmNrightAttachment, XmATTACH_POSITION,
9800                       XmNrightPosition, 2,
9801                       XmNbottomAttachment, XmATTACH_FORM,
9802                       XmNbackground, colors[0xff],
9803                       XmNnavigationType, XmTAB_GROUP,
9804                       XmNfontList, fontlist1,
9805                       NULL);
9806 
9807     button_properties = XtVaCreateManagedWidget(langcode("UNIOP00009"),xmPushButtonGadgetClass, form,
9808                         XmNnavigationType, XmTAB_GROUP,
9809                         XmNtraversalOn, TRUE,
9810                         XmNtopAttachment, XmATTACH_WIDGET,
9811                         XmNtopWidget, button_start,
9812                         XmNbottomAttachment, XmATTACH_FORM,
9813                         XmNleftAttachment, XmATTACH_POSITION,
9814                         XmNleftPosition, 2,
9815                         XmNrightAttachment, XmATTACH_POSITION,
9816                         XmNrightPosition, 3,
9817                         XmNbackground, colors[0xff],
9818                         XmNfontList, fontlist1,
9819                         NULL);
9820 
9821     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00003"),xmPushButtonGadgetClass, form,
9822                                             XmNnavigationType, XmTAB_GROUP,
9823                                             XmNtraversalOn, TRUE,
9824                                             XmNtopAttachment, XmATTACH_WIDGET,
9825                                             XmNtopWidget, button_start,
9826                                             XmNrightAttachment, XmATTACH_FORM,
9827                                             XmNleftAttachment, XmATTACH_POSITION,
9828                                             XmNleftPosition, 3,
9829                                             XmNbottomAttachment, XmATTACH_FORM,
9830                                             XmNbackground, colors[0xff],
9831                                             XmNnavigationType, XmTAB_GROUP,
9832                                             XmNfontList, fontlist1,
9833                                             NULL);
9834 
9835     XtAddCallback(button_add, XmNactivateCallback, interface_option, "0");
9836     XtAddCallback(button_delete, XmNactivateCallback, interface_option, "1");
9837     XtAddCallback(button_properties, XmNactivateCallback, interface_option, "2");
9838 
9839     XtAddCallback(button_cancel, XmNactivateCallback, Control_interface_destroy_shell, control_interface_dialog);
9840     XtAddCallback(button_start, XmNactivateCallback, start_stop_interface, "0");
9841     XtAddCallback(button_stop, XmNactivateCallback, start_stop_interface, "1");
9842 
9843     XtAddCallback(button_start_all, XmNactivateCallback, start_stop_all_interfaces, "0");
9844     XtAddCallback(button_stop_all, XmNactivateCallback, start_stop_all_interfaces, "1");
9845 
9846     delw = XmInternAtom(XtDisplay(control_interface_dialog),"WM_DELETE_WINDOW", FALSE);
9847     XmAddWMProtocolCallback(control_interface_dialog, delw, Control_interface_destroy_shell, (XtPointer)control_interface_dialog);
9848 
9849     XtVaSetValues(control_iface_list, XmNbackground, colors[0x0f], NULL);
9850 
9851     pos_dialog(control_interface_dialog);
9852 
9853     XtManageChild(control_iface_list);
9854     XtManageChild(form);
9855     XtManageChild(rowcol);
9856 
9857     resize_dialog(rowcol, control_interface_dialog);
9858 
9859     end_critical_section(&control_interface_dialog_lock, "interface_gui.c:control_interface" );
9860 
9861     XtPopup(control_interface_dialog,XtGrabNone);
9862 
9863     // Move focus to the Cancel button.  This appears to highlight the
9864     // button fine, but we're not able to hit the <Enter> key to
9865     // have that default function happen.  Note:  We _can_ hit the
9866     // <SPACE> key, and that activates the option.
9867 //        XmUpdateDisplay(control_interface_dialog);
9868     XmProcessTraversal(button_cancel, XmTRAVERSE_CURRENT);
9869 
9870   }
9871   else
9872   {
9873     (void)XRaiseWindow(XtDisplay(control_interface_dialog), XtWindow(control_interface_dialog));
9874   }
9875 }
9876 
9877 
9878 
9879 
9880 
interface_status(Widget w)9881 void interface_status(Widget w)
9882 {
9883   int i;
9884   char s;
9885   char opt;
9886   int read_data;
9887   int write_data;
9888 
9889   read_data=0;
9890   write_data=0;
9891   s='\0';
9892 
9893   begin_critical_section(&devices_lock, "interface_gui.c:interface_status" );
9894 
9895   for (i=0; i < MAX_IFACE_DEVICES; i++)
9896   {
9897     read_data=0;
9898     write_data=0;
9899     opt='\0';
9900 
9901     if (devices[i].device_type!=DEVICE_NONE)
9902     {
9903       switch(devices[i].device_type)
9904       {
9905         case DEVICE_SERIAL_TNC:
9906           s='0';  // Select icon for status bar
9907           break;
9908 
9909         case DEVICE_SERIAL_TNC_HSP_GPS:
9910           s='1';  // Select icon for status bar
9911           break;
9912 
9913         case DEVICE_SERIAL_GPS:
9914           s='2';  // Select icon for status bar
9915           break;
9916 
9917         case DEVICE_SERIAL_WX:
9918         case DEVICE_NET_WX:
9919           s='3';  // Select icon for status bar
9920           break;
9921 
9922         case DEVICE_SQL_DATABASE:
9923           s='8';  // Select icon for status bar
9924           break;
9925 
9926         case DEVICE_NET_DATABASE:
9927         case DEVICE_NET_STREAM:
9928         case DEVICE_NET_AGWPE:
9929           s='4';  // Select icon for status bar
9930           break;
9931 
9932         case DEVICE_AX25_TNC:
9933         case DEVICE_SERIAL_KISS_TNC:
9934         case DEVICE_SERIAL_MKISS_TNC:
9935           s='5';  // Select icon for status bar
9936           break;
9937 
9938         case DEVICE_NET_GPSD:
9939           s='6';  // Select icon for status bar
9940           break;
9941 
9942         case DEVICE_SERIAL_TNC_AUX_GPS:
9943           s='7';  // Select icon for status bar
9944           break;
9945 
9946         default:
9947           break;
9948       }
9949       if (port_data[i].active==DEVICE_IN_USE)
9950       {
9951         if (port_data[i].status==DEVICE_UP)
9952         {
9953           if (port_data[i].bytes_input_last != port_data[i].bytes_input)
9954           {
9955             if (begin_critical_section(&port_data_lock, "interface_gui.c:interface_status(1)" ) > 0)
9956             {
9957               fprintf(stderr,"port_data_lock, Port = %d\n", i);
9958             }
9959             port_data[i].bytes_input_last = port_data[i].bytes_input;
9960             port_data[i].port_activity = 1;
9961             if (end_critical_section(&port_data_lock, "interface_gui.c:interface_status(2)" ) > 0)
9962             {
9963               fprintf(stderr,"port_data_lock, Port = %d\n", i);
9964             }
9965             read_data=1;
9966           }
9967           if (port_data[i].bytes_output_last != port_data[i].bytes_output)
9968           {
9969             if (begin_critical_section(&port_data_lock, "interface_gui.c:interface_status(3)" ) > 0)
9970             {
9971               fprintf(stderr,"port_data_lock, Port = %d\n", i);
9972             }
9973             port_data[i].bytes_output_last = port_data[i].bytes_output;
9974             port_data[i].port_activity = 1;
9975             if (end_critical_section(&port_data_lock, "interface_gui.c:interface_status(4)" ) > 0)
9976             {
9977               fprintf(stderr,"port_data_lock, Port = %d\n", i);
9978             }
9979             write_data=1;
9980           }
9981           if (write_data)
9982           {
9983             opt='>';
9984           }
9985           else
9986           {
9987             if (read_data)
9988             {
9989               opt='<';
9990             }
9991             else
9992             {
9993               opt='^';
9994             }
9995           }
9996         }
9997         else
9998         {
9999           opt='*';
10000         }
10001       }
10002       else
10003       {
10004         opt='\0';
10005       }
10006       symbol(w,0,'~',s,opt,XtWindow(iface_da),0,(i*10),0,' ');
10007     }
10008     else
10009     {
10010       symbol(w,0,'~','#','\0',XtWindow(iface_da),0,(i*10),0,' ');
10011     }
10012   }
10013 
10014   end_critical_section(&devices_lock, "interface_gui.c:interface_option" );
10015 
10016 }
10017 
10018 
10019