#define NOFUNCTIONS
#include <reg.h>

char *SoftwareList[]={"Any","ScreenFool","RouteEdit",NULL};

BOOL Authenticate(struct Registration *reg, ULONG software)
{
  if(DFTChecksum(reg)!=reg->AutreChecksum) return FALSE;
  
  if(reg->ChecksumNumber!=DoFunkyThing(reg->ActualNumber)) return FALSE;
  
  if(software!=reg->CTSAuthorized && reg->CTSAuthorized!=CTS_ANY)
    return FALSE;
  
  return TRUE;
}

ULONG DoFunkyThing(ULONG source)
  {
  ULONG dest;
  
  srand(source*999);
  dest=rand();
  
  dest=(dest*13);
  srand(dest);
  dest=rand();
  
  dest=abs(dest/97);
  
  return(dest ? dest : 9821841UL );
  }

ULONG StringSum(char *str)
{
  ULONG sum=0;
  
  while(*str)
    {
    sum+=*str;
    str++;
    }
  
  return sum;
}

ULONG DFTChecksum(struct Registration *reg)
{
  ULONG sum;
  
  sum=StringSum(reg->Name);
  sum+=StringSum(reg->Addr1);
  sum+=StringSum(reg->Addr2);
  sum+=StringSum(reg->Country);
  sum+=StringSum(reg->EMail);
  sum+=StringSum(reg->Copyright);
  sum+=reg->CTSAuthorized;
  
  return DoFunkyThing(sum);
}

