view rvinterf/old/g23sh/main.c @ 752:c79aaed75bd8

compile-fc-batt: allow possible third field in source lines Battery tables maintained in the fc-battery-conf repository will now have a third field added, defining thresholds for the battery bars icon, and there will be a new utility to compile them into the new /etc/batterytab2 file read by the FC Tourmaline version of our FCHG driver. For backward compatibility with the original Magnetite version of FCHG, compile-fc-batt remains the tool for compiling the original /etc/batterytab file format, and it needs to ignore the newly added third field in battery table sources.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 05 Nov 2020 20:37:55 +0000
parents e7502631a0f9
children
line wrap: on
line source

/*
 * This module contains the main() function for g23sh.
 */

#include <sys/types.h>
#include <sys/errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

char *socket_pathname = "/tmp/rvinterf_socket";
int ttyhacks, dflag;

int sock;

extern char *rvinterf_Bopt, *rvinterf_lopt, *rvinterf_wopt;

main(argc, argv)
	char **argv;
{
	extern int optind;
	extern char *optarg;
	int c;
	fd_set fds;

	while ((c = getopt(argc, argv, "B:dl:s:w:")) != EOF)
		switch (c) {
		case 'B':
			rvinterf_Bopt = optarg;
			continue;
		case 'd':
			dflag++;
			continue;
		case 'l':
			rvinterf_lopt = optarg;
			continue;
		case 's':
			socket_pathname = optarg;
			continue;
		case 'w':
			rvinterf_wopt = optarg;
			continue;
		case '?':
		default:
usage:			fprintf(stderr,
				"usage: %s [options] [ttyport]\n", argv[0]);
			exit(1);
		}
	switch (argc - optind) {
	case 0:
		if (rvinterf_Bopt || rvinterf_lopt || rvinterf_wopt) {
			fprintf(stderr,
      "%s: -B, -l and -w options are meaningful only when launching rvinterf\n",
				argv[0]);
			exit(1);
		}
		break;
	case 1:
		launch_rvinterf(argv[optind]);
		break;
	default:
		goto usage;
	}

	ttyhacks = isatty(0) && !dflag;
	init();
	tty_init();
	for (;;) {
		FD_ZERO(&fds);
		FD_SET(0, &fds);
		FD_SET(sock, &fds);
		c = select(sock+1, &fds, 0, 0, 0);
		if (c < 0) {
			if (errno == EINTR)
				continue;
			tty_cleanup();
			perror("select");
			exit(1);
		}
		if (FD_ISSET(0, &fds))
			handle_tty_input();
		if (FD_ISSET(sock, &fds))
			handle_rvinterf_input();
		fflush(stdout);
	}
}