#include <stdio.h>
#include <string.h>
#include <memory.h>

#include "common.h"

static const char *mybasename(const char *str) {
  const char *base = strrchr(str, '/');
  return base ? base+1 : str;
}

size_t read_dmatrix(dvarray* out, const char* filename) {
    FILE* fid = fopen(filename,"rt");
    double value;
    int i, j, width = 0, height = 0;

    printf("Opened file %s for matrix reading\n", mybasename(filename));

    fscanf(fid, "%d %d", &height, &width);

    dvarray_init(out, height, width);

    for (i=0; i<height; ++i) {
      for (j=0; j<width; ++j) {
        fscanf(fid,"%lf",&value);
        out->data[i].data[j] = value;
      }
    }

    printf("%g\n", out->data[i-1].data[j-1]);
    fclose(fid);
    printf("File read and closed\n");
    return i*j;
}
