/*****************************************************************************
 * 
 * name					: conf.c
 * description			: load & save prefs file
 * version				: 1.1
 *
 * created				: 08-03-98
 * last change			: 11-04-98
 *
 *****************************************************************************
 */
#include <dos/dos.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/intuition.h>
#include <string.h>
#include "utils.h"
#include "conf.h"
#include "obp.h"



void SaveEnv(idWin * prj, BOOL envarc) {
  UBYTE * txtform = NULL ;
  if (!SaveConf(prj, CF_NAMEENV)) {
    /* error during saving
     */
    if (txtform = AllocVec(100, MEMF_PUBLIC|MEMF_CLEAR)) {
      /* open an info request
       */
      strcat(txtform, ERR_ENV) ;
      Fault(prj->lastError, ERR_ENV, txtform, 100) ;  
      ez_req("BackClock request", txtform, "Continue", &(prj->lastError)) ;
      FreeVec(txtform) ;
    }
  }
  if (envarc) {
    if (!SaveConf(prj, CF_NAMEENVARC)) {
      /* error during saving
       */
      if (txtform = AllocVec(100, MEMF_PUBLIC|MEMF_CLEAR)) {
        /* open an info request
         */
        strcat(txtform, ERR_ENVARC) ;
        Fault(prj->lastError, ERR_ENVARC, txtform, 100) ;  
        ez_req("BackClock request", txtform, "Continue", &(prj->lastError)) ;
        FreeVec(txtform) ;
      }
    }
  }
}


BOOL SaveConf(idWin * prj, UBYTE * fl_name) {
  struct ConfFile cf_save ;
  ULONG file ;
  BOOL ret=FALSE ;
  int i ;
  
  CopyMem("BACK", cf_save.id, 4) ;
  cf_save.posX = prj->backWin.posX ;
  cf_save.posY = prj->backWin.posY ;
  cf_save.lenX = prj->backWin.width ;
  cf_save.lenY = prj->backWin.height ;
  for(i = 0; i<NUM_COLORS; i++)
    CopyMem(&(prj->backWin.cmap[i]), &(cf_save.cmap[i]), sizeof(struct RGB)) ;

  if (file = Open(fl_name, MODE_NEWFILE)) {
    Write(file, &cf_save, sizeof(struct ConfFile)) ;
    Close(file) ;
    prj->lastError = OK ;
    ret=TRUE ;
  }else prj->lastError = IoErr() ;
  return ret ;
}


BOOL LoadConf(idWin * prj) {
  /* Reload configuration file
   */
  struct ConfFile cf_load ;
  ULONG file ;
  BOOL ret = FALSE ;
  int i ;

  if (file = Open("ENV:backclock.prefs", MODE_OLDFILE)) {
    Read(file, &cf_load, sizeof(struct ConfFile)) ;
    prj->backWin.posX = cf_load.posX ;
    prj->backWin.posY = cf_load.posY ;
    prj->backWin.width = cf_load.lenX ;
    prj->backWin.height = cf_load.lenY ;
    for(i = 0; i < NUM_COLORS; i++)
      CopyMem(&(cf_load.cmap[i]), &(prj->backWin.cmap[i]), sizeof(struct RGB)) ;
    initColors(prj) ;
    ret = TRUE ;
    prj->lastError = OK ;
    Close(file) ;
  }else {
    prj->lastError = IoErr() ;
    prj->backWin.posX =     0 ;
    prj->backWin.posY =     0 ;
    prj->backWin.width =  100 ;
    prj->backWin.height = 100 ;
    prj->backWin.cmap[COL_SEC].reg = (UBYTE)getPen(prj, 0, 100, 200) ;
    prj->backWin.cmap[COL_MIN].reg = (UBYTE)getPen(prj, 0, 0, 0) ;
    prj->backWin.cmap[COL_HEU].reg = (UBYTE)getPen(prj, 0, 0, 0) ;
    prj->backWin.cmap[COL_TIC].reg = (UBYTE)getPen(prj, 0, 0, 0) ;
    
  }
  return(ret) ;
}