static void plcntr(PLFLT (*f2eval) (PLINT, PLINT, PLPointer), PLPointer f2eval_data, PLINT nx, PLINT ny, PLINT kx, PLINT lx, PLINT ky, PLINT ly, PLFLT flev, PLINT **ipts, void (*pltr) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), PLPointer pltr_data) { PLINT kcol, krow, lastindex; PLFLT distance; PLFLT save_def, save_scale; char flabel[30]; plgchr(&save_def, &save_scale); save_scale = save_scale/save_def; cont_new_store(flev); /* format contour label for plptex and define the font height of the labels */ plfloatlabel(flev, flabel); plschr(0.0, contlabel_size); /* Clear array for traversed squares */ for (kcol = kx; kcol < lx; kcol++) { for (krow = ky; krow < ly; krow++) { ipts[kcol][krow] = 0; } } for (krow = ky; krow < ly; krow++) { for (kcol = kx; kcol < lx; kcol++) { if (ipts[kcol][krow] == 0) { /* Follow and draw a contour */ pldrawcn(f2eval, f2eval_data, nx, ny, kx, lx, ky, ly, flev, flabel, kcol, krow, 0.0, 0.0, -2, ipts, &distance, &lastindex, pltr, pltr_data); if (error) return; } } } plschr(save_def, save_scale); }
static void plcntr(PLFLT (*f2eval) (PLINT, PLINT, PLPointer), PLPointer f2eval_data, PLINT nx, PLINT ny, PLINT kx, PLINT lx, PLINT ky, PLINT ly, PLFLT flev, PLINT *iscan, PLINT *ixstor, PLINT *iystor, PLINT nstor, void (*pltr) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer), PLPointer pltr_data) { PLINT kcol, krow, kstor, kscan, l, ixt, iyt, jstor, next; char flabel[30]; cont_new_store(flev); /* format contour label for plptex and define the font height of the labels */ plfloatlabel(flev, flabel); plschr(0.0, contlabel_size); /* Initialize memory pointers */ kstor = 0; kscan = 0; for (krow = ky; krow <= ly; krow++) { for (kcol = kx + 1; kcol <= lx; kcol++) { /* Follow and draw a contour */ pldrawcn(f2eval, f2eval_data, nx, ny, kx, lx, ky, ly, flev, flabel, kcol, krow, &kscan, &kstor, iscan, ixstor, iystor, nstor, pltr, pltr_data); if (error) return; } /* Search of row complete */ /* Set up memory of next row in iscan and edit ixstor and iystor */ if (krow < ny-1) { jstor = 0; kscan = 0; next = krow + 1; for (l = 1; l <= kstor; l++) { ixt = ixstor[l - 1]; iyt = iystor[l - 1]; /* Memory of next row into iscan */ if (iyt == next) { kscan = kscan + 1; iscan[kscan - 1] = ixt; } /* Retain memory of rows to come, and forget rest */ else if (iyt > next) { jstor = jstor + 1; ixstor[jstor - 1] = ixt; iystor[jstor - 1] = iyt; } } kstor = jstor; } } plschr(0.0, 1.0); }