#include <exec/memory.h>
#include <workbench/startup.h>
#include <workbench/workbench.h>
#include <libraries/commodities.h>
#include <clib/commodities_protos.h>
#include <clib/icon_protos.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>

/*  Was hat NEW_ARGARRAY zu bedeuten?   */

#ifdef NEW_ARGARRAY
static UBYTE **argArray;
#endif
static struct DiskObject *dObj;

UBYTE **ArgArrayInit(long argc, UBYTE **argv)
{
  if (argc)
  {
    if (argc>1)
#ifdef NEW_ARGARRAY
      if ((argArray=AllocVec(argc*sizeof(char *),MEMF_ANY)))
      {
        UBYTE **p,**p1;

        p=p1=argArray;
        argv++;
        do
        {
         *p1++=*argv++;
        }
        while(--argc);
        return p;
      }
#else
    {
      argv++; return argv;
    }
#endif
  }
  else
    if ((dObj=GetDiskObject(((struct WBStartup *)argv)->sm_ArgList->wa_Name)))
      return (UBYTE **)dObj->do_ToolTypes;
  return NULL;

}

STRPTR ArgString(UBYTE **tt, STRPTR entry, STRPTR defstr)
{
  STRPTR str;

  if (!entry || !(str=FindToolType(tt,entry)))
    str=defstr;
  return str;
}

LONG ArgInt(UBYTE **tt, STRPTR entry, long defval)
{
  STRPTR str;

  if (entry && (str=FindToolType(tt,entry)))
    StrToLong(str,&defval);
  return defval;
}

#if 0

CxObj *UserFilter(UBYTE **tt, STRPTR entry, STRPTR defstr)
{
  STRPTR str;

  if (!entry || !(str=FindToolType(tt,entry)))
    str=defstr;
  return (CreateCxObj(CX_FILTER,(long)str,NULL));
}

#endif

void ArgArrayDone(void)
{
  struct DiskObject **d;
#ifdef NEW_ARGARRAY
  UBYTE ***a;

  if (*(a=&argArray))
  {
    FreeVec(*a); *a=NULL;
  }
#endif
  if (*(d=&dObj))
  {
    FreeDiskObject(*d); *d=NULL;
  }
}
