/* unite.c
    Dateien aneinander haengen
    Aufruf: UNITE datei1 datei2 ...
    haengt datei2 an datei1 an

    GPL 2
    1.2b (27-Dec-96/18-May-06)
    Carlos Michael Santilln
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 4096


int main (int argc, char *argv[])
{
    FILE    *fp1;
    FILE    *fp2;
    int     i;
    int     z;
    int     l;
    int     p = 0;
    char    s[MAX];

    if (argc < 4)
    {
        fprintf (stderr, "unite <file1> <file2> [<file3>] [...][fileN]\n");
        fprintf (stderr, "   copy file1, file2, ... to fileN\n");
        fprintf (stderr, "   GPL 2\n");
        fprintf (stderr, "   1.2b (27-Dec-96/18-May-06)\n");
        fprintf (stderr, "   Carlos Michael Santilln\n");
        exit (1);
    }

    z = argc - 1;
    if (!strcmp (argv[z], "V"))
    {
        p = -1;
        z--;
    }

    if (p)
    {
        fprintf (stderr, "unite   1.2b (27-Dec-96/18-May-06)\n\n");
    }

    if ((fp1 = fopen (argv[z], "w")) == NULL)
    {
        fprintf (stderr, "Error: Can not open %s\n", argv[z]);
        exit (1);
    }

    for (i = 1; i < z; i++)
    {
        if ((fp2 = fopen (argv[i], "r")) == NULL)
        {
            if (p)
            {
                fprintf (stderr, "%s not found\n", argv[i]);
            }
            continue;
        }

        l = fread ((void *) s, 1, sizeof (s), fp2);
        while (l != 0)
        {
            if (fwrite (s, l, 1, fp1) != 1)
            {
                fprintf (stderr, "Error: Can not write into %s\n",
                                 argv[argc - 1]);
                exit (1);
            }
            l = fread (s, 1, sizeof (s), fp2);
        }

        if (p)
        {
            fprintf (stderr, "copy %s\n", argv[i]);
        }
        fclose (fp2);
    }

    if (p)
    {
        fprintf (stderr, "to %s\n", argv[z]);
    }
    fclose (fp1);

    return 0;
}
