/* MausConv
 *
 * Ein Konvertierer zwischen IBM- und Amiga-Umlauten, mit besonderer
 * Berücksichtigung der Maus-Eigenheiten
 */

#include "MausConv.h"

Prototype int main (int, char **);

int main (int argc, char **argv)
{
    unsigned char *neu;             //Tabelle der zu ersetzenden Buchstaben
    //FILE *in;                       //Eingabefile
    //FILE *out;                      //Ausgabefile
    BPTR in;                        //Eingabefile
    BPTR out;                       //Ausgabefile
    unsigned char *buffer;          //Puffer
    long i;                         //Zähler
    long j;                         //Zähler

    if ((argc != 4) ||
        ((stricmp (argv[3],"maus2ami") != 0) &&
         (stricmp (argv[3],"ami2maus") != 0)))
    {
        //printf ("\n%s\n\n", VERSTAG+7);
        //printf ("Aufruf: %s <Eingabedatei> <Ausgabedatei> maus2ami\n", argv[0]);
        //printf ("  oder: %s <Eingabedatei> <Ausgabedatei> ami2maus\n", argv[0]);
        Printf ("\n%s\n\n", VERSTAG+7);
        Printf ("Aufruf: %s <Eingabedatei> <Ausgabedatei> maus2ami\n", argv[0]);
        Printf ("  oder: %s <Eingabedatei> <Ausgabedatei> ami2maus\n", argv[0]);
        exit(RETURN_ERROR);
    }

    if (stricmp (argv[3],"maus2ami") == 0)
        neu = m2a;
    else
        neu = a2m;

    //if ((in = fopen (argv[1], "rb")) == NULL)
    if ((in = Open(argv[1], MODE_OLDFILE)) == (BPTR)NULL)
    {
        //printf ("%s: Kann Eingabefile \"%s\" nicht öffnen!\n", argv[0], argv[1]);
        Printf ("%s: Kann Eingabefile \"%s\" nicht öffnen!\n", argv[0], argv[1]);
        exit(RETURN_ERROR);
    }
    //if ((out = fopen (argv[2], "wb")) == NULL)
    if ((out = Open(argv[2], MODE_NEWFILE)) == NULL)
    {
        //printf ("%s: Kann Ausgabefile \"%s\" nicht öffnen!\n", argv[0], argv[2]);
        Printf ("%s: Kann Ausgabefile \"%s\" nicht öffnen!\n", argv[0], argv[2]);
        //fclose(in);
        Close(in);
        exit(RETURN_ERROR);
    }

    if ((buffer = (char *)malloc(SIZE)) == NULL)
    // Die Verwendung von AllocMem macht das Programm größer!
    //if ((buffer = (char *)AllocMem(SIZE,0L)) == NULL)
    {
        //printf ("%s: Kein Speicher!\n", argv[0]);
        Printf ("%s: Kein Speicher!\n", argv[0]);
        //fclose(in);
        //fclose(out);
        Close(in);
        Close(out);
        exit(RETURN_ERROR);
    }

    do
    {
        //i = fread (buffer, 1, SIZE, in);
        i = Read (in, buffer, SIZE);
        //printf("i=%d\n",i);
        for (j=0; j<i; j++)
        {
            //printf("buffer[%d]: %d (%c) -> ",j,buffer[j],buffer[j]);
            buffer[j] = neu[buffer[j]];
            //printf("%d (%c)\n",buffer[j],buffer[j]);
        }
        //j = fwrite (buffer, 1, i, out);
        j = Write (out, buffer, i);
        if (j != i)
        {
            //printf ("%s: Write Error!\n", argv[0]);
            Printf ("%s: Write Error!\n", argv[0]);
            //fclose(in);
            //fclose(out);
            free(buffer);
            Close(in);
            Close(out);
            //FreeMem(buffer,SIZE);
            exit(RETURN_ERROR);
        }
    }
    while (i);

    //fclose(in);
    //fclose(out);
    free(buffer);
    Close(in);
    Close(out);
    //FreeMem(buffer,SIZE);
    exit(RETURN_OK);
}
