//**************************
//
//  Prefs.c
//
//**************************

//**** Header files
#include <exec/memory.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <clib/alib_protos.h>
#include <clib/macros.h>

#include <pragmas/exec_pragmas.h>
#include <pragmas/dos_pragmas.h>

#include <string.h>

#include "MPMGClass.h"
#include "Librarian.h"
#include "Prefs.h"


//**** Local Storage

STRPTR ToolsFileName;
STRPTR ToolsArcName;
STRPTR PrefsProgName;
STRPTR PrefsProgDir;
STRPTR *MyHotKey;
STRPTR *GadgetText;
LONG my_cx_pri;
LONG my_cx_show;
LONG MyLook;
LONG MinWinW;
LONG HangDist;
LONG ShrinkWorkbench=0;
LONG MyWinPos;
LONG MenuDelay;
LONG NumVScreens;
LONG DragSys=0;
LONG AutoHide=0;

//**** Function Prototypes

static char *ScrKeyT="SCREENKEY1";
static char *ScrKeyV="LALT F1";
static char *ScrTxtT="SCREENTEXT1";
static char *ScrTxtV="Screen 1";


//**** Module Routines

int ReadPrefs(int argc, char **argv) {
  UBYTE **tooltypearray;
  char *value;
  int i;

  tooltypearray=ArgArrayInit(argc,argv);

  my_cx_pri=ArgInt(tooltypearray,"CX_PRIORITY",0);
  MinWinW=ArgInt(tooltypearray,"MINWIDTH",0);
  HangDist=ArgInt(tooltypearray,"MENULAP",75);
  MenuDelay=ArgInt(tooltypearray,"MENUDELAY",5);
  NumVScreens=ArgInt(tooltypearray,"NUMVSCREENS",3);
  NumVScreens=MIN(NumVScreens,9);
  NumVScreens=MAX(NumVScreens,3);

  value=ArgString(tooltypearray,"CX_SHOW","YES");
  my_cx_show=(0==strcmp("YES",value))?1:0;

  value=ArgString(tooltypearray,"LOOK","3D");
  MyLook=(0==strcmp("NEWLOOK",value))?MPMG_LOOKNEW: (0==strcmp("XLOOK",value)?MPMG_LOOKX : MPMG_LOOK3D);

  value=ArgString(tooltypearray,"AUTOHIDE","FALSE");
  AutoHide=(0==strcmp("TRUE",value))?1:0;
  if (AutoHide==0) {
    value=ArgString(tooltypearray,"DRAG","TRUE");
    DragSys=(0==strcmp("TRUE",value))?1:0;
    if (DragSys==0) {
      value=ArgString(tooltypearray,"SHORTBENCH","TRUE");
      ShrinkWorkbench=(0==strcmp("TRUE",value))?1:0;
    }
  }

  value=ArgString(tooltypearray,"POSITION","BOTTOM");
  MyWinPos=(0==strcmp("BOTTOM",value))?0:1;

  MyHotKey=(STRPTR *)AllocVec((2+NumVScreens)*sizeof(char *),MEMF_CLEAR|MEMF_PUBLIC|MEMF_REVERSE);
  GadgetText=(STRPTR *)AllocVec((1+NumVScreens)*sizeof(char *),MEMF_CLEAR|MEMF_PUBLIC|MEMF_REVERSE);

  value=ArgString(tooltypearray,"CX_HOTKEY","ctrl lalt o");
  MyHotKey[0]=strcpy(AllocVec(strlen(value)+1,MEMF_PUBLIC|MEMF_REVERSE),value);
  value=ArgString(tooltypearray,"GADGETTEXT",ONGONAME);
  GadgetText[0]=strcpy(AllocVec(strlen(value)+1,MEMF_PUBLIC|MEMF_REVERSE),value);

  for(i=1; i<NumVScreens+1; i++) {
    value=ArgString(tooltypearray,ScrKeyT,ScrKeyV);
    MyHotKey[i]=strcpy(AllocVec(strlen(value)+1,MEMF_PUBLIC|MEMF_REVERSE),value);
    value=ArgString(tooltypearray,ScrTxtT,ScrTxtV);
    GadgetText[i]=strcpy(AllocVec(strlen(value)+1,MEMF_PUBLIC|MEMF_REVERSE),value);

    ScrKeyT[9]++;
    ScrKeyV[6]++;
    ScrTxtT[10]++;
    ScrTxtV[7]++;
  } // for

  value=ArgString(tooltypearray,"ICONKEY","rcommand \\");
  MyHotKey[NumVScreens+1]=strcpy(AllocVec(strlen(value)+1,MEMF_PUBLIC|MEMF_REVERSE),value);

  value=ArgString(tooltypearray,"TOOLSFILE","ENV:" ONGOCFG);
  ToolsFileName=strcpy(AllocVec(strlen(value)+1,MEMF_PUBLIC|MEMF_REVERSE),value);

  value=ArgString(tooltypearray,"TOOLSARC","ENVARC:" ONGOCFG);
  ToolsArcName=strcpy(AllocVec(strlen(value)+1,MEMF_PUBLIC|MEMF_REVERSE),value);

  value=ArgString(tooltypearray,"PREFSPRG","SYS:Prefs/OnGo-Prefs");
  PrefsProgDir=strcpy(AllocVec(strlen(value)+1,MEMF_PUBLIC|MEMF_REVERSE),value);
  PrefsProgName=FilePart(PrefsProgDir);
  value=PathPart(PrefsProgDir);
  *value=0;

  ArgArrayDone();

  return 1;
} // ReadPrefs


void FreePrefs(void) {
  int i;
  FreeVec(ToolsFileName);
  FreeVec(ToolsArcName);
  FreeVec(PrefsProgDir);
  for (i=0; i<NumVScreens+1; i++) if (GadgetText[i]!=NULL) FreeVec(GadgetText[i]);
  for (i=0; i<NumVScreens+2; i++) if (MyHotKey[i]!=NULL)   FreeVec(MyHotKey[i]);
  FreeVec(GadgetText);
  FreeVec(MyHotKey);
} // FreePrefs

//**** End of file
