#include <stdio.h>
// #include <sys/ddi.h>
#include <string.h>
#include <assert.h>
#include "config.h"
#include "names.h"

char *get_address_by_name(char *name) 
{
  FILE *f;
  int n;
  char fname[100];
  char *faddr;

  faddr = (char *)malloc (sizeof(char)*100);
  assert(faddr);

  // if name contains a decimal point, assume it is an address
  if (strchr(name, '.') != NULL) {
    return name;
  }

  // otherwise, need to look in file
  f = fopen(config.names_file, "rb");
  if (f == NULL) {
    fprintf(stderr, "Unable to open name file: %s\n\n", config.names_file);
    exit(1);
  }

  // scan for address
  while (!feof(f)) {
    n = fscanf(f, "%s %s", fname, faddr);

    if (n != 2 && n != EOF) {
      fprintf(stderr, "Error in name file: %s\n\n", config.names_file);
      exit(1);
    }

    if (strcmp(fname, name) == 0) {
      // found match
      return faddr;
    }
  }

  // no match
  fprintf(stderr, "No match for name: %s\n\n", name);
  exit(1);
}
	       
char *get_name_by_address(char *addr) 
{
  FILE *f;
  int n;
  char faddr[100];
  char *fname;

  fname = (char *)malloc (sizeof(char)*100);
  assert(fname);

  // if address does not contains a decimal point, assume it is a name
  if (strchr(addr, '.') == NULL) {
    return addr;
  }

  // otherwise, need to look in file
  f = fopen(config.names_file, "rb");
  if (f == NULL) {
    fprintf(stderr, "Unable to open name file: %s\n\n", config.names_file);
    exit(1);
  }

  // scan for address
  while (!feof(f)) {
    n = fscanf(f, "%s %s", fname, faddr);

    if (n != 2 && n != EOF) {
      fprintf(stderr, "Error in name file: %s\n\n", config.names_file);
      exit(1);
    }

    if (strcmp(faddr, addr) == 0) {
      // found match
      return fname;
    }
  }

  // no match
  fprintf(stderr, "No match for address: %s\n\n", addr);
  exit(1);
}
	       
