#include "MyLib.h"

/****** MyLib.lib/ParseString ********************************************
*
*    NAME
*	ParseString -- parse string using ReadArgs()
*
*    SYNOPSIS
*	RDArgs = ParseString(Template,String,Arguments)
*
*	struct RDArgs *ParseString(const char *, const char *, void *);
*
*    FUNCTION
*	Parse a string using ReadArgs().
*
*    INPUTS
*	Template
*	String
*	Arguments
*
*    RESULT
*	RDArgs
*
*    SEE ALSO
*	ParseStringDone(), dos.library/ReadArgs()
*
*************************************************************************/

struct RDArgs *ParseString(const char *Template, const char *String, void *Arguments)

{
  struct RDArgs *RDArgs;

  if ((RDArgs=AllocDosObject(DOS_RDARGS,NULL))!=NULL)
    {
      RDArgs->RDA_Source.CS_Length=strlen(String)+1;
      if ((RDArgs->RDA_Source.CS_Buffer=AllocMem(RDArgs->RDA_Source.CS_Length+1,0))!=NULL)
	{
	  struct RDArgs *Result;

	  stpcpy(stpcpy(RDArgs->RDA_Source.CS_Buffer,String),"\n");
	  RDArgs->RDA_Source.CS_CurChr=0;
	  RDArgs->RDA_DAList=(LONG)(void *)NULL;
	  RDArgs->RDA_Buffer=NULL;
	  RDArgs->RDA_ExtHelp=NULL;
	  RDArgs->RDA_Flags=RDAF_NOPROMPT;
	  Result=ReadArgs((char *)Template,Arguments,RDArgs);
	  FreeMem(RDArgs->RDA_Source.CS_Buffer,RDArgs->RDA_Source.CS_Length+1);
	  if (Result!=NULL)
	    {
	      assert(Result==RDArgs);
	      return Result;
	    }
	}
      FreeDosObject(DOS_RDARGS,RDArgs);
    }
  else
    {
      SetIoErr(ERROR_NO_FREE_STORE);
    }
  return NULL;
}

/****** MyLib.lib/ParseStringDone ****************************************
*
*    NAME
*	ParseStringDone -- clean up after ParseString()
*
*    SYNOPSIS
*	ParseStringDone(RDArgs)
*
*	void ParseStringDone(struct RDArgs *);
*
*    FUNCTION
*
*    INPUTS
*	RDArgs - RDArgs structure returned from ParseString().
*	         NULL is valid.
*
*    RESULT
*
*    SEE ALSO
*	ParseString(), dos.library/FreeArgs()
*
*************************************************************************/

void ParseStringDone(struct RDArgs *RDArgs)

{
  if (RDArgs!=NULL)
    {
      FreeArgs(RDArgs);
      FreeDosObject(DOS_RDARGS,RDArgs);
    }
}
