/* pwritf.f -- translated by f2c (version 19961017).
   You must link the resulting object file with the libraries:
	-lf2c -lm   (in that order)
*/

#include "f2c.h"

/* Common Block Declarations */

extern struct {
    real xpgmin, ypgmin, xpgmax, ypgmax, xclbot, yclbot, xcltop, ycltop, xbot,
	     ybot, xtop, ytop, xmin, ymin, xmax, ymax;
    integer ixcoor, iycoor;
    real alphxx, betaxx, alphyy, betayy, tmajx, tminx, tmajy, tminy;
    integer majrx, minrx, majry, minry, isizx, isizy;
    real xphold, yphold;
} zzzplt_;

#define zzzplt_1 zzzplt_

extern struct {
    real xphmax, yphmax;
    integer ixpmax, iypmax;
    real xpscal, ypscal;
    integer iflip, nplotr;
    char cfile[64];
} zzpltr_;

#define zzpltr_1 zzpltr_




/* Subroutine */ int pwritf_(real *x, real *y, char *ch, integer *nch, 
	integer *isiz, integer *ior, integer *icent, ftnlen ch_len)
{
    /* System generated locals */
    integer i__1, i__2;
    real r__1, r__2;

    /* Local variables */
    static real xold, yold, size, xorg, yorg;
    static integer lstr[69999], nstr;
    static real xstr[69999], ystr[69999];
    static integer i__;
    static char chloc[6666];
    static integer nchar;
    extern /* Subroutine */ int color_(integer *);
    static integer isize;
    static real ct;
    static integer nchloc;
    static real st, xr, yr, xx, yy;
    extern integer lastnb_(char *, ftnlen);
    extern /* Subroutine */ int zzline_(real *, real *, real *, real *), 
	    zzconv_(char *, integer *, char *, integer *, ftnlen, ftnlen), 
	    zzphys_(real *, real *), zzstro_(char *, integer *, integer *, 
	    real *, real *, integer *, ftnlen);
    static real orr;




/* .......................................................................
 */

/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 */
/*  Calculate character width in terms of 1/1000 of the x-width. */


/*  Internal Data for PLOTPAK */

    isize = *isiz;
    if (isize <= 0) {
	isize = 8;
    } else if (isize == 1) {
	isize = 12;
    } else if (isize == 2) {
	isize = 16;
    } else if (isize == 3) {
	isize = 24;
    }

    size = isize * .001f * (zzzplt_1.xpgmax - zzzplt_1.xpgmin);

/*  Rotation/scaling factors for digitization */

    orr = *ior * .017453292f;
    ct = size * cos(orr);
    st = size * sin(orr);

/*  Base location, in internal coordinates */

    xx = *x;
    yy = *y;
    if (*nch >= 0) {
	zzphys_(&xx, &yy);
    }

/*  Get no. of characters in string.  Special option 999 must be checked. 
*/

    nchar = abs(*nch);
    if (nchar == 999) {
	i__1 = nchar;
	for (i__ = 1; i__ <= i__1; ++i__) {
	    if (*(unsigned char *)&ch[i__ - 1] == '\0') {
		goto L20;
	    }
/* L10: */
	}
L20:
	nchar = i__ - 1;
    } else if (nchar == 0) {
	nchar = lastnb_(ch, ch_len);
    }

/*  Digitize string into line segments */

    zzconv_(ch, &nchar, chloc, &nchloc, ch_len, 6666L);
    zzstro_(chloc, &nchloc, &nstr, xstr, ystr, lstr, 6666L);
    if (nstr <= 0) {
	return 0;
    }

/*  Find min, max of x and y */

    zzzplt_1.xbot = xstr[0];
    zzzplt_1.ybot = ystr[0];
    zzzplt_1.xtop = zzzplt_1.xbot;
    zzzplt_1.ytop = zzzplt_1.ybot;
    i__1 = nstr;
    for (i__ = 2; i__ <= i__1; ++i__) {
/* Computing MIN */
	r__1 = zzzplt_1.xbot, r__2 = xstr[i__ - 1];
	zzzplt_1.xbot = dmin(r__1,r__2);
/* Computing MAX */
	r__1 = zzzplt_1.xtop, r__2 = xstr[i__ - 1];
	zzzplt_1.xtop = dmax(r__1,r__2);
/* Computing MIN */
	r__1 = zzzplt_1.ybot, r__2 = ystr[i__ - 1];
	zzzplt_1.ybot = dmin(r__1,r__2);
/* Computing MAX */
	r__1 = zzzplt_1.ytop, r__2 = ystr[i__ - 1];
	zzzplt_1.ytop = dmax(r__1,r__2);
/* L100: */
    }

/*  Now compute origin of string, based on centering option; */
/*  the origin of the string goes at (XX,YY) */

    if (*icent == -1) {
	xorg = zzzplt_1.xbot;
	yorg = (zzzplt_1.ybot + zzzplt_1.ytop) * .5f;
    } else if (*icent == 0) {
	xorg = (zzzplt_1.xbot + zzzplt_1.xtop) * .5f;
	yorg = (zzzplt_1.ybot + zzzplt_1.ytop) * .5f;
    } else if (*icent == 1) {
	xorg = zzzplt_1.xtop;
	yorg = (zzzplt_1.ybot + zzzplt_1.ytop) * .5f;
    } else {
	xorg = zzzplt_1.xbot;
	yorg = zzzplt_1.ybot;
    }

/*  Now draw the strokes */

    i__1 = nstr;
    for (i__ = 1; i__ <= i__1; ++i__) {
	if (lstr[i__ - 1] <= 1) {
	    xr = xx + ct * (xstr[i__ - 1] - xorg) - st * (ystr[i__ - 1] - 
		    yorg);
	    yr = yy + st * (xstr[i__ - 1] - xorg) + ct * (ystr[i__ - 1] - 
		    yorg);
	    if (lstr[i__ - 1] == 1) {
		zzline_(&xold, &yold, &xr, &yr);
	    }
	    xold = xr;
	    yold = yr;
	} else if (lstr[i__ - 1] > 100 && lstr[i__ - 1] <= 107) {
	    i__2 = lstr[i__ - 1] - 100;
	    color_(&i__2);
	}
/* L200: */
    }

    zzzplt_1.xphold = xold;
    zzzplt_1.yphold = yold;
    return 0;
} /* pwritf_ */




integer lastnb_(char *cline, ftnlen cline_len)
{
    /* System generated locals */
    integer ret_val;

    /* Builtin functions */
    integer i_len(char *, ftnlen);

    /* Local variables */
    static integer npos;


/*  Return the position of the last nonblank character in the input */
/*  character string.  CLINE is CHARACTER*(*).  Even if CLINE is all */
/*  blanks, LASTNB will be returned as 1 so that operations of the */
/*  form CLINE(1:LASTNB) won't be garbage. */


/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 */

/*  Start at the end and work backwards until a nonblank is found. */
/*  Loop back to 100 to check position # NPOS each time. */

    npos = i_len(cline, cline_len);
L100:
/*  quit if at the beginning */
    if (npos <= 1) {
	goto L200;
    }
/*  quit if not a blank or a null */
    if (*(unsigned char *)&cline[npos - 1] != ' ' && *(unsigned char *)&cline[
	    npos - 1] != '\0') {
	goto L200;
    }
/*  move back one position and try again */
    --npos;
    goto L100;
/* .......................................................................
 */
L200:
    ret_val = npos;
    return ret_val;
} /* lastnb_ */




/* Subroutine */ int zzstro_(char *ch, integer *nch, integer *nstr, real *
	xstr, real *ystr, integer *lstr, ftnlen ch_len)
{
    /* Initialized data */

    static integer noff[256] = { 3452,3452,3452,3452,3452,3452,3452,3452,3452,
	    3452,3452,3452,3452,3452,3452,3452,3452,3452,3452,3452,3452,3452,
	    3452,3452,3452,3452,3452,3452,3452,3452,3452,3452,3448,2598,2646,
	    3307,3268,3138,3168,2641,2672,2691,3439,2790,2566,2787,2560,2669,
	    2205,2243,2252,2294,2338,2348,2383,2429,2456,2514,2574,2585,2832,
	    2820,2836,2611,3215,1,14,54,85,112,129,144,180,199,208,226,245,
	    256,277,292,334,359,419,458,491,504,524,535,552,567,582,2710,3818,
	    2719,3564,3597,2953,595,631,660,687,718,747,766,821,843,857,879,
	    898,907,942,964,998,1029,1058,1077,1108,1122,1144,1155,1172,1187,
	    1205,2728,2784,2752,3593,3452,2856,3033,2802,2807,3600,2980,2916,
	    3615,2776,2780,3384,2795,2840,3316,3759,3783,0,0,0,0,0,0,0,0,0,0,
	    0,0,0,0,0,0,2890,2655,3022,2971,2962,2944,3651,3064,2929,3666,
	    3805,3812,3815,3430,2848,3683,3463,3468,3473,3479,3485,3498,3511,
	    3524,3537,3554,2877,3715,3737,3359,2825,2903,3689,1,14,1218,1229,
	    112,582,180,1240,199,226,1290,256,277,1301,292,1326,334,1341,491,
	    1357,1386,552,1428,1463,3702,3449,3455,3450,3454,3451,3453,3456,
	    1502,1539,1591,1616,1658,1681,1711,1740,1780,1794,1819,1839,1863,
	    1883,1924,1954,1971,2000,2032,2045,2074,2112,2133,2164,3457,3458,
	    3459,3460,3461,3462,3112 };
    static integer numstr[256] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
	    1,1,1,1,1,1,1,1,1,1,1,1,13,9,9,39,30,47,5,19,19,9,5,8,3,6,3,38,9,
	    42,44,10,35,46,27,58,46,11,13,4,5,4,30,53,13,40,31,27,17,15,36,19,
	    9,18,19,11,21,15,42,25,60,39,33,13,20,11,17,15,15,13,9,3,9,29,3,9,
	    36,29,27,31,29,19,55,22,14,22,19,9,35,22,34,31,29,19,31,14,22,11,
	    17,15,18,13,24,3,24,4,1,21,31,5,13,15,42,13,36,4,4,46,7,8,43,24,
	    22,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,13,14,11,9,9,9,15,48,15,
	    17,7,3,3,9,8,6,5,5,6,6,13,13,13,13,17,10,13,22,22,25,7,13,13,13,
	    40,11,11,17,13,19,50,9,19,11,21,15,25,42,15,25,16,13,29,42,15,35,
	    39,13,1,1,1,1,1,1,1,37,52,25,42,23,30,29,40,14,25,20,24,20,41,30,
	    17,29,32,13,29,38,21,31,41,1,1,1,1,1,1,26 };
    static struct {
	integer e_1[3820];
	} equiv_38 = { 8011, 23723, 9173, 25515, 7378, 25390, 6854, 25792, 
		6586, 25408, 9024, 25408, 6858, 7371, 24619, 8405, 24619, 
		7765, 26176, 25023, 24767, 24766, 24638, 24510, 24511, 24255, 
		8266, 24895, 24767, 24766, 24638, 24510, 24511, 24383, 7232, 
		25664, 25023, 24767, 24766, 24637, 24510, 24511, 24255, 23104,
		 9803, 24895, 24767, 24766, 24637, 24510, 24511, 24383, 7754, 
		8904, 24765, 24646, 24509, 24386, 24257, 24384, 24255, 24382, 
		24510, 24509, 24635, 24765, 24766, 24894, 25023, 24896, 25025,
		 24898, 24770, 7248, 24383, 24382, 24510, 24509, 24635, 24765,
		 24766, 24894, 24895, 8138, 7371, 24619, 8405, 24619, 7765, 
		25920, 25023, 24894, 24766, 24765, 24635, 24509, 24510, 24382,
		 24255, 23360, 9557, 24895, 24894, 24766, 24765, 24635, 24509,
		 24510, 24382, 24383, 8010, 7371, 24619, 8405, 24619, 9039, 
		24632, 6990, 26688, 24634, 24518, 6838, 25408, 6965, 26688, 
		24646, 24506, 7242, 7371, 24619, 8405, 24619, 9039, 24632, 
		6990, 26688, 24634, 24518, 6838, 25408, 6965, 25536, 8138, 
		8904, 24765, 24646, 24509, 24386, 24257, 24384, 24255, 24382, 
		24510, 24509, 24635, 24765, 24766, 24894, 25023, 24896, 25025,
		 24898, 7378, 24383, 24382, 24510, 24509, 24635, 24765, 24766,
		 24894, 24895, 9160, 24632, 8392, 24632, 7752, 25536, 6978, 
		7371, 24619, 8405, 24619, 9813, 24619, 8405, 24619, 6101, 
		25536, 9024, 25536, 6198, 26176, 6197, 25536, 9024, 25536, 
		6986, 7371, 24619, 8405, 24619, 7765, 25536, 7339, 25536, 
		6986, 8011, 24623, 24509, 24383, 24384, 24385, 24514, 24642, 
		24769, 24767, 24511, 9041, 24623, 24509, 24511, 8149, 25536, 
		6965, 7371, 24619, 8405, 24619, 9941, 22963, 8900, 25652, 
		7116, 25652, 6229, 25536, 9024, 25408, 5803, 25536, 9024, 
		25408, 6858, 7371, 24619, 8405, 24619, 7765, 25536, 7339, 
		26560, 24646, 24506, 6986, 7371, 24619, 8405, 25390, 7378, 
		25515, 9173, 23723, 9173, 24619, 8405, 24619, 5973, 25152, 
		9920, 25152, 5547, 25408, 9280, 25536, 6986, 7371, 24619, 
		8405, 26157, 6737, 26157, 8277, 24619, 6229, 25152, 9408, 
		25408, 5803, 25408, 8650, 8011, 24255, 24382, 24510, 24508, 
		24637, 24764, 24766, 24894, 25023, 24896, 25025, 24898, 24770,
		 24772, 24643, 24516, 24514, 24386, 24257, 24384, 8256, 24383,
		 24382, 24510, 24508, 24637, 24764, 24766, 24894, 24895, 8512,
		 24897, 24898, 24770, 24772, 24643, 24516, 24514, 24386, 
		24385, 7989, 7371, 24619, 8405, 24619, 7765, 26176, 25023, 
		24767, 24766, 24637, 24510, 24511, 24255, 23616, 9291, 24895, 
		24767, 24766, 24637, 24510, 24511, 24383, 6710, 25536, 8394, 
		8011, 24255, 24382, 24510, 24508, 24637, 24764, 24766, 24894, 
		25023, 24896, 25025, 24898, 24770, 24772, 24643, 24516, 24514,
		 24386, 24257, 24384, 8256, 24383, 24382, 24510, 24508, 24637,
		 24764, 24766, 24894, 24895, 8512, 24897, 24898, 24770, 24772,
		 24643, 24516, 24514, 24386, 24385, 7597, 24641, 24770, 24897,
		 24768, 24895, 24766, 24761, 24767, 24896, 24770, 24641, 7621,
		 24764, 24766, 24767, 24768, 24769, 7117, 7371, 24619, 8405, 
		24619, 7765, 26176, 25023, 24767, 24766, 24638, 24510, 24511, 
		24255, 23616, 9290, 24895, 24767, 24766, 24638, 24510, 24511, 
		24383, 6709, 25536, 8523, 24895, 24767, 25017, 24767, 24768, 
		24769, 7368, 24766, 24889, 24767, 24896, 24770, 24641, 6983, 
		8776, 24771, 24634, 24515, 24386, 24257, 24256, 24255, 24382, 
		24638, 24766, 24767, 24895, 25406, 24895, 24894, 6473, 24894, 
		24895, 25406, 24895, 24767, 24766, 24636, 24382, 24255, 24256,
		 24257, 24386, 24515, 24634, 24771, 8775, 7883, 24619, 8405, 
		24619, 7381, 24506, 24646, 26560, 24634, 24518, 6955, 25536, 
		7498, 7371, 24625, 24765, 24894, 25023, 24896, 25025, 24898, 
		24771, 24655, 6592, 24625, 24765, 24894, 24895, 7125, 25536, 
		9152, 25408, 6965, 7115, 25515, 7509, 25390, 9170, 23723, 
		7125, 25408, 9024, 25408, 6837, 7243, 25131, 7893, 25008, 
		8784, 24107, 8789, 25131, 7893, 25008, 8784, 24107, 6357, 
		25536, 9408, 25408, 6837, 7115, 26283, 6741, 26283, 8277, 
		22827, 8021, 25408, 9024, 25408, 5931, 25408, 9024, 25408, 
		6858, 7115, 25525, 24630, 7509, 25525, 24630, 9173, 23733, 
		6987, 25408, 9152, 25408, 6571, 25536, 7626, 8779, 22955, 
		10069, 22955, 8277, 24506, 24646, 26432, 6443, 26432, 24646, 
		24506, 7242, 7362, 24639, 24512, 24641, 24769, 24897, 25152, 
		24895, 24767, 24766, 24633, 24766, 24767, 7884, 24631, 24766, 
		24895, 24768, 7754, 24511, 23871, 24255, 24510, 24638, 24766, 
		25023, 25024, 24897, 24898, 7365, 24383, 24510, 24638, 24766, 
		24895, 8394, 7371, 24619, 8405, 24619, 8267, 24898, 24897, 
		24896, 25023, 24894, 24765, 24638, 24509, 24382, 24255, 24384,
		 24385, 24386, 9035, 24895, 24894, 24765, 24638, 24509, 24382,
		 24383, 6997, 25152, 8629, 8641, 24511, 24767, 24769, 24641, 
		24386, 24385, 24256, 24255, 24382, 24509, 24638, 24765, 24894,
		 25023, 24896, 25025, 24898, 7371, 24383, 24382, 24509, 24638,
		 24765, 24894, 24895, 8010, 8651, 24619, 8405, 24619, 8139, 
		24386, 24385, 24384, 24255, 24382, 24509, 24638, 24765, 24894,
		 25023, 24896, 24897, 24898, 7499, 24383, 24382, 24509, 24638,
		 24765, 24894, 24895, 8661, 25152, 8107, 25152, 6986, 7230, 
		26176, 24642, 24514, 24513, 24385, 24256, 24255, 24382, 24509,
		 24638, 24765, 24894, 25023, 24896, 25025, 24898, 8133, 24643,
		 24514, 7617, 24383, 24382, 24509, 24638, 24765, 24894, 24895,
		 8010, 8010, 24511, 24767, 24769, 24641, 24513, 24384, 24383, 
		24510, 24622, 8661, 24511, 24510, 24622, 7758, 25664, 7218, 
		25536, 7242, 7748, 24383, 24511, 24510, 24638, 24766, 24767, 
		24895, 24896, 24897, 24769, 24770, 24642, 24514, 24513, 24385,
		 24384, 7999, 24510, 24636, 24766, 9024, 24770, 24644, 24514, 
		8383, 24769, 24897, 24639, 24384, 7097, 24511, 24510, 24639, 
		24766, 25023, 25280, 25023, 24767, 6597, 24767, 25023, 25280, 
		25023, 24766, 24639, 24510, 24255, 23872, 24257, 24514, 24641,
		 24770, 25025, 8394, 7371, 24619, 8405, 24619, 8267, 24898, 
		25025, 24896, 25023, 24766, 24629, 7758, 24895, 24766, 24629, 
		6485, 25152, 7723, 25536, 8768, 25536, 6986, 7371, 24511, 
		24767, 24769, 24513, 8249, 24626, 8398, 24626, 7758, 25152, 
		7730, 25536, 6986, 7499, 24511, 24767, 24769, 24513, 8377, 
		24622, 24510, 24383, 24384, 24513, 24641, 24769, 24767, 24511,
		 8788, 24622, 24510, 24511, 8149, 25152, 7228, 7371, 24619, 
		8405, 24619, 9550, 23350, 8900, 25400, 7368, 25400, 6485, 
		25152, 9145, 25408, 6066, 25536, 8768, 25408, 6986, 7371, 
		24619, 8405, 24619, 7765, 25152, 7723, 25536, 6986, 7364, 
		24626, 8398, 24626, 8267, 24898, 25025, 24896, 25023, 24766, 
		24629, 7758, 24895, 24766, 24629, 8395, 24898, 25025, 24896, 
		25023, 24766, 24629, 7758, 24895, 24766, 24629, 5070, 25152, 
		7730, 25536, 8768, 25536, 8768, 25536, 6986, 7364, 24626, 
		8398, 24626, 8267, 24898, 25025, 24896, 25023, 24766, 24629, 
		7758, 24895, 24766, 24629, 6478, 25152, 7730, 25536, 8768, 
		25536, 6986, 7876, 24255, 24382, 24509, 24638, 24765, 24894, 
		25023, 24896, 25025, 24898, 24771, 24642, 24515, 24386, 24257,
		 24384, 8256, 24383, 24382, 24509, 24638, 24765, 24894, 24895,
		 8512, 24897, 24898, 24771, 24642, 24515, 24386, 24385, 7868, 
		7364, 24619, 8405, 24619, 8274, 24898, 24897, 24896, 25023, 
		24894, 24765, 24638, 24509, 24382, 24255, 24384, 24385, 24386,
		 9035, 24895, 24894, 24765, 24638, 24509, 24382, 24383, 6990, 
		25152, 7723, 25536, 8273, 8644, 24619, 8405, 24619, 8146, 
		24386, 24385, 24384, 24255, 24382, 24509, 24638, 24765, 24894,
		 25023, 24896, 24897, 24898, 7499, 24383, 24382, 24509, 24638,
		 24765, 24894, 24895, 8633, 25536, 6865, 7364, 24626, 8398, 
		24626, 8264, 24771, 24898, 24897, 25024, 24767, 24639, 24511, 
		24513, 24769, 6721, 25152, 7730, 25536, 7754, 8386, 24770, 
		24636, 24514, 24513, 24385, 24128, 24383, 24511, 24638, 24767,
		 24895, 25278, 24895, 24767, 6855, 24767, 24895, 25278, 24895,
		 24767, 24637, 24511, 24383, 24128, 24385, 24513, 24514, 
		24636, 24770, 8392, 7371, 24623, 24765, 24895, 24896, 24897, 
		24770, 7378, 24623, 24765, 24767, 7502, 25664, 7356, 7364, 
		24629, 24766, 25023, 24896, 25025, 24898, 6987, 24629, 24766, 
		24895, 9166, 24626, 8398, 24626, 6350, 25152, 9152, 25152, 
		8114, 25152, 6986, 7108, 25394, 7630, 25268, 9036, 23858, 
		7246, 25408, 8768, 25408, 6844, 7236, 25138, 7886, 25013, 
		8779, 24114, 8782, 25138, 7886, 25013, 8779, 24114, 6350, 
		25536, 9408, 25408, 6844, 7236, 26034, 6990, 26034, 8270, 
		23090, 8014, 25408, 8768, 25408, 6194, 25408, 8768, 25408, 
		6986, 7236, 25394, 7630, 25268, 9036, 23858, 24380, 24382, 
		24383, 24512, 24513, 24769, 24767, 8020, 25408, 8768, 25408, 
		6844, 8516, 23218, 9806, 23218, 8270, 24508, 24644, 26176, 
		6706, 26176, 24644, 24508, 7242, 7371, 24619, 8405, 24619, 
		7765, 26560, 24634, 24518, 6443, 25536, 7882, 8011, 23595, 
		9301, 25643, 7250, 25518, 6465, 26432, 6335, 26688, 6986, 
		8011, 24255, 24382, 24510, 24508, 24637, 24764, 24766, 24894, 
		25023, 24896, 25025, 24898, 24770, 24772, 24643, 24516, 24514,
		 24386, 24257, 24384, 8256, 24383, 24382, 24510, 24508, 24637,
		 24764, 24766, 24894, 24895, 8512, 24897, 24898, 24770, 24772,
		 24643, 24516, 24514, 24386, 24385, 7737, 24633, 9031, 24633, 
		7492, 25408, 7487, 25408, 7744, 8011, 23723, 9173, 25515, 
		7378, 25390, 6336, 25408, 9024, 25408, 6858, 7244, 24507, 
		10309, 24507, 6972, 24507, 9285, 24507, 6972, 24507, 10309, 
		24507, 6485, 26432, 6463, 26432, 6968, 25408, 7487, 25408, 
		6968, 26432, 6463, 26432, 7241, 7371, 24619, 8405, 24619, 
		9813, 24619, 8405, 24619, 6101, 27200, 5675, 25536, 9024, 
		25536, 6986, 7115, 25526, 23605, 8277, 25526, 7370, 26560, 
		24762, 24390, 6572, 26304, 6463, 26560, 24774, 24378, 7370, 
		6982, 24642, 24770, 24769, 24896, 24767, 24766, 24764, 24626, 
		7378, 24898, 24896, 24894, 9406, 24642, 24514, 24513, 24384, 
		24511, 24510, 24508, 24626, 9170, 24386, 24384, 24382, 7598, 
		25536, 7498, 8011, 24619, 8405, 24619, 7888, 24255, 24511, 
		24510, 24637, 24766, 24767, 25023, 25280, 25025, 24769, 24770,
		 24643, 24514, 24513, 24257, 24000, 8256, 24383, 24511, 24510,
		 24637, 24766, 24767, 24895, 8896, 24897, 24769, 24770, 24643,
		 24514, 24513, 24385, 7493, 25536, 7339, 25536, 7626, 8139, 
		24619, 8405, 24619, 6990, 24769, 24895, 24764, 24766, 24767, 
		24895, 7369, 24767, 24764, 24766, 24767, 25023, 25024, 25025, 
		24769, 24770, 24772, 24769, 7351, 24897, 24769, 24770, 24772, 
		24897, 24767, 6599, 25536, 7339, 25536, 7754, 7097, 24765, 
		25152, 24388, 24388, 24515, 24644, 24771, 24898, 25025, 25152,
		 25023, 24894, 24765, 24636, 24509, 24380, 24380, 25152, 
		24771, 6593, 24515, 24516, 24644, 24771, 24898, 24897, 8768, 
		24895, 24894, 24765, 24636, 24508, 24509, 6717, 25024, 9280, 
		25024, 7241, 8004, 24255, 24382, 24510, 24509, 24637, 24766, 
		25023, 24896, 24897, 25027, 24899, 24900, 24771, 7104, 24383, 
		24382, 24510, 24509, 24637, 24766, 24895, 8654, 24896, 24895, 
		24766, 24888, 24766, 24767, 7374, 24767, 24766, 24888, 24766, 
		24895, 24768, 7114, 8395, 24255, 24382, 24380, 24509, 24508, 
		24506, 24504, 9692, 24383, 24382, 24380, 24509, 24508, 24506, 
		24504, 9564, 24896, 24895, 24767, 24637, 24510, 24511, 24255, 
		24128, 9033, 24894, 24637, 24510, 24511, 24383, 7744, 25151, 
		24894, 24766, 24637, 24510, 24511, 24255, 24384, 24385, 24513,
		 24515, 8775, 25023, 24894, 24766, 24637, 24510, 24511, 24383,
		 8010, 6849, 24898, 24897, 24896, 24895, 24767, 24765, 24636, 
		24508, 24248, 7635, 24897, 25152, 24895, 9282, 24509, 24510, 
		23993, 24251, 24380, 9685, 24509, 24510, 24121, 7880, 8387, 
		24385, 24384, 24255, 24381, 24509, 24637, 24766, 24767, 24895,
		 24896, 25025, 24899, 24771, 24643, 24514, 24133, 24514, 
		24642, 24769, 24896, 24895, 24894, 7355, 24383, 24381, 24509, 
		24636, 24766, 8767, 24897, 24899, 24771, 24644, 24514, 24387, 
		24514, 24642, 24769, 24896, 25022, 7095, 8515, 24385, 24256, 
		24255, 24382, 24509, 24637, 24765, 24767, 25023, 25024, 24897,
		 7757, 24383, 24382, 24509, 24637, 24765, 24767, 24895, 7751, 
		25664, 7363, 8139, 24383, 24511, 24639, 24767, 25023, 25280, 
		24641, 24255, 24126, 24254, 24253, 24509, 24638, 24766, 25022,
		 25022, 24766, 24638, 24511, 24384, 24513, 8917, 24125, 24253,
		 24509, 24638, 24766, 24894, 8138, 6848, 24770, 24898, 25024, 
		24767, 24638, 24508, 24377, 8398, 24767, 24638, 24508, 24377, 
		8647, 24900, 24898, 24897, 24896, 24895, 24767, 24637, 24507, 
		24245, 8405, 24894, 24637, 24507, 24245, 7889, 8139, 24255, 
		24381, 24510, 24509, 24507, 24636, 24766, 24895, 24896, 25025,
		 24899, 24770, 24771, 24773, 24644, 24514, 24385, 24384, 8256,
		 24383, 24381, 24510, 24509, 24507, 24636, 24766, 24767, 8512,
		 24897, 24899, 24770, 24771, 24773, 24644, 24514, 24513, 7222,
		 25792, 7359, 7492, 24377, 24508, 24638, 24767, 25024, 24898, 
		24770, 7882, 24377, 24508, 24638, 24767, 7626, 7492, 24114, 
		8910, 24114, 9934, 24767, 24768, 24513, 24384, 24383, 24124, 
		24383, 24384, 8512, 24895, 24890, 24767, 7624, 24767, 24890, 
		24767, 24896, 24897, 24899, 7110, 7115, 24896, 24895, 24767, 
		24766, 25394, 24766, 24767, 6741, 24894, 24766, 25394, 24766, 
		24895, 24768, 7246, 23602, 9294, 23730, 8906, 7620, 23851, 
		9173, 23851, 8914, 24506, 24637, 24894, 24896, 24897, 24898, 
		24899, 8520, 24245, 24638, 24767, 25024, 24898, 24770, 7882, 
		24245, 24638, 24767, 7498, 7492, 24370, 8654, 24506, 24507, 
		24509, 9934, 24508, 24380, 8776, 24509, 24510, 24381, 24382, 
		24254, 24383, 24255, 8142, 25152, 8380, 8139, 24383, 24511, 
		24639, 24767, 25023, 25024, 7872, 24127, 24383, 24510, 24638, 
		24894, 25023, 25024, 8137, 24255, 24383, 24510, 24638, 24894, 
		24895, 8256, 24127, 24383, 24510, 24638, 24894, 25278, 24767, 
		24638, 24383, 24384, 8654, 24255, 24383, 24510, 24638, 24894, 
		25150, 7629, 7876, 24255, 24381, 24509, 24637, 24766, 24767, 
		24895, 24896, 25025, 24899, 24771, 24643, 24514, 24513, 24385,
		 24384, 8256, 24383, 24381, 24509, 24636, 24766, 8767, 24897, 
		24899, 24771, 24644, 24514, 7357, 7875, 24115, 8781, 24243, 
		9421, 24627, 8269, 24755, 6475, 24898, 25025, 26304, 5949, 
		24897, 25025, 26304, 6973, 7227, 24765, 24767, 24895, 24896, 
		25025, 24899, 24771, 24643, 24514, 24513, 24385, 24384, 24255,
		 24381, 24509, 24114, 9543, 24897, 24899, 24771, 24644, 24514,
		 7745, 24383, 24381, 24509, 24114, 9041, 9156, 23360, 24255, 
		24381, 24509, 24637, 24766, 24767, 24895, 24896, 25025, 24899,
		 24771, 24643, 24514, 24513, 24385, 8000, 24383, 24381, 24509,
		 24636, 24766, 8767, 24897, 24899, 24771, 24644, 24514, 8256, 
		25408, 6973, 8131, 24243, 8653, 24371, 7371, 24898, 25025, 
		26048, 6205, 24897, 25025, 26048, 6973, 6848, 24770, 24898, 
		25024, 24767, 24638, 24378, 24637, 24894, 8014, 24767, 24638, 
		24378, 24637, 24767, 24895, 24768, 25025, 24898, 24899, 24771,
		 24643, 24514, 24511, 24767, 24765, 8125, 24774, 7102, 8523, 
		23844, 9180, 23588, 8661, 24127, 24382, 24509, 24637, 24766, 
		24894, 25023, 25024, 25153, 24898, 24771, 24643, 24514, 24386,
		 24257, 24256, 8256, 24255, 24382, 24509, 24637, 24766, 24894,
		 24895, 8640, 25025, 24898, 24771, 24643, 24514, 24386, 24385,
		 7868, 6980, 24896, 24895, 24766, 25265, 24766, 24767, 6997, 
		24767, 24766, 25265, 24766, 24895, 24896, 8405, 24510, 24381, 
		23349, 24381, 24510, 8913, 8651, 23844, 9180, 23588, 7377, 
		24770, 24898, 25024, 24767, 24638, 24507, 24637, 24894, 25024,
		 24897, 25027, 24899, 6598, 24767, 24638, 24507, 24637, 24766,
		 24895, 25024, 24897, 24898, 24899, 24770, 24902, 6972, 7232, 
		24898, 25025, 24513, 24383, 24381, 24509, 24637, 24765, 24767,
		 24896, 24897, 24899, 24771, 7101, 24766, 24767, 24896, 24897,
		 24898, 8259, 24637, 24765, 24767, 24896, 24897, 24899, 24771,
		 24643, 24515, 24513, 24511, 24895, 24766, 7098, 24766, 24767,
		 24896, 24897, 24898, 7238, 7883, 24255, 24381, 24507, 24637, 
		24763, 24893, 25023, 24896, 25025, 24899, 24773, 24643, 24517,
		 24387, 24257, 24384, 8256, 24383, 24511, 24510, 24507, 24637,
		 24763, 24766, 24767, 24895, 8512, 24897, 24769, 24770, 24773,
		 24643, 24517, 24514, 24513, 24385, 7861, 7495, 24897, 25027, 
		24619, 8148, 24620, 7744, 25792, 7370, 7239, 24767, 24511, 
		24513, 24641, 24770, 24769, 25025, 25152, 25023, 24767, 24766,
		 24638, 24510, 24254, 23998, 24383, 24382, 24509, 24637, 9429,
		 24895, 24767, 24766, 24638, 24510, 24254, 24126, 7609, 24769,
		 24896, 25278, 25024, 24897, 24769, 6848, 25277, 25152, 24769,
		 24770, 24642, 7109, 7239, 24767, 24511, 24513, 24641, 24770, 
		24769, 25025, 25152, 25023, 24766, 24637, 24510, 24255, 24256,
		 8649, 24895, 24766, 24637, 24510, 24383, 8256, 24895, 24894, 
		24766, 24637, 24510, 24511, 24255, 24128, 24257, 24513, 24514,
		 24641, 24769, 24767, 24511, 9670, 24765, 24637, 24510, 24511,
		 24383, 7754, 8265, 24621, 8405, 24619, 8277, 23217, 26688, 
		7098, 25536, 7242, 7371, 24374, 8256, 24898, 25025, 25024, 
		25023, 24894, 24765, 24638, 24509, 24382, 24255, 24256, 24257,
		 24513, 24514, 24641, 24769, 24767, 24511, 9162, 24895, 24894,
		 24765, 24638, 24509, 24382, 24383, 7509, 25920, 6975, 25280, 
		25281, 7349, 8648, 24511, 24767, 24769, 24641, 24514, 24385, 
		24256, 24255, 24382, 24510, 24508, 24634, 24765, 24894, 25023,
		 24896, 25025, 24898, 24771, 24641, 24515, 24386, 24257, 
		24512, 24255, 24382, 24509, 9038, 24383, 24382, 24510, 24508, 
		24634, 24765, 24894, 24895, 8512, 24897, 24898, 24771, 24641, 
		24515, 24386, 24385, 7869, 7115, 24634, 8258, 24770, 24898, 
		24896, 25277, 24896, 24769, 24770, 6590, 24897, 24896, 25278, 
		8771, 24637, 24509, 24123, 24510, 24509, 24635, 9039, 23995, 
		24510, 24509, 24635, 8138, 7755, 24255, 24510, 24637, 24766, 
		25023, 25152, 25025, 24770, 24643, 24514, 24257, 24128, 8256, 
		24383, 24510, 24637, 24766, 24895, 8768, 24897, 24770, 24643, 
		24514, 24385, 7735, 24255, 24511, 24510, 24636, 24766, 24767, 
		25023, 25152, 25025, 24769, 24770, 24644, 24514, 24513, 24257,
		 7744, 24383, 24511, 24510, 24636, 24766, 24767, 24895, 8768, 
		24897, 24769, 24770, 24644, 24514, 24513, 24385, 7742, 8772, 
		24509, 24382, 24255, 24512, 24257, 24386, 24515, 24641, 24771,
		 24898, 25025, 24896, 25023, 24894, 24765, 24634, 24508, 
		24510, 24382, 24255, 24256, 24385, 24514, 24641, 24769, 24767,
		 24511, 8773, 24385, 24386, 24515, 24641, 24771, 24898, 24897,
		 8512, 24895, 24894, 24765, 24634, 24508, 24510, 24382, 24383,
		 8010, 7352, 24511, 24767, 24769, 24513, 7368, 7350, 24513, 
		24769, 24767, 24638, 24510, 24511, 7502, 7364, 24511, 24767, 
		24769, 24513, 8244, 24511, 24767, 24769, 24513, 7368, 7364, 
		24511, 24767, 24769, 24513, 8242, 24513, 24769, 24767, 24638, 
		24510, 24511, 7502, 7371, 24510, 24756, 24780, 24514, 8254, 
		24634, 8245, 24511, 24767, 24769, 24513, 7368, 7239, 24767, 
		24511, 24513, 24641, 24770, 24769, 24897, 25024, 25023, 24767,
		 24766, 24638, 24510, 24511, 24126, 24637, 8398, 24895, 24767,
		 24766, 24638, 24510, 24382, 7991, 24511, 24767, 24769, 24513,
		 7880, 7243, 24505, 8519, 24377, 7356, 7243, 24505, 8519, 
		24377, 9415, 24505, 8519, 24377, 7356, 7499, 24383, 24510, 
		24638, 24766, 24895, 24896, 24897, 24770, 24642, 24514, 24385,
		 24384, 7733, 9295, 22304, 9297, 8143, 24382, 24381, 24380, 
		24507, 24636, 24763, 24892, 24893, 24894, 8030, 24380, 24509, 
		24507, 24636, 24763, 24765, 24892, 7375, 7119, 24894, 24893, 
		24892, 24763, 24636, 24507, 24380, 24381, 24382, 8542, 24892, 
		24765, 24763, 24636, 24507, 24509, 24380, 7887, 7247, 24608, 
		8416, 24608, 8160, 25536, 7328, 25536, 7121, 7887, 24608, 
		8416, 24608, 7392, 25536, 7328, 25536, 7249, 7887, 24253, 
		24509, 24638, 24765, 25021, 8012, 24509, 24636, 24765, 8510, 
		24254, 25022, 8256, 24253, 24509, 24638, 24765, 25021, 8012, 
		24509, 24636, 24765, 7631, 7375, 25021, 24765, 24638, 24509, 
		24253, 8524, 24765, 24636, 24509, 7998, 25022, 24254, 8256, 
		25021, 24765, 24638, 24509, 24253, 8524, 24765, 24636, 24509, 
		7631, 8015, 23728, 25520, 7249, 7247, 25520, 23728, 8017, 
		7247, 24608, 7249, 7231, 26944, 7233, 8392, 24622, 7113, 
		26944, 7233, 8263, 24623, 7241, 26688, 6199, 26688, 7242, 
		7238, 26418, 8270, 22834, 9032, 8392, 24511, 24767, 24769, 
		24513, 7095, 26944, 7097, 24511, 24767, 24769, 24513, 8392, 
		7234, 26944, 5946, 26944, 7236, 9288, 22830, 8012, 26944, 
		5946, 26944, 7236, 9288, 22583, 26679, 7242, 7240, 26679, 
		22583, 9290, 9291, 22585, 26681, 6206, 26688, 6203, 26688, 
		7242, 7243, 26681, 22585, 8254, 26688, 6203, 26688, 7242, 
		9402, 24384, 24385, 24386, 24260, 24513, 24385, 24384, 24383, 
		24510, 24638, 24766, 24895, 24896, 24897, 24769, 25028, 24898,
		 24897, 24896, 7228, 9287, 23744, 24127, 24383, 24382, 24509, 
		24638, 24765, 24894, 24895, 25151, 25536, 7241, 7239, 24633, 
		24764, 24766, 24894, 25023, 24896, 25025, 24898, 24770, 24772,
		 24647, 7225, 7239, 25536, 25151, 24895, 24894, 24765, 24638, 
		24509, 24382, 24383, 24127, 23744, 9289, 7223, 24647, 24772, 
		24770, 24898, 25025, 24896, 25023, 24894, 24766, 24764, 24633,
		 7241, 9287, 23744, 24127, 24383, 24382, 24509, 24638, 24765, 
		24894, 24895, 25151, 25536, 6216, 26176, 7745, 9153, 25022, 
		24254, 7879, 25275, 23995, 6725, 26816, 7361, 7493, 24899, 
		24893, 7357, 25285, 25275, 7621, 24623, 7754, 7617, 24254, 
		25022, 8647, 23995, 25275, 7621, 26816, 7233, 7481, 24893, 
		24899, 7363, 25275, 25285, 7628, 24623, 7753, 8639, 24515, 
		24513, 24385, 24384, 24255, 24381, 24509, 24637, 24766, 24767,
		 24895, 24896, 25025, 24898, 24771, 24773, 24645, 24515, 
		24513, 24385, 24256, 24383, 24511, 24639, 24768, 24641, 8507, 
		24383, 24381, 24509, 24636, 24766, 8767, 24897, 24898, 24771, 
		24773, 24645, 24515, 24386, 7605, 6987, 25643, 7381, 25517, 
		9299, 23595, 7253, 26688, 6335, 26432, 7094, 9422, 24511, 
		24767, 24769, 24641, 24513, 24384, 24383, 24382, 24510, 24509,
		 24508, 24372, 24508, 24510, 9308, 24510, 24508, 24372, 24508,
		 24509, 24510, 24382, 24383, 24384, 24513, 24641, 24769, 
		24767, 24511, 9424, 9422, 24511, 24767, 24769, 24641, 24513, 
		24384, 24383, 24382, 24510, 24509, 24508, 24372, 24508, 24510,
		 9308, 24510, 24508, 24372, 24508, 24509, 24510, 24382, 24383,
		 24384, 24513, 24641, 24769, 24767, 24511, 9302, 24255, 24382,
		 24509, 24638, 24765, 24894, 25023, 24896, 25025, 24898, 
		24771, 24642, 24515, 24386, 24257, 24384, 8378, 9534, 24510, 
		24383, 24384, 24385, 24513, 24260, 24513, 24385, 24384, 24383,
		 24510, 24638, 24766, 24895, 24896, 24897, 24769, 25028, 
		24769, 24897, 24896, 24895, 24766, 24638, 7106, 9419, 22315, 
		8917, 24894, 24638, 24510, 24383, 24384, 24386, 24642, 24770, 
		24897, 24896, 24895, 25023, 25024, 25025, 24897, 7730, 24383, 
		24510, 24638, 24894, 24896, 24897, 24770, 24642, 24386, 24384,
		 7619, 9411, 24511, 24767, 24769, 24641, 24513, 24512, 24511, 
		24510, 24379, 24381, 24382, 24383, 24256, 24257, 24514, 24643,
		 24770, 25412, 24898, 24770, 24642, 24514, 24385, 24383, 
		24510, 24638, 24765, 24893, 25273, 24894, 25023, 24768, 24769,
		 24641, 6334, 24385, 24514, 24643, 24770, 24898, 8262, 24766, 
		25653, 24894, 24895, 7370, 9027, 24514, 24385, 24256, 24383, 
		24511, 24509, 24637, 24766, 24895, 25024, 24897, 24770, 7624, 
		24382, 24509, 24637, 24766, 24767, 9163, 24504, 24638, 24895, 
		24896, 24898, 24771, 24642, 24515, 24514, 24386, 24385, 24257,
		 24256, 24255, 24383, 24382, 24510, 24509, 24637, 24765, 
		24766, 24894, 24895, 25023, 25024, 25025, 24897, 24769, 8013, 
		24504, 24638, 24767, 7749, 7759, 24611, 8797, 24611, 8790, 
		24511, 24767, 24769, 24641, 24386, 24257, 24128, 24255, 24382,
		 24638, 24766, 24767, 24895, 25406, 24895, 24894, 6473, 24894,
		 24895, 25406, 24895, 24767, 24766, 24636, 24382, 24255, 
		24128, 24257, 24386, 24641, 24769, 24767, 24511, 8775, 8139, 
		23716, 9948, 23716, 7505, 26432, 6330, 26432, 7238, 8136, 
		24511, 24767, 24769, 24641, 24514, 24385, 24384, 24383, 24510,
		 24638, 24766, 24894, 25277, 7365, 25277, 24894, 24766, 24638,
		 24510, 24382, 7756, 24382, 24510, 24638, 24766, 24894, 25277,
		 7365, 25277, 24894, 24766, 24638, 24510, 24383, 24384, 24385,
		 24514, 24641, 24769, 24767, 24511, 8142, 7755, 24510, 24766, 
		24770, 24514, 8256, 24612, 8273, 24509, 24754, 24782, 24515, 
		7492, 24895, 24897, 24385, 24383, 8256, 26176, 7744, 24895, 
		24897, 24385, 24383, 7484, 7755, 24510, 24766, 24770, 24514, 
		8256, 24626, 8260, 24510, 24892, 24510, 24514, 24900, 24514, 
		8252, 24626, 8260, 24510, 24766, 24770, 24514, 7505, 24895, 
		24897, 24385, 24383, 8256, 26176, 7744, 24895, 24897, 24385, 
		24383, 7218, 24895, 24897, 24385, 24383, 8256, 26176, 7744, 
		24895, 24897, 24385, 24383, 7498, 8651, 24619, 6613, 26304, 
		7222, 25664, 6581, 26304, 7242, 7622, 25394, 8270, 23858, 
		7754, 26426, 8262, 22842, 8900, 7232, 6720, 6208, 5696, 5184, 
		4672, 4160, 3648, 3136, 5196, 5172, 5192, 5176, 5188, 5180, 
		7232, 26688, 7240, 24624, 8264, 7224, 26704, 6208, 26672, 
		7240, 8248, 25672, 23624, 23608, 25656, 8264, 7224, 26688, 
		24656, 22592, 24624, 9288, 7232, 25152, 25156, 8260, 24636, 
		25148, 8768, 24128, 24124, 8252, 24644, 24132, 8768, 7224, 
		25156, 24648, 7748, 25148, 25664, 8772, 24124, 24632, 8764, 
		24132, 23616, 8772, 7232, 26688, 7240, 24624, 8768, 23616, 
		7748, 24648, 8772, 25664, 8764, 24632, 7236, 7224, 26704, 
		6208, 26672, 8260, 24124, 7232, 24132, 8264, 25156, 9280, 
		25148, 7228, 7744, 24128, 8264, 25148, 8768, 24644, 9280, 
		24124, 8252, 25152, 8248, 24132, 7744, 24636, 7232, 25156, 
		8772, 7228, 24648, 25156, 25664, 25148, 24632, 24124, 23616, 
		24132, 9284, 8644, 24511, 24767, 24769, 24641, 24386, 24385, 
		24256, 24255, 24382, 24509, 24638, 24765, 24894, 25023, 24896,
		 25025, 24898, 7371, 24383, 24382, 24509, 24638, 24765, 24894,
		 24895, 8401, 24620, 7882, 7234, 26944, 24636, 7234, 6964, 
		26944, 6988, 7235, 24770, 24897, 24896, 25023, 24895, 25023, 
		24896, 24897, 24770, 5945, 26944, 5948, 26944, 7237, 7237, 
		24767, 24511, 24513, 24641, 24770, 24769, 24897, 25024, 25023,
		 24767, 24766, 24638, 24510, 24511, 24126, 8395, 24895, 24767,
		 24766, 24638, 24510, 24382, 8013, 24510, 24753, 24783, 24514,
		 8254, 24632, 8246, 24511, 24767, 24769, 24513, 7880, 7745, 
		24254, 25022, 8647, 23995, 25275, 7621, 26944, 7621, 25275, 
		23995, 8647, 25022, 24254, 7747, 9287, 23744, 24127, 24383, 
		24382, 24509, 24638, 24765, 24894, 24895, 25151, 25536, 6216, 
		26176, 8138, 23980, 8523, 6987, 25515, 25557, 6714, 25920, 
		7227, 9287, 23232, 24383, 24382, 24510, 24638, 24766, 24894, 
		24895, 26048, 6204, 26688, 7241, 7239, 26048, 24895, 24894, 
		24766, 24638, 24510, 24382, 24383, 23232, 8252, 26688, 7241, 
		7879, 24255, 24382, 24509, 24638, 24765, 24894, 25023, 24896, 
		25025, 24898, 24771, 24642, 24515, 24386, 24257, 24384, 8382, 
		24630, 7621, 25920, 7360, 7879, 24255, 24382, 24509, 24638, 
		24765, 24894, 25023, 24896, 25025, 24898, 24771, 24642, 24515,
		 24386, 24257, 24384, 8893, 23608, 8264, 25656, 7492, 7499, 
		24619, 8405, 24619, 8267, 24898, 25025, 24896, 25023, 24766, 
		24629, 7758, 24895, 24766, 24629, 6485, 25152, 7723, 25536, 
		8768, 25536, 7636, 22840, 9406, 7115, 24896, 24895, 24767, 
		24766, 25394, 24766, 24767, 6741, 24894, 24766, 25394, 24766, 
		24895, 24768, 7246, 23602, 9294, 23730, 9556, 23351, 8895, 
		7108, 25152, 25396, 7372, 25522, 25819, 6703, 6704, 27456, 
		6736, 6737, 27456, 6703, 6991, 26912, 6993 };


    /* System generated locals */
    integer i__1, i__2;

    /* Local variables */
    static integer ioff, istr;
    static real xcur, ycur, scale;
    static integer is;
#define nstrok ((integer *)&equiv_38)
    static integer ich, inc;
#define ns01 ((integer *)&equiv_38)
#define ns02 ((integer *)&equiv_38 + 100)
#define ns03 ((integer *)&equiv_38 + 200)
#define ns04 ((integer *)&equiv_38 + 300)
#define ns05 ((integer *)&equiv_38 + 400)
#define ns06 ((integer *)&equiv_38 + 500)
#define ns07 ((integer *)&equiv_38 + 600)
#define ns08 ((integer *)&equiv_38 + 700)
#define ns09 ((integer *)&equiv_38 + 800)
#define ns10 ((integer *)&equiv_38 + 900)
#define ns11 ((integer *)&equiv_38 + 1000)
#define ns12 ((integer *)&equiv_38 + 1100)
#define ns13 ((integer *)&equiv_38 + 1200)
#define ns14 ((integer *)&equiv_38 + 1300)
#define ns15 ((integer *)&equiv_38 + 1400)
#define ns16 ((integer *)&equiv_38 + 1500)
    static integer kst;
#define ns17 ((integer *)&equiv_38 + 1600)
#define ns18 ((integer *)&equiv_38 + 1700)
#define ns19 ((integer *)&equiv_38 + 1800)
#define ns20 ((integer *)&equiv_38 + 1900)
#define ns21 ((integer *)&equiv_38 + 2000)
#define ns22 ((integer *)&equiv_38 + 2100)
#define ns23 ((integer *)&equiv_38 + 2200)
#define ns24 ((integer *)&equiv_38 + 2300)
#define ns25 ((integer *)&equiv_38 + 2400)
#define ns26 ((integer *)&equiv_38 + 2500)
#define ns27 ((integer *)&equiv_38 + 2600)
#define ns28 ((integer *)&equiv_38 + 2700)
#define ns29 ((integer *)&equiv_38 + 2800)
#define ns30 ((integer *)&equiv_38 + 2900)
#define ns31 ((integer *)&equiv_38 + 3000)
#define ns32 ((integer *)&equiv_38 + 3100)
#define ns33 ((integer *)&equiv_38 + 3200)
#define ns34 ((integer *)&equiv_38 + 3300)
#define ns35 ((integer *)&equiv_38 + 3400)
#define ns36 ((integer *)&equiv_38 + 3500)
#define ns37 ((integer *)&equiv_38 + 3600)
#define ns38 ((integer *)&equiv_38 + 3700)
#define ns39 ((integer *)&equiv_38 + 3800)


/*  Convert a string of generalized characters into a set of strokes, */
/*  normalized to character size = 1.  The stroke tables are taken */
/*  from the C source code to the program "axis". */


/* ..................................................................... 
*/
/*  A list of the offsets of the start of the stroke data for each */
/*  character.   0 means a control character */



    /* Parameter adjustments */
    --lstr;
    --ystr;
    --xstr;

    /* Function Body */
/* ..................................................................... 
*/
/*  List of the number of strokes in each character. */
/*  For control characters, the entry is the switch index. */

/* ..................................................................... 
*/
/*  List of the strokes, stored in the format */
/*   16384*blanking + 128*(DX+64) + (DY+64) */

/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 */
    *nstr = 0;
    xcur = 0.f;
    ycur = 0.f;
    scale = .051f;

    i__1 = *nch;
    for (inc = 1; inc <= i__1; ++inc) {

/*  Load the offset into the stroke table and the number of strokes */

	ich = *(unsigned char *)&ch[inc - 1];
	if (ich <= 0) {
	    ich += 256;
	}

	ioff = noff[ich];
	istr = numstr[ich];
/* ...................................................................
.. */
/*  If the offset is 0, this is a control character, so treat it */
/*  specially -- ISTR is the control code in this case: */
/*     1 = start superscript */
/*     2 = end superscript */
/*     3 = start subscript */
/*     4 = end subscript */
/*     5,6,7,8,9,10,11 = change color */

	if (ioff <= 0) {
	    if (istr == 1) {
		xcur -= scale * 2.666667f;
		ycur += scale * 12.f;
		scale *= .6666667f;
	    } else if (istr == 2) {
		scale *= 1.5f;
		xcur += scale * 4.f;
		ycur -= scale * 12.f;
	    } else if (istr == 3) {
		xcur -= scale * 2.666667f;
		ycur -= scale * 12.f;
		scale *= .6666667f;
	    } else if (istr == 4) {
		scale *= 1.5f;
		xcur += scale * 4.f;
		ycur += scale * 12.f;
	    } else if (istr >= 5 && istr <= 11) {
		++(*nstr);
		lstr[*nstr] = istr + 96;
		xstr[*nstr] = xcur;
		ystr[*nstr] = ycur;
	    }
/* ...............................................................
...... */
/*  Check if this is a newline character */

	} else if (ich == 10) {
	    xcur = 0.f;
	    ycur += -1.1f;
/* ...............................................................
...... */
/*  Otherwise, this is a real character with real strokes */

	} else {
	    i__2 = istr - 1;
	    for (is = 0; is <= i__2; ++is) {
		++(*nstr);
		kst = nstrok[ioff + is - 1];

		lstr[*nstr] = 0;
		if (kst >= 16384) {
		    lstr[*nstr] = 1;
		    kst += -16384;
		}

		xcur += scale * (real) (kst / 128 - 64);
		ycur += scale * (real) (kst % 128 - 64);
		if (is == istr - 1) {
		    xcur += scale * 24.f;
		}

		xstr[*nstr] = xcur;
		ystr[*nstr] = ycur;
/* L500: */
	    }
	}

/* L900: */
    }
    return 0;
} /* zzstro_ */

#undef ns39
#undef ns38
#undef ns37
#undef ns36
#undef ns35
#undef ns34
#undef ns33
#undef ns32
#undef ns31
#undef ns30
#undef ns29
#undef ns28
#undef ns27
#undef ns26
#undef ns25
#undef ns24
#undef ns23
#undef ns22
#undef ns21
#undef ns20
#undef ns19
#undef ns18
#undef ns17
#undef ns16
#undef ns15
#undef ns14
#undef ns13
#undef ns12
#undef ns11
#undef ns10
#undef ns09
#undef ns08
#undef ns07
#undef ns06
#undef ns05
#undef ns04
#undef ns03
#undef ns02
#undef ns01
#undef nstrok





/* Subroutine */ int zzconv_(char *chin, integer *nchin, char *chout, integer 
	*nchout, ftnlen chin_len, ftnlen chout_len)
{
    /* Initialized data */

    static char chesc[15] = "\\esc           ";
    static char chnesc[15] = "\\noesc         ";
    static char chtex[15*113] = "\\Plus          " "\\Cross         " "\\Dia"
	    "mond       " "\\Box           " "\\FDiamond      " "\\FBox      "
	    "    " "\\FPlus         " "\\FCross        " "\\Burst         " 
	    "\\Octagon       " "\\alpha         " "\\beta          " "\\gamm"
	    "a         " "\\delta         " "\\epsilon       " "\\zeta       "
	    "   " "\\eta           " "\\theta         " "\\iota          " 
	    "\\kappa         " "\\lambda        " "\\mu            " "\\nu  "
	    "          " "\\xi            " "\\omicron       " "\\pi         "
	    "   " "\\rho           " "\\sigma         " "\\tau           " 
	    "\\upsilon       " "\\phi           " "\\chi           " "\\psi "
	    "          " "\\omega         " "\\Alpha         " "\\Beta       "
	    "   " "\\Gamma         " "\\Delta         " "\\Epsilon       " 
	    "\\Zeta          " "\\Eta           " "\\Theta         " "\\Iota"
	    "          " "\\Kappa         " "\\Lambda        " "\\Mu         "
	    "   " "\\Nu            " "\\Xi            " "\\Omicron       " 
	    "\\Pi            " "\\Rho           " "\\Sigma         " "\\Tau "
	    "          " "\\Upsilon       " "\\Phi           " "\\Chi        "
	    "   " "\\Psi           " "\\Omega         " "\\propto        " 
	    "\\int           " "\\times         " "\\div           " "\\appr"
	    "ox        " "\\partial       " "\\cap           " "\\?          "
	    "   " "\\langle        " "\\rangle        " "\\ddagger       " 
	    "\\pm            " "\\leq           " "\\S             " "\\hbar"
	    "          " "\\lambar        " "\\cup           " "\\degree     "
	    "   " "\\nabla         " "\\downarrow     " "\\leftarrow     " 
	    "\\rightarrow    " "\\leftrightarrow" "\\oint          " "\\in  "
	    "          " "\\notin         " "\\surd          " "\\_          "
	    "   " "\\bar           " "\\exists        " "\\geq           " 
	    "\\forall        " "\\subset        " "\\oplus         " "\\otim"
	    "es        " "\\dagger        " "\\neq           " "\\supset     "
	    "   " "\\infty         " "\\uparrow       " "\\#             " 
	    "\\$             " "\\%             " "\\&             " "\\{   "
	    "          " "\\}             " "\\\\             " "\\cents     "
	    "    " "\\black         " "\\red           " "\\blue          " 
	    "\\green         " "\\yellow        " "\\magenta       " "\\cyan"
	    "          ";
    static integer ichext[113] = { 176,177,178,179,180,181,182,183,184,185,
	    225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,
	    241,242,243,244,245,246,247,248,193,194,195,196,197,198,199,200,
	    201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,
	    128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
	    160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
	    186,187,188,189,190,191,255,96,35,36,37,38,123,125,92,94,148,149,
	    150,151,152,153,154 };

    /* System generated locals */
    integer i__1;

    /* Builtin functions */
    integer s_cmp(char *, char *, ftnlen, ftnlen);
    /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen);

    /* Local variables */
    static logical lesc;
    static integer itop;
    static logical lout;
    static integer i__, nused, nsupb;
    static char chcont[15];
    static integer ntsupb[10], inc;


/*  Convert input string (using TeX-like escapes) to extended character */
/*  set, for plotting with ZZSTRO. */

/* .......................................................................
 */

/*  super/subscript control characters */

/* .......................................................................
 */
/*  INC    = input character being scanned */
/*  NUSED  = no. of input characters consumed by this operation */
/*  NSUPB  = super/subscript level */
/*  NTSUPB = super/subscript type at each level: */
/*                1 = single character superscript -- like a^b */
/*                2 = multi-character superscript -- like a^{b+c} */
/*            -1,-2 = similar for subscripts */
/*  LOUT   = .TRUE. if we just output something to CHOUT, */
/*           otherwise .FALSE. */


/*  Table of Tex-like escapes */


/*  Corresponding extended character set bytes */

/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 */
/*  Test if a character is alphabetic */

/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 */
    *nchout = 0;
    nsupb = 0;
    inc = 1;
/* -----------------------------------------------------------------------
 */
/*  Process input character no. INC */

    lesc = TRUE_;
L100:

/* CC      WRITE(*,666) 'ZZCONV at: ' // CHIN(INC:INC) */
/* CC666   FORMAT(A) */

    lout = FALSE_;

/*  Superscript:  ^{ starts a multi-character superscript, otherwise */
/*                ^ starts a single-character superscript */

    if (lesc && *(unsigned char *)&chin[inc - 1] == '^' && inc < *nchin) {
	++nsupb;
	i__1 = inc;
	if (s_cmp(chin + i__1, "{", inc + 1 - i__1, 1L) == 0) {
	    ntsupb[nsupb - 1] = 2;
	    nused = 2;
	} else {
	    ntsupb[nsupb - 1] = 1;
	    nused = 1;
	}
	++(*nchout);
	*(unsigned char *)&chout[*nchout - 1] = 144;
/* CC            WRITE(*,666) ' start superscript' */
/* ...................................................................
.... */
/*  Subscript:  similar to above code */

    } else if (lesc && *(unsigned char *)&chin[inc - 1] == '_' && inc < *
	    nchin) {
	++nsupb;
	i__1 = inc;
	if (s_cmp(chin + i__1, "{", inc + 1 - i__1, 1L) == 0) {
	    ntsupb[nsupb - 1] = -2;
	    nused = 2;
	} else {
	    ntsupb[nsupb - 1] = -1;
	    nused = 1;
	}
	++(*nchout);
	*(unsigned char *)&chout[*nchout - 1] = 146;
/* CC            WRITE(*,666) ' start subscript' */
/* ...................................................................
.... */
/*  If in super/subscript mode and we have a '}', then this terminates
 */
/*  the current level of super/subscripts */

    } else if (lesc && *(unsigned char *)&chin[inc - 1] == '}' && nsupb > 0) {
	nused = 1;
	++(*nchout);
	if (ntsupb[nsupb - 1] > 0) {
	    *(unsigned char *)&chout[*nchout - 1] = 145;
	} else {
	    *(unsigned char *)&chout[*nchout - 1] = 147;
	}
	--nsupb;
/* CC            WRITE(*,666) ' end compound super/subscript' */
/* ...................................................................
.... */
/*  Anything else that doesn't start with a \ is passed straight throu
gh */

    } else if (! lesc || *(unsigned char *)&chin[inc - 1] != '\\') {
	lout = TRUE_;
	nused = 1;
	++(*nchout);
	*(unsigned char *)&chout[*nchout - 1] = *(unsigned char *)&chin[inc - 
		1];
/* CC            WRITE(*,666) ' passthru' */
/* ...................................................................
.... */
/*  If it started with a \ but we are at the last character, quit */

    } else if (inc == *nchin) {
/* CC            WRITE(*,666) ' end of input' */
	goto L8000;
/* ...................................................................
.... */
/*  TeX-like escapes -- there are 2 possibilities: */
/*   1)  \asciistring */
/*   2)  \specialcharacter */

    } else {
	itop = inc + 1;

/*  If the next character is alphabetic, then scan until end-of-input 
*/
/*  or a non-alphabetic character is found.  This will be the end */
/*  of the escape sequence. */

	i__1 = *(unsigned char *)&chin[itop - 1];
	if (i__1 >= 'A' && i__1 <= 'Z' || i__1 >= 'a' && i__1 <= 'z') {
L200:
	    ++itop;
	    if (itop > *nchin) {
		goto L300;
	    }
	    i__1 = *(unsigned char *)&chin[itop - 1];
	    if (i__1 >= 'A' && i__1 <= 'Z' || i__1 >= 'a' && i__1 <= 'z') {
		goto L200;
	    }
L300:
	    --itop;

/*  If the character following the \asciistring is a blank, skip i
t also */

	    if (itop < *nchin) {
		i__1 = itop;
		if (s_cmp(chin + i__1, " ", itop + 1 - i__1, 1L) == 0) {
		    ++itop;
		}
	    }
	}

/*  At this point, characters INC thru ITOP are the escape sequence. 
*/
/*  Check for a match with the table. */

	nused = itop - inc + 1;
	s_copy(chcont, chin + (inc - 1), 15L, itop - (inc - 1));

	for (i__ = 1; i__ <= 113; ++i__) {
	    if (s_cmp(chcont, chtex + (i__ - 1) * 15, 15L, 15L) == 0) {
		goto L410;
	    }
/* L400: */
	}
	i__ = 0;
L410:

/*  If a match, enter the control character into the output; */
/*  if no match, just ignore it */

	if (i__ > 0) {
	    lout = TRUE_;
	    ++(*nchout);
	    *(unsigned char *)&chout[*nchout - 1] = (char) ichext[i__ - 1];
/* CC               WRITE(*,666) ' TeX escape: ' // CHCONT */
/* CC            ELSE */
/* CC               WRITE(*,666) ' unknown TeX escape: ' // CHCONT
 */
	} else if (s_cmp(chcont, chnesc, 15L, 15L) == 0) {
	    lesc = FALSE_;
	} else if (s_cmp(chcont, chesc, 15L, 15L) == 0) {
	    lesc = TRUE_;
	}
    }
/* .......................................................................
 */
/*  If we are in single-character super/subscript mode, we must drop */
/*  out of it after outputting something */

    if (lout && nsupb > 0) {
	if (ntsupb[nsupb - 1] == 1) {
	    --nsupb;
	    ++(*nchout);
	    *(unsigned char *)&chout[*nchout - 1] = 145;
/* CC           WRITE(*,666) ' end single-character superscript' 
*/
	} else if (ntsupb[nsupb - 1] == -1) {
	    --nsupb;
	    ++(*nchout);
	    *(unsigned char *)&chout[*nchout - 1] = 147;
/* CC           WRITE(*,666) ' end single-character subscript' */
	}
    }

/*  "Use up" the appropriate number of characters, and go on to */
/*  the next bunch */

    inc += nused;
    if (inc <= *nchin) {
	goto L100;
    }
/* -----------------------------------------------------------------------
 */
L8000:
    return 0;
} /* zzconv_ */



syntax highlighted by Code2HTML, v. 0.9.1