/* grid.c */ /* Riccardo Schmid Created 2-10-04 Last Update 2 - 16- 04 */ #include #include #include #include #include "grid.h" void gmultf(Grid *g, float mul) { int rows = g->nrows, cols = g->ncols, nodata = g->nodataval, i, j; int **tbl = g->tbl, *crt; for (i=0; iminval *= mul; g->maxval *= mul; } void gmult(Grid *g, int mul) { int rows = g->nrows, cols = g->ncols, nodata = g->nodataval, i, j; int **tbl = g->tbl, *crt; for (i=0; iminval *= mul; g->maxval *= mul; } /* prints the table to the screen */ void gprint(Grid *g) { int i, j, rows, cols; rows = g->nrows; cols = g->ncols; int **tbl = g->tbl, *crt; for (i=0;i 0 is returned if error: 1: File I/O error 2: File read error 3: Memory allocation error */ int gopen(Grid *g, char *filename) { FILE *fp; int rows, cols, nodata, minval = INT_MAX, maxval = INT_MIN; if (!(fp = fopen(filename,"r"))) return 1; if (fscanf(fp, "ncols %d\n", &cols) != 1) return 2; g->ncols = cols; if (fscanf(fp, "nrows %d\n", &rows) != 1) return 2; g->nrows = rows; if (fscanf(fp,"xllcorner %f\n", &g->xllcorner) != 1) return 2; if (fscanf(fp,"yllcorner %f\n", &g->yllcorner) != 1) return 2; if (fscanf(fp,"cellsize %f\n", &g->cellsize) != 1) return 2; if (fscanf(fp, "NODATA_value %d\n", &nodata) != 1) return 2; g->nodataval = nodata; int **table, *crt; if (!(g->tbl = table = (int **)malloc(sizeof(int *) * rows))) return 3; int i, j; for (i=0; i maxval) maxval = *crt; else if (*crt != nodata && *crt < minval) minval = *crt; crt++; } fscanf(fp, "\n"); table++; } g->minval = minval; g->maxval = maxval; fclose(fp); return 0; } /* save the grid to a file filename creates the file if it does not exist */ int gsave(Grid *g, char *filename) { int i, j, rows = g->nrows, cols = g->ncols; FILE *fp; if (!(fp = fopen(filename, "w"))) return 1; /* print the headers */ fprintf(fp,"ncols\t%d\n", g->ncols); fprintf(fp,"nrows\t%d\n", g->nrows); fprintf(fp,"xllcorner\t%f\n", g->xllcorner); fprintf(fp,"yllcorner\t%f\n", g->yllcorner); fprintf(fp,"cellsize\t%f\n", g->cellsize); fprintf(fp,"NODATA_value\t%d\n", g->nodataval); int **tbl = g->tbl, *crt; /* write the table */ for (i=0;inrows; int **table; table = g->tbl; for (i=0; i