/*
Nome: Mario
Cognome: Montanari
Classe: 3AIN
Data: 24/04/2025

es05:
Scrivi una funzione che preso in ingresso il nome di due file produca un nuovo
file ottenuto dalla concatenazione dei due file escludendo però i numeri duplicati.
*/

#include <iostream>

#define SIZE_FILE_NAME 1000+1

using namespace std;

int main(void) {
	char in1_name[SIZE_FILE_NAME];
	char in2_name[SIZE_FILE_NAME];
		
	cout << "First input file: ";
	cin >> in1_name;
	
	cout << "Second input file: ";
	cin >> in2_name;
	
	FILE * in1 = fopen(in1_name, "rb");
	FILE * in2 = fopen(in2_name, "rb");
	
	if ((in1 != NULL) && (in2 != NULL)) {
		
		FILE * out = fopen("out.bin", "wb");
		
		if (out != NULL) {
			int num;
			int ultimo_letto = -1;
			
			while (fread(&num, sizeof(int), 1, in1) == 1) {
				cout << "Letto da in1: " << num << endl;
				if (num != ultimo_letto) {
					fwrite(&num, sizeof(int), 1, out);
					ultimo_letto = num;
				}
			}
			
			//fwrite("\n", sizeof(char), 1, out);
			while (fread(&num, sizeof(int), 1, in2) == 1) {
				cout << "Letto da in2: " << num << endl;
				if (num != ultimo_letto) {
					fwrite(&num, sizeof(int), 1, out);
					ultimo_letto = num;
				}
			}
			
			fclose(out);
		} else {
			perror("Error (destination)");
		}
		
		fclose(in1);
		fclose(in2);
	} else {
		perror("Error (source)");
	}
	
	return 0;
}