#include <X11/Intrinsic.h>

#include "argpack_rep.h"

/*--------------*/

ArgPack GetArgPack()	/* use this to get the ArgPack that you */
{				/*  pass to the other functions */
  ArgPack_rep *w;

  w=create();
  w->Count=0;
  w->args=NULL;
  w->args_used = w->count_used = w->kept = (unsigned)0;
  if (CHECK_FOR_DEATH(most_recent_argpack)) {
    FreeArgPack(raise(most_recent_argpack));
    most_recent_argpack = w;
  }
  return raise(w);
}

/*-----*/

static void EnlargeArgPack(ap)
     ArgPack ap;
{
  ArgPack_rep *apr = lower(ap);

  ++(apr->Count);
  apr->args=(Arg *)XtRealloc(apr->args,(Cardinal)((apr->Count)*sizeof(Arg)));
}

/*----------*/

void AddArg(ap,resource,value)
     ArgPack ap;
     char *resource;
     XtArgVal value;
{
  EnlargeArgPack(ap);
  XtSetArg(lower(ap)->args[lower(ap)->Count-1],resource,value);
}

/*----------------*/

int NumArgs(ap)
     ArgPack ap;
{
  ArgPack_rep *apr = lower(ap);

  apr->count_used = (unsigned)1;
  return(apr->Count);
}

/*-----------------*/

Arg *TheArgs(ap)
     ArgPack ap;
{
  ArgPack_rep *apr = lower(ap);

  apr->args_used = (unsigned)1;
  return(apr->args);
}

/*---------------*/

void FreeArgPack(ap)
     ArgPack ap;
{
  XtFree(lower(ap)->args);
  destroy(lower(ap));
}

/*-----*/

void KeepArgPack(ap)
     ArgPack ap;
{
  ArgPack_rep *apr = lower(ap);

  apr->kept = (unsigned)1;
}
