/* Programa para unir varios archivos de entrada en uno de salida  */
/* Version para Windows                                            */
/* Por Santiago Bruno - 19 de agosto de 2002 - Cordoba - Argentina */
/* E-mail: bananabruno@hotmail.com                                 */
/* Bajado de: http://www.santiagobruno.com.ar/programas.html       */

#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>

int main(int argc, char* argv[]) {

int fd_out, fd_in;
int leidos;
int i = 1,choice=0;
char buf[8193];

if (argc < 3) {
    printf("\nModo de uso: unir arch_1 arch_2 [...] arch_n arch_salida\n");
    
}
else {
    fd_out = open(argv[argc-1],O_RDONLY);
    if (!errno) {
	close(fd_out);
	while (choice < 1 || choice > 3) {
	    printf("El archivo de salida %s ya existe\n",argv[argc-1]);
	    printf("1) Sobrescribir\n");
	    printf("2) Agregar\n");
	    printf("3) Salir\n");
	    scanf("%d",&choice);
	}
	if (choice == 1) { fd_out = open(argv[argc-1],O_WRONLY | O_TRUNC | O_BINARY, S_IWUSR);}
	else if (choice == 2) { fd_out = open(argv[argc-1],O_WRONLY | O_APPEND | O_BINARY, S_IWUSR);}
	else {exit(0);}
    }
    else {
	errno = 0;
	fd_out = open(argv[argc-1],O_CREAT | O_WRONLY | O_TRUNC | O_BINARY,S_IWUSR);
    }
	errno = 0;
	while(i < argc-1) {
	    fd_in = open(argv[i],O_RDONLY | O_BINARY);
	    if (errno) {
		printf("Error abriendo el archivo de entrada %s \n",argv[i]);
		exit(1);
	    }
	    close(fd_in);
	    i++;
	}

	i = 1;

	while(i < argc-1) {
	    fd_in = open(argv[i],O_RDONLY | O_BINARY);
	    while ((leidos = read(fd_in,buf,8192)) > 0) {
		write(fd_out,buf,leidos);
	    } 	
	    close(fd_in);
	    i++;
	}
    
close(fd_out);

}

printf("\ne-mail: bananabruno@hotmail.com");
printf("\nBajado de: http://www.santiagobruno.com.ar/programas.html\n");

return(0);
}
