#include <proto/dos.h>
#include "MP.h"

BOOL    GetReadArgs(void);
BOOL    RAYesNo(STRPTR Str, BOOL DefVal);
ULONG   RAInt(ULONG *Val,ULONG DefVal);
STRPTR  RAString(STRPTR Str, STRPTR DefVal);
BOOL    GetToolTypes(int argc, char **argv);

struct RDArgs *RArgs;

UBYTE DefPrefsPath[]="sys:prefs/ModeProPrefs";

UBYTE RATemplate[]="CX_PRIORITY/N/K,CX_POPKEY/K,CX_POPUP/K,"
                   "NLM=NEWLOOKMENUS/S,"
                   "CPROG=CATCH_NEWPROGRAMS/S,CSCR=CATCH_NEWSCREENS/S,CPOP=CATCH_POPUP/S,"
                   "PCMD=PREFSCOMMAND/K";

LONG RAResults[10]={0};

#define CX_PRIORITY 0
#define CX_POPKEY   1
#define CX_POPUP    2
#define NLM         3
#define CPROG       4
#define CSCR        5
#define CPOP        6
#define PREFS       7

BOOL GetArgs(int argc, char **argv)
{
  if(argc) //cli
    return(GetReadArgs());
  return(GetToolTypes(argc,argv));
}

void CleanupArgs(int argc)
{
  if(argc)//cli
  { 
    if(RArgs)
      FreeArgs(RArgs);
  }
  else
    ArgArrayDone();
}

extern struct MPSem MPSem;
extern UBYTE  *Hotkey,Popup;
extern BYTE   Priority;
extern STRPTR PrefsPath;

BOOL GetReadArgs(void)
{
  if(RArgs=ReadArgs(RATemplate,RAResults,0))
  {
    Hotkey      =RAString((STRPTR)RAResults[CX_POPKEY],Hotkey);
    Popup       =RAYesNo((STRPTR)RAResults[CX_POPUP],Popup);
    Priority    =RAInt  ((ULONG *)RAResults[CX_PRIORITY],Priority);  
    MPSem.EnabledNLM    =RAResults[NLM];
    MPSem.CatchPrograms =RAResults[CPROG];
    MPSem.CatchScreens  =RAResults[CSCR];
    MPSem.CatchPopup    =RAResults[CPOP];
//    UserFontName=RAResults[FNAME];
//    UserFontSize=RAInt  (RAResults[FSIZE],8);
    PrefsPath       =RAString((STRPTR)RAResults[PREFS],DefPrefsPath);


    return(TRUE);
  }
  else
    PrintFault(IoErr(),0);
  return(FALSE);
}

BOOL RAYesNo(STRPTR Str, BOOL DefVal)
{
  if(Str)
  {
    switch(*Str)
    {
      case 'T':
      case 't':
      case 'Y':
      case 'y':
        return(~0);
      case 'F':
      case 'f':
      case 'N':
      case 'n':
        return(0);
    }
  }
  return(DefVal);
}

ULONG RAInt(ULONG *Val,ULONG DefVal)
{
  if(Val)
    return(*Val);
  return(DefVal);
}

STRPTR RAString(STRPTR Str, STRPTR DefVal)
{
  if(Str)
    return(Str);
  return(DefVal);
}    

BOOL GetToolTypes(int argc, char **argv)
{
  UBYTE **ttypes;

  ttypes  =ArgArrayInit(argc,argv);
    
  Hotkey  =ArgString(ttypes,(UBYTE *)"CX_POPKEY",(UBYTE *)"lcommand p");
  Priority=ArgInt   (ttypes,(UBYTE *)"CX_PRIORITY",0);
  Popup   =ArgYesNo (ttypes,(UBYTE *)"CX_POPUP",TRUE);
  MPSem.EnabledNLM=ArgYesNo(ttypes,(UBYTE *)"NEWLOOKMENUS",FALSE);
  MPSem.CatchPrograms =ArgYesNo (ttypes,(UBYTE *)"CATCH_NEWPROGRAMS",FALSE);
  MPSem.CatchScreens  =ArgYesNo (ttypes,(UBYTE *)"CATCH_NEWSCREENS",FALSE);
  MPSem.CatchPopup    =ArgYesNo (ttypes,(UBYTE *)"CATCH_POPUP",FALSE);
  //UserFontName=ArgString(ttypes,(UBYTE *)"FONT_NAME",0);
  //UserFontSize=ArgInt   (ttypes,(UBYTE *)"FONT_SIZE",8);
  PrefsPath   =ArgString    (ttypes,(UBYTE *)"PREFSCOMMAND",DefPrefsPath);
  return((BOOL)ttypes);
}
