#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

int ordre(int a, int b){
	if (a < b)
	    return 1;
	else
	    return 0;
}

int main(int argc, char** argv){
	if (argc != 5){
		printf("Usage : %s <entier1> <entier2> <entier3> <entier4>\n", argv[0]);
		return EXIT_FAILURE;
	}
	pid_t x1, x2;
	int p1[2], p2[2],tmp, a, b, c, d;
	int x3 = strtod(argv[1], NULL), x4 = strtod(argv[2], NULL);
	pipe(p1);
	pipe(p2);
	x1=fork();
	x2=fork();
	if (x1 > 0){
		close(p1[0]);
		write(p1[1],&x3, sizeof(int));
		sleep(2);
		write(p1[1],(int*) &x4, sizeof(int));
		x3 = strtod(argv[3], NULL);
		x4 = strtod(argv[4], NULL);
		write(p2[1], &x3, sizeof(int));
		sleep(2);
		write(p2[1], &x3, sizeof(int));
		close(p1[1]);
		close(p2[1]);
		dup(p1[0]);
		read(p1[0], &a, sizeof(int));
		sleep(2);
		read(p1[0], &b, sizeof(int));
		close(p1[0]);
		dup(p2[0]);
		read(p2[0], &c, sizeof(int));
		sleep(2);
		read(p2[0], &d, sizeof(int));
		close(p2[0]);
		printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);
	}
	if (x1 == 0){
		close(p1[1]);
		read(p1[0], &x3, sizeof(int));
		sleep(2);
		read(p1[0], &x4, sizeof(int));
		if (!ordre(x3, x4)){
			tmp = x4;
			x4 = x3;
			x3 = tmp;
		}
		printf("x3 = %d, x4 = %d", x3, x4);
		close(p1[0]);
		write(p1[1], &x3, sizeof(int));
		sleep(2);
		write(p1[1], &x4, sizeof(int));
	}
	if (x2 == 0){
		close(p2[1]);
		read(p2[0], &x3, sizeof(int));
		sleep(2);
		read(p2[0], &x4, sizeof(int));
		ordre(x3, x4);
		if (!ordre(x3, x4)){
			tmp = x3;
			x3 = x4;
			x4 = x3;
		}
		dup(p2[1]);
		close(p2[0]);
		write(p2[1], &x3, sizeof(int));
		sleep(2);
		write(p2[1], &x4, sizeof(int));

	}
}



