#include"mbasic.h"

#define MAX_LABELS		1024
static char * label_tab[MAX_LABELS];

static int last_label=0;

int NewLabel(void)
{
 last_label++;
 return last_label;
}

void PostLabel(int L)
{
 _emit("L%u:\n",L);
}

void InitLabel(void)
{
 int i;
 last_label=0;
 for(i=0;i<MAX_LABELS;i++)
  label_tab[i]=NULL;
}

void register_label(char * n)
{
 int i;
/* printf("DEBUG: Register label '%s'\n",n); */
 for(i=0;i<MAX_LABELS;i++)
 {
  if(label_tab[i] && !strncmp(label_tab[i],n,strlen(n)) && 
     strlen(label_tab[i])==strlen(n)) Error("Label %s declared twice",n);
 }     
 for(i=0;i<MAX_LABELS;i++)
  if(!label_tab[i])
  {
   label_tab[i]=malloc(strlen(n)+1);
   memcpy(label_tab[i],n,strlen(n)+1);
   return;
  }
 Error("Internal error: Increase MAX_LABELS in file %s",__FILE__);
}
