diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2008-04-25 09:20:54 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2008-04-25 09:20:54 +0000 |
commit | 7a5f40ccd3f406258ad1f013d516e31cbeea1283 (patch) | |
tree | 23006216a6ebbaeb9f6fc7eae147a1658539861c | |
parent | c3f0decc087af10e219aba82d5ea8dd464f22a07 (diff) | |
download | navit-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.h | 1 | ||||
-rw-r--r-- | debug.c | 4 | ||||
-rw-r--r-- | vehicle/file/vehicle_file.c | 29 |
3 files changed, 26 insertions, 8 deletions
@@ -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) @@ -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 |