/* 
   strings.c
   String-specific functions

   Datablk is a library that provides a "typeless" type for
   programmable systems.

   (C) Copyright 1999 by Nicholas Rusnov
*/

#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <strings.h>

#include "flags.h"
#include "datablk.h"

Datablk *dblk_mkstr(const char *astring)
{
  Datablk *myblk;
  DBLK_INIT(myblk,DBLK_T_STR);
  
  if (astring)
    {
      myblk->Data = (void *)malloc(strlen(astring)+1);
      strcpy((char *)myblk->Data,astring);
    }

  return myblk;
}

/* FIXME - make this return something senseable even with non-strings */
char *dblk_getstr(const Datablk *ablk)
{
  char *astr;
  if (ablk && (ablk->type == DBLK_T_STR) && ablk->Data)
    {
      astr = (char *)malloc(strlen((char *)(ablk->Data))+1);
      strcpy(astr,(char *)(ablk->Data));
    }
  else
    astr = 0;
  return astr;
}

const char *dblk_getcstr(const Datablk *ablk)
{
  char *astr;
  if (ablk && (ablk->type == DBLK_T_STR) && ablk->Data)
    {
      astr = (char *)ablk->Data;
    }
  else
    astr = 0;
  return astr;
}


int dblk_setstr(const char *astring, Datablk *ablk)
{
  if (ablk)
    {
      if (ablk->Data)
	dblk_nullify(ablk);
      
      if (astring)
	{
	  ablk->Data = (void *)malloc(strlen(astring)+1);
	  strcpy((char *)ablk->Data,astring);
	  ablk->type=DBLK_T_STR;
	}
    } 
}





