#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include "version.h"
#include "opts.h"

extern char *optarg;
extern int optind, opterr, optopt;

int base_port = BASE_PORT;
int blink_interval = BLINK_INTERVAL;
int no_sched = 0;
int no_daemon = 0;
int cur_state = STATE_AUTO;
int ticks_bright = 0;
int ticks_dark = 0;

void show_version (void)
{
	printf ("lprgbd v%s (C) 2005 Adam Wysocki <http://www.gophi.rotfl.pl>\n", 
		VERSION);
}

void fasthelp (void)
{
	static char fhstr[] = \
		"lprgbd v%s (C) 2005 Adam Wysocki <http://www.gophi.rotfl.pl>\n"
		"\n"
		"Składnia: lprgbd [-mnfhv] [-p port] [-i interwał] \n"
		"                 [-b liczba ticków jasności] \n"
		"                 [-d liczba ticków ciemności]\n"
		"\n"
		"  -m: Włączenie trybu pracy manualnej.\n"
		"  -n: Wyłączenie obsługi schedulera.\n"
		"  -f: Wyłączenie przechodzenia w tło.\n"
		"  -h: Ten ekran pomocy.\n"
		"  -v: Wypisanie informacji o wersji.\n"
		"  -p: Podanie alternatywnego numeru portu (domyślnie 0x%X).\n"
		"  -i: Podanie alternatywnego interwału czasowego (domyślnie %ld us).\n"
		"  -b: Podanie liczby ticków jasności (domyślnie 0).\n"
		"  -d: Podanie liczby ticków ciemności (domyślnie 0).\n"
		"\n"
		"Więcej informacji: man 1 lprgbd\n"
		"Skargi, piwo i wnioski: gophi at chmurka.net\n";

	printf (fhstr, VERSION, BASE_PORT, BLINK_INTERVAL);
}

void opts_init (int ac, char **av)
{
	char optstr[] = "mnfhvp:i:b:d:";
	char done = 0;

	while (!done)
		switch (getopt(ac, av, optstr)) {
			case -1:
				done = 1;
				break;
			case 'm':
				cur_state = STATE_MANUAL;
				break;
			case 'n':
				no_sched = 1;
				break;
			case 'f':
				no_daemon = 1;
				break;
			case 'h':
				fasthelp();
				exit (0);
				/* NOTREACHED */
				break;
			case 'v':
				show_version();
				exit (0);
				/* NOTREACHED */
				break;
			case 'i':
				blink_interval = atoi(optarg);
				break;
			case 'b':
				ticks_bright = atoi(optarg);
				break;
			case 'd':
				ticks_dark = atoi(optarg);
				break;
			default:
				exit (1);
				/* NOTREACHED */
				break;
		}

	if (ticks_bright && !ticks_dark)
		ticks_dark = ticks_bright;
	else if (!ticks_bright && ticks_dark)
		ticks_bright = ticks_dark;
}
