/* ====================================================
 * MBT Applib API
 */

record EPTF_MBT_TestStepRequest 
{
  public String 	stepName;
  int[]  			stepArgs;
  EPTF_FsmAddr      addr;
  int				lock;
}

EPTF_MBT_TestStepRequest c_EPTF_MBT_TestStepRequest_empty()
{
	EPTF_MBT_TestStepRequest ret;
	ret.stepName = "";
	ret.stepArgs = {};
	ret.addr = c_EPTF_FsmAddr_empty();
	ret.lock = -1;
	return ret;
};

record EPTF_MBT_TestStepResponse 
{
  public String	bName;
  public String	iName;
  EPTF_FsmAddr  addr;
}

EPTF_MBT_TestStepResponse c_EPTF_MBT_TestStepResponse_empty()
{
	EPTF_MBT_TestStepResponse ret;
	ret.bName = "";
	ret.iName = "";
	ret.addr = c_EPTF_FsmAddr_empty();
	return ret;
};

record EPTF_FsmAddr
{
  public String entityGroupName;
  public int	eIdx;
  public int	fIdx;
}

EPTF_FsmAddr c_EPTF_FsmAddr_empty()
{
	EPTF_FsmAddr ret;
	ret.entityGroupName = "MBT_EntityType";
	ret.eIdx = 0;
	ret.fIdx = 0;
	return ret;
};

record EPTF_IntegerList {}
