/* Routinesheader

	Name:		GetChar.c
	Main:		Change
	Versionstring:	$VER: GetChar.c 1.0 (17.03.97)
	Author:		SDI
	Distribution:	PD
	Description:	string convert routines

 1.0   17.03.97 : build, before was in SDI includes
*/

#include "GetChar.h"
#include "SDI_ASM_STD_protos.h"

ULONG GetCharHEX(STRPTR name, UWORD *back)
{
  UWORD *o;
  UBYTE i;

  if(!name || !back)
    return 0;

  o = back;
  while(*name)
  {
    *back = 0; i = 0;
    while(*name && i < 2)
    {
      if(SDI_isxdigit(*name))
      {
        ++i;
        *back = (*back << 4) + SDI_tolower(*name)
                - (SDI_isdigit(*name) ? '0' : 'a'-10);
      }
      else if(*name == PATTERN)
      { *back = PATTERN_BACK; i = 2; }
      ++name;
    }
    if (i == 2)
      ++back;
  }
  *back = 0;
  return (ULONG) (back - o);
}

ULONG GetCharSTRING(STRPTR name, UWORD *back)
{
  UWORD *o;
  UBYTE i;

  if (!name || !back)
    return 0;

  o = back;
  while(*name)
  {
    if(*name == PATTERN_VORZ && *(name+1))
    {
      if(*(++name) == PATTERN)
      { *back = PATTERN_BACK; ++name; }
      else if(*name == PATTERN_VORZ)
      { *back = PATTERN_VORZ; ++name; }
      else if(*(name+1) && SDI_isxdigit(*name) && SDI_isxdigit(*(name+1)))
      {
        for (i=0; i < 2; ++i)
        {
          *back = (*back << 4) + SDI_tolower(*name)
                  - (SDI_isdigit(*name) ? '0' : 'a'-10);
          ++name;
        }
      }
      else
        *back = PATTERN_VORZ;
    }
    else
      *back = *(name++);
    ++back;
  }
  return (ULONG) (back - o);
}
