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] );
 
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)
static PLFLT value(double n1, double n2, double hue)
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)
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(* PLLABEL_FUNC_callback)(PLINT axis, PLFLT value, PLCHAR_NC_VECTOR label, PLINT length, PLPointer data)
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 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(* label_func)(PLINT, PLFLT, char *, PLINT, PLPointer)
void plP_gdom(PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax)