This file is indexed.

/usr/lib/gpsman/exerciser.tcl is in gpsman 6.4.4.2-2.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#!/bin/bash
#\
exec wish8.2 "$0" ${1+"$@"}

set SRLPORT /dev/ttyS0
set BaudRate 4800
set Hours "0"
set Minutes "0"
set Seconds "0"
set Interval 2000
set LatDeg 27
#set LatMin 30.000
set LatMin 54.30
set LatSign S
set LongDeg 153
#set LongMin 30.000
set LongMin 19.334
set LongSign E
#set LatIncr 0.00
#set LongIncr -0.05
set LatIncr 0.03
set LongIncr 0.01
set SendDummies 0
array set Dummies {
	S01 GPRMC,172819,A,4110.736,N,00836.659,W,000.0,360.0,091000,005.4,W*7F
	S02 GPRMB,A,,,,,,,,,,,,V*71
	S03 GPGSA,A,3,,,,,,,,,,,,,2.0,2.0,3.0*31
	S05 GPGSV,2,1,08,05,82,288,54,07,17,042,43,09,56,080,51,21,22,273,45*7C
	S06 GPGSV,2,2,08,23,15,223,42,26,19,153,43,29,38,308,48,30,46,242,49*72
	S07 PGRME,15.0,M,22.5,M,15.0,M*1B
	S08 GPGLL,4110.736,N,00836.659,W,172820,A*37
	S09 PGRMZ,507,f,3*19
	S10 PGRMM,WGS_72*0F
	S11 GPBOD,,T,,M,,*47
	S12 GPRTE,1,1,c,0*07
} 
proc SetSerial {} {

global SRLPORT BaudRate OutputFile

    set OutputFile [open $SRLPORT r+]
    fconfigure $OutputFile -blocking 0 -mode $BaudRate,n,8,1
    Clock
} 

proc Clock {} {

global Interval Hours Minutes Seconds

    
    set Seconds [expr $Seconds + 2]
    if {$Seconds >= 60} {
	set Seconds [expr $Seconds - 60]
	set Minutes [incr Minutes]
    }
    if {$Minutes >= 60} {
	set Minutes [expr $Minutes - 60]
	set Hours [incr Hours]
    }
    set secs $Seconds
    set mins $Minutes
    set hrs $Hours
    if {[string length $Seconds] == 1} {
	set secs ""
	append secs "0" $Seconds
    }
    if {[string length $Minutes] == 1} {
	set mins ""
	append mins "0" $Minutes
    }
    if {[string length $Hours] == 1} {
	set hrs ""
	append hrs "0" $Hours
    }
    Sentence [join [list $hrs $mins $secs] ""]
    after $Interval Clock
}

proc Sentence {time} {

# Creates a valid NMEA GGA sentence.
# Lat and Long are lists of "NSEW" "Deg "DecMin"

global OutputFile LatDeg LatMin LatSign LongDeg LongMin LongSign \
		LatIncr LongIncr Dummies SendDummies 

    set LatMin [expr $LatMin + $LatIncr]
    set LongMin [expr $LongMin + $LongIncr]
    if {$LatMin > 60} {
	set LatMin [expr $LatMin - 60]
	set LatDeg [incr LatDeg]
    }
    if {$LatMin < 0} {
	set LatMin [expr $LatMin + 60]
	set LatDeg [incr LatDeg -1]
    }
    if {$LongMin > 60} {
	set LongMin [expr $LongMin - 60]
	set LongDeg [incr LongDeg]
    }
    if {$LongMin < 0} {
	set LongMin [expr $LongMin + 60]
	set LongDeg [incr LongDeg -1]
    }
    set LatDeg [CheckDeg $LatDeg 0]
    set LongDeg [CheckDeg $LongDeg 1]
    set LatMin [CheckMin $LatMin]
    set LongMin [CheckMin $LongMin]
    set sentence [list "GPGGA" "," $time , $LatDeg $LatMin , $LatSign , \
	$LongDeg $LongMin , $LongSign , "1" , "5" , "0.9" , \
	"100" , "M" , "50" , "M" , ,]  
    set sentence [join $sentence ""]
    set sentence [split $sentence ""]
    set sum [Checksum $sentence]
    set sentence [linsert $sentence end "*"]
    set sentence [linsert $sentence end $sum]
    set sentence [join $sentence ""]
    puts -nonewline $OutputFile \$
    puts $OutputFile $sentence
    flush $OutputFile
# puts $sentence
    if { $SendDummies } { PutArray Dummies }
    return
}

proc PutArray {name} {

    global OutputFile

    upvar $name a
    foreach el [array names a] {
	puts $OutputFile "\$$a($el)"
puts "\$$a($el)"
    }
    return
}

proc CheckMin {num} {
 
    set num [split $num "."]
    set intgr [lindex $num 0]
    set len [string length $intgr]
    switch $len {
	0 {
	    set intgr "00"
	}
	1 { 
	    set num2 $intgr ; set intgr "0"
	    set intgr [append intgr $num2]
	}
    }
    return [join [list $intgr [lindex $num 1]] "."]
}       

proc CheckDeg {num type} {
 
    set len [string length $num]
    if {$type == 0} {set len [expr $len + 1]}
    switch $len {
	0 {
	    set num "000"
	}
	1 { 
	    set num2 $num ; set num "00"
	    set num [append num $num2]
	}
	2 {
	    set num2 $num ; set num "0"
	    set num [append num $num2]
	}
    }
    return $num
}       


proc Checksum {str} {

    set start [lindex $str 0]
    binary scan $start c first 
    set str [lreplace $str 0 0]
    foreach ch $str {
	binary scan $ch c next
	set first [expr $first ^ $next]
    }
    set hex [Dec2Hex $first] 
    return $hex
}

proc Dec2Hex {dec} {

    set lookup {0 1 2 3 4 5 6 7 8 9 A B C D E F}
    set major [expr $dec/16]
    set major [expr int($major)]
    set minor [expr $dec - ($major * 16)]
    set major [lindex $lookup $major]
    set minor [lindex $lookup $minor]
    set hex [list $major $minor]
    set hex [join $hex ""]
    return $hex
}

SetSerial