28 #define N_EDGE_SEGMENTS 50
32 0.301030, 0.477121, 0.602060, 0.698970,
33 0.778151, 0.845098, 0.903090, 0.954243
92 c_plaxes( 0.0, 0.0, xopt, xtick, nxsub, yopt, ytick, nysub );
139 PLBOOL lax, lbx, lcx, ldx, lgx, lix, llx, lsx, ltx, lux, lwx, lxx;
140 PLBOOL lay, lby, lcy, ldy, lgy, liy, lly, lsy, lty, luy, lwy, lxy;
141 PLINT xmajor, xminor, ymajor, yminor;
142 PLINT i, i1x, i2x, i3x, i4x, i1y, i2y, i3y, i4y;
143 PLINT nxsub1, nysub1;
144 PLINT lxmin, lxmax, lymin, lymax;
145 PLINT pxmin, pxmax, pymin, pymax;
146 PLINT vppxmi, vppxma, vppymi, vppyma;
147 PLFLT xtick1, ytick1, vpwxmi, vpwxma, vpwymi, vpwyma;
148 PLFLT vpwxmin, vpwxmax, vpwymin, vpwymax;
149 PLFLT xp0, yp0, tn, tp, temp;
150 PLFLT factor, tstart;
152 if ( plsc->level < 3 )
154 plabort(
"plbox: Please set up window first" );
160 plP_gclp( &lxmin, &lxmax, &lymin, &lymax );
161 plP_gphy( &pxmin, &pxmax, &pymin, &pymax );
162 plP_sclp( pxmin, pxmax, pymin, pymax );
164 vppxmi = plsc->vppxmi;
165 vppxma = plsc->vppxma;
166 vppymi = plsc->vppymi;
167 vppyma = plsc->vppyma;
169 if ( plsc->if_boxbb )
173 plsc->boxbb_xmin = plsc->vppxmi / plsc->xpmm;
174 plsc->boxbb_xmax = plsc->vppxma / plsc->xpmm;
175 plsc->boxbb_ymin = plsc->vppymi / plsc->ypmm;
176 plsc->boxbb_ymax = plsc->vppyma / plsc->ypmm;
209 xmajor =
MAX(
ROUND( plsc->majht * plsc->ypmm ), 1 );
210 ymajor =
MAX(
ROUND( plsc->majht * plsc->xpmm ), 1 );
211 xminor =
MAX(
ROUND( plsc->minht * plsc->ypmm ), 1 );
212 yminor =
MAX(
ROUND( plsc->minht * plsc->xpmm ), 1 );
216 xtick1 = llx ? 1.0 : xtick;
217 ytick1 = lly ? 1.0 : ytick;
219 plP_xgvpw( &vpwxmin, &vpwxmax, &vpwymin, &vpwymax );
222 vpwxmi = ( vpwxmax > vpwxmin ) ? vpwxmin : vpwxmax;
223 vpwxma = ( vpwxmax > vpwxmin ) ? vpwxmax : vpwxmin;
224 vpwymi = ( vpwymax > vpwymin ) ? vpwymin : vpwymax;
225 vpwyma = ( vpwymax > vpwymin ) ? vpwymax : vpwymin;
228 lax = lax && vpwymi < y0 && y0 < vpwyma;
229 lay = lay && vpwxmi < x0 && x0 < vpwxma;
233 if ( ltx || lgx || lxx )
234 pldtik( vpwxmi, vpwxma, &xtick1, &nxsub1, ldx );
236 if ( lty || lgy || lxy )
237 pldtik( vpwymi, vpwyma, &ytick1, &nysub1, ldy );
272 if ( plsc->if_boxbb )
279 if ( lix && ( lbx || lux ) && ( ltx && !lxx ) )
280 plsc->boxbb_ymin -= xmajor / plsc->ypmm;
281 if ( liy && ( lcy || lwy ) && ( lty && !lxy ) )
282 plsc->boxbb_xmax += ymajor / plsc->xpmm;
283 if ( lix && ( lcx || lwx ) && ( ltx && !lxx ) )
284 plsc->boxbb_ymax += xmajor / plsc->ypmm;
285 if ( liy && ( lby || luy ) && ( lty && !lxy ) )
286 plsc->boxbb_xmin -= ymajor / plsc->xpmm;
303 pldtfac( vpwxmi, vpwxma, &factor, &tstart );
304 tp = xtick1 * ( floor( ( vpwxmi - tstart ) / xtick1 ) ) + tstart;
307 tp = xtick1 * floor( vpwxmi / xtick1 );
315 for ( i = 0; i <= 7; i++ )
318 if (
BETW( temp, vpwxmi, vpwxma ) )
324 for ( i = 1; i <= nxsub1 - 1; i++ )
326 temp = tp + i * xtick1 / nxsub1;
327 if (
BETW( temp, vpwxmi, vpwxma ) )
332 if ( !
BETW( tn, vpwxmi, vpwxma ) )
353 pldtfac( vpwymi, vpwyma, &factor, &tstart );
354 tp = ytick1 * ( floor( ( vpwymi - tstart ) / ytick1 ) ) + tstart;
357 tp = ytick1 * floor( vpwymi / ytick1 );
365 for ( i = 0; i <= 7; i++ )
368 if (
BETW( temp, vpwymi, vpwyma ) )
374 for ( i = 1; i <= nysub1 - 1; i++ )
376 temp = tp + i * ytick1 / nysub1;
377 if (
BETW( temp, vpwymi, vpwyma ) )
382 if ( !
BETW( tn, vpwymi, vpwyma ) )
403 pldtfac( vpwxmi, vpwxma, &factor, &tstart );
404 tp = xtick1 * ( floor( ( vpwxma - tstart ) / xtick1 ) + 1 ) + tstart;
407 tp = xtick1 * ( floor( vpwxma / xtick1 ) + 1 );
415 for ( i = 7; i >= 0; i-- )
418 if (
BETW( temp, vpwxmi, vpwxma ) )
424 for ( i = nxsub1 - 1; i >= 1; i-- )
426 temp = tn + i * xtick1 / nxsub1;
427 if (
BETW( temp, vpwxmi, vpwxma ) )
432 if ( !
BETW( tn, vpwxmi, vpwxma ) )
453 pldtfac( vpwymi, vpwyma, &factor, &tstart );
454 tp = ytick1 * ( floor( ( vpwyma - tstart ) / ytick1 ) + 1 ) + tstart;
457 tp = ytick1 * ( floor( vpwyma / ytick1 ) + 1 );
465 for ( i = 7; i >= 0; i-- )
468 if (
BETW( temp, vpwymi, vpwyma ) )
474 for ( i = nysub1 - 1; i >= 1; i-- )
476 temp = tn + i * ytick1 / nysub1;
477 if (
BETW( temp, vpwymi, vpwyma ) )
482 if ( !
BETW( tn, vpwymi, vpwyma ) )
499 tp = xtick1 * floor( vpwxmi / xtick1 );
507 for ( i = 0; i <= 7; i++ )
510 if (
BETW( temp, vpwxmi, vpwxma ) )
516 for ( i = 1; i <= nxsub1 - 1; i++ )
518 temp = tp + i * xtick1 / nxsub1;
519 if (
BETW( temp, vpwxmi, vpwxma ) )
524 if ( !
BETW( tn, vpwxmi, vpwxma ) )
541 tp = ytick1 * floor( vpwymi / ytick1 );
549 for ( i = 0; i <= 7; i++ )
552 if (
BETW( temp, vpwymi, vpwyma ) )
558 for ( i = 1; i <= nysub1 - 1; i++ )
560 temp = tp + i * ytick1 / nysub1;
561 if (
BETW( temp, vpwymi, vpwyma ) )
566 if ( !
BETW( tn, vpwymi, vpwyma ) )
575 grid_box( xopt, xtick1, nxsub1, yopt, ytick1, nysub1 );
583 plP_sclp( lxmin, lxmax, lymin, lymax );
597 PLFLT dx, dy, tx, ty, ux, uy;
598 PLFLT xmin, xmax, ymin, ymax, zmin, zmax, zscale;
599 PLFLT cxx, cxy, cyx, cyy, cyz;
604 PLINT xdigmax, xdigits;
605 PLINT ydigmax, ydigits;
606 PLINT zdigmax, zdigits;
608 if ( plsc->level < 3 )
610 plabort(
"plbox3: Please set up window first" );
614 plP_gw3wc( &cxx, &cxy, &cyx, &cyy, &cyz );
615 plP_gdom( &xmin, &xmax, &ymin, &ymax );
618 plgxax( &xdigmax, &xdigits );
619 plgyax( &ydigmax, &ydigits );
620 plgzax( &zdigmax, &zdigits );
634 *
zbcol = plsc->icol0;
638 if ( cxx >= 0.0 && cxy <= 0.0 )
646 xmin, xmax, xtick, nxsub, 0, &xdigits );
650 plzbx( zopt, zlabel, 1, dx, dy, ux, uy,
651 plP_w3wcy( xmax, ymin, zmax ), zmin, zmax, ztick, nzsub, &zdigits );
658 ymax, ymin, ytick, nysub, ln, &ydigits );
664 plzbx( zopt, zlabel, 0, dx, dy, tx, ty,
665 plP_w3wcy( xmin, ymax, zmax ), zmin, zmax, ztick, nzsub, &zdigits );
667 else if ( cxx <= 0.0 && cxy <= 0.0 )
675 ymax, ymin, ytick, nysub, 0, &ydigits );
679 plzbx( zopt, zlabel, 1, dx, dy, ux, uy,
680 plP_w3wcy( xmin, ymin, zmax ), zmin, zmax, ztick, nzsub, &zdigits );
687 xmax, xmin, xtick, nxsub, ln, &xdigits );
693 plzbx( zopt, zlabel, 0, dx, dy, tx, ty,
694 plP_w3wcy( xmax, ymax, zmax ), zmin, zmax, ztick, nzsub, &zdigits );
696 else if ( cxx <= 0.0 && cxy >= 0.0 )
704 xmax, xmin, xtick, nxsub, 0, &xdigits );
708 plzbx( zopt, zlabel, 1, dx, dy, ux, uy,
709 plP_w3wcy( xmin, ymax, zmax ), zmin, zmax, ztick, nzsub, &zdigits );
716 ymin, ymax, ytick, nysub, ln, &ydigits );
722 plzbx( zopt, zlabel, 0, dx, dy, tx, ty,
723 plP_w3wcy( xmax, ymin, zmax ), zmin, zmax, ztick, nzsub, &zdigits );
725 else if ( cxx >= 0.0 && cxy >= 0.0 )
733 ymin, ymax, ytick, nysub, 0, &ydigits );
737 plzbx( zopt, zlabel, 1, dx, dy, ux, uy,
738 plP_w3wcy( xmax, ymax, zmax ), zmin, zmax, ztick, nzsub, &zdigits );
745 xmin, xmax, xtick, nxsub, ln, &xdigits );
751 plzbx( zopt, zlabel, 0, dx, dy, tx, ty,
752 plP_w3wcy( xmin, ymin, zmax ), zmin, zmax, ztick, nzsub, &zdigits );
754 plsxax( xdigmax, xdigits );
755 plsyax( ydigmax, ydigits );
756 plszax( zdigmax, zdigits );
790 PLINT lb, ld, lf, li, ll, ln, ls, lt, lu, lo;
791 PLINT major, minor, mode, prec, scale;
792 PLINT i, i1, i2, i3, i4;
794 PLFLT pos, tn, tp, temp, height, tick1, vmin, vmax;
797 PLFLT dwx, dwy, lambda, tcrit, tspace = 0.1;
799 PLFLT tstart, factor;
801 vmin = ( vmax_in > vmin_in ) ? vmin_in : vmax_in;
802 vmax = ( vmax_in > vmin_in ) ? vmax_in : vmin_in;
809 major =
MAX(
ROUND( plsc->majht * plsc->ypmm ), 1 );
810 minor =
MAX(
ROUND( plsc->minht * plsc->ypmm ), 1 );
827 plxytx( wx1, wy1, wx2, wy2, 3.2, 0.5, 0.5, label );
832 tick1 = ( vmax > vmin ) ? 1.0 : -1.0;
834 pldtik( vmin, vmax, &tick1, &nsub1, ld );
859 pldtfac( vmin, vmax, &factor, &tstart );
860 tp = tick1 * ( floor( ( vmin - tstart ) / tick1 ) ) + tstart;
863 tp = tick1 * floor( vmin / tick1 );
871 for ( i = 0; i <= 7; i++ )
874 if (
BETW( temp, vmin, vmax ) )
876 lambda = ( vmax_in > vmin_in ) ?
877 ( temp - vmin ) / ( vmax - vmin ) :
878 ( vmax - temp ) / ( vmax - vmin );
887 for ( i = 1; i <= nsub1 - 1; i++ )
889 temp = tp + i * ( tn - tp ) / nsub1;
890 if (
BETW( temp, vmin, vmax ) )
892 lambda = ( vmax_in > vmin_in ) ?
893 ( temp - vmin ) / ( vmax - vmin ) :
894 ( vmax - temp ) / ( vmax - vmin );
903 if ( !
BETW( temp, vmin, vmax ) )
906 lambda = ( vmax_in > vmin_in ) ?
907 ( temp - vmin ) / ( vmax - vmin ) :
908 ( vmax - temp ) / ( vmax - vmin );
920 pldprec( vmin, vmax, tick1, lf, &mode, &prec, *digits, &scale );
924 tcrit = tspace * tick1;
927 pldtfac( vmin, vmax, &factor, &tstart );
928 tp = tick1 * ( 1. + floor( ( vmin - tstart ) / tick1 ) ) + tstart;
931 tp = tick1 * ( 1. + floor( vmin / tick1 ) );
932 for ( tn = tp;
BETW( tn, vmin, vmax ); tn += tick1 )
934 if (
BETW( tn, vmin + tcrit, vmax - tcrit ) )
940 pos = ( vmax_in > vmin_in ) ?
941 ( tn - vmin ) / ( vmax - vmin ) :
942 ( vmax - tn ) / ( vmax - vmin );
943 plxytx( wx1, wy1, wx2, wy2, 1.5, pos, 0.5,
string );
947 if ( !ll && !lo && !ld && mode )
950 plxytx( wx1, wy1, wx2, wy2, height, 1.0, 0.5,
string );
966 PLINT x, y, refx, refy;
967 PLFLT shift, cc, ss, wx, wy;
968 PLFLT xdv, ydv, xmm, ymm, refxmm, refymm, xform[4], diag;
972 cc = plsc->wmxscl * ( wx2 - wx1 );
973 ss = plsc->wmyscl * ( wy2 - wy1 );
974 diag = sqrt( cc * cc + ss * ss );
977 wx = wx1 + pos * ( wx2 - wx1 );
978 wy = wy1 + pos * ( wy2 - wy1 );
991 plgchr( &chrdef, &chrht );
992 shift = ( just == 0.0 ) ? 0.0 :
plstrl(
text ) * just;
996 refxmm = xmm - shift * xform[0];
997 refymm = ymm - shift * xform[2];
1040 PLINT lb, lc, ld, lf, li, ll, lm, ln, ls, lt, lu, lv, lo;
1041 PLINT i, mode, prec, scale;
1042 PLINT nsub1, lstring;
1043 PLFLT pos, tn, tp, temp, height, tick1;
1044 PLFLT dwy, lambda, diag, major, minor, xmajor, xminor;
1045 PLFLT ymajor, yminor, dxm, dym, vmin, vmax;
1047 PLFLT tstart, factor;
1050 vmin = ( vmax_in > vmin_in ) ? vmin_in : vmax_in;
1051 vmax = ( vmax_in > vmin_in ) ? vmax_in : vmin_in;
1057 major = plsc->majht;
1058 minor = plsc->minht;
1078 plztx(
"h", dx, dy, wx, wy1, wy2, 5.0, 0.5, 0.5, label );
1081 plztx(
"h", dx, dy, wx, wy1, wy2, -5.0, 0.5, 0.5, label );
1086 if ( !right && !lb )
1093 pldtik( vmin, vmax, &tick1, &nsub1, ld );
1095 if ( ( li && !right ) || ( !li && right ) )
1101 dxm = dx * plsc->wmxscl;
1102 dym = dy * plsc->wmyscl;
1103 diag = sqrt( dxm * dxm + dym * dym );
1105 xminor = minor * dxm / diag;
1106 xmajor = major * dxm / diag;
1107 yminor = minor * dym / diag;
1108 ymajor = major * dym / diag;
1118 pldtfac( vmin, vmax, &factor, &tstart );
1119 tp = tick1 * ( floor( ( vmin - tstart ) / tick1 ) ) + tstart;
1122 tp = tick1 * floor( vmin / tick1 );
1130 for ( i = 0; i <= 7; i++ )
1132 temp = tp +
xlog[i];
1133 if (
BETW( temp, vmin, vmax ) )
1135 lambda = ( vmax_in > vmin_in ) ?
1136 ( temp - vmin ) / ( vmax - vmin ) :
1137 ( vmax - temp ) / ( vmax - vmin );
1146 for ( i = 1; i <= nsub1 - 1; i++ )
1148 temp = tp + i * tick1 / nsub1;
1149 if (
BETW( temp, vmin, vmax ) )
1151 lambda = ( vmax_in > vmin_in ) ?
1152 ( temp - vmin ) / ( vmax - vmin ) :
1153 ( vmax - temp ) / ( vmax - vmin );
1162 if ( !
BETW( temp, vmin, vmax ) )
1164 lambda = ( vmax_in > vmin_in ) ?
1165 ( temp - vmin ) / ( vmax - vmin ) :
1166 ( vmax - temp ) / ( vmax - vmin );
1176 if ( ( ln || lm ) && lt )
1178 pldprec( vmin, vmax, tick1, lf, &mode, &prec, *digits, &scale );
1183 pldtfac( vmin, vmax, &factor, &tstart );
1184 tp = tick1 * ( floor( ( vmin - tstart ) / tick1 ) ) + tstart;
1187 tp = tick1 * floor( vmin / tick1 );
1188 for ( tn = tp + tick1;
BETW( tn, vmin, vmax ); tn += tick1 )
1194 pos = ( vmax_in > vmin_in ) ?
1195 ( tn - vmin ) / ( vmax - vmin ) :
1196 ( vmax - tn ) / ( vmax - vmin );
1198 plztx(
"v", dx, dy, wx, wy1, wy2, 0.5, pos, 1.0,
string );
1201 plztx(
"v", dx, dy, wx, wy1, wy2, -0.5, pos, 0.0,
string );
1203 lstring = (
PLINT) strlen(
string );
1204 *digits =
MAX( *digits, lstring );
1206 if ( !ll && !lo && !ld && mode )
1208 snprintf(
string,
STRING_LEN,
"(x10%su%d%sd)", esc_string, (
int) scale, esc_string );
1213 plztx(
"v", dx, dy, wx, wy1, wy2, height, pos, 0.5,
string );
1217 plztx(
"v", dx, dy, wx, wy1, wy2,
1218 (
PLFLT) -height, pos, 0.5,
string );
1235 PLINT refx = 0, refy = 0, x = 0, y = 0, vert = 0;
1236 PLFLT shift, cc, ss, wy;
1237 PLFLT xdv, ydv, xmm, ymm, refxmm, refymm, xform[4], diag;
1239 PLFLT chrdef, chrht;
1241 cc = plsc->wmxscl * dx;
1242 ss = plsc->wmyscl * dy;
1243 diag = sqrt( cc * cc + ss * ss );
1246 wy = wy1 + pos * ( wy2 - wy1 );
1274 plgchr( &chrdef, &chrht );
1275 shift = ( just == 0.0 ) ? 0.0 :
plstrl(
text ) * just;
1279 refxmm = xmm - shift * xform[0];
1280 refymm = ymm - shift * xform[2];
1304 PLINT lgx, lhx, llx, ldx;
1305 PLINT lgy, lhy, lly, ldy;
1306 PLFLT vpwxmi, vpwxma, vpwymi, vpwyma;
1307 PLFLT vpwxmin, vpwxmax, vpwymin, vpwymax;
1308 PLFLT tn, temp, tcrit, tspace = 0.1;
1309 PLFLT tstart, factor;
1324 plP_xgvpw( &vpwxmin, &vpwxmax, &vpwymin, &vpwymax );
1327 vpwxmi = ( vpwxmax > vpwxmin ) ? vpwxmin : vpwxmax;
1328 vpwxma = ( vpwxmax > vpwxmin ) ? vpwxmax : vpwxmin;
1329 vpwymi = ( vpwymax > vpwymin ) ? vpwymin : vpwymax;
1330 vpwyma = ( vpwymax > vpwymin ) ? vpwymax : vpwymin;
1338 pldtfac( vpwxmi, vpwxma, &factor, &tstart );
1339 tn = xtick1 * ( floor( ( vpwxmi - tstart ) / xtick1 ) ) + tstart;
1343 tn = xtick1 * floor( vpwxmi / xtick1 );
1345 for (; tn <= vpwxma; tn += xtick1 )
1352 for ( i = 0; i <= 7; i++ )
1354 temp = tn +
xlog[i];
1355 tcrit = ( temp - otemp ) * tspace;
1357 if (
BETW( temp, vpwxmi + tcrit, vpwxma - tcrit ) )
1358 pljoin( temp, vpwymi, temp, vpwyma );
1363 for ( i = 1; i <= nxsub1 - 1; i++ )
1365 temp = tn + i * xtick1 / nxsub1;
1366 tcrit = xtick1 / nxsub1 * tspace;
1367 if (
BETW( temp, vpwxmi + tcrit, vpwxma - tcrit ) )
1368 pljoin( temp, vpwymi, temp, vpwyma );
1372 tcrit = xtick1 * tspace;
1373 if (
BETW( tn, vpwxmi + tcrit, vpwxma - tcrit ) )
1374 pljoin( tn, vpwymi, tn, vpwyma );
1384 pldtfac( vpwymi, vpwyma, &factor, &tstart );
1385 tn = ytick1 * ( floor( ( vpwymi - tstart ) / ytick1 ) ) + tstart;
1389 tn = ytick1 * floor( vpwymi / ytick1 );
1391 for (; tn <= vpwyma; tn += ytick1 )
1398 for ( i = 0; i <= 7; i++ )
1400 temp = tn +
xlog[i];
1401 tcrit = ( temp - otemp ) * tspace;
1403 if (
BETW( temp, vpwymi + tcrit, vpwyma - tcrit ) )
1404 pljoin( vpwxmi, temp, vpwxma, temp );
1409 for ( i = 1; i <= nysub1 - 1; i++ )
1411 temp = tn + i * ytick1 / nysub1;
1412 tcrit = ytick1 / nysub1 * tspace;
1413 if (
BETW( temp, vpwymi + tcrit, vpwyma - tcrit ) )
1414 pljoin( vpwxmi, temp, vpwxma, temp );
1418 tcrit = ytick1 * tspace;
1419 if (
BETW( tn, vpwymi + tcrit, vpwyma - tcrit ) )
1420 pljoin( vpwxmi, tn, vpwxma, tn );
1435 PLBOOL ldx, lfx, lix, llx, lmx, lnx, ltx, lox, lxx;
1436 PLBOOL ldy, lfy, liy, lly, lmy, lny, lty, lvy, loy, lxy;
1437 PLFLT vpwxmi, vpwxma, vpwymi, vpwyma;
1438 PLFLT vpwxmin, vpwxmax, vpwymin, vpwymax;
1439 PLFLT tn, tp, offset;
1440 PLFLT factor, tstart;
1442 PLFLT default_mm, char_height_mm, height_mm;
1443 PLFLT string_length_mm = 0.0, pos_mm = 0.0;
1447 PLBOOL custom_exponent_placement = !plsc->label_func && plsc->label_data;
1453 PLFLT pos = 0.0, height = 0.0, just = 0.0;
1456 plgchr( &default_mm, &char_height_mm );
1481 plP_xgvpw( &vpwxmin, &vpwxmax, &vpwymin, &vpwymax );
1484 vpwxmi = ( vpwxmax > vpwxmin ) ? vpwxmin : vpwxmax;
1485 vpwxma = ( vpwxmax > vpwxmin ) ? vpwxmax : vpwxmin;
1486 vpwymi = ( vpwymax > vpwymin ) ? vpwymin : vpwymax;
1487 vpwyma = ( vpwymax > vpwymin ) ? vpwymax : vpwymin;
1490 if ( ( lmx || lnx ) && ( ltx || lxx ) )
1492 PLINT xmode, xprec, xdigmax, xdigits, xscale;
1494 plgxax( &xdigmax, &xdigits );
1495 pldprec( vpwxmi, vpwxma, xtick1, lfx, &xmode, &xprec, xdigmax, &xscale );
1500 pldtfac( vpwxmi, vpwxma, &factor, &tstart );
1501 tp = xtick1 * ( 1. + floor( ( vpwxmi - tstart ) / xtick1 ) ) + tstart;
1505 tp = xtick1 * ( 1. + floor( vpwxmi / xtick1 ) );
1507 height = lix ? 1.75 : 1.5;
1508 if ( plsc->if_boxbb )
1515 height_mm = ( height + 0.7 ) * char_height_mm;
1517 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin, plsc->vppymi /
1518 plsc->ypmm - height_mm );
1520 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax, plsc->vppyma /
1521 plsc->ypmm + height_mm );
1524 for ( tn = tp;
BETW( tn, vpwxmi, vpwxma ); tn += xtick1 )
1534 pos = ( vpwxmax > vpwxmin ) ?
1535 ( tn - vpwxmi ) / ( vpwxma - vpwxmi ) :
1536 ( vpwxma - tn ) / ( vpwxma - vpwxmi );
1537 if ( plsc->if_boxbb )
1539 string_length_mm =
plstrl(
string );
1540 pos_mm = ( plsc->vppxmi + pos *
1541 ( plsc->vppxma - plsc->vppxmi ) ) /
1547 if ( plsc->if_boxbb )
1549 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin,
1550 pos_mm - 0.5 * string_length_mm );
1551 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax,
1552 pos_mm + 0.5 * string_length_mm );
1556 plmtex(
"b", height, pos, 0.5,
string );
1562 if ( plsc->if_boxbb )
1564 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin,
1565 pos_mm - 0.5 * string_length_mm );
1566 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax,
1567 pos_mm + 0.5 * string_length_mm );
1571 plmtex(
"t", height, pos, 0.5,
string );
1576 plsxax( xdigmax, xdigits );
1580 if ( !llx && !ldx && !lox && xmode )
1582 if ( custom_exponent_placement )
1594 snprintf(
string,
STRING_LEN,
"(x10%su%d%sd)", esc_string, (
int) xscale, esc_string );
1598 if ( plsc->if_boxbb )
1605 height_mm = ( height + 0.9 ) * char_height_mm;
1606 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin, plsc->vppymi /
1607 plsc->ypmm - height_mm );
1608 string_length_mm =
plstrl(
string );
1609 pos_mm = ( plsc->vppxmi + pos *
1610 ( plsc->vppxma - plsc->vppxmi ) ) /
1612 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin,
1613 pos_mm - 0.5 * string_length_mm );
1614 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax,
1615 pos_mm + 0.5 * string_length_mm );
1619 plmtex(
"b", height, pos, just,
string );
1625 if ( plsc->if_boxbb )
1632 height_mm = ( height + 1.4 ) * char_height_mm;
1633 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax, plsc->vppyma /
1634 plsc->ypmm + height_mm );
1635 string_length_mm =
plstrl(
string );
1636 pos_mm = ( plsc->vppxmi + pos *
1637 ( plsc->vppxma - plsc->vppxmi ) ) /
1639 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin,
1640 pos_mm - 0.5 * string_length_mm );
1641 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax,
1642 pos_mm + 0.5 * string_length_mm );
1646 plmtex(
"t", height, pos, just,
string );
1654 if ( ( lmy || lny ) && ( lty || lxy ) )
1656 PLINT ymode, yprec, ydigmax, ydigits, yscale;
1658 plgyax( &ydigmax, &ydigits );
1659 pldprec( vpwymi, vpwyma, ytick1, lfy, &ymode, &yprec, ydigmax, &yscale );
1664 pldtfac( vpwymi, vpwyma, &factor, &tstart );
1665 tp = ytick1 * ( 1. + floor( ( vpwymi - tstart ) / ytick1 ) ) + tstart;
1669 tp = ytick1 * ( 1. + floor( vpwymi / ytick1 ) );
1671 for ( tn = tp;
BETW( tn, vpwymi, vpwyma ); tn += ytick1 )
1681 pos = ( vpwymax > vpwymin ) ?
1682 ( tn - vpwymi ) / ( vpwyma - vpwymi ) :
1683 ( vpwyma - tn ) / ( vpwyma - vpwymi );
1689 height = liy ? 1.0 : 0.5;
1690 if ( plsc->if_boxbb )
1698 height_mm = ( height + 0.0 ) * char_height_mm;
1699 string_length_mm =
plstrl(
string );
1700 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin, plsc->vppxmi /
1701 plsc->xpmm - height_mm - string_length_mm );
1702 pos_mm = ( plsc->vppymi + pos *
1703 ( plsc->vppyma - plsc->vppymi ) ) /
1707 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin,
1708 pos_mm - 0.6 * char_height_mm );
1709 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax,
1710 pos_mm + 0.7 * char_height_mm );
1714 plmtex(
"lv", height, pos, 1.0,
string );
1720 height = liy ? 1.75 : 1.5;
1721 if ( plsc->if_boxbb )
1730 height_mm = ( height + 0.8 ) * char_height_mm;
1731 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin, plsc->vppxmi /
1732 plsc->xpmm - height_mm );
1733 pos_mm = ( plsc->vppymi + pos *
1734 ( plsc->vppyma - plsc->vppymi ) ) /
1736 string_length_mm =
plstrl(
string );
1737 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin,
1738 pos_mm - 0.5 * string_length_mm );
1739 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax,
1740 pos_mm + 0.5 * string_length_mm );
1744 plmtex(
"l", height, pos, 0.5,
string );
1753 height = liy ? 1.0 : 0.5;
1754 if ( plsc->if_boxbb )
1762 height_mm = ( height + 0.0 ) * char_height_mm;
1763 string_length_mm =
plstrl(
string );
1764 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax, plsc->vppxma /
1765 plsc->xpmm + height_mm + string_length_mm );
1766 pos_mm = ( plsc->vppymi + pos *
1767 ( plsc->vppyma - plsc->vppymi ) ) /
1771 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin,
1772 pos_mm - 0.6 * char_height_mm );
1773 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax,
1774 pos_mm + 0.7 * char_height_mm );
1778 plmtex(
"rv", height, pos, 0.0,
string );
1784 height = liy ? 1.75 : 1.5;
1785 if ( plsc->if_boxbb )
1794 height_mm = ( height + 0.8 ) * char_height_mm;
1795 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax, plsc->vppxma /
1796 plsc->xpmm + height_mm );
1797 pos_mm = ( plsc->vppymi + pos *
1798 ( plsc->vppyma - plsc->vppymi ) ) /
1800 string_length_mm =
plstrl(
string );
1801 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin,
1802 pos_mm - 0.5 * string_length_mm );
1803 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax,
1804 pos_mm + 0.5 * string_length_mm );
1808 plmtex(
"r", height, pos, 0.5,
string );
1812 ydigits =
MAX( ydigits, (
PLINT) strlen(
string ) );
1817 plsyax( ydigmax, ydigits );
1821 if ( !lly && !ldy && !loy && ymode )
1823 snprintf(
string,
STRING_LEN,
"(x10%su%d%sd)", esc_string, (
int) yscale, esc_string );
1824 if ( custom_exponent_placement )
1841 if ( !custom_exponent_placement )
1847 if ( plsc->if_boxbb )
1854 height_mm = ( height + 1.4 ) * char_height_mm;
1855 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax, plsc->vppyma /
1856 plsc->ypmm + height_mm );
1857 string_length_mm =
plstrl(
string );
1858 pos_mm = ( plsc->vppxmi + pos *
1859 ( plsc->vppxma - plsc->vppxmi ) ) /
1861 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin,
1862 pos_mm - string_length_mm );
1868 plmtex(
"lv", height, pos, just,
string );
1872 plmtex(
"l", height, pos, just,
string );
1879 if ( !custom_exponent_placement )
1885 if ( plsc->if_boxbb )
1892 height_mm = ( height + 1.4 ) * char_height_mm;
1893 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax, plsc->vppyma /
1894 plsc->ypmm + height_mm );
1895 string_length_mm =
plstrl(
string );
1896 pos_mm = ( plsc->vppxmi + pos *
1897 ( plsc->vppxma - plsc->vppxmi ) ) /
1899 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmin,
1900 pos_mm + string_length_mm );
1906 plmtex(
"rv", height, pos, just,
string );
1910 plmtex(
"r", height, pos, just,
string );
1928 PLBOOL ldx, lfx, lix, llx, lmx, lnx, ltx, lox, lxx;
1929 PLBOOL ldy, lfy, liy, lly, lmy, lny, lty, lvy, loy, lxy;
1930 PLFLT vpwxmi, vpwxma, vpwymi, vpwyma;
1931 PLFLT vpwxmin, vpwxmax, vpwymin, vpwymax;
1935 PLINT xdigmax, xdigits, xdigmax_old, xdigits_old;
1936 PLINT ydigmax, ydigits, ydigmax_old, ydigits_old;
1937 PLINT lxmin, lxmax, lymin, lymax;
1938 PLINT pxmin, pxmax, pymin, pymax;
1939 PLFLT default_mm, char_height_mm, height_mm;
1940 PLFLT string_length_mm = 0.0, pos_mm = 0.0;
1944 PLBOOL custom_exponent_placement = !plsc->label_func && plsc->label_data;
1950 PLFLT pos = 0.0, height = 0.0, just = 0.0;
1953 plgchr( &default_mm, &char_height_mm );
1956 plgxax( &xdigmax, &xdigits );
1957 plgyax( &ydigmax, &ydigits );
1958 xdigmax_old = xdigmax;
1959 xdigits_old = xdigits;
1960 ydigmax_old = ydigmax;
1961 ydigits_old = ydigits;
1965 plP_gclp( &lxmin, &lxmax, &lymin, &lymax );
1966 plP_gphy( &pxmin, &pxmax, &pymin, &pymax );
1967 plP_sclp( pxmin, pxmax, pymin, pymax );
1992 plP_xgvpw( &vpwxmin, &vpwxmax, &vpwymin, &vpwymax );
1995 vpwxmi = ( vpwxmax > vpwxmin ) ? vpwxmin : vpwxmax;
1996 vpwxma = ( vpwxmax > vpwxmin ) ? vpwxmax : vpwxmin;
1997 vpwymi = ( vpwymax > vpwymin ) ? vpwymin : vpwymax;
1998 vpwyma = ( vpwymax > vpwymin ) ? vpwymax : vpwymin;
2000 if ( plsc->if_boxbb )
2006 plsc->boxbb_xmin = plsc->vppxmi / plsc->xpmm;
2007 plsc->boxbb_xmax = plsc->vppxma / plsc->xpmm;
2008 plsc->boxbb_ymin = plsc->vppymi / plsc->ypmm;
2009 plsc->boxbb_ymax = plsc->vppyma / plsc->ypmm;
2014 if ( lix && ( lmx || lnx ) && ( ltx && !lxx ) )
2016 plsc->boxbb_ymin -= xmajor / plsc->ypmm;
2017 plsc->boxbb_ymax += xmajor / plsc->ypmm;
2019 if ( liy && ( lmy || lny ) && ( lty && !lxy ) )
2021 plsc->boxbb_xmin -= ymajor / plsc->xpmm;
2022 plsc->boxbb_xmax += ymajor / plsc->xpmm;
2027 if ( ( lmx || lnx ) && ( ltx || lxx ) )
2029 PLINT xmode, xprec, xscale;
2030 PLFLT x_spacing, x_spacing_tmp;
2034 x_spacing = vpwxma - vpwxmi;
2038 for ( i = 1; i < n_xticks; i++ )
2040 x_spacing_tmp = fabs( xticks[i] - xticks[i - 1] );
2041 x_spacing =
MIN( x_spacing, x_spacing_tmp );
2045 plgxax( &xdigmax, &xdigits );
2046 pldprec( vpwxmi, vpwxma, x_spacing, lfx, &xmode, &xprec, xdigmax, &xscale );
2049 height = lix ? 1.75 : 1.5;
2050 if ( plsc->if_boxbb )
2057 height_mm = ( height + 0.7 ) * char_height_mm;
2059 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin, plsc->vppymi /
2060 plsc->ypmm - height_mm );
2062 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax, plsc->vppyma /
2063 plsc->ypmm + height_mm );
2066 for ( i = 0; i < n_xticks; i++ )
2069 if (
BETW( tn, vpwxmi, vpwxma ) )
2071 if ( !lxx && !plsc->if_boxbb )
2084 pos = ( vpwxmax > vpwxmin ) ?
2085 ( tn - vpwxmi ) / ( vpwxma - vpwxmi ) :
2086 ( vpwxma - tn ) / ( vpwxma - vpwxmi );
2087 if ( plsc->if_boxbb )
2089 string_length_mm =
plstrl(
string );
2090 pos_mm = ( plsc->vppxmi + pos *
2091 ( plsc->vppxma - plsc->vppxmi ) ) /
2097 if ( plsc->if_boxbb )
2099 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin,
2100 pos_mm - 0.5 * string_length_mm );
2101 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax,
2102 pos_mm + 0.5 * string_length_mm );
2106 plmtex(
"b", height, pos, 0.5,
string );
2112 if ( plsc->if_boxbb )
2114 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin,
2115 pos_mm - 0.5 * string_length_mm );
2116 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax,
2117 pos_mm + 0.5 * string_length_mm );
2121 plmtex(
"t", height, pos, 0.5,
string );
2127 plsxax( xdigmax, xdigits );
2131 if ( !llx && !ldx && !lox && xmode )
2133 if ( custom_exponent_placement )
2145 snprintf(
string,
STRING_LEN,
"(x10%su%d%sd)", esc_string, (
int) xscale, esc_string );
2149 if ( plsc->if_boxbb )
2156 height_mm = ( height + 0.9 ) * char_height_mm;
2157 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin, plsc->vppymi /
2158 plsc->ypmm - height_mm );
2159 string_length_mm =
plstrl(
string );
2160 pos_mm = ( plsc->vppxmi + pos *
2161 ( plsc->vppxma - plsc->vppxmi ) ) /
2163 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin,
2164 pos_mm - 0.5 * string_length_mm );
2165 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax,
2166 pos_mm + 0.5 * string_length_mm );
2170 plmtex(
"b", height, pos, just,
string );
2176 if ( plsc->if_boxbb )
2183 height_mm = ( height + 1.4 ) * char_height_mm;
2184 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax, plsc->vppyma /
2185 plsc->ypmm + height_mm );
2186 string_length_mm =
plstrl(
string );
2187 pos_mm = ( plsc->vppxmi + pos *
2188 ( plsc->vppxma - plsc->vppxmi ) ) /
2190 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin,
2191 pos_mm - 0.5 * string_length_mm );
2192 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax,
2193 pos_mm + 0.5 * string_length_mm );
2197 plmtex(
"t", height, pos, just,
string );
2204 if ( ( lmy || lny ) && ( lty || lxy ) )
2206 PLINT ymode, yprec, yscale;
2207 PLFLT y_spacing, y_spacing_tmp;
2211 y_spacing = vpwyma - vpwymi;
2215 for ( i = 1; i < n_yticks; i++ )
2217 y_spacing_tmp = fabs( yticks[i] - yticks[i - 1] );
2218 y_spacing =
MIN( y_spacing, y_spacing_tmp );
2222 plgyax( &ydigmax, &ydigits );
2223 pldprec( vpwymi, vpwyma, y_spacing, lfy, &ymode, &yprec, ydigmax, &yscale );
2227 for ( i = 0; i < n_yticks; i++ )
2230 if (
BETW( tn, vpwymi, vpwyma ) )
2232 if ( !lxy && !plsc->if_boxbb )
2245 pos = ( vpwymax > vpwymin ) ?
2246 ( tn - vpwymi ) / ( vpwyma - vpwymi ) :
2247 ( vpwyma - tn ) / ( vpwyma - vpwymi );
2253 height = liy ? 1.0 : 0.5;
2254 if ( plsc->if_boxbb )
2262 height_mm = ( height + 0.0 ) * char_height_mm;
2263 string_length_mm =
plstrl(
string );
2264 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin, plsc->vppxmi /
2265 plsc->xpmm - height_mm - string_length_mm );
2266 pos_mm = ( plsc->vppymi + pos *
2267 ( plsc->vppyma - plsc->vppymi ) ) /
2271 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin,
2272 pos_mm - 0.6 * char_height_mm );
2273 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax,
2274 pos_mm + 0.7 * char_height_mm );
2278 plmtex(
"lv", height, pos, 1.0,
string );
2284 height = liy ? 1.75 : 1.5;
2285 if ( plsc->if_boxbb )
2294 height_mm = ( height + 0.8 ) * char_height_mm;
2295 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin, plsc->vppxmi /
2296 plsc->xpmm - height_mm );
2297 pos_mm = ( plsc->vppymi + pos *
2298 ( plsc->vppyma - plsc->vppymi ) ) /
2300 string_length_mm =
plstrl(
string );
2301 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin,
2302 pos_mm - 0.5 * string_length_mm );
2303 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax,
2304 pos_mm + 0.5 * string_length_mm );
2308 plmtex(
"l", height, pos, 0.5,
string );
2317 height = liy ? 1.0 : 0.5;
2318 if ( plsc->if_boxbb )
2326 height_mm = ( height + 0.0 ) * char_height_mm;
2327 string_length_mm =
plstrl(
string );
2328 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax, plsc->vppxma /
2329 plsc->xpmm + height_mm + string_length_mm );
2330 pos_mm = ( plsc->vppymi + pos *
2331 ( plsc->vppyma - plsc->vppymi ) ) /
2335 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin,
2336 pos_mm - 0.6 * char_height_mm );
2337 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax,
2338 pos_mm + 0.7 * char_height_mm );
2342 plmtex(
"rv", height, pos, 0.0,
string );
2348 height = liy ? 1.75 : 1.5;
2349 if ( plsc->if_boxbb )
2358 height_mm = ( height + 0.8 ) * char_height_mm;
2359 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmax, plsc->vppxma /
2360 plsc->xpmm + height_mm );
2361 pos_mm = ( plsc->vppymi + pos *
2362 ( plsc->vppyma - plsc->vppymi ) ) /
2364 string_length_mm =
plstrl(
string );
2365 plsc->boxbb_ymin =
MIN( plsc->boxbb_ymin,
2366 pos_mm - 0.5 * string_length_mm );
2367 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax,
2368 pos_mm + 0.5 * string_length_mm );
2372 plmtex(
"r", height, pos, 0.5,
string );
2376 ydigits =
MAX( ydigits, (
PLINT) strlen(
string ) );
2382 plsyax( ydigmax, ydigits );
2386 if ( !lly && !ldy && !loy && ymode )
2388 snprintf(
string,
STRING_LEN,
"(x10%su%d%sd)", esc_string, (
int) yscale, esc_string );
2389 if ( custom_exponent_placement )
2406 if ( !custom_exponent_placement )
2412 if ( plsc->if_boxbb )
2419 height_mm = ( height + 1.4 ) * char_height_mm;
2420 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax, plsc->vppyma /
2421 plsc->ypmm + height_mm );
2422 string_length_mm =
plstrl(
string );
2423 pos_mm = ( plsc->vppxmi + pos *
2424 ( plsc->vppxma - plsc->vppxmi ) ) /
2426 plsc->boxbb_xmin =
MIN( plsc->boxbb_xmin,
2427 pos_mm - string_length_mm );
2433 plmtex(
"lv", height, pos, just,
string );
2437 plmtex(
"l", height, pos, just,
string );
2444 if ( !custom_exponent_placement )
2450 if ( plsc->if_boxbb )
2457 height_mm = ( height + 1.4 ) * char_height_mm;
2458 plsc->boxbb_ymax =
MAX( plsc->boxbb_ymax, plsc->vppyma /
2459 plsc->ypmm + height_mm );
2460 string_length_mm =
plstrl(
string );
2461 pos_mm = ( plsc->vppxmi + pos *
2462 ( plsc->vppxma - plsc->vppxmi ) ) /
2464 plsc->boxbb_xmax =
MAX( plsc->boxbb_xmin,
2465 pos_mm + string_length_mm );
2471 plmtex(
"rv", height, pos, just,
string );
2475 plmtex(
"r", height, pos, just,
string );
2483 plsxax( xdigmax_old, xdigits_old );
2484 plsyax( ydigmax_old, ydigits_old );
2487 plP_sclp( lxmin, lxmax, lymin, lymax );
2514 value = pow( 10.0, exponent );
2530 PLINT setpre, precis;
2534 scale = ( (
PLINT *) data )[0];
2535 prec = ( (
PLINT *) data )[1];
2543 value /= pow( 10., (
double) scale );
2547 scale2 = pow( 10., prec );
2548 value = floor( (
value * scale2 ) + .5 ) / scale2;
2552 strncpy(
string, temp, (
size_t) ( len - 1 ) );
2553 string[len - 1] =
'\0';
2587 if ( lo && plsc->label_func )
2589 ( *plsc->label_func )( axis,
value,
string, len, plsc->label_data );
2595 plwarn(
"Custom axis labels requested without a labeling function \
2596 - using default." );
2616 PLINT scale_prec[2] = { scale, prec };
2648 plsc->label_data = label_data;
2654 static PLCHAR_VECTOR esc_strings = {
"!\0#\0$\0%\0&\0*\0@\0^\0~\0" };
2658 if ( plsc->esc ==
'\0' )
2661 switch ( plsc->esc )
2691 plwarn(
"plgesc_string: Invalid escape character, assuming '#' instead" );
2695 return &( esc_strings[d * 2] );
static void plzbx(PLCHAR_VECTOR opt, PLCHAR_VECTOR label, PLINT right, PLFLT dx, PLFLT dy, PLFLT wx, PLFLT wy1, PLFLT wy2, PLFLT vmin, PLFLT vmax, PLFLT tick, PLINT nsub, PLINT *digits)
static void plP_default_label_log_fixed(PLINT axis, PLFLT value, char *string, PLINT len, void *data)
static void label_box(PLCHAR_VECTOR xopt, PLFLT xtick1, PLCHAR_VECTOR yopt, PLFLT ytick1)
static void plform(PLINT axis, PLFLT value, PLINT scale, PLINT prec, char *result, PLINT len, PLBOOL ll, PLBOOL lf, PLBOOL lo)
static void plP_default_label(PLINT axis, PLFLT value, char *string, PLINT len, void *data)
static PLCHAR_VECTOR plgesc_string(void)
void c_plslabelfunc(PLLABEL_FUNC_callback label_func, PLPointer label_data)
static void plxybx(PLCHAR_VECTOR opt, PLCHAR_VECTOR label, PLINT axis, PLFLT wx1, PLFLT wy1, PLFLT wx2, PLFLT wy2, PLFLT vmin, PLFLT vmax, PLFLT tick, PLINT nsub, PLINT nolast, PLINT *digits)
static void plP_default_label_log(PLINT axis, PLFLT value, char *string, PLINT len, void *data)
static void plztx(PLCHAR_VECTOR opt, PLFLT dx, PLFLT dy, PLFLT wx, PLFLT wy1, PLFLT wy2, PLFLT disp, PLFLT pos, PLFLT just, PLCHAR_VECTOR text)
void c_plbox(PLCHAR_VECTOR xopt, PLFLT xtick, PLINT nxsub, PLCHAR_VECTOR yopt, PLFLT ytick, PLINT nysub)
void c_plbox3(PLCHAR_VECTOR xopt, PLCHAR_VECTOR xlabel, PLFLT xtick, PLINT nxsub, PLCHAR_VECTOR yopt, PLCHAR_VECTOR ylabel, PLFLT ytick, PLINT nysub, PLCHAR_VECTOR zopt, PLCHAR_VECTOR zlabel, PLFLT ztick, PLINT nzsub)
void label_box_custom(PLCHAR_VECTOR xopt, PLINT n_xticks, PLFLT_VECTOR xticks, PLCHAR_VECTOR yopt, PLINT n_yticks, PLFLT_VECTOR yticks)
static void plxytx(PLFLT wx1, PLFLT wy1, PLFLT wx2, PLFLT wy2, PLFLT disp, PLFLT pos, PLFLT just, PLCHAR_VECTOR text)
void c_plaxes(PLFLT x0, PLFLT y0, PLCHAR_VECTOR xopt, PLFLT xtick, PLINT nxsub, PLCHAR_VECTOR yopt, PLFLT ytick, PLINT nysub)
static void grid_box(PLCHAR_VECTOR xopt, PLFLT xtick1, PLINT nxsub1, PLCHAR_VECTOR yopt, PLFLT ytick1, PLINT nysub1)
void plP_xgvpw(PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax)
void plP_text(PLINT base, PLFLT just, PLFLT *xform, PLINT x, PLINT y, PLINT refx, PLINT refy, PLCHAR_VECTOR string)
PLCHAR_VECTOR plP_gtimefmt()
void plP_gw3wc(PLFLT *p_dxx, PLFLT *p_dxy, PLFLT *p_dyx, PLFLT *p_dyy, PLFLT *p_dyz)
void plP_gdom(PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax)
void plP_grange(PLFLT *p_zscl, PLFLT *p_zmin, PLFLT *p_zmax)
void plP_gclp(PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax)
void plP_sclp(PLINT ixmin, PLINT ixmax, PLINT iymin, PLINT iymax)
void plP_gphy(PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax)
void plP_gprec(PLINT *p_setp, PLINT *p_prec)
void plwarn(PLCHAR_VECTOR errormsg)
static PLFLT value(double n1, double n2, double hue)
void plabort(PLCHAR_VECTOR errormsg)
PLFLT plP_w3wcx(PLFLT x, PLFLT y, PLFLT PL_UNUSED(z))
PLFLT plP_w3wcy(PLFLT x, PLFLT y, PLFLT z)
void pldtik(PLFLT vmin, PLFLT vmax, PLFLT *tick, PLINT *nsubt, PLBOOL ld)
void pldprec(PLFLT vmin, PLFLT vmax, PLFLT tick, PLINT lf, PLINT *mode, PLINT *prec, PLINT digmax, PLINT *scale)
void pldtfac(PLFLT vmin, PLFLT vmax, PLFLT *factor, PLFLT *start)
void plP_drawor(PLFLT x, PLFLT y)
void plP_movwor(PLFLT x, PLFLT y)
void plP_movphy(PLINT x, PLINT y)
void plP_draphy(PLINT x, PLINT y)
void plP_gzback(PLINT **zbf, PLINT **zbc, PLFLT **zbt, PLFLT **zbw)
void(* PLLABEL_FUNC_callback)(PLINT axis, PLFLT value, PLCHAR_NC_VECTOR label, PLINT length, PLPointer data)
const char * PLCHAR_VECTOR
const PLFLT * PLFLT_VECTOR
void(* label_func)(PLINT, PLFLT, char *, PLINT, PLPointer)
PLFLT plstrl(PLCHAR_VECTOR string)
PLBOOL plP_stsearch(PLCHAR_VECTOR str, int chr)
void plwytik(PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert)
void plxtik(PLINT x, PLINT y, PLINT below, PLINT above)
void plytik(PLINT x, PLINT y, PLINT left, PLINT right)
void plwxtik(PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert)
void plstik(PLFLT mx, PLFLT my, PLFLT dx, PLFLT dy)
size_t strfqsas(char *buf, size_t len, const char *format, double ctime, QSASConfig *qsasconfig)