111 for ( i = 0; i < n; i++ )
113 c_plptex( x[i], y[i], 1., 0., 0.5,
string );
133 if ( plsc->level < 3 )
135 plabort(
"plsym: Please set up window first" );
140 plabort(
"plsym: Invalid code" );
144 for ( i = 0; i < n; i++ )
174 PLINT i, sym, ifont = plsc->cfont;
177 if ( plsc->level < 3 )
179 plabort(
"plpoin: Please set up window first" );
182 if ( code < -1 || code > 127 )
184 plabort(
"plpoin: Invalid code" );
190 for ( i = 0; i < n; i++ )
204 for ( i = 0; i < n; i++ )
237 PLINT i, sym, ifont = plsc->cfont;
239 PLFLT xmin, xmax, ymin, ymax, zmin, zmax, zscale;
241 if ( plsc->level < 3 )
243 plabort(
"plpoin3: Please set up window first" );
246 if ( code < -1 || code > 127 )
248 plabort(
"plpoin3: Invalid code" );
252 plP_gdom( &xmin, &xmax, &ymin, &ymax );
257 for ( i = 0; i < n; i++ )
259 if ( x[i] >= xmin && x[i] <= xmax &&
260 y[i] >= ymin && y[i] <= ymax &&
261 z[i] >= zmin && z[i] <= zmax )
276 for ( i = 0; i < n; i++ )
278 if ( x[i] >= xmin && x[i] <= xmax &&
279 y[i] >= ymin && y[i] <= ymax &&
280 z[i] >= zmin && z[i] <= zmax )
315 PLFLT xmin, xmax, ymin, ymax, zmin, zmax, zscale;
317 if ( plsc->level < 3 )
319 plabort(
"plstring3: Please set up window first" );
323 plP_gdom( &xmin, &xmax, &ymin, &ymax );
326 for ( i = 0; i < n; i++ )
328 if ( x[i] >= xmin && x[i] <= xmax &&
329 y[i] >= ymin && y[i] <= ymax &&
330 z[i] >= zmin && z[i] <= zmax )
334 c_plptex( u, v, 1., 0., 0.5,
string );
368 if ( ( plsc->dev_text ) && ( plsc->dev_unicode ) && ( !plsc->dev_hrshsym ) )
377 pldebug(
"plhrsh",
"ch, idx, unicode_char = %d, %d, %#x\n", ch, idx, unicode_char );
385 if ( ( unicode_char == 0 ) || ( idx == -1 ) )
387 #ifndef PL_TEST_FOR_MISSING_GLYPHS
422 plhrsh_unicode_buffer[0] = unicode_char;
428 plhrsh_unicode_buffer[1] = unicode_char;
436 plsc->original_chrht = plsc->chrht;
437 plsc->original_chrdef = plsc->chrdef;
438 plsc->chrht = plsc->symht;
439 plsc->chrdef = plsc->symdef;
441 if ( plsc->alt_unicode )
446 args.
n_char = unicode_char;
458 plsc->chrht = plsc->original_chrht;
459 plsc->chrdef = plsc->original_chrdef;
477 PLINT cx, cy, k, penup, style;
478 signed char *vxygrid = 0;
479 PLFLT scale, xscale, yscale;
483 scale = 0.05 * plsc->symht;
485 if ( !
plcvec( ch, &vxygrid ) )
498 xscale = scale * plsc->xpmm;
499 yscale = scale * plsc->ypmm;
506 if ( cx == 64 && cy == 64 )
517 else if ( cx == 64 && cy == 0 )
528 llx[l] =
ROUND( x + xscale * cx );
529 lly[l++] =
ROUND( y + yscale * cy );
535 llx[l] =
ROUND( x + xscale * cx );
536 lly[l++] =
ROUND( y + yscale * cy );
551 if ( plsc->level < 2 )
553 plabort(
"pllab: Please set up viewport first" );
597 PLINT clpxmi, clpxma, clpymi, clpyma;
598 PLINT vert, refx, refy, x, y;
599 PLFLT xdv, ydv, xmm, ymm, refxmm, refymm, shift,
xform[4];
603 if ( plsc->level < 2 )
605 plabort(
"plmtex: Please set up viewport first" );
611 plP_gclp( &clpxmi, &clpxma, &clpymi, &clpyma );
612 plP_sclp( plsc->sppxmi, plsc->sppxma, plsc->sppymi, plsc->sppyma );
617 xdv = plsc->vpdxmi + ( plsc->vpdxma - plsc->vpdxmi ) * pos;
625 xdv = plsc->vpdxmi + ( plsc->vpdxma - plsc->vpdxmi ) * pos;
633 xdv = plsc->vpdxmi + ( plsc->vpdxma - plsc->vpdxmi ) * pos;
641 xdv = plsc->vpdxmi + ( plsc->vpdxma - plsc->vpdxmi ) * pos;
650 ydv = plsc->vpdymi + ( plsc->vpdyma - plsc->vpdymi ) * pos;
658 ydv = plsc->vpdymi + ( plsc->vpdyma - plsc->vpdymi ) * pos;
666 ydv = plsc->vpdymi + ( plsc->vpdyma - plsc->vpdymi ) * pos;
674 ydv = plsc->vpdymi + ( plsc->vpdyma - plsc->vpdymi ) * pos;
680 plP_sclp( clpxmi, clpxma, clpymi, clpyma );
703 plgchr( &chrdef, &chrht );
704 shift = ( just == 0.0 ) ? 0.0 :
plstrl(
text ) * just;
708 refxmm = xmm - shift *
xform[0];
709 refymm = ymm - shift *
xform[2];
719 plP_sclp( clpxmi, clpxma, clpymi, clpyma );
736 PLINT x, y, refx, refy;
737 PLFLT xdv, ydv, xmm, ymm, refxmm, refymm, shift, cc, ss;
741 PLFLT wxt, wyt, dxt, dyt;
743 if ( plsc->level < 3 )
745 plabort(
"plptex: Please set up window first" );
751 TRANSFORM( wx + dx, wy + dy, &dxt, &dyt );
754 if ( dxt == 0.0 && dyt == 0.0 )
760 cc = plsc->wmxscl * dxt;
761 ss = plsc->wmyscl * dyt;
762 diag = sqrt( cc * cc + ss * ss );
779 plgchr( &chrdef, &chrht );
780 shift = ( just == 0.0 ) ? 0.0 :
plstrl(
text ) * just;
784 refxmm = xmm - shift *
xform[0];
785 refymm = ymm - shift *
xform[2];
813 signed char *vxygrid = 0;
815 PLINT ch, i, length, level = 0, style, oline = 0, uline = 0;
816 PLFLT width = 0., xorg = 0., yorg = 0., def, ht, dscale, scale;
817 PLFLT old_sscale, sscale, old_soffset, soffset;
828 pldeco( &symbol, &length,
string );
830 for ( i = 0; i < length; i++ )
836 &old_sscale, &sscale, &old_soffset, &soffset );
837 yorg = 16.0 * dscale * soffset;
838 scale = dscale * sscale;
843 &old_sscale, &sscale, &old_soffset, &soffset );
844 yorg = -16.0 * dscale * soffset;
845 scale = dscale * sscale;
848 xorg -=
width * scale;
855 if (
plcvec( ch, &vxygrid ) )
856 plchar( vxygrid,
xform, base, oline, uline, refx, refy, scale,
857 plsc->xpmm, plsc->ypmm, &xorg, &yorg, &
width );
874 PLINT xbase, ybase, ydisp, lx, ly, cx, cy;
880 *p_width = vxygrid[3] - xbase;
898 if ( cx == 64 && cy == 64 )
907 if ( cx == 64 && cy == 0 )
918 x = *p_xorg + ( cx - xbase ) * scale;
919 y = *p_yorg + ( cy - ybase ) * scale;
945 y = *p_yorg + ( 30 + ydisp ) * scale;
949 x = *p_xorg + *p_width * scale;
957 y = *p_yorg + ( -5 + ydisp ) * scale;
961 x = *p_xorg + *p_width * scale;
966 *p_xorg = *p_xorg + *p_width * scale;
979 signed char *vxygrid = 0;
980 PLINT ch, i, length, level = 0;
981 PLFLT width = 0., xorg = 0., dscale, scale, def, ht;
994 if ( plsc->has_string_length )
997 plsc->plbuf_write =
FALSE;
998 plsc->get_string_length = 1;
999 c_plmtex(
"t", 0.0, 0.0, 0.0,
string );
1000 plsc->get_string_length = 0;
1002 return (
PLFLT) plsc->string_length;
1009 pldeco( &symbol, &length,
string );
1011 for ( i = 0; i < length; i++ )
1017 scale = dscale * pow( 0.75, (
double)
ABS( level ) );
1019 else if ( ch == -2 )
1022 scale = dscale * pow( 0.75, (
double)
ABS( level ) );
1024 else if ( ch == -3 )
1025 xorg -=
width * scale;
1026 else if ( ch == -4 || ch == -5 )
1030 if (
plcvec( ch, &vxygrid ) )
1032 width = vxygrid[3] - vxygrid[2];
1033 xorg +=
width * scale;
1037 return (
PLFLT) xorg;
1067 }
while ( ( x != 64 || y != 64 ) && k <= (
STLEN - 2 ) );
1069 if ( k == (
STLEN - 1 ) )
1108 PLINT ch, ifont = plsc->cfont, ig, j = 0, lentxt = (
PLINT) strlen(
text );
1122 while ( j < lentxt )
1128 if ( ch < 0 || ch > 175 )
1133 if ( ch == esc && ( lentxt - j ) >= 1 )
1139 else if ( test ==
'u' || test ==
'U' )
1140 sym[( *length )++] = -1;
1142 else if ( test ==
'd' || test ==
'D' )
1143 sym[( *length )++] = -2;
1145 else if ( test ==
'b' || test ==
'B' )
1146 sym[( *length )++] = -3;
1148 else if ( test ==
'+' )
1149 sym[( *length )++] = -4;
1151 else if ( test ==
'-' )
1152 sym[( *length )++] = -5;
1154 else if ( test ==
'(' )
1157 while (
'0' <=
text[j] &&
text[j] <=
'9' )
1159 sym[*length] = (short) ( (
int) sym[*length] * 10 +
text[j] -
'0' );
1163 if (
text[j] ==
')' )
1166 else if ( test ==
'f' || test ==
'F' )
1170 isupper( test ) ? tolower( test ) : test );
1174 else if ( test ==
'g' || test ==
'G' )
1186 sym[( *length )++] =
1220 if ( ( temp = strchr( str, chr ) ) )
1221 return (
PLINT) ( temp - str );
1235 PLINT base, str1ind, str2ind;
1237 for ( base = 0; *( str1 + base ) !=
'\0'; base++ )
1239 for ( str1ind = base, str2ind = 0; *( str2 + str2ind ) !=
'\0' &&
1240 *( str2 + str2ind ) == *( str1 + str1ind ); str1ind++, str2ind++ )
1243 if ( *( str2 + str2ind ) ==
'\0' )
1244 return (
PLINT) base;
1258 if ( strchr( str, chr ) )
1260 else if ( strchr( str, toupper( chr ) ) )
1313 *old_scale = *scale;
1314 *old_offset = *offset;
1316 if ( ( *level >= 0 && ifupper ) || ( *level <= 0 && !ifupper ) )
1319 *scale = 0.75 * *old_scale;
1320 *offset = *old_offset + *old_scale;
1325 *scale = *old_scale / 0.75;
1326 *offset = *old_offset - *scale;
1344 if ( plsc->level < 1 )
1346 plabort(
"plfont: Please call plinit first" );
1349 if ( ifont < 1 || ifont > 4 )
1351 plabort(
"plfont: Invalid font" );
1355 plsc->cfont = ifont;
1396 static PLINT charset;
1413 plexit(
"Unable to either (1) open/find or (2) allocate memory for the font file" );
1421 fntlkup = (
short int *) malloc( (
size_t) bffrleng *
sizeof (
short int ) );
1423 plexit(
"plfntld: Out of memory while allocating font buffer." );
1430 fntindx = (
short int *) malloc( (
size_t)
indxleng *
sizeof (
short int ) );
1432 plexit(
"plfntld: Out of memory while allocating font buffer." );
1440 fntbffr = (
signed char *) malloc( 2 * (
size_t) bffrleng *
sizeof (
signed char ) );
1442 plexit(
"plfntld: Out of memory while allocating font buffer." );
1444 #if PLPLOT_USE_TCL_CHANNELS
1445 pdf_rdx(
fntbffr,
sizeof (
signed char ) * (
size_t) ( 2 * bffrleng ), pdfs );
1448 (
size_t) ( 2 * bffrleng ), pdfs->
file );
1492 #ifdef SIMPLE_BUT_SAFE_HERSHEY_LOOKUP
1507 while ( jhi - jlo > 1 )
1513 jmid = ( jlo + jhi ) / 2;
1551 int jlo = -1, jmid, jhi = nlookup;
1552 while ( jhi - jlo > 1 )
1558 jmid = ( jlo + jhi ) / 2;
1559 if ( fci > lookup[jmid].fci )
1561 else if ( fci < lookup[jmid].fci )
1613 PLFLT xmin, xmax, ymin, ymax, zmin, zmax, zscale;
1614 PLFLT chrdef, chrht;
1617 PLFLT xpc, ypc, xrefpc, yrefpc;
1618 PLFLT epx1 = 0.0, epy1 = 0.0, epx2 = 0.0, epy2 = 0.0, epx3 = 0.0, epy3 = 0.0;
1620 PLFLT shift, theta, temp;
1623 if ( plsc->level < 3 )
1625 plabort(
"plmtex3: Please set up window first" );
1630 plP_gdom( &xmin, &xmax, &ymin, &ymax );
1632 plgchr( &chrdef, &chrht );
1695 if ( ( epx2 - epx1 ) != 0.0 )
1697 theta = atan( ( epy2 - epy1 ) / ( epx2 - epx1 ) );
1713 dispy = disp * chrht;
1717 xpc = pos * ( epx2 - epx1 ) + epx1;
1718 ypc = pos * ( epy2 - epy1 ) + epy1;
1736 yrefpc = ypc - shift;
1740 xrefpc = xpc - cos( theta ) * shift;
1741 yrefpc = ypc - sin( theta ) * shift;
1756 xform[1] = -cos( theta );
1758 xform[3] = -sin( theta );
1765 xform[0] = cos( theta );
1767 xform[2] = sin( theta );
1865 if ( ( epx3 - epx1 ) != 0.0 )
1867 theta = atan( ( epy3 - epy1 ) / ( epx3 - epx1 ) );
1883 dispx = -cos( theta ) * disp * chrht;
1884 dispy = -sin( theta ) * disp * chrht;
1888 if ( ( epx1 - epx3 ) != 0.0 )
1890 theta = -atan( ( epy3 - epy1 ) / ( epx1 - epx3 ) );
1904 dispx = cos( theta ) * disp * chrht;
1905 dispy = sin( theta ) * disp * chrht;
1911 ypc = pos * ( epy2 - epy1 ) + epy1;
1922 xrefpc = xpc - cos( theta ) * shift;
1923 yrefpc = ypc - sin( theta ) * shift;
1928 yrefpc = ypc - shift;
1940 xform[0] = cos( theta );
1942 xform[2] = sin( theta );
1951 xform[1] = -cos( theta );
1953 xform[3] = -sin( theta );
1985 PLFLT xpc, ypc, xrefpc, yrefpc, xdpc, ydpc, xspc, yspc, ld, ls, cp, shift;
1986 PLFLT x_o, y_o, z_o, x_dx, y_dy, z_dz;
1987 PLFLT theta, phi, stride,
xform[6], affineL[6], cosphi;
1990 if ( plsc->level < 3 )
1992 plabort(
"plptex3: Please set up window first" );
2003 theta = atan2( ydpc - ypc, xdpc - xpc );
2015 if ( ( sx == 0.0 ) && ( sy == 0.0 ) && ( sz == 0.0 ) )
2023 ld = sqrt( ( xpc - xdpc ) * ( xpc - xdpc ) + ( ypc - ydpc ) * ( ypc - ydpc ) );
2024 ls = sqrt( ( xpc - xspc ) * ( xpc - xspc ) + ( ypc - yspc ) * ( ypc - yspc ) );
2025 phi = acos( ( ( xdpc - xpc ) * ( xspc - xpc ) + ( ydpc - ypc ) * ( yspc - ypc ) ) / ( ld * ls ) );
2026 cp = ( xdpc - xpc ) * ( yspc - ypc ) - ( ydpc - ypc ) * ( xspc - xpc );
2031 phi = 0.5 *
PI - phi;
2041 x_dx = x_o -
plP_w3wcx( wx + dx, wy + dy, wz + dz );
2042 y_dy = y_o -
plP_w3wcy( wx + dx, wy + dy, wz + dz );
2043 z_dz = z_o -
plP_w3wcz( wx + dx, wy + dy, wz + dz );
2045 stride = sqrt( x_dx * x_dx + y_dy * y_dy );
2046 stride = stride / sqrt( x_dx * x_dx + y_dy * y_dy + z_dz * z_dz );
2053 xrefpc = xpc - cos( theta ) * shift * stride;
2054 yrefpc = ypc - sin( theta ) * shift * stride;
2076 cosphi = cos( phi );
2077 if ( fabs( cosphi ) > 1.e-300 )
2104 plwarn(
"plsfont: Value for family is out of range" );
2113 plwarn(
"plsfont: Value for style is out of range" );
2122 plwarn(
"plsfont: Value for weight is out of range" );
2148 *p_family = (
PLINT) val;
2154 *p_style = (
PLINT) val;
2160 *p_weight = (
PLINT) val;