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 );
629 plP_gzback( &zbflg, &zbcol, &zbtck, &zbwidth );
634 *zbcol = plsc->icol0;
635 *zbwidth = plsc->width;
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];
1004 plP_text( 0, just, xform, x, y, refx, refy, text );
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];
1287 plP_text( 0, just, xform, x, y, refx, refy, text );
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 );
2505 snprintf(
string, (
size_t) len,
"10%su%d", esc_string, (
int)
ROUND( value ) );
2512 int exponent =
ROUND( value );
2514 value = pow( 10.0, exponent );
2519 snprintf(
string, (
size_t) len, form, value );
2523 snprintf(
string, (
size_t) len,
"%d", (
int) value );
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] );
void(* label_func)(PLINT, PLFLT, char *, PLINT, PLPointer)
static void plP_default_label_log(PLINT axis, PLFLT value, char *string, PLINT len, void *data)
static PLCHAR_VECTOR plgesc_string(void)
void c_plaxes(PLFLT x0, PLFLT y0, PLCHAR_VECTOR xopt, PLFLT xtick, PLINT nxsub, PLCHAR_VECTOR yopt, PLFLT ytick, PLINT nysub)
void plP_gprec(PLINT *p_setp, PLINT *p_prec)
void plP_movwor(PLFLT x, PLFLT y)
void plstik(PLFLT mx, PLFLT my, PLFLT dx, PLFLT dy)
void plP_grange(PLFLT *p_zscl, PLFLT *p_zmin, PLFLT *p_zmax)
const char * PLCHAR_VECTOR
void plP_text(PLINT base, PLFLT just, PLFLT *xform, PLINT x, PLINT y, PLINT refx, PLINT refy, PLCHAR_VECTOR string)
PLBOOL plP_stsearch(PLCHAR_VECTOR str, int chr)
size_t strfqsas(char *buf, size_t len, const char *format, double ctime, QSASConfig *qsasconfig)
void plabort(PLCHAR_VECTOR errormsg)
static void plP_default_label_log_fixed(PLINT axis, PLFLT value, char *string, PLINT len, void *data)
PLFLT plstrl(PLCHAR_VECTOR string)
void pldtik(PLFLT vmin, PLFLT vmax, PLFLT *tick, PLINT *nsubt, PLBOOL ld)
void plP_gclp(PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax)
void plP_gzback(PLINT **zbf, PLINT **zbc, PLFLT **zbt, PLFLT **zbw)
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 plform(PLINT axis, PLFLT value, PLINT scale, PLINT prec, char *result, PLINT len, PLBOOL ll, PLBOOL lf, PLBOOL lo)
void pldtfac(PLFLT vmin, PLFLT vmax, PLFLT *factor, PLFLT *start)
static void plxytx(PLFLT wx1, PLFLT wy1, PLFLT wx2, PLFLT wy2, PLFLT disp, PLFLT pos, PLFLT just, PLCHAR_VECTOR text)
void plwxtik(PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert)
static void label_box(PLCHAR_VECTOR xopt, PLFLT xtick1, PLCHAR_VECTOR yopt, PLFLT ytick1)
void c_plbox(PLCHAR_VECTOR xopt, PLFLT xtick, PLINT nxsub, PLCHAR_VECTOR yopt, PLFLT ytick, PLINT nysub)
void xform(PLFLT x, PLFLT y, PLFLT *tx, PLFLT *ty, PLPointer pltr_data)
void label_box_custom(PLCHAR_VECTOR xopt, PLINT n_xticks, PLFLT_VECTOR xticks, PLCHAR_VECTOR yopt, PLINT n_yticks, PLFLT_VECTOR yticks)
PLCHAR_VECTOR plP_gtimefmt()
PLFLT plP_w3wcy(PLFLT x, PLFLT y, PLFLT z)
static void plP_default_label(PLINT axis, PLFLT value, char *string, PLINT len, void *data)
static PLFLT value(double n1, double n2, double hue)
void plP_draphy(PLINT x, PLINT y)
void plytik(PLINT x, PLINT y, PLINT left, PLINT right)
PLFLT plP_w3wcx(PLFLT x, PLFLT y, PLFLT PL_UNUSED(z))
void plP_xgvpw(PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax)
void plP_movphy(PLINT x, PLINT y)
void plP_drawor(PLFLT x, PLFLT y)
void(* PLLABEL_FUNC_callback)(PLINT axis, PLFLT value, PLCHAR_NC_VECTOR label, PLINT length, PLPointer data)
void plP_gw3wc(PLFLT *p_dxx, PLFLT *p_dxy, PLFLT *p_dyx, PLFLT *p_dyy, PLFLT *p_dyz)
void plwarn(PLCHAR_VECTOR errormsg)
void plwytik(PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert)
void plxtik(PLINT x, PLINT y, PLINT below, PLINT above)
void plP_sclp(PLINT ixmin, PLINT ixmax, PLINT iymin, PLINT iymax)
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)
void c_plslabelfunc(PLLABEL_FUNC_callback label_func, PLPointer label_data)
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)
const PLFLT * PLFLT_VECTOR
void plP_gphy(PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax)
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 pldprec(PLFLT vmin, PLFLT vmax, PLFLT tick, PLINT lf, PLINT *mode, PLINT *prec, PLINT digmax, PLINT *scale)
static void grid_box(PLCHAR_VECTOR xopt, PLFLT xtick1, PLINT nxsub1, PLCHAR_VECTOR yopt, PLFLT ytick1, PLINT nysub1)
void plP_gdom(PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax)