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

/* Cercare un carattere in una stringa */

int search(char *string, int inizio, int fine, char key){
	/*
		Caso base
		Se inizio==fine-1 : ritorna key==string[inizio]
		
		Passo ricorsivo
		len=fine-inizio
			inizio -> inizio+len/2
			inizio+len/2 -> fine 

	*/
	if (inizio==fine-1) return (key==string[inizio]);
	else {
		int hlen=(fine-inizio)/2;
		int status, res;
		int pid;
		pid=fork();
		if (pid==0) {
			printf("Starting %d on %d-%d\n", 
				getpid(), inizio, inizio+hlen);
			exit(search(string, inizio, inizio+hlen, key));
		}
		pid=fork();
		if (pid==0) {
			printf("Starting %d on %d-%d\n", 
				getpid(), inizio+hlen, fine);
			exit(search(string, inizio+hlen, fine, key)); 
		}
		wait(&status);
		res=status/256;
		wait(&status);
		res=res||(status/256);
		if (res>0)
			printf("Carattere trovato da %d\n", getpid());
		else
			printf("Carattere non trovato da %d\n", getpid());
		exit(res);
	}
}

int main(int argc, char **argv){
	pid_t pid;
	/* Credo il nuovo processo */
	char *string=argv[1]; /* Stringa */
	char c=argv[2][0]; /* Carattere */
	int len=strlen(string);

	if (search(string, 0, len, c)>0) 
		printf("Carattere trovato\n");	
	else
		printf("Carattere non trovato\n");
}

