/*
*	prefs.c
*
*	Routines for loading and saving ppdata preferences.
*
*	MWS 3/92.
*/

#include <exec/types.h>
#include <intuition/intuition.h>
#include <libraries/dos.h>
#include <libraries/ppbase.h>
#include <proto/dos.h>
#include <proto/intuition.h>

#define PREFS_C
#include "prefs.h"
#include "display.h"
#include "messages.h"

static void UpdateMenus(void);	/* prototype */
struct PPDataPrefs prefs;	/* this is global variable containing prefs */


static void UpdateMenus()	/* update menus to reflect preferences */
{
	struct MenuItem *item;

	item = ItemAddress(mainmenu, FULLMENUNUM(PREFS, COLOR, prefs.color));
	item->Flags |= CHECKED;

	item = ItemAddress(mainmenu, FULLMENUNUM(PREFS, EFFICIENCY, prefs.efficiency));
	item->Flags |= CHECKED;

	item = ItemAddress(mainmenu, FULLMENUNUM(PREFS, SPEEDUP, prefs.speedup));
	item->Flags |= CHECKED;

	item = ItemAddress(mainmenu, FULLMENUNUM(CONTROL, prefs.control, 0));
	item->Flags |= CHECKED;

	if (prefs.suffix)
	{
		item = ItemAddress(mainmenu, FULLMENUNUM(PREFS, SUFFIX, 0));
		item->Flags |= CHECKED;
	}
	if (prefs.overwrite)
	{
		item = ItemAddress(mainmenu, FULLMENUNUM(PREFS, OVERWRITE, 0));
		item->Flags |= CHECKED;
	}
}


void LoadPrefs()	/* try to load prefs; if failure, use defaults */
{			/* update menus to reflect preferences */

	BPTR prefshandle;
	BOOL usedefaults = FALSE;

	if (prefshandle = Open(PREFS_NAME, MODE_OLDFILE))
	{
		if (Read(prefshandle, &prefs, PREFS_SIZE) != PREFS_SIZE)
		{
			Message("Error in preference file " PREFS_NAME "\nUsing defaults");
			usedefaults = TRUE;	/* invalid preference file */
		}
		Close(prefshandle);
	}
	else usedefaults = TRUE;

	if (usedefaults)	/* no prefs file or I/O error */
	{
		prefs.color = DECR_POINTER;
		prefs.efficiency = CRUN_GOOD;
		prefs.speedup = SPEEDUP_BUFFMEDIUM;
		prefs.suffix = 0L;
		prefs.overwrite = 1L;
		prefs.control = QUERY;
	}

	UpdateMenus();
}


void SavePrefs()	/* save current preferences; returns TRUE on success */
{
	BPTR prefshandle;

	if (prefshandle = Open(PREFS_NAME, MODE_NEWFILE))
	{
		if (Write(prefshandle, &prefs, PREFS_SIZE) != PREFS_SIZE)
			Message("Can't write to file " PREFS_NAME);
		Close(prefshandle);
	}
	else Message("Can't open file " PREFS_NAME);
}

