#include "RMFBuffer.h"
#include "biregistry.h"
#include "debug.h"
#include "almonitor.h"

/*--------------------------------------------------*/
char* AlMonitor_make_translation(event,function,args)
char *event,*function,*args;
{
  RMFBuffer Buff;
  char *ret;
  Buff=RMFBuffer_create(event,20);
  RMFBuffer_append(Buff,":");
  RMFBuffer_append(Buff,function);
  RMFBuffer_append(Buff,"(");
  RMFBuffer_append(Buff,args);
  RMFBuffer_append(Buff,")");
  ret=RMFBuffer_copy_of_buff(Buff);
  RMFBuffer_destroy(Buff);
  _debug1(1,"rl_REField_make_translation:= %s.\n",ret);
  return(ret);
}

static Biregistry AlMonitorAddresses;
/*--------------------------------------------------*/
NORET  AlMonitor_register_address(object,string)
VOIDP object;
char *string;
{
  static Bool Inited=Bool_FALSE;
  if (Inited==Bool_FALSE) {
    AlMonitorAddresses=Biregistry_create(Registry_ptrcmp,
					 Registry_ptrhash,
					 Registry_strcmp,
					 Registry_strhash);
    Inited=Bool_TRUE;
  }
  _debug1(1,"register_address: registering %s\n",string);
  if (Biregistry_add(AlMonitorAddresses,(VOIDP)object,
		     (VOIDP)string)==Bool_FALSE)
    Al_fatal_error1("almonitor_register_address: could not register %s.",
		    string);
}

/*--------------------------------------------------*/
VOIDP AlMonitor_get_obj_from_string(ad)
char* ad;
{
  VOIDP ret;
  if ((ret=(VOIDP)Biregistry_rev_get(AlMonitorAddresses,(CONSTVOIDP)ad))==NULL)
    Al_fatal_error1("AlMonitor_get_obj_from_string: could not get %s.",
		    ad);
  return(ret);
}

/*--------------------------------------------------*/
NORET AlMonitor_remove_obj(REf)
VOIDP REf;
{
  if (Biregistry_remove(AlMonitorAddresses,
			(CONSTVOIDP)REf)==Bool_FALSE)
    Al_fatal_error1("AlMonitoremove_obj: could not remove %lx.",
		    REf);
}
