osmq

openstreetmap for command line
git clone https://logand.com/git/osmq.git/
Log | Files | Refs

commit d832e4524b6400ee981a179b281ab0389add41b6
parent cef88c8da511cdb97cdd37250514bf63bdc8c942
Author: Tomas Hlavaty <tom@logand.com>
Date:   Fri, 13 Sep 2019 02:16:39 +0200

more responsive navigation

Diffstat:
Mosmtile.c | 27+++++++++++++++------------
1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/osmtile.c b/osmtile.c @@ -106,7 +106,7 @@ static int probe(char *path) { return 0; } -static int cached_file(int z, int x, int y, char *dir, char file[4096]) { +static int cached_file(int z, int x, int y, char *dir, char file[4096], int draw) { int max = (1 << z) - 1; if(x < 0) x = max; if(y < 0) y = max; @@ -118,16 +118,16 @@ static int cached_file(int z, int x, int y, char *dir, char file[4096]) { n = snprintf(file, 4096, "%s/%s.png", dir, zxy); if(n < 0 || 4096 < n) fail(1, "file path error\n"); if(probe(file)) return 1; + if(draw) return 0; /* download tile in background */ + char *args[] = {"osmtile-download", zxy, dir, NULL}; int pid = fork(); if(pid < 0) fail(1, "fork failed\n"); - if(pid) { /* parent */ - return 0; + if(!pid) { /* child */ + execvp(*args, args); + fail(1, "exec %s failed\n", *args); } - /* child */ - char *args[] = {"osmtile-download", zxy, dir, NULL}; - execvp(*args, args); - fail(1, "exec %s failed\n", *args); + return 0; } static void screen_size(int *w, int *h) { @@ -179,21 +179,24 @@ static int main_tty(int argc, char *argv[]) { for(;;) { FILE *p = popen("w3mimgdisplay", "w"); if(!p) fail(1, "popen w3mimgdisplay failed\n"); - int full = 1; for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { char file[4096]; - if(cached_file(z, x + i - 1, y + j - 1, dir, file)) { + if(cached_file(z, x + i - 1, y + j - 1, dir, file, 1)) { int w = min(width, height) / 3; int h = w; fprintf(p, "0;1;%d;%d;%d;%d;;;;;%s\n", w * i, h * j, w, h, file); - } else { - full = 0; } } } pclose(p); - unsigned char c = key(full ? 0 : 1); + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 3; j++) { + char file[4096]; + cached_file(z, x + i - 1, y + j - 1, dir, file, 0); + } + } + unsigned char c = key(1); switch(c) { case 27: /* esc */ c = key(0);