void plfcont(PLFLT (*f2eval) (PLINT, PLINT, PLPointer), PLPointer f2eval_data, PLINT nx, PLINT ny, PLINT kx, PLINT lx, PLINT ky, PLINT ly, PLFLT *clevel, PLINT nlevel, void (*pltr) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), PLPointer pltr_data) { PLINT i, mx, my, nstor, *heapc; mx = lx - kx + 1; my = ly - ky + 1; if (kx < 1 || kx >= lx) { plabort("plfcont: indices must satisfy 1 <= kx <= lx <= nx"); return; } if (ky < 1 || ky >= ly) { plabort("plfcont: indices must satisfy 1 <= ky <= ly <= ny"); return; } nstor = mx * my; heapc = (PLINT *) malloc((size_t) (2*mx + 10 * nstor) * sizeof(PLINT)); if (heapc == NULL) { plabort("plfcont: out of memory in heap allocation"); return; } for (i = 0; i < nlevel; i++) { plcntr(f2eval, f2eval_data, nx, ny, kx-1, lx-1, ky-1, ly-1, clevel[i], &heapc[0], &heapc[nx], &heapc[nx + nstor], nstor, pltr, pltr_data); if (error) { error = 0; goto done; } } done: free((void *) heapc); }
void plfcont(PLFLT (*f2eval) (PLINT, PLINT, PLPointer), PLPointer f2eval_data, PLINT nx, PLINT ny, PLINT kx, PLINT lx, PLINT ky, PLINT ly, PLFLT *clevel, PLINT nlevel, void (*pltr) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), PLPointer pltr_data) { PLINT i, **ipts; if (kx < 1 || kx >= lx) { plabort("plfcont: indices must satisfy 1 <= kx <= lx <= nx"); return; } if (ky < 1 || ky >= ly) { plabort("plfcont: indices must satisfy 1 <= ky <= ly <= ny"); return; } ipts = (PLINT **) malloc(nx*sizeof(PLINT *)); for (i = 0; i < nx; i++) { ipts[i] = (PLINT *) malloc(ny*sizeof(PLINT *)); } for (i = 0; i < nlevel; i++) { plcntr(f2eval, f2eval_data, nx, ny, kx-1, lx-1, ky-1, ly-1, clevel[i], ipts, pltr, pltr_data); if (error) { error = 0; goto done; } } done: for (i = 0; i < nx; i++) { free((void *)ipts[i]); } free((void *)ipts); }