summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2008-04-25 09:20:54 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2008-04-25 09:20:54 +0000
commit7a5f40ccd3f406258ad1f013d516e31cbeea1283 (patch)
tree23006216a6ebbaeb9f6fc7eae147a1658539861c
parentc3f0decc087af10e219aba82d5ea8dd464f22a07 (diff)
downloadnavit-svn-7a5f40ccd3f406258ad1f013d516e31cbeea1283.tar.gz
Add:vehicle_file:Added attribute on_eof for controlling behaviour when replay is finished
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit/src@1031 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r--attr_def.h1
-rw-r--r--debug.c4
-rw-r--r--vehicle/file/vehicle_file.c29
3 files changed, 26 insertions, 8 deletions
diff --git a/attr_def.h b/attr_def.h
index 9ea3f512..f9c02556 100644
--- a/attr_def.h
+++ b/attr_def.h
@@ -99,6 +99,7 @@ ATTR(gc_type)
ATTR(layout)
ATTR(position_nmea)
ATTR(gpsd_query)
+ATTR(on_eof)
ATTR2(0x0003ffff,type_string_end)
ATTR(order_limit)
ATTR2(0x00050000,type_double_start)
diff --git a/debug.c b/debug.c
index 472695c0..401c4a51 100644
--- a/debug.c
+++ b/debug.c
@@ -70,8 +70,8 @@ debug_vprintf(int level, const char *module, const int mlen, const char *functio
sprintf(buffer, "%s:%s", module, function);
if (debug_level_get(module) >= level || debug_level_get(buffer) >= level) {
if (prefix)
- printf("%s:",buffer);
- vprintf(fmt, ap);
+ fprintf(stderr,"%s:",buffer);
+ vfprintf(stderr,fmt, ap);
}
}
diff --git a/vehicle/file/vehicle_file.c b/vehicle/file/vehicle_file.c
index c6373137..6b20cf6c 100644
--- a/vehicle/file/vehicle_file.c
+++ b/vehicle/file/vehicle_file.c
@@ -51,6 +51,7 @@ struct vehicle_priv {
int status;
int sats_used;
int time;
+ int on_eof;
#ifdef _WIN32
int no_data_count;
#endif
@@ -337,8 +338,17 @@ vehicle_file_io(GIOChannel * iochan, GIOCondition condition, gpointer t)
priv->buffer + priv->buffer_pos,
buffer_size - priv->buffer_pos - 1);
if (size <= 0) {
- vehicle_file_close(priv);
- vehicle_file_open(priv);
+ switch (priv->on_eof) {
+ case 0:
+ vehicle_file_close(priv);
+ vehicle_file_open(priv);
+ break;
+ case 1:
+ break;
+ case 2:
+ exit(0);
+ break;
+ }
return TRUE;
}
priv->buffer_pos += size;
@@ -448,6 +458,7 @@ vehicle_file_new_file(struct vehicle_methods
struct vehicle_priv *ret;
struct attr *source;
struct attr *time;
+ struct attr *on_eof;
dbg(1, "enter\n");
source = attr_search(attrs, NULL, attr_source);
@@ -456,16 +467,22 @@ vehicle_file_new_file(struct vehicle_methods
ret->cbl = cbl;
ret->source = g_strdup(source->u.str);
ret->buffer = g_malloc(buffer_size);
+ ret->time=1000;
+ time = attr_search(attrs, NULL, attr_time);
+ if (time)
+ ret->time=time->u.num;
+ on_eof = attr_search(attrs, NULL, attr_on_eof);
+ if (on_eof && !strcasecmp(on_eof->u.str, "stop"))
+ ret->on_eof=1;
+ if (on_eof && !strcasecmp(on_eof->u.str, "exit"))
+ ret->on_eof=2;
+ dbg(0,"on_eof=%d\n", ret->on_eof);
*meth = vehicle_file_methods;
if (vehicle_file_open(ret)) {
vehicle_file_enable_watch(ret);
return ret;
}
- ret->time=1000;
- time = attr_search(attrs, NULL, attr_time);
- if (time)
- ret->time=time->u.num;
#ifdef _WIN32
ret->no_data_count = 0;
#endif