1# JStrack:  copyright 1997/2010 by Jim Graham, N5IAL, all rights reserved.
2#
3
4# This procedure accepts a latitude (dec.) and returns the y coordinate.
5
6proc set_latt {latt} {
7   global min_long max_long min_latt max_latt
8   global ybase
9
10   if {$latt <= $min_latt} { return $ybase($min_latt) }
11   if {$latt >= $max_latt} { return $ybase($max_latt) }
12
13   for {set low $min_latt} {$low < $max_latt} {incr low 2} {
14      set high [expr {$low + 2}]
15      if {$latt >= $low && $latt < $high} {
16         set base_latt $low
17         set next_latt $high
18         break
19      }
20   }
21
22   set vary [expr {($ybase($base_latt) - $ybase($next_latt)) / 2}]
23   return [expr {$ybase($base_latt) - (($latt - $base_latt) * $vary)}]
24}
25
26
27# This procedure accepts a y coordinate and returns the latitude (dec.).
28
29proc get_latt {y} {
30   global min_long max_long min_latt max_latt
31   global ybase
32
33   set base_latt -1 ; set next_latt -1
34
35   for {set low $min_latt} {$low < $max_latt} {incr low 2} {
36      set high [expr {$low + 2}]
37      if {$y > $ybase($high)} {
38         set base_latt $low
39         set next_latt $high
40         break
41      }
42   }
43
44   if {$base_latt < 0 || $next_latt < 0} { return -1 }
45
46   set vary [expr {($ybase($base_latt) - $ybase($next_latt)) / 2}]
47   return [format %0.2f [expr {(($ybase($base_latt) - $y) / $vary) + $base_latt}]]
48}
49
50# This procedure accepts a longitude (dec.) and returns the x coordinate.
51
52proc set_long {long} {
53   global min_long max_long min_latt max_latt
54   global xbase
55
56   if {$long <=  $min_long} { return $xbase($min_long) }
57   if {$long >= $max_long} { return $xbase($max_long) }
58
59   for {set low $min_long} {$low < $max_long} {incr low 2} {
60      set high [expr {$low + 2}]
61      if {$long >= $low && $long < $high} {
62         set base_long $low
63         set next_long $high
64         break
65      }
66   }
67
68   set varx [expr {($xbase($base_long) - $xbase($next_long)) / 2}]
69   return [expr {$xbase($base_long) - (($long - $base_long) * $varx)}]
70}
71
72# This procedure accepts an x coordinate and returns the longitude (dec.).
73
74proc get_long {x} {
75   global min_long max_long min_latt max_latt
76   global xbase
77
78   set base_long -1 ; set next_long -1
79
80   for {set low $min_long} {$low < $max_long} {incr low 2} {
81      set high [expr {$low + 2}]
82      if {$x > $xbase($high)} {
83         set base_long $low
84         set next_long $high
85         break
86      }
87   }
88
89   if {$base_long < 0 || $next_long < 0} { return -1 }
90
91   set varx [expr {($xbase($base_long) - $xbase($next_long)) / 2}]
92   return [format %0.2f [expr {(($xbase($base_long) - $x) / $varx) + $base_long}]]
93}
94
95
96# This procedure determines whether or not the coordinates are on the
97# tracking chart.  Returns 1 if they are, 0 if they aren't.
98
99proc valid_coords {latt long} {
100   global min_long max_long min_latt max_latt
101   global plot_err
102
103   if {$latt < $min_latt && $long < $min_long} { set plot_err 11 ; return 0 }
104   if {$latt < $min_latt && $long > $max_long} { set plot_err 12 ; return 0 }
105   if {$latt > $max_latt && $long < $min_long} { set plot_err 13 ; return 0 }
106   if {$latt > $max_latt && $long > $max_long} { set plot_err 14 ; return 0 }
107   if {$latt < $min_latt} { set plot_err 1 ; return 0 }
108   if {$latt > $max_latt} { set plot_err 2 ; return 0 }
109   if {$long < $min_long} { set plot_err 3 ; return 0 }
110   if {$long > $max_long} { set plot_err 4 ; return 0 }
111   set plot_err 0
112   return 1
113}
114
115