# include "hcdata.h"

#define INFINITE 99

extern kdatum true ();
extern kdatum false ();

int nat= 0;

udatum
n0 ()
{
  static udatum kte= NULL;

  if (kte == NULL) {
    kte= ud_alloc ();
    kte->ino= 0;
    (void) ud_const (nat, kte);
  }
  return kte;
}

udatum
n1 ()
{
  static udatum kte= NULL;

  if (kte == NULL) {
    kte= ud_alloc ();
    kte->ino= 1;
    (void) ud_const (nat, kte);
  }
  return kte;
}

udatum
n2 ()
{
  static udatum kte= NULL;

  if (kte == NULL) {
    kte= ud_alloc ();
    kte->ino= 2;
    (void) ud_const (nat, kte);
  }
  return kte;
}

udatum
n3 ()
{
  static udatum kte= NULL;

  if (kte == NULL) {
    kte= ud_alloc ();
    kte->ino= 3;
    (void) ud_const (nat, kte);
  }
  return kte;
}

udatum
n4 ()
{
  static udatum kte= NULL;

  if (kte == NULL) {
    kte= ud_alloc ();
    kte->ino= 4;
    (void) ud_const (nat, kte);
  }
  return kte;
}

udatum
n5 ()
{
  static udatum kte= NULL;

  if (kte == NULL) {
    kte= ud_alloc ();
    kte->ino= 5;
    (void) ud_const (nat, kte);
  }
  return kte;
}

udatum
n6 ()
{
  static udatum kte= NULL;

  if (kte == NULL) {
    kte= ud_alloc ();
    kte->ino= 6;
    (void) ud_const (nat, kte);
  }
  return kte;
}

udatum
n7 ()
{
  static udatum kte= NULL;

  if (kte == NULL) {
    kte= ud_alloc ();
    kte->ino= 7;
    (void) ud_const (nat, kte);
  }
  return kte;
}

udatum
n8 ()
{
  static udatum kte= NULL;

  if (kte == NULL) {
    kte= ud_alloc ();
    kte->ino= 8;
    (void) ud_const (nat, kte);
  }
  return kte;
}

udatum
n9 ()
{
  static udatum kte= NULL;

  if (kte == NULL) {
    kte= ud_alloc ();
    kte->ino= 9;
    (void) ud_const (nat, kte);
  }
  return kte;
}

udatum
infinite ()
{
  static udatum kte= NULL;

  if (kte == NULL) {
    kte= ud_alloc ();
    kte->ino= INFINITE;
    (void) ud_const (nat, kte);
  }
  return kte;
}

udatum
plus (t1, t2)
    udatum t1, t2;
{
  udatum kte;

  kte= ud_alloc();
  if (t1->ino == INFINITE || t2->ino == INFINITE)
    kte->ino= INFINITE;
  else
    kte->ino= t1->ino + t2->ino;
  ud_free (nat, t1);
  ud_free (nat, t2);
  return kte;
}

kdatum
lt (t1, t2)
    udatum t1, t2;
{
  kdatum r;

  if (t1->ino < t2->ino)
    r= true ();
  else 
    r= false ();
  ud_free (nat, t1);
  ud_free (nat, t2);
  return r;
}

int
eqnat (t1, t2) 
    udatum t1, t2;
{
  if (t1->ino == t2->ino)
    return TRUE;
  else 
    return FALSE;
}

char*
dnat (t1)
     udatum t1;
{
  char* malloc ();
  static char* buff= NULL;
  
  if (buff == NULL)
    buff= malloc (16);
  
  sprintf (buff, "%d", t1->ino);
  return buff;
}
