summaryrefslogtreecommitdiff
path: root/xgps.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2005-09-06 22:59:21 +0000
committerEric S. Raymond <esr@thyrsus.com>2005-09-06 22:59:21 +0000
commita29b1288b7e848f3ab9b66a70e78df71b585b01b (patch)
treeac04fb76ef74e0d7d0bdd68f04820021ff50889d /xgps.c
parent4dec37dccd92b71d1903535235ab2f2fb450e4ef (diff)
downloadgpsd-a29b1288b7e848f3ab9b66a70e78df71b585b01b.tar.gz
xgps now has the -l option as well as cgps. Document it.
Diffstat (limited to 'xgps.c')
-rw-r--r--xgps.c36
1 files changed, 27 insertions, 9 deletions
diff --git a/xgps.c b/xgps.c
index 0feb1c32..0a7d0d93 100644
--- a/xgps.c
+++ b/xgps.c
@@ -246,6 +246,7 @@ static time_t timer; /* time of last state change */
static int state = 0; /* or MODE_NO_FIX=1, MODE_2D=2, MODE_3D=3 */
static XtAppContext app;
static XtIntervalId timeout;
+static enum deg_str_type deg_type = deg_dd;
static void handle_input(XtPointer client_data UNUSED, int *source UNUSED,
XtInputId *id UNUSED)
@@ -264,7 +265,7 @@ static void update_panel(struct gps_data_t *gpsdata,
unsigned int i;
int newstate;
XmString string[MAXCHANNELS+1];
- char s[128], *sp;
+ char s[128], *latlon, *sp;
if (message[0] != '\0')
while (isspace(*(sp = message + strlen(message) - 1)))
@@ -294,14 +295,16 @@ static void update_panel(struct gps_data_t *gpsdata,
else
(void)strcpy(s, "n/a");
XmTextFieldSetString(text_1, s);
- if (gpsdata->fix.mode >= MODE_2D)
- (void)snprintf(s, sizeof(s), "%lf %c", fabs(gpsdata->fix.latitude), (gpsdata->fix.latitude < 0) ? 'S' : 'N');
- else
+ if (gpsdata->fix.mode >= MODE_2D) {
+ latlon = deg_to_str(deg_type, fabs(gpsdata->fix.latitude));
+ (void)snprintf(s, sizeof(s), "%s %c", latlon, (gpsdata->fix.latitude < 0) ? 'S' : 'N');
+ } else
(void)strcpy(s, "n/a");
XmTextFieldSetString(text_2, s);
- if (gpsdata->fix.mode >= MODE_2D)
- (void)snprintf(s, sizeof(s), "%lf %c", fabs(gpsdata->fix.longitude), (gpsdata->fix.longitude < 0) ? 'W' : 'E');
- else
+ if (gpsdata->fix.mode >= MODE_2D) {
+ latlon = deg_to_str(deg_type, fabs(gpsdata->fix.longitude));
+ (void)snprintf(s, sizeof(s), "%s %c", latlon, (gpsdata->fix.longitude < 0) ? 'W' : 'E');
+ } else
(void)strcpy(s, "n/a");
XmTextFieldSetString(text_3, s);
if (gpsdata->fix.mode == MODE_3D)
@@ -418,13 +421,28 @@ speedunits_ok:;
(void)fprintf(stderr, "xgps: unknown altitude unit, defaulting to %s\n", altunits->legend);
altunits_ok:;
- while ((option = getopt(argc, argv, "hv")) != -1) {
+ while ((option = getopt(argc, argv, "hl:v")) != -1) {
switch (option) {
case 'v':
(void)printf("xgps %s\n", VERSION);
exit(0);
+ case 'l':
+ switch ( optarg[0] ) {
+ case 'd':
+ deg_type = deg_dd;
+ continue;
+ case 'm':
+ deg_type = deg_ddmm;
+ continue;
+ case 's':
+ deg_type = deg_ddmmss;
+ continue;
+ default:
+ (void)fprintf(stderr, "Unknown -l argument: %s\n", optarg);
+ /*@ -casebreak @*/
+ }
case 'h': default:
- (void)fputs("usage: xgps [-hv] [-speedunits {mph,kph,knots}] [-altunits {ft,meters}] [server[:port:[device]]]\n", stderr);
+ (void)fputs("usage: xgps [-hv] [-speedunits {mph,kph,knots}] [-altunits {ft,meters}] [-l {d|m|s}] [server[:port:[device]]]\n", stderr);
exit(1);
}
}