/*
    Make_Config.c
*/

/// Includes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <proto/dos.h>
#include <dos/dos.h>
#include "config.h"
#include "protos.h"
///
/// Defines
enum { PATH, EDITOR, TEST, UPDATE, numArgs };
#define arg_PATH (char *)args[PATH]
#define arg_EDITOR (char *)args[EDITOR]
#define arg_TEST (BOOL)args[TEST]
#define arg_UPDATE (BOOL)args[UPDATE]
///
/// Prototypes
int main (int argc, char **argv);
void tidy_up (void);
///
/// Global variables
ULONG args[numArgs];
struct RDArgs *RDArgs = NULL;
///

/// main
int main (int argc, char **argv)
{
    int c;
    int ver = 0;
    FILE *f;

    atexit (tidy_up);

    RDArgs = ReadArgs ("PATH,EDITOR,TEST/S,UPDATE/S", args, NULL);
    if (!RDArgs) fail (20, "RDArgs failed");

    if (arg_TEST || arg_UPDATE) {
        f = fopen ("ENVARC:Tag-o-Miga/Config", "r");
        if (f) {
            fread (&c, 4, 1, f);
            fclose (f);
            switch (c) {
                case OLD_ID_TAG:
                    ver = 2;
                    break;
                case ID_TAG:
                    ver = 3;
                    break;
                default:
                    ver = 1;
                    break;
            }
        }
    }

    if (arg_TEST) return ver;

    memcpy (&Config, &DefConfig, sizeof (Config));

    if (arg_UPDATE) {
        f = fopen ("ENVARC:Tag-o-Miga/Config", "r");
        if (!f) return 20;
        fread (&Config, sizeof (Config), 1, f);
        fclose (f);
    } else {
        for (c = 0; c < 5; c++) {
            strcpy (Config.Part[c].File, arg_PATH);
            AddPart (Config.Part[c].File, DefConfig.Part[c].File, 256);
        }
        strcpy (Config.EditCmd, arg_EDITOR);
    }

    save_config (CFG_SAVE);

    return 0;
}
///
/// tidy_up
void tidy_up (void)
{
    if (RDArgs) FreeArgs (RDArgs);
}
///
