/* $Header$ */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "config_proto.h"

/* EXPORTS */

/* IMPORTS */

/* LOCALS */

int getInt(FILE* fp) {
  char temp[32];
  int result;
  fgets(temp, sizeof(temp), fp);
  sscanf(temp, "%d", &result);
  return result;
}

void mystrncpy(char* dest, char* src, int len) {
  strncpy(dest, src, len - 1);
  dest[len - 1] = '\0';
}

void killNewLine(char* line) {
  int i;
  int len = strlen(line);

  for (i = 0; i < len; i++)
    if (line[i] == '\n' || line[i] == '\r') line[i] = '\0';
}

void getString(FILE* fp, char* buffer, int size) {
  static char temp[2000];
  fgets(temp, sizeof(temp), fp);
  mystrncpy(buffer, temp, size);
  
  killNewLine(buffer);
}

void extractVariableValue(char* s, char* var, char* val) {
  char* equals;

  equals = strchr(s, '=');
  if (equals) {
    // found
    mystrncpy(var, s, (equals - s) + 1);
    strcpy(val, equals + 1);
  } else {
    strcpy(var, "");
    strcpy(val, "");
  }
}

void loadConfig(char* fileName, loaderFuncPtr processConfig) {
  static char buffer[1024];
  static char variable[32];
  static char value[512];
  FILE* fp;

  fp = fopen(fileName, "r");

  if (!fp) {
//    printf("Unable to open config file\n");
    return;
  }

  while (!feof(fp)) {
    getString(fp, buffer, sizeof(buffer));
    if (feof(fp)) break;
    extractVariableValue(buffer, variable, value);
    processConfig(variable, value);
  }

  fclose(fp);

  return;
}

