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];
718 plP_text( 0, just, xform, x, y, refx, refy, text );
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];
792 plP_text( 0, just, xform, x, y, refx, refy, text );
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;
920 lx = refx +
ROUND( xpmm * ( xform[0] * x + xform[1] * y ) );
921 ly = refy +
ROUND( ypmm * ( xform[2] * x + xform[3] * y ) );
945 y = *p_yorg + ( 30 + ydisp ) * scale;
946 lx = refx +
ROUND( xpmm * ( xform[0] * x + xform[1] * y ) );
947 ly = refy +
ROUND( ypmm * ( xform[2] * x + xform[3] * y ) );
949 x = *p_xorg + *p_width * scale;
950 lx = refx +
ROUND( xpmm * ( xform[0] * x + xform[1] * y ) );
951 ly = refy +
ROUND( ypmm * ( xform[2] * x + xform[3] * y ) );
957 y = *p_yorg + ( -5 + ydisp ) * scale;
958 lx = refx +
ROUND( xpmm * ( xform[0] * x + xform[1] * y ) );
959 ly = refy +
ROUND( ypmm * ( xform[2] * x + xform[3] * y ) );
961 x = *p_xorg + *p_width * scale;
962 lx = refx +
ROUND( xpmm * ( xform[0] * x + xform[1] * y ) );
963 ly = refy +
ROUND( ypmm * ( xform[2] * x + xform[3] * y ) );
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;
1731 shift =
plstrl( text ) * just;
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;
1918 shift =
plstrl( text ) * just;
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 );
2052 shift =
plstrl( text ) * just;
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;
void plP_script_scale(PLBOOL ifupper, PLINT *level, PLFLT *old_scale, PLFLT *scale, PLFLT *old_offset, PLFLT *offset)
int pdf_rdx(U_CHAR *x, long nitems, PDFstrm *pdfs)
void plexit(PLCHAR_VECTOR errormsg)
void c_plstring3(PLINT n, PLFLT_VECTOR x, PLFLT_VECTOR y, PLFLT_VECTOR z, PLCHAR_VECTOR string)
void plP_esc(PLINT op, void *ptr)
void c_plmtex(PLCHAR_VECTOR side, PLFLT disp, PLFLT pos, PLFLT just, PLCHAR_VECTOR text)
void plP_fci2hex(PLUNICODE fci, unsigned char *phexdigit, unsigned char hexpower)
PLFLT plP_w3wcz(PLFLT x, PLFLT y, PLFLT z)
static void plhrsh2(PLINT ch, PLINT x, PLINT y)
static void pldeco(short int **sym, PLINT *length, PLCHAR_VECTOR text)
PLINT plP_stindex(PLCHAR_VECTOR str1, PLCHAR_VECTOR str2)
const char plP_greek_mnemonic[]
static short int * fntindx
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)
static void plchar(signed char *xygrid, PLFLT *xform, PLINT base, PLINT oline, PLINT uline, PLINT refx, PLINT refy, PLFLT scale, PLFLT xpmm, PLFLT ypmm, PLFLT *p_xorg, PLFLT *p_yorg, PLFLT *p_width)
PLBOOL plP_stsearch(PLCHAR_VECTOR str, int chr)
void c_plpoin3(PLINT n, PLFLT_VECTOR x, PLFLT_VECTOR y, PLFLT_VECTOR z, PLINT code)
int pdf_rd_2bytes(PDFstrm *pdfs, U_SHORT *ps)
static short int numberfonts
void plabort(PLCHAR_VECTOR errormsg)
int hershey2unicode(int in)
static short symbol_buffer[PLMAXSTR]
void c_plstring(PLINT n, PLFLT_VECTOR x, PLFLT_VECTOR y, PLCHAR_VECTOR string)
void c_plpoin(PLINT n, PLFLT_VECTOR x, PLFLT_VECTOR y, PLINT code)
PLFLT plstrl(PLCHAR_VECTOR string)
void plP_affine_yskew(PLFLT *affine_vector, PLFLT angle)
void c_plmtex3(PLCHAR_VECTOR side, PLFLT disp, PLFLT pos, PLFLT just, PLCHAR_VECTOR text)
void plstr(PLINT base, PLFLT *xform, PLINT refx, PLINT refy, PLCHAR_VECTOR string)
static PLINT plcvec(PLINT ch, signed char **xygr)
static const char font_types[]
void plP_gclp(PLINT *p_ixmin, PLINT *p_ixmax, PLINT *p_iymin, PLINT *p_iymax)
const unsigned char * pfont
void c_plsfont(PLINT family, PLINT style, PLINT weight)
static signed char * fntbffr
void c_plgfont(PLINT *p_family, PLINT *p_style, PLINT *p_weight)
void plio_fread(void *buf, size_t size, size_t nmemb, FILE *stream)
enum EscText::@5 text_type
static short int numberchars
void c_plsym(PLINT n, PLFLT_VECTOR x, PLFLT_VECTOR y, PLINT code)
void c_pllab(PLCHAR_VECTOR xlabel, PLCHAR_VECTOR ylabel, PLCHAR_VECTOR tlabel)
#define TRANSFORM(x, y, xnew, ynew)
void xform(PLFLT x, PLFLT y, PLFLT *tx, PLFLT *ty, PLPointer pltr_data)
Hershey_to_Unicode_table hershey_to_unicode_lookup_table[]
void plP_affine_multiply(PLFLT *affine_vectorA, PLFLT_VECTOR affine_vectorB, PLFLT_VECTOR affine_vectorC)
void plP_affine_rotate(PLFLT *affine_vector, PLFLT angle)
PLFLT plP_w3wcy(PLFLT x, PLFLT y, PLFLT z)
void plhrsh(PLINT ch, PLINT x, PLINT y)
unsigned short unicode_array_len
int plhershey2unicode(int in)
void plP_draphy(PLINT x, PLINT y)
void c_plfont(PLINT ifont)
static short int * fntlkup
PLFLT plP_w3wcx(PLFLT x, PLFLT y, PLFLT PL_UNUSED(z))
int pdf_close(PDFstrm *pdfs)
void plP_draphy_poly(PLINT *x, PLINT *y, PLINT n)
void plP_hex2fci(unsigned char hexdigit, unsigned char hexpower, PLUNICODE *pfci)
void plP_movphy(PLINT x, PLINT y)
PLCHAR_VECTOR plP_FCI2FontName(PLUNICODE fci, const FCI_to_FontName_Table lookup[], const int nlookup)
void c_plptex(PLFLT wx, PLFLT wy, PLFLT dx, PLFLT dy, PLFLT just, PLCHAR_VECTOR text)
void plwarn(PLCHAR_VECTOR errormsg)
void c_plptex3(PLFLT wx, PLFLT wy, PLFLT wz, PLFLT dx, PLFLT dy, PLFLT dz, PLFLT sx, PLFLT sy, PLFLT sz, PLFLT just, PLCHAR_VECTOR text)
int pdf_rd_2nbytes(PDFstrm *pdfs, U_SHORT *s, PLINT n)
void plP_sclp(PLINT ixmin, PLINT ixmax, PLINT iymin, PLINT iymax)
static short int indxleng
void plbuf_write(PLStream *pls, void *data, size_t bytes)
int number_of_entries_in_hershey_to_unicode_table
static signed char xygrid[STLEN]
const PLFLT * PLFLT_VECTOR
PDFstrm * plLibOpenPdfstrm(PLCHAR_VECTOR fn)
PLUNICODE * unicode_array
void plP_affine_scale(PLFLT *affine_vector, PLFLT xscale, PLFLT yscale)
void plP_gdom(PLFLT *p_xmin, PLFLT *p_xmax, PLFLT *p_ymin, PLFLT *p_ymax)
PLINT plP_strpos(PLCHAR_VECTOR str, int chr)