catpoint

Catpoint simple presenting software.
git clone git://r-36.net/catpoint
Log | Files | Refs | LICENSE

commit 9d56979dedbc9a3b279291ad07ab4ce277e8f5e7
parent fbd1f47fc5dc657c0bac33ac3d6f7c89495f4df9
Author: Christoph Lohmann <20h@r-36.net>
Date:   Sun, 20 Dec 2020 11:44:12 +0100

Add reload function to catpoint.

Thanks to Karchnu <karchnu@karchnu.fr> for the initial patch!

Diffstat:
catpoint.c | 42+++++++++++++++++++++++++++++-------------
1 file changed, 29 insertions(+), 13 deletions(-)

diff --git a/catpoint.c b/catpoint.c @@ -20,6 +20,7 @@ void cleanup(int s) { int i; + for (i = 0; i<n; i++) munmap(p[i], 0x1000); @@ -28,6 +29,26 @@ cleanup(int s) } void +reload(char **argv, int i) +{ + struct stat statbuf; + int fd; + + if (p[i] != NULL) + munmap(p[i], 0x1000); + + fd = open(argv[i], O_RDONLY, 0); + if (fd < 0) + err(1, "open: %s", argv[i]); + if (fstat(fd, &statbuf) < 0) + err(1, "fstat: %s", argv[i]); + p[i] = mmap(NULL, statbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0); + if (p[i] == MAP_FAILED) + err(1, "mmap"); + close(fd); +} + +void setsignal() { signal(SIGHUP, cleanup); @@ -42,8 +63,7 @@ setsignal() int main(int argc, char *argv[]) { - int c, i, fd; - struct stat statbuf; + int c, i; if (argc == 1) errx(1, "usage: %s file ...", argv[0]); @@ -57,17 +77,8 @@ main(int argc, char *argv[]) n = argc; /* map files to mem */ - for (i = 0; argv[i] != NULL; i++) { - fd = open(argv[i], O_RDONLY, 0); - if (fd == -1) - err(1, "open: %s", argv[i]); - if (fstat(fd, &statbuf) < 0) - err(1, "fstat: %s", argv[i]); - p[i] = mmap(NULL, statbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0); - if (p[i] == MAP_FAILED) - err(1, "mmap"); - close(fd); - } + for (i = 0; argv[i] != NULL; i++) + reload(argv, i); /* init curses */ initscr(); @@ -83,6 +94,7 @@ main(int argc, char *argv[]) show: /* display slide */ clear(); + refresh(); printw("%s", p[i]); again: c = getch(); @@ -128,6 +140,10 @@ again: case KEY_END: i = argc - 1; goto show; + /* reload */ + case 'r': + reload(argv, i); + goto show; default: /* printf("key pressed = '%d'\n", c); */ goto again;