#include <stdio.h>
#include <errno.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

void usage(void)
{
	printf("./zad5 [-s (SIG_NAME|NUMBER)] pid [pid2 [pid3 [pidX [...]]]]\n");
}

int main(int ac, char *av[])
{
	unsigned int i = 0;
	unsigned int pid = 0;
	int sig = SIGTERM;

	if (ac < 2)
	{
		usage();
		return(1);
	}

	if (strcmp(av[1], "-s") == 0)
	{
		if (ac < 4)
		{
			usage();
			return(1);
		}
		if (av[2][0] >= '0' && av[2][0] <= '9')
		{
			sig = (int) strtoll(av[2], NULL, 0);
		} else {
			sig = -1;
			if (strcmp(av[2], "HUP") == 0) { sig = 1; }
			if (strcmp(av[2], "INT") == 0) { sig = 2; }
			if (strcmp(av[2], "QUIT") == 0) { sig = 3; }
			if (strcmp(av[2], "ILL") == 0) { sig = 4; }
			if (strcmp(av[2], "TRAP") == 0) { sig = 5; }
			if (strcmp(av[2], "ABRT") == 0) { sig = 6; }
			if (strcmp(av[2], "BUS") == 0) { sig = 7; }
			if (strcmp(av[2], "FPE") == 0) { sig = 8; }
			if (strcmp(av[2], "KILL") == 0) { sig = 9; }
			if (strcmp(av[2], "USR1") == 0) { sig = 10; }
			if (strcmp(av[2], "SEGV") == 0) { sig = 11; }
			if (strcmp(av[2], "USR2") == 0) { sig = 12; }
			if (strcmp(av[2], "PIPE") == 0) { sig = 13; }
			if (strcmp(av[2], "ALRM") == 0) { sig = 14; }
			if (strcmp(av[2], "TERM") == 0) { sig = 15; }
			if (strcmp(av[2], "STKFLT") == 0) { sig = 16; }
			if (strcmp(av[2], "CHLD") == 0) { sig = 17; }
			if (strcmp(av[2], "CONT") == 0) { sig = 18; }
			if (strcmp(av[2], "STOP") == 0) { sig = 19; }
			if (strcmp(av[2], "TSTP") == 0) { sig = 20; }
			if (strcmp(av[2], "TTIN") == 0) { sig = 21; }
			if (strcmp(av[2], "TTOU") == 0) { sig = 22; }
			if (strcmp(av[2], "URG") == 0) { sig = 23; }
			if (strcmp(av[2], "XCPU") == 0) { sig = 24; }
			if (strcmp(av[2], "XFSZ") == 0) { sig = 25; }
			if (strcmp(av[2], "VTALRM") == 0) { sig = 26; }
			if (strcmp(av[2], "PROF") == 0) { sig = 27; }
			if (strcmp(av[2], "WINCH") == 0) { sig = 28; }
			if (strcmp(av[2], "IO") == 0) { sig = 29; }
			if (strcmp(av[2], "PWR") == 0) { sig = 30; }
			if (strcmp(av[2], "SYS") == 0) { sig = 31; }
			if (sig == -1)
			{
				printf("Error: no such signal name.\n");
				return(1);
			}
		}

		av = av + 2;
		ac = ac - 2;
	}

	for (i = 1; i < ac; ++i)
	{
		pid = (unsigned int) strtoll(av[i], NULL, 0);
		printf("Sending signal %i to pid %i... ", sig, pid);
		if (kill(pid, sig) == 0)
		{
			printf("OK.\n");
		} else {
			printf("Error: %s\n", strerror(errno));
		}
	}
	
	return(0);
}


