xref: /freebsd/contrib/bsddialog/examples_library/gauge.c (revision 5ca8e32633c4ffbbcd6762e5888b6a4ba0708c6c)
1 /*-
2  * SPDX-License-Identifier: CC0-1.0
3  *
4  * Written in 2023 by Alfonso Sabato Siciliano.
5  * To the extent possible under law, the author has dedicated all copyright
6  * and related and neighboring rights to this software to the public domain
7  * worldwide. This software is distributed without any warranty, see:
8  *   <http://creativecommons.org/publicdomain/zero/1.0/>.
9  */
10 
11 #include <bsddialog.h>
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <unistd.h>
15 
16 static void sender(int fd)
17 {
18 	int i;
19 
20 	for (i = 1; i <= 10; i++) {
21 		sleep(1);
22 		dprintf(fd, "SEP\n");
23 		dprintf(fd, "%d\n", i * 10);
24 		dprintf(fd, "In Progress... [%d / 10]\n", i);
25 		dprintf(fd, "SEP\n");
26 	}
27 	sleep(1);
28 	dprintf(fd, "EOF\n");
29 }
30 
31 int main()
32 {
33 	int rv, fd[2];
34 	struct bsddialog_conf conf;
35 
36 	/* add checks and sync */
37 	pipe(fd);
38 	if (fork() == 0) {
39 		close(fd[0]);
40 		sender(fd[1]);
41 		exit (0);
42 	}
43 	close(fd[1]);
44 
45 	if (bsddialog_init() == BSDDIALOG_ERROR) {
46 		printf("Error: %s\n", bsddialog_geterror());
47 		return (1);
48 	}
49 	bsddialog_initconf(&conf);
50 	conf.title = "gauge";
51 	rv = bsddialog_gauge(&conf, "Example", 7, 30, 0, fd[0], "SEP", "EOF");
52 	bsddialog_end();
53 	if(rv == BSDDIALOG_ERROR)
54 		printf("Error: %s\n", bsddialog_geterror());
55 
56 	return (0);
57 }