/[xlog]/xlog/src/wwl.c
ViewVC logotype

Diff of /xlog/src/wwl.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.12 by pa4tu, Thu Jan 27 16:33:15 2005 UTC revision 1.13 by pa4tu, Sun Jun 5 15:04:40 2005 UTC
# Line 38  Line 38 
38  extern preferencestype preferences;  extern preferencestype preferences;
39  extern GtkWidget *mainwindow;  extern GtkWidget *mainwindow;
40    
 /* return distance in Km */  
 gdouble  
 wwl_dist (gchar * my, gchar * dx)  
 {  
         gint strlen_dx;  
         gdouble p, z, y, n, h, x, w, t, s, v, u, c, d;  
         gchar my_wwl[7], dx_wwl[7] = "AA55MM";  
   
         if (strlen (my) != 6)  
                 {  
         return -1;  
                 }  
   
         strlen_dx = strlen (dx);  
         if (strlen_dx < 2 || strlen_dx > 6)  
                 {  
         return -1;  
                 }  
   
         strcpy (my_wwl, my);  
         memcpy (dx_wwl, dx, strlen_dx);  
   
         my_wwl[0] = toupper (my_wwl[0]);  
         z = my_wwl[0] - 65;  
         my_wwl[1] = toupper (my_wwl[1]);  
         y = my_wwl[1] - 65;  
         n = my_wwl[2] - 48;  
         h = my_wwl[3] - 48;  
         my_wwl[4] = toupper (my_wwl[4]);  
         x = my_wwl[4] - 65;  
         my_wwl[5] = toupper (my_wwl[5]);  
         w = my_wwl[5] - 65;  
   
         if (my_wwl[0] < 65 || my_wwl[0] > 88 || my_wwl[1] < 65 || my_wwl[1] > 88 ||  
                         my_wwl[2] < 48 || my_wwl[2] > 57 || my_wwl[3] < 48 || my_wwl[3] > 57 ||  
                         my_wwl[4] < 65 || my_wwl[4] > 88 || my_wwl[5] < 65 || my_wwl[5] > 88)  
                 {  
                         return -1;  
                 }  
   
         t = z * 20 - 180 + n * 2 + x / 12 + 1.0 / 24;  
         t = t * 3.1415926 / 180;  
         s = y * 10 - 90 + h + w / 24 + 1.0 / 48;  
         s = s * 3.1415926 / 180;  
   
         dx_wwl[0] = toupper (dx_wwl[0]);  
         z = dx_wwl[0] - 65;  
         dx_wwl[1] = toupper (dx_wwl[1]);  
         y = dx_wwl[1] - 65;  
         n = dx_wwl[2] - 48;  
         h = dx_wwl[3] - 48;  
         dx_wwl[4] = toupper (dx_wwl[4]);  
         x = dx_wwl[4] - 65;  
         dx_wwl[5] = toupper (dx_wwl[5]);  
         w = dx_wwl[5] - 65;  
41    
42          if (dx_wwl[0] < 65 || dx_wwl[0] > 88 || dx_wwl[1] < 65 || dx_wwl[1] > 88 ||  /* calculate distance between 2 locators, distance in kilometers */
43                          dx_wwl[2] < 48 || dx_wwl[2] > 57 || dx_wwl[3] < 48 || dx_wwl[3] > 57 ||  gint
44                          dx_wwl[4] < 65 || dx_wwl[4] > 88 || dx_wwl[5] < 65 || dx_wwl[5] > 88)  wwl (gchar * my, gchar * dx, gint *p, gint *l)
                 {  
         return -1;  
                 }  
   
         v = z * 20 - 180 + n * 2 + x / 12 + 1.0 / 24;  
         v = v * 3.1415926 / 180;  
         u = y * 10 - 90 + h + w / 24 + 1.0 / 48;  
         u = u * 3.1415926 / 180;  
   
         c = cos (s) * cos (u) * cos (v - t) + sin (s) * sin (u);  
         d = 1 - c * c;  
   
         p = (atan (sqrt (d) / c) * 6371.33) + .5;  
         if (p < 0) p = 20002 + p;  
           
         return p;  
 }  
   
 static gchar *  
 wwl (gchar * my, gchar * dx)  
45  {  {
46          gint l, p, m, strlen_dx;          gint strlen_dx;
47          gdouble z, y, n, h, x, w, t, s, v, u, c, d, e, lx;          gdouble z, y, n, h, x, w, t, s, v, u, c, d, e, lx;
48          gchar my_wwl[7], dx_wwl[7] = "AA55MM";          gchar my_wwl[7], dx_wwl[7] = "AA55MM";
         gchar *result;  
49          gchar *msg;          gchar *msg;
50    
51          if (strlen (my) != 6)          if (strlen (my) != 6)
# Line 129  wwl (gchar * my, gchar * dx) Line 53  wwl (gchar * my, gchar * dx)
53                          msg = g_strdup_printf (_("%s: not a valid locator"), my);                          msg = g_strdup_printf (_("%s: not a valid locator"), my);
54                          update_statusbar (msg);                          update_statusbar (msg);
55                          g_free (msg);                          g_free (msg);
56                          return (g_strdup (""));                          return 0;
57                  }                  }
58    
59          strlen_dx = strlen (dx);          strlen_dx = strlen (dx);
# Line 138  wwl (gchar * my, gchar * dx) Line 62  wwl (gchar * my, gchar * dx)
62                          msg = g_strdup_printf (_("%s: not a valid locator"), dx);                          msg = g_strdup_printf (_("%s: not a valid locator"), dx);
63                          update_statusbar (msg);                          update_statusbar (msg);
64                          g_free (msg);                          g_free (msg);
65                          return (g_strdup (""));                          return 0;
66                  }                  }
67    
68          strcpy (my_wwl, my);          strcpy (my_wwl, my);
# Line 162  wwl (gchar * my, gchar * dx) Line 86  wwl (gchar * my, gchar * dx)
86                          msg = g_strdup_printf (_("%s: not a valid locator"), my_wwl);                          msg = g_strdup_printf (_("%s: not a valid locator"), my_wwl);
87                          update_statusbar (msg);                          update_statusbar (msg);
88                          g_free (msg);                          g_free (msg);
89                          return (g_strdup (""));                          return 0;
90                  }                  }
91    
92          t = z * 20 - 180 + n * 2 + x / 12 + 1.0 / 24;          t = z * 20 - 180 + n * 2 + x / 12 + 1.0 / 24;
# Line 188  wwl (gchar * my, gchar * dx) Line 112  wwl (gchar * my, gchar * dx)
112                          msg = g_strdup_printf (_("%s: not a valid locator"), dx_wwl);                          msg = g_strdup_printf (_("%s: not a valid locator"), dx_wwl);
113                          update_statusbar (msg);                          update_statusbar (msg);
114                          g_free (msg);                          g_free (msg);
115                          return (g_strdup (""));                          return 0;
116                  }                  }
117    
118          v = z * 20 - 180 + n * 2 + x / 12 + 1.0 / 24;          v = z * 20 - 180 + n * 2 + x / 12 + 1.0 / 24;
# Line 204  wwl (gchar * my, gchar * dx) Line 128  wwl (gchar * my, gchar * dx)
128                          if (e > 1.0) e = 1.0;                          if (e > 1.0) e = 1.0;
129                          if (e < -1.0) e = -1.0;                          if (e < -1.0) e = -1.0;
130                          lx = acos (e) * 180 / 3.1415926;                          lx = acos (e) * 180 / 3.1415926;
131                          l = (int) (lx + 0.5);                          *l = (int) (lx + 0.5);
132                  }                  }
133          else          else
134                  {                  {
135                          l = 0;                          *l = 0;
136                  }                  }
137    
138          if (sin (v - t) < 0)          if (sin (v - t) < 0)
139                  {                  {
140                          l = 360 - l;                          *l = 360 - *l;
141                  }                  }
142    
143          p = (gint) (atan (sqrt (d) / c) * 6371.33) + .5;          *p = (gint) (atan (sqrt (d) / c) * 6371.33) + .5;
144          if (p < 0) p = 20002 + p;          if (*p < 0) *p = 20002 + *p;
145          if (p < 1) p = 0;          if (*p < 1) *p = 0;
146          m = (gint) (p / 1.609);          return 1;
   
         if (p != 0)  
         {  
                 if (preferences.units == 1)  
                         result = g_strdup_printf (_("Distance: %d km, azimuth: %d deg"), p, l);  
                 else  
                         result = g_strdup_printf (_("Distance: %d m, azimuth: %d deg"), m, l);  
         }  
         else result = g_strdup ("");  
         return (result);  
147  }  }
148    
149  void  void
150  updatelocatorframe (gchar * locator)  updatelocatorframe (gchar * locator)
151  {  {
152          gchar *label;          gchar *locatorlabeltext, *framelabeltext;
153          GtkWidget *locatorframe, *framelabel, *locatorlabel;          GtkWidget *locatorframe, *framelabel, *locatorlabel;
154            gint p, m, result, l;
155    
156          /* initialize */          /* initialize */
157          locatorframe = lookup_widget (mainwindow, "locatorframe");          locatorframe = lookup_widget (mainwindow, "locatorframe");
158          locatorlabel = lookup_widget (mainwindow, "locatorlabel1");          locatorlabel = lookup_widget (mainwindow, "locatorlabel1");
159          framelabel = gtk_frame_get_label_widget (GTK_FRAME(locatorframe));          framelabel = gtk_frame_get_label_widget (GTK_FRAME(locatorframe));
160          label = g_strdup ("");          locatorlabeltext = g_strdup ("");
161          gtk_label_set_text (GTK_LABEL (framelabel), "Locator");          framelabeltext = g_strdup ("");
162    
163          if (strlen (locator) >= 2)          if (strlen (locator) >= 2)
164            {
165                    result = wwl (preferences.locator, locator, &p, &l);
166                    if (result != 0)
167                  {                  {
168                          label = wwl (preferences.locator, locator);                          if (preferences.units == 1)
169                          g_ascii_strup (locator, -1);                                  locatorlabeltext = g_strdup_printf
170                                            (_("Distance: %d km, azimuth: %d deg"), p, l);
171                            else
172                            {
173                                    m = (gint) (p / 1.609);
174                                    locatorlabeltext = g_strdup_printf
175                                            (_("Distance: %d m, azimuth: %d deg"), m, l);
176                            }
177                  }                  }
178          gtk_label_set_text (GTK_LABEL (framelabel), locator);                  framelabeltext = g_ascii_strup (locator, -1);
179          gtk_label_set_text (GTK_LABEL (locatorlabel), label);          }
180          g_free (label);          gtk_label_set_text (GTK_LABEL (framelabel), framelabeltext);
181            gtk_label_set_text (GTK_LABEL (locatorlabel), locatorlabeltext);
182            g_free (framelabeltext);
183            g_free (locatorlabeltext);
184  }  }

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.13

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26