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


int main(int argc, char *argv[])
{
    char *Quelldatei  = NULL,
         *Zieldatei   = NULL,
         *Wort        = (char *) malloc(1025),
         *letztesWort = (char *) malloc(1025);
    FILE *Quellfile   = stdin,
         *Zielfile    = stdout;
    int  Result       = 0;
    long Anzahl       = 0,
         Laenge;
         
    if (3 < argc)
    {
        printf("Programm zum beseitigen von Duplikaten aus einer Wortliste\n");
        printf("Usage    : %s <Quelldatei> [<Zieldatei>]\n", argv[0]);
        printf("Parameter: <Quelldatei>: Wortliste\n");
        printf("                         Wird keine Quelldatei angegeben,}\n");
        printf("                         erfolgt die Eingabe von 'stdin'\n");
        printf("           <Zieldatei> : reduzierte Wortliste. Wird <Zieldatei> nicht\n");
        printf("                         angegeben, erfolgt die Ausgabe aus 'stdout'\n");
        Result = 1;
    }
    else
    {
        if (Wort == 0 || letztesWort == 0)
        {
            fprintf(stderr, "%s: not enoug memory available\n", argv[0]);
            Result = 1;
        }
        else
        {
            if (argc != 1)
                Quelldatei = argv[1];
            if (argc == 3)
                Zieldatei = argv[2];

            if (Quelldatei != NULL)
            {
                Quellfile = fopen(Quelldatei, "r");
            }
            if (Quellfile == 0)
            {
                fprintf(stderr, "%s: Can't open %s to read => error %d\n", argv[0], Quelldatei, errno);
                Result = 1;
            }
            else
            {
                if (Zieldatei != NULL)
                {
                    Zielfile = fopen(Zieldatei, "w");
                }
                
                if (Zielfile == 0)
                {
                    fprintf(stderr, "%s: Can't open %s to write => error %d\n", argv[0], Zieldatei, errno);
                    Result = 1;
                }
                else
                {
                    Anzahl = 1;
                    *letztesWort = '\0';
                    while (!feof(Quellfile))
                    {
                        fgets(Wort, 1024, Quellfile);
                        Laenge = strlen(Wort);
                        if (Wort[Laenge - 1] != '\n')
                            strcat(Wort, "\n");
                        if (strcmp(Wort, letztesWort) == 0)
                        {
                            Anzahl++;
                        }
                        else
                        {
                            if (*letztesWort != '\0')
                            {
                                fputs(letztesWort, Zielfile);
                                strcpy(letztesWort, Wort);
                            }
                            else
                            {
                                strcpy(letztesWort, Wort);
                            }
                                Anzahl = 1;
			}
                    }
                    if (Zielfile != NULL)
                    {
                        fclose(Zielfile);
                    }
                }
                fclose(Quellfile);
            }
        }
    }
    if (letztesWort != 0)
        free(letztesWort);
    if (Wort != 0)
        free(Wort);
        
    exit (Result);
}

