1 /* pwritf.f -- translated by f2c (version 19961017).
2    You must link the resulting object file with the libraries:
3 	-lf2c -lm   (in that order)
4 */
5 
6 #include "f2c.h"
7 
8 /* Common Block Declarations */
9 
10 struct {
11     real xpgmin, ypgmin, xpgmax, ypgmax, xclbot, yclbot, xcltop, ycltop, xbot,
12 	     ybot, xtop, ytop, xmin, ymin, xmax, ymax;
13     integer ixcoor, iycoor;
14     real alphxx, betaxx, alphyy, betayy, tmajx, tminx, tmajy, tminy;
15     integer majrx, minrx, majry, minry, isizx, isizy;
16     real xphold, yphold;
17 } zzzplt_;
18 
19 #define zzzplt_1 zzzplt_
20 
21 struct {
22     real xphmax, yphmax;
23     integer ixpmax, iypmax;
24     real xpscal, ypscal;
25     integer iflip, nplotr;
26     char cfile[64];
27 } zzpltr_;
28 
29 #define zzpltr_1 zzpltr_
30 
31 
32 
33 
pwritf_(real * x,real * y,char * ch,integer * nch,integer * isiz,integer * ior,integer * icent,ftnlen ch_len)34 /* Subroutine */ int pwritf_(real *x, real *y, char *ch, integer *nch,
35 	integer *isiz, integer *ior, integer *icent, ftnlen ch_len)
36 {
37     /* System generated locals */
38     integer i__1, i__2;
39     real r__1, r__2, r__3;
40 
41     /* Builtin functions */
42     double cos(doublereal), sin(doublereal);
43 
44     /* Local variables */
45     static real xold, yold, size, xorg, yorg;
46     static integer lstr[69999], nstr;
47     static real xstr[69999], ystr[69999];
48     static integer i__;
49     static char chloc[6666];
50     static integer nchar;
51     extern /* Subroutine */ int color_(integer *);
52     static integer isize;
53     static real bb, gg, ct, rr;
54     static integer nchloc;
55     static real st, xr, yr, xx, yy;
56     extern integer lastnb_(char *, ftnlen);
57     extern /* Subroutine */ int fcolor_(real *, real *, real *), zzline_(real
58 	    *, real *, real *, real *), zzconv_(char *, integer *, char *,
59 	    integer *, ftnlen, ftnlen), zzphys_(real *, real *), zzstro_(char
60 	    *, integer *, integer *, real *, real *, integer *, ftnlen);
61     static real rgb, orr;
62 
63 
64 
65 
66 /* .......................................................................
67  */
68 
69 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
70  */
71 /*  Calculate character width in terms of 1/1000 of the x-width. */
72 
73 
74 /*  Internal Data for PLOTPAK */
75 
76     isize = *isiz;
77     if (isize <= 0) {
78 	isize = 8;
79     } else if (isize == 1) {
80 	isize = 12;
81     } else if (isize == 2) {
82 	isize = 16;
83     } else if (isize == 3) {
84 	isize = 24;
85     }
86 
87     size = isize * .001f * (zzzplt_1.xpgmax - zzzplt_1.xpgmin);
88 
89 /*  Rotation/scaling factors for digitization */
90 
91     orr = *ior * .017453292f;
92     ct = size * cos(orr);
93     st = size * sin(orr);
94 
95 /*  Base location, in internal coordinates */
96 
97     xx = *x;
98     yy = *y;
99     if (*nch >= 0) {
100 	zzphys_(&xx, &yy);
101     }
102 
103 /*  Get no. of characters in string.  Special option 999 must be checked.
104 */
105 
106     nchar = abs(*nch);
107     if (nchar == 999) {
108 	i__1 = nchar;
109 	for (i__ = 1; i__ <= i__1; ++i__) {
110 	    if (*(unsigned char *)&ch[i__ - 1] == '\0') {
111 		goto L20;
112 	    }
113 /* L10: */
114 	}
115 L20:
116 	nchar = i__ - 1;
117     } else if (nchar == 0) {
118 	nchar = lastnb_(ch, ch_len);
119     }
120 
121 /*  Digitize string into line segments */
122 
123     zzconv_(ch, &nchar, chloc, &nchloc, ch_len, 6666L);
124     zzstro_(chloc, &nchloc, &nstr, xstr, ystr, lstr, 6666L);
125     if (nstr <= 0) {
126 	return 0;
127     }
128 
129 /*  Find min, max of x and y [edited 11 May 2018] */
130 
131     zzzplt_1.xbot = 6.66e33f;
132     zzzplt_1.ybot = zzzplt_1.xbot;
133     zzzplt_1.xtop = -zzzplt_1.xbot;
134     zzzplt_1.ytop = -zzzplt_1.ybot;
135     i__1 = nstr;
136     for (i__ = 2; i__ <= i__1; ++i__) {
137 	if (lstr[i__ - 1] == 1) {
138 /* Computing MIN */
139 	    r__1 = zzzplt_1.xbot, r__2 = xstr[i__ - 1], r__1 = min(r__1,r__2),
140 		     r__2 = xstr[i__ - 2];
141 	    zzzplt_1.xbot = dmin(r__1,r__2);
142 /* Computing MAX */
143 	    r__1 = zzzplt_1.xtop, r__2 = xstr[i__ - 1], r__1 = max(r__1,r__2),
144 		     r__2 = xstr[i__ - 2];
145 	    zzzplt_1.xtop = dmax(r__1,r__2);
146 /* Computing MIN */
147 	    r__1 = zzzplt_1.ybot, r__2 = ystr[i__ - 1], r__1 = min(r__1,r__2),
148 		     r__2 = ystr[i__ - 2];
149 	    zzzplt_1.ybot = dmin(r__1,r__2);
150 /* Computing MAX */
151 	    r__1 = zzzplt_1.ytop, r__2 = ystr[i__ - 1], r__1 = max(r__1,r__2),
152 		     r__2 = ystr[i__ - 2];
153 	    zzzplt_1.ytop = dmax(r__1,r__2);
154 	}
155 /* L100: */
156     }
157     if (zzzplt_1.xbot > zzzplt_1.xtop || zzzplt_1.ybot > zzzplt_1.ytop) {
158 	return 0;
159     }
160 
161 /*  Now compute origin of string, based on centering option; */
162 /*  the origin of the string goes at (XX,YY) */
163 
164     if (*icent == -1) {
165 	xorg = zzzplt_1.xbot;
166 	yorg = (zzzplt_1.ybot + zzzplt_1.ytop) * .5f;
167     } else if (*icent == 0) {
168 	xorg = (zzzplt_1.xbot + zzzplt_1.xtop) * .5f;
169 	yorg = (zzzplt_1.ybot + zzzplt_1.ytop) * .5f;
170     } else if (*icent == 1) {
171 	xorg = zzzplt_1.xtop;
172 	yorg = (zzzplt_1.ybot + zzzplt_1.ytop) * .5f;
173     } else if (*icent == -3) {
174 	xorg = dmax(zzzplt_1.xbot,0.f);
175 	yorg = dmax(zzzplt_1.ybot,0.f);
176     } else {
177 	xorg = zzzplt_1.xbot;
178 	yorg = zzzplt_1.ybot;
179     }
180 
181 /*  Now draw the strokes */
182 
183     i__1 = nstr;
184     for (i__ = 1; i__ <= i__1; ++i__) {
185 	if (lstr[i__ - 1] <= 1) {
186 	    xr = xx + ct * (xstr[i__ - 1] - xorg) - st * (ystr[i__ - 1] -
187 		    yorg);
188 	    yr = yy + st * (xstr[i__ - 1] - xorg) + ct * (ystr[i__ - 1] -
189 		    yorg);
190 	    if (lstr[i__ - 1] == 1) {
191 		zzline_(&xold, &yold, &xr, &yr);
192 	    }
193 	    xold = xr;
194 	    yold = yr;
195 	} else if (lstr[i__ - 1] > 100 && lstr[i__ - 1] <= 107) {
196 	    i__2 = lstr[i__ - 1] - 100;
197 	    color_(&i__2);
198 	} else if (lstr[i__ - 1] == 110) {
199 	    rgb = xstr[i__ - 1];
200 	    rr = (real) ((integer) (rgb / 256.f));
201 	    rgb -= rr * 256.f;
202 	    gg = (real) ((integer) (rgb / 16.f));
203 	    rgb -= gg * 16.f;
204 	    bb = rgb;
205 	    r__1 = rr * .066666f;
206 	    r__2 = gg * .066666f;
207 	    r__3 = bb * .066666f;
208 	    fcolor_(&r__1, &r__2, &r__3);
209 	}
210 /* L200: */
211     }
212 
213     zzzplt_1.xphold = xold;
214     zzzplt_1.yphold = yold;
215     return 0;
216 } /* pwritf_ */
217 
218 
219 
220 
lastnb_(char * cline,ftnlen cline_len)221 integer lastnb_(char *cline, ftnlen cline_len)
222 {
223     /* System generated locals */
224     integer ret_val;
225 
226     /* Builtin functions */
227     integer i_len(char *, ftnlen);
228 
229     /* Local variables */
230     static integer npos;
231 
232 
233 /*  Return the position of the last nonblank character in the input */
234 /*  character string.  CLINE is CHARACTER*(*).  Even if CLINE is all */
235 /*  blanks, LASTNB will be returned as 1 so that operations of the */
236 /*  form CLINE(1:LASTNB) won't be garbage. */
237 
238 
239 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
240  */
241 
242 /*  Start at the end and work backwards until a nonblank is found. */
243 /*  Loop back to 100 to check position # NPOS each time. */
244 
245     npos = i_len(cline, cline_len);
246 L100:
247 /*  quit if at the beginning */
248     if (npos <= 1) {
249 	goto L200;
250     }
251 /*  quit if not a blank or a null */
252     if (*(unsigned char *)&cline[npos - 1] != ' ' && *(unsigned char *)&cline[
253 	    npos - 1] != '\0') {
254 	goto L200;
255     }
256 /*  move back one position and try again */
257     --npos;
258     goto L100;
259 /* .......................................................................
260  */
261 L200:
262     ret_val = npos;
263     return ret_val;
264 } /* lastnb_ */
265 
266 
267 
268 
zzstro_(char * ch,integer * nch,integer * nstr,real * xstr,real * ystr,integer * lstr,ftnlen ch_len)269 /* Subroutine */ int zzstro_(char *ch, integer *nch, integer *nstr, real *
270 	xstr, real *ystr, integer *lstr, ftnlen ch_len)
271 {
272     /* Initialized data */
273 
274     static integer noff[256] = { 3452,3452,3452,3452,3452,3452,3452,3452,3452,
275 	    3452,3452,3452,3452,3452,3452,3452,3452,3452,3452,3452,3452,3452,
276 	    3452,3452,3452,3452,3452,3452,3452,3452,3452,3452,3448,2598,2646,
277 	    3307,3268,3138,3168,2641,2672,2691,3439,2790,2566,2787,2560,2669,
278 	    2205,2243,2252,2294,2338,2348,2383,2429,2456,2514,2574,2585,2832,
279 	    2820,2836,2611,3215,1,14,54,85,112,129,144,180,199,208,226,245,
280 	    256,277,292,334,359,419,458,491,504,524,535,552,567,582,2710,3818,
281 	    2719,3564,3597,2953,595,631,660,687,718,747,766,821,843,857,879,
282 	    898,907,942,964,998,1029,1058,1077,1108,1122,1144,1155,1172,1187,
283 	    1205,2728,2784,2752,3593,3452,2856,3033,2802,2807,3600,2980,2916,
284 	    3615,2776,2780,3384,2795,2840,3316,3759,3783,0,0,0,0,0,0,0,0,0,0,
285 	    0,0,0,0,0,0,2890,2655,3022,2971,2962,2944,3651,3064,2929,3666,
286 	    3805,3812,3815,3430,2848,3683,3463,3468,3473,3479,3485,3498,3511,
287 	    3524,3537,3554,2877,3715,3737,3359,2825,2903,3689,1,14,1218,1229,
288 	    112,582,180,1240,199,226,1290,256,277,1301,292,1326,334,1341,491,
289 	    1357,1386,552,1428,1463,3702,3449,3455,3450,3454,3451,3453,3456,
290 	    1502,1539,1591,1616,1658,1681,1711,1740,1780,1794,1819,1839,1863,
291 	    1883,1924,1954,1971,2000,2032,2045,2074,2112,2133,2164,3457,3458,
292 	    3459,3460,3461,3462,3112 };
293     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,
294 	    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,
295 	    42,44,10,35,46,27,58,46,11,13,4,5,4,30,53,13,40,31,27,17,15,36,19,
296 	    9,18,19,11,21,15,42,25,60,39,33,13,20,11,17,15,15,13,9,3,9,29,3,9,
297 	    36,29,27,31,29,19,55,22,14,22,19,9,35,22,34,31,29,19,31,14,22,11,
298 	    17,15,18,13,24,3,24,4,1,21,31,5,13,15,42,13,36,4,4,46,7,8,43,24,
299 	    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,
300 	    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,
301 	    40,11,11,17,13,19,50,9,19,11,21,15,25,42,15,25,16,13,29,42,15,35,
302 	    39,13,1,1,1,1,1,1,1,37,52,25,42,23,30,29,40,14,25,20,24,20,41,30,
303 	    17,29,32,13,29,38,21,31,41,1,1,1,1,1,1,26 };
304     static struct {
305 	integer e_1[3820];
306 	} equiv_38 = { 8011, 23723, 9173, 25515, 7378, 25390, 6854, 25792,
307 		6586, 25408, 9024, 25408, 6858, 7371, 24619, 8405, 24619,
308 		7765, 26176, 25023, 24767, 24766, 24638, 24510, 24511, 24255,
309 		8266, 24895, 24767, 24766, 24638, 24510, 24511, 24383, 7232,
310 		25664, 25023, 24767, 24766, 24637, 24510, 24511, 24255, 23104,
311 		 9803, 24895, 24767, 24766, 24637, 24510, 24511, 24383, 7754,
312 		8904, 24765, 24646, 24509, 24386, 24257, 24384, 24255, 24382,
313 		24510, 24509, 24635, 24765, 24766, 24894, 25023, 24896, 25025,
314 		 24898, 24770, 7248, 24383, 24382, 24510, 24509, 24635, 24765,
315 		 24766, 24894, 24895, 8138, 7371, 24619, 8405, 24619, 7765,
316 		25920, 25023, 24894, 24766, 24765, 24635, 24509, 24510, 24382,
317 		 24255, 23360, 9557, 24895, 24894, 24766, 24765, 24635, 24509,
318 		 24510, 24382, 24383, 8010, 7371, 24619, 8405, 24619, 9039,
319 		24632, 6990, 26688, 24634, 24518, 6838, 25408, 6965, 26688,
320 		24646, 24506, 7242, 7371, 24619, 8405, 24619, 9039, 24632,
321 		6990, 26688, 24634, 24518, 6838, 25408, 6965, 25536, 8138,
322 		8904, 24765, 24646, 24509, 24386, 24257, 24384, 24255, 24382,
323 		24510, 24509, 24635, 24765, 24766, 24894, 25023, 24896, 25025,
324 		 24898, 7378, 24383, 24382, 24510, 24509, 24635, 24765, 24766,
325 		 24894, 24895, 9160, 24632, 8392, 24632, 7752, 25536, 6978,
326 		7371, 24619, 8405, 24619, 9813, 24619, 8405, 24619, 6101,
327 		25536, 9024, 25536, 6198, 26176, 6197, 25536, 9024, 25536,
328 		6986, 7371, 24619, 8405, 24619, 7765, 25536, 7339, 25536,
329 		6986, 8011, 24623, 24509, 24383, 24384, 24385, 24514, 24642,
330 		24769, 24767, 24511, 9041, 24623, 24509, 24511, 8149, 25536,
331 		6965, 7371, 24619, 8405, 24619, 9941, 22963, 8900, 25652,
332 		7116, 25652, 6229, 25536, 9024, 25408, 5803, 25536, 9024,
333 		25408, 6858, 7371, 24619, 8405, 24619, 7765, 25536, 7339,
334 		26560, 24646, 24506, 6986, 7371, 24619, 8405, 25390, 7378,
335 		25515, 9173, 23723, 9173, 24619, 8405, 24619, 5973, 25152,
336 		9920, 25152, 5547, 25408, 9280, 25536, 6986, 7371, 24619,
337 		8405, 26157, 6737, 26157, 8277, 24619, 6229, 25152, 9408,
338 		25408, 5803, 25408, 8650, 8011, 24255, 24382, 24510, 24508,
339 		24637, 24764, 24766, 24894, 25023, 24896, 25025, 24898, 24770,
340 		 24772, 24643, 24516, 24514, 24386, 24257, 24384, 8256, 24383,
341 		 24382, 24510, 24508, 24637, 24764, 24766, 24894, 24895, 8512,
342 		 24897, 24898, 24770, 24772, 24643, 24516, 24514, 24386,
343 		24385, 7989, 7371, 24619, 8405, 24619, 7765, 26176, 25023,
344 		24767, 24766, 24637, 24510, 24511, 24255, 23616, 9291, 24895,
345 		24767, 24766, 24637, 24510, 24511, 24383, 6710, 25536, 8394,
346 		8011, 24255, 24382, 24510, 24508, 24637, 24764, 24766, 24894,
347 		25023, 24896, 25025, 24898, 24770, 24772, 24643, 24516, 24514,
348 		 24386, 24257, 24384, 8256, 24383, 24382, 24510, 24508, 24637,
349 		 24764, 24766, 24894, 24895, 8512, 24897, 24898, 24770, 24772,
350 		 24643, 24516, 24514, 24386, 24385, 7597, 24641, 24770, 24897,
351 		 24768, 24895, 24766, 24761, 24767, 24896, 24770, 24641, 7621,
352 		 24764, 24766, 24767, 24768, 24769, 7117, 7371, 24619, 8405,
353 		24619, 7765, 26176, 25023, 24767, 24766, 24638, 24510, 24511,
354 		24255, 23616, 9290, 24895, 24767, 24766, 24638, 24510, 24511,
355 		24383, 6709, 25536, 8523, 24895, 24767, 25017, 24767, 24768,
356 		24769, 7368, 24766, 24889, 24767, 24896, 24770, 24641, 6983,
357 		8776, 24771, 24634, 24515, 24386, 24257, 24256, 24255, 24382,
358 		24638, 24766, 24767, 24895, 25406, 24895, 24894, 6473, 24894,
359 		24895, 25406, 24895, 24767, 24766, 24636, 24382, 24255, 24256,
360 		 24257, 24386, 24515, 24634, 24771, 8775, 7883, 24619, 8405,
361 		24619, 7381, 24506, 24646, 26560, 24634, 24518, 6955, 25536,
362 		7498, 7371, 24625, 24765, 24894, 25023, 24896, 25025, 24898,
363 		24771, 24655, 6592, 24625, 24765, 24894, 24895, 7125, 25536,
364 		9152, 25408, 6965, 7115, 25515, 7509, 25390, 9170, 23723,
365 		7125, 25408, 9024, 25408, 6837, 7243, 25131, 7893, 25008,
366 		8784, 24107, 8789, 25131, 7893, 25008, 8784, 24107, 6357,
367 		25536, 9408, 25408, 6837, 7115, 26283, 6741, 26283, 8277,
368 		22827, 8021, 25408, 9024, 25408, 5931, 25408, 9024, 25408,
369 		6858, 7115, 25525, 24630, 7509, 25525, 24630, 9173, 23733,
370 		6987, 25408, 9152, 25408, 6571, 25536, 7626, 8779, 22955,
371 		10069, 22955, 8277, 24506, 24646, 26432, 6443, 26432, 24646,
372 		24506, 7242, 7362, 24639, 24512, 24641, 24769, 24897, 25152,
373 		24895, 24767, 24766, 24633, 24766, 24767, 7884, 24631, 24766,
374 		24895, 24768, 7754, 24511, 23871, 24255, 24510, 24638, 24766,
375 		25023, 25024, 24897, 24898, 7365, 24383, 24510, 24638, 24766,
376 		24895, 8394, 7371, 24619, 8405, 24619, 8267, 24898, 24897,
377 		24896, 25023, 24894, 24765, 24638, 24509, 24382, 24255, 24384,
378 		 24385, 24386, 9035, 24895, 24894, 24765, 24638, 24509, 24382,
379 		 24383, 6997, 25152, 8629, 8641, 24511, 24767, 24769, 24641,
380 		24386, 24385, 24256, 24255, 24382, 24509, 24638, 24765, 24894,
381 		 25023, 24896, 25025, 24898, 7371, 24383, 24382, 24509, 24638,
382 		 24765, 24894, 24895, 8010, 8651, 24619, 8405, 24619, 8139,
383 		24386, 24385, 24384, 24255, 24382, 24509, 24638, 24765, 24894,
384 		 25023, 24896, 24897, 24898, 7499, 24383, 24382, 24509, 24638,
385 		 24765, 24894, 24895, 8661, 25152, 8107, 25152, 6986, 7230,
386 		26176, 24642, 24514, 24513, 24385, 24256, 24255, 24382, 24509,
387 		 24638, 24765, 24894, 25023, 24896, 25025, 24898, 8133, 24643,
388 		 24514, 7617, 24383, 24382, 24509, 24638, 24765, 24894, 24895,
389 		 8010, 8010, 24511, 24767, 24769, 24641, 24513, 24384, 24383,
390 		24510, 24622, 8661, 24511, 24510, 24622, 7758, 25664, 7218,
391 		25536, 7242, 7748, 24383, 24511, 24510, 24638, 24766, 24767,
392 		24895, 24896, 24897, 24769, 24770, 24642, 24514, 24513, 24385,
393 		 24384, 7999, 24510, 24636, 24766, 9024, 24770, 24644, 24514,
394 		8383, 24769, 24897, 24639, 24384, 7097, 24511, 24510, 24639,
395 		24766, 25023, 25280, 25023, 24767, 6597, 24767, 25023, 25280,
396 		25023, 24766, 24639, 24510, 24255, 23872, 24257, 24514, 24641,
397 		 24770, 25025, 8394, 7371, 24619, 8405, 24619, 8267, 24898,
398 		25025, 24896, 25023, 24766, 24629, 7758, 24895, 24766, 24629,
399 		6485, 25152, 7723, 25536, 8768, 25536, 6986, 7371, 24511,
400 		24767, 24769, 24513, 8249, 24626, 8398, 24626, 7758, 25152,
401 		7730, 25536, 6986, 7499, 24511, 24767, 24769, 24513, 8377,
402 		24622, 24510, 24383, 24384, 24513, 24641, 24769, 24767, 24511,
403 		 8788, 24622, 24510, 24511, 8149, 25152, 7228, 7371, 24619,
404 		8405, 24619, 9550, 23350, 8900, 25400, 7368, 25400, 6485,
405 		25152, 9145, 25408, 6066, 25536, 8768, 25408, 6986, 7371,
406 		24619, 8405, 24619, 7765, 25152, 7723, 25536, 6986, 7364,
407 		24626, 8398, 24626, 8267, 24898, 25025, 24896, 25023, 24766,
408 		24629, 7758, 24895, 24766, 24629, 8395, 24898, 25025, 24896,
409 		25023, 24766, 24629, 7758, 24895, 24766, 24629, 5070, 25152,
410 		7730, 25536, 8768, 25536, 8768, 25536, 6986, 7364, 24626,
411 		8398, 24626, 8267, 24898, 25025, 24896, 25023, 24766, 24629,
412 		7758, 24895, 24766, 24629, 6478, 25152, 7730, 25536, 8768,
413 		25536, 6986, 7876, 24255, 24382, 24509, 24638, 24765, 24894,
414 		25023, 24896, 25025, 24898, 24771, 24642, 24515, 24386, 24257,
415 		 24384, 8256, 24383, 24382, 24509, 24638, 24765, 24894, 24895,
416 		 8512, 24897, 24898, 24771, 24642, 24515, 24386, 24385, 7868,
417 		7364, 24619, 8405, 24619, 8274, 24898, 24897, 24896, 25023,
418 		24894, 24765, 24638, 24509, 24382, 24255, 24384, 24385, 24386,
419 		 9035, 24895, 24894, 24765, 24638, 24509, 24382, 24383, 6990,
420 		25152, 7723, 25536, 8273, 8644, 24619, 8405, 24619, 8146,
421 		24386, 24385, 24384, 24255, 24382, 24509, 24638, 24765, 24894,
422 		 25023, 24896, 24897, 24898, 7499, 24383, 24382, 24509, 24638,
423 		 24765, 24894, 24895, 8633, 25536, 6865, 7364, 24626, 8398,
424 		24626, 8264, 24771, 24898, 24897, 25024, 24767, 24639, 24511,
425 		24513, 24769, 6721, 25152, 7730, 25536, 7754, 8386, 24770,
426 		24636, 24514, 24513, 24385, 24128, 24383, 24511, 24638, 24767,
427 		 24895, 25278, 24895, 24767, 6855, 24767, 24895, 25278, 24895,
428 		 24767, 24637, 24511, 24383, 24128, 24385, 24513, 24514,
429 		24636, 24770, 8392, 7371, 24623, 24765, 24895, 24896, 24897,
430 		24770, 7378, 24623, 24765, 24767, 7502, 25664, 7356, 7364,
431 		24629, 24766, 25023, 24896, 25025, 24898, 6987, 24629, 24766,
432 		24895, 9166, 24626, 8398, 24626, 6350, 25152, 9152, 25152,
433 		8114, 25152, 6986, 7108, 25394, 7630, 25268, 9036, 23858,
434 		7246, 25408, 8768, 25408, 6844, 7236, 25138, 7886, 25013,
435 		8779, 24114, 8782, 25138, 7886, 25013, 8779, 24114, 6350,
436 		25536, 9408, 25408, 6844, 7236, 26034, 6990, 26034, 8270,
437 		23090, 8014, 25408, 8768, 25408, 6194, 25408, 8768, 25408,
438 		6986, 7236, 25394, 7630, 25268, 9036, 23858, 24380, 24382,
439 		24383, 24512, 24513, 24769, 24767, 8020, 25408, 8768, 25408,
440 		6844, 8516, 23218, 9806, 23218, 8270, 24508, 24644, 26176,
441 		6706, 26176, 24644, 24508, 7242, 7371, 24619, 8405, 24619,
442 		7765, 26560, 24634, 24518, 6443, 25536, 7882, 8011, 23595,
443 		9301, 25643, 7250, 25518, 6465, 26432, 6335, 26688, 6986,
444 		8011, 24255, 24382, 24510, 24508, 24637, 24764, 24766, 24894,
445 		25023, 24896, 25025, 24898, 24770, 24772, 24643, 24516, 24514,
446 		 24386, 24257, 24384, 8256, 24383, 24382, 24510, 24508, 24637,
447 		 24764, 24766, 24894, 24895, 8512, 24897, 24898, 24770, 24772,
448 		 24643, 24516, 24514, 24386, 24385, 7737, 24633, 9031, 24633,
449 		7492, 25408, 7487, 25408, 7744, 8011, 23723, 9173, 25515,
450 		7378, 25390, 6336, 25408, 9024, 25408, 6858, 7244, 24507,
451 		10309, 24507, 6972, 24507, 9285, 24507, 6972, 24507, 10309,
452 		24507, 6485, 26432, 6463, 26432, 6968, 25408, 7487, 25408,
453 		6968, 26432, 6463, 26432, 7241, 7371, 24619, 8405, 24619,
454 		9813, 24619, 8405, 24619, 6101, 27200, 5675, 25536, 9024,
455 		25536, 6986, 7115, 25526, 23605, 8277, 25526, 7370, 26560,
456 		24762, 24390, 6572, 26304, 6463, 26560, 24774, 24378, 7370,
457 		6982, 24642, 24770, 24769, 24896, 24767, 24766, 24764, 24626,
458 		7378, 24898, 24896, 24894, 9406, 24642, 24514, 24513, 24384,
459 		24511, 24510, 24508, 24626, 9170, 24386, 24384, 24382, 7598,
460 		25536, 7498, 8011, 24619, 8405, 24619, 7888, 24255, 24511,
461 		24510, 24637, 24766, 24767, 25023, 25280, 25025, 24769, 24770,
462 		 24643, 24514, 24513, 24257, 24000, 8256, 24383, 24511, 24510,
463 		 24637, 24766, 24767, 24895, 8896, 24897, 24769, 24770, 24643,
464 		 24514, 24513, 24385, 7493, 25536, 7339, 25536, 7626, 8139,
465 		24619, 8405, 24619, 6990, 24769, 24895, 24764, 24766, 24767,
466 		24895, 7369, 24767, 24764, 24766, 24767, 25023, 25024, 25025,
467 		24769, 24770, 24772, 24769, 7351, 24897, 24769, 24770, 24772,
468 		24897, 24767, 6599, 25536, 7339, 25536, 7754, 7097, 24765,
469 		25152, 24388, 24388, 24515, 24644, 24771, 24898, 25025, 25152,
470 		 25023, 24894, 24765, 24636, 24509, 24380, 24380, 25152,
471 		24771, 6593, 24515, 24516, 24644, 24771, 24898, 24897, 8768,
472 		24895, 24894, 24765, 24636, 24508, 24509, 6717, 25024, 9280,
473 		25024, 7241, 8004, 24255, 24382, 24510, 24509, 24637, 24766,
474 		25023, 24896, 24897, 25027, 24899, 24900, 24771, 7104, 24383,
475 		24382, 24510, 24509, 24637, 24766, 24895, 8654, 24896, 24895,
476 		24766, 24888, 24766, 24767, 7374, 24767, 24766, 24888, 24766,
477 		24895, 24768, 7114, 8395, 24255, 24382, 24380, 24509, 24508,
478 		24506, 24504, 9692, 24383, 24382, 24380, 24509, 24508, 24506,
479 		24504, 9564, 24896, 24895, 24767, 24637, 24510, 24511, 24255,
480 		24128, 9033, 24894, 24637, 24510, 24511, 24383, 7744, 25151,
481 		24894, 24766, 24637, 24510, 24511, 24255, 24384, 24385, 24513,
482 		 24515, 8775, 25023, 24894, 24766, 24637, 24510, 24511, 24383,
483 		 8010, 6849, 24898, 24897, 24896, 24895, 24767, 24765, 24636,
484 		24508, 24248, 7635, 24897, 25152, 24895, 9282, 24509, 24510,
485 		23993, 24251, 24380, 9685, 24509, 24510, 24121, 7880, 8387,
486 		24385, 24384, 24255, 24381, 24509, 24637, 24766, 24767, 24895,
487 		 24896, 25025, 24899, 24771, 24643, 24514, 24133, 24514,
488 		24642, 24769, 24896, 24895, 24894, 7355, 24383, 24381, 24509,
489 		24636, 24766, 8767, 24897, 24899, 24771, 24644, 24514, 24387,
490 		24514, 24642, 24769, 24896, 25022, 7095, 8515, 24385, 24256,
491 		24255, 24382, 24509, 24637, 24765, 24767, 25023, 25024, 24897,
492 		 7757, 24383, 24382, 24509, 24637, 24765, 24767, 24895, 7751,
493 		25664, 7363, 8139, 24383, 24511, 24639, 24767, 25023, 25280,
494 		24641, 24255, 24126, 24254, 24253, 24509, 24638, 24766, 25022,
495 		 25022, 24766, 24638, 24511, 24384, 24513, 8917, 24125, 24253,
496 		 24509, 24638, 24766, 24894, 8138, 6848, 24770, 24898, 25024,
497 		24767, 24638, 24508, 24377, 8398, 24767, 24638, 24508, 24377,
498 		8647, 24900, 24898, 24897, 24896, 24895, 24767, 24637, 24507,
499 		24245, 8405, 24894, 24637, 24507, 24245, 7889, 8139, 24255,
500 		24381, 24510, 24509, 24507, 24636, 24766, 24895, 24896, 25025,
501 		 24899, 24770, 24771, 24773, 24644, 24514, 24385, 24384, 8256,
502 		 24383, 24381, 24510, 24509, 24507, 24636, 24766, 24767, 8512,
503 		 24897, 24899, 24770, 24771, 24773, 24644, 24514, 24513, 7222,
504 		 25792, 7359, 7492, 24377, 24508, 24638, 24767, 25024, 24898,
505 		24770, 7882, 24377, 24508, 24638, 24767, 7626, 7492, 24114,
506 		8910, 24114, 9934, 24767, 24768, 24513, 24384, 24383, 24124,
507 		24383, 24384, 8512, 24895, 24890, 24767, 7624, 24767, 24890,
508 		24767, 24896, 24897, 24899, 7110, 7115, 24896, 24895, 24767,
509 		24766, 25394, 24766, 24767, 6741, 24894, 24766, 25394, 24766,
510 		24895, 24768, 7246, 23602, 9294, 23730, 8906, 7620, 23851,
511 		9173, 23851, 8914, 24506, 24637, 24894, 24896, 24897, 24898,
512 		24899, 8520, 24245, 24638, 24767, 25024, 24898, 24770, 7882,
513 		24245, 24638, 24767, 7498, 7492, 24370, 8654, 24506, 24507,
514 		24509, 9934, 24508, 24380, 8776, 24509, 24510, 24381, 24382,
515 		24254, 24383, 24255, 8142, 25152, 8380, 8139, 24383, 24511,
516 		24639, 24767, 25023, 25024, 7872, 24127, 24383, 24510, 24638,
517 		24894, 25023, 25024, 8137, 24255, 24383, 24510, 24638, 24894,
518 		24895, 8256, 24127, 24383, 24510, 24638, 24894, 25278, 24767,
519 		24638, 24383, 24384, 8654, 24255, 24383, 24510, 24638, 24894,
520 		25150, 7629, 7876, 24255, 24381, 24509, 24637, 24766, 24767,
521 		24895, 24896, 25025, 24899, 24771, 24643, 24514, 24513, 24385,
522 		 24384, 8256, 24383, 24381, 24509, 24636, 24766, 8767, 24897,
523 		24899, 24771, 24644, 24514, 7357, 7875, 24115, 8781, 24243,
524 		9421, 24627, 8269, 24755, 6475, 24898, 25025, 26304, 5949,
525 		24897, 25025, 26304, 6973, 7227, 24765, 24767, 24895, 24896,
526 		25025, 24899, 24771, 24643, 24514, 24513, 24385, 24384, 24255,
527 		 24381, 24509, 24114, 9543, 24897, 24899, 24771, 24644, 24514,
528 		 7745, 24383, 24381, 24509, 24114, 9041, 9156, 23360, 24255,
529 		24381, 24509, 24637, 24766, 24767, 24895, 24896, 25025, 24899,
530 		 24771, 24643, 24514, 24513, 24385, 8000, 24383, 24381, 24509,
531 		 24636, 24766, 8767, 24897, 24899, 24771, 24644, 24514, 8256,
532 		25408, 6973, 8131, 24243, 8653, 24371, 7371, 24898, 25025,
533 		26048, 6205, 24897, 25025, 26048, 6973, 6848, 24770, 24898,
534 		25024, 24767, 24638, 24378, 24637, 24894, 8014, 24767, 24638,
535 		24378, 24637, 24767, 24895, 24768, 25025, 24898, 24899, 24771,
536 		 24643, 24514, 24511, 24767, 24765, 8125, 24774, 7102, 8523,
537 		23844, 9180, 23588, 8661, 24127, 24382, 24509, 24637, 24766,
538 		24894, 25023, 25024, 25153, 24898, 24771, 24643, 24514, 24386,
539 		 24257, 24256, 8256, 24255, 24382, 24509, 24637, 24766, 24894,
540 		 24895, 8640, 25025, 24898, 24771, 24643, 24514, 24386, 24385,
541 		 7868, 6980, 24896, 24895, 24766, 25265, 24766, 24767, 6997,
542 		24767, 24766, 25265, 24766, 24895, 24896, 8405, 24510, 24381,
543 		23349, 24381, 24510, 8913, 8651, 23844, 9180, 23588, 7377,
544 		24770, 24898, 25024, 24767, 24638, 24507, 24637, 24894, 25024,
545 		 24897, 25027, 24899, 6598, 24767, 24638, 24507, 24637, 24766,
546 		 24895, 25024, 24897, 24898, 24899, 24770, 24902, 6972, 7232,
547 		24898, 25025, 24513, 24383, 24381, 24509, 24637, 24765, 24767,
548 		 24896, 24897, 24899, 24771, 7101, 24766, 24767, 24896, 24897,
549 		 24898, 8259, 24637, 24765, 24767, 24896, 24897, 24899, 24771,
550 		 24643, 24515, 24513, 24511, 24895, 24766, 7098, 24766, 24767,
551 		 24896, 24897, 24898, 7238, 7883, 24255, 24381, 24507, 24637,
552 		24763, 24893, 25023, 24896, 25025, 24899, 24773, 24643, 24517,
553 		 24387, 24257, 24384, 8256, 24383, 24511, 24510, 24507, 24637,
554 		 24763, 24766, 24767, 24895, 8512, 24897, 24769, 24770, 24773,
555 		 24643, 24517, 24514, 24513, 24385, 7861, 7495, 24897, 25027,
556 		24619, 8148, 24620, 7744, 25792, 7370, 7239, 24767, 24511,
557 		24513, 24641, 24770, 24769, 25025, 25152, 25023, 24767, 24766,
558 		 24638, 24510, 24254, 23998, 24383, 24382, 24509, 24637, 9429,
559 		 24895, 24767, 24766, 24638, 24510, 24254, 24126, 7609, 24769,
560 		 24896, 25278, 25024, 24897, 24769, 6848, 25277, 25152, 24769,
561 		 24770, 24642, 7109, 7239, 24767, 24511, 24513, 24641, 24770,
562 		24769, 25025, 25152, 25023, 24766, 24637, 24510, 24255, 24256,
563 		 8649, 24895, 24766, 24637, 24510, 24383, 8256, 24895, 24894,
564 		24766, 24637, 24510, 24511, 24255, 24128, 24257, 24513, 24514,
565 		 24641, 24769, 24767, 24511, 9670, 24765, 24637, 24510, 24511,
566 		 24383, 7754, 8265, 24621, 8405, 24619, 8277, 23217, 26688,
567 		7098, 25536, 7242, 7371, 24374, 8256, 24898, 25025, 25024,
568 		25023, 24894, 24765, 24638, 24509, 24382, 24255, 24256, 24257,
569 		 24513, 24514, 24641, 24769, 24767, 24511, 9162, 24895, 24894,
570 		 24765, 24638, 24509, 24382, 24383, 7509, 25920, 6975, 25280,
571 		25281, 7349, 8648, 24511, 24767, 24769, 24641, 24514, 24385,
572 		24256, 24255, 24382, 24510, 24508, 24634, 24765, 24894, 25023,
573 		 24896, 25025, 24898, 24771, 24641, 24515, 24386, 24257,
574 		24512, 24255, 24382, 24509, 9038, 24383, 24382, 24510, 24508,
575 		24634, 24765, 24894, 24895, 8512, 24897, 24898, 24771, 24641,
576 		24515, 24386, 24385, 7869, 7115, 24634, 8258, 24770, 24898,
577 		24896, 25277, 24896, 24769, 24770, 6590, 24897, 24896, 25278,
578 		8771, 24637, 24509, 24123, 24510, 24509, 24635, 9039, 23995,
579 		24510, 24509, 24635, 8138, 7755, 24255, 24510, 24637, 24766,
580 		25023, 25152, 25025, 24770, 24643, 24514, 24257, 24128, 8256,
581 		24383, 24510, 24637, 24766, 24895, 8768, 24897, 24770, 24643,
582 		24514, 24385, 7735, 24255, 24511, 24510, 24636, 24766, 24767,
583 		25023, 25152, 25025, 24769, 24770, 24644, 24514, 24513, 24257,
584 		 7744, 24383, 24511, 24510, 24636, 24766, 24767, 24895, 8768,
585 		24897, 24769, 24770, 24644, 24514, 24513, 24385, 7742, 8772,
586 		24509, 24382, 24255, 24512, 24257, 24386, 24515, 24641, 24771,
587 		 24898, 25025, 24896, 25023, 24894, 24765, 24634, 24508,
588 		24510, 24382, 24255, 24256, 24385, 24514, 24641, 24769, 24767,
589 		 24511, 8773, 24385, 24386, 24515, 24641, 24771, 24898, 24897,
590 		 8512, 24895, 24894, 24765, 24634, 24508, 24510, 24382, 24383,
591 		 8010, 7352, 24511, 24767, 24769, 24513, 7368, 7350, 24513,
592 		24769, 24767, 24638, 24510, 24511, 7502, 7364, 24511, 24767,
593 		24769, 24513, 8244, 24511, 24767, 24769, 24513, 7368, 7364,
594 		24511, 24767, 24769, 24513, 8242, 24513, 24769, 24767, 24638,
595 		24510, 24511, 7502, 7371, 24510, 24756, 24780, 24514, 8254,
596 		24634, 8245, 24511, 24767, 24769, 24513, 7368, 7239, 24767,
597 		24511, 24513, 24641, 24770, 24769, 24897, 25024, 25023, 24767,
598 		 24766, 24638, 24510, 24511, 24126, 24637, 8398, 24895, 24767,
599 		 24766, 24638, 24510, 24382, 7991, 24511, 24767, 24769, 24513,
600 		 7880, 7243, 24505, 8519, 24377, 7356, 7243, 24505, 8519,
601 		24377, 9415, 24505, 8519, 24377, 7356, 7499, 24383, 24510,
602 		24638, 24766, 24895, 24896, 24897, 24770, 24642, 24514, 24385,
603 		 24384, 7733, 9295, 22304, 9297, 8143, 24382, 24381, 24380,
604 		24507, 24636, 24763, 24892, 24893, 24894, 8030, 24380, 24509,
605 		24507, 24636, 24763, 24765, 24892, 7375, 7119, 24894, 24893,
606 		24892, 24763, 24636, 24507, 24380, 24381, 24382, 8542, 24892,
607 		24765, 24763, 24636, 24507, 24509, 24380, 7887, 7247, 24608,
608 		8416, 24608, 8160, 25536, 7328, 25536, 7121, 7887, 24608,
609 		8416, 24608, 7392, 25536, 7328, 25536, 7249, 7887, 24253,
610 		24509, 24638, 24765, 25021, 8012, 24509, 24636, 24765, 8510,
611 		24254, 25022, 8256, 24253, 24509, 24638, 24765, 25021, 8012,
612 		24509, 24636, 24765, 7631, 7375, 25021, 24765, 24638, 24509,
613 		24253, 8524, 24765, 24636, 24509, 7998, 25022, 24254, 8256,
614 		25021, 24765, 24638, 24509, 24253, 8524, 24765, 24636, 24509,
615 		7631, 8015, 23728, 25520, 7249, 7247, 25520, 23728, 8017,
616 		7247, 24608, 7249, 7231, 26944, 7233, 8392, 24622, 7113,
617 		26944, 7233, 8263, 24623, 7241, 26688, 6199, 26688, 7242,
618 		7238, 26418, 8270, 22834, 9032, 8392, 24511, 24767, 24769,
619 		24513, 7095, 26944, 7097, 24511, 24767, 24769, 24513, 8392,
620 		7234, 26944, 5946, 26944, 7236, 9288, 22830, 8012, 26944,
621 		5946, 26944, 7236, 9288, 22583, 26679, 7242, 7240, 26679,
622 		22583, 9290, 9291, 22585, 26681, 6206, 26688, 6203, 26688,
623 		7242, 7243, 26681, 22585, 8254, 26688, 6203, 26688, 7242,
624 		9402, 24384, 24385, 24386, 24260, 24513, 24385, 24384, 24383,
625 		24510, 24638, 24766, 24895, 24896, 24897, 24769, 25028, 24898,
626 		 24897, 24896, 7228, 9287, 23744, 24127, 24383, 24382, 24509,
627 		24638, 24765, 24894, 24895, 25151, 25536, 7241, 7239, 24633,
628 		24764, 24766, 24894, 25023, 24896, 25025, 24898, 24770, 24772,
629 		 24647, 7225, 7239, 25536, 25151, 24895, 24894, 24765, 24638,
630 		24509, 24382, 24383, 24127, 23744, 9289, 7223, 24647, 24772,
631 		24770, 24898, 25025, 24896, 25023, 24894, 24766, 24764, 24633,
632 		 7241, 9287, 23744, 24127, 24383, 24382, 24509, 24638, 24765,
633 		24894, 24895, 25151, 25536, 6216, 26176, 7745, 9153, 25022,
634 		24254, 7879, 25275, 23995, 6725, 26816, 7361, 7493, 24899,
635 		24893, 7357, 25285, 25275, 7621, 24623, 7754, 7617, 24254,
636 		25022, 8647, 23995, 25275, 7621, 26816, 7233, 7481, 24893,
637 		24899, 7363, 25275, 25285, 7628, 24623, 7753, 8639, 24515,
638 		24513, 24385, 24384, 24255, 24381, 24509, 24637, 24766, 24767,
639 		 24895, 24896, 25025, 24898, 24771, 24773, 24645, 24515,
640 		24513, 24385, 24256, 24383, 24511, 24639, 24768, 24641, 8507,
641 		24383, 24381, 24509, 24636, 24766, 8767, 24897, 24898, 24771,
642 		24773, 24645, 24515, 24386, 7605, 6987, 25643, 7381, 25517,
643 		9299, 23595, 7253, 26688, 6335, 26432, 7094, 9422, 24511,
644 		24767, 24769, 24641, 24513, 24384, 24383, 24382, 24510, 24509,
645 		 24508, 24372, 24508, 24510, 9308, 24510, 24508, 24372, 24508,
646 		 24509, 24510, 24382, 24383, 24384, 24513, 24641, 24769,
647 		24767, 24511, 9424, 9422, 24511, 24767, 24769, 24641, 24513,
648 		24384, 24383, 24382, 24510, 24509, 24508, 24372, 24508, 24510,
649 		 9308, 24510, 24508, 24372, 24508, 24509, 24510, 24382, 24383,
650 		 24384, 24513, 24641, 24769, 24767, 24511, 9302, 24255, 24382,
651 		 24509, 24638, 24765, 24894, 25023, 24896, 25025, 24898,
652 		24771, 24642, 24515, 24386, 24257, 24384, 8378, 9534, 24510,
653 		24383, 24384, 24385, 24513, 24260, 24513, 24385, 24384, 24383,
654 		 24510, 24638, 24766, 24895, 24896, 24897, 24769, 25028,
655 		24769, 24897, 24896, 24895, 24766, 24638, 7106, 9419, 22315,
656 		8917, 24894, 24638, 24510, 24383, 24384, 24386, 24642, 24770,
657 		24897, 24896, 24895, 25023, 25024, 25025, 24897, 7730, 24383,
658 		24510, 24638, 24894, 24896, 24897, 24770, 24642, 24386, 24384,
659 		 7619, 9411, 24511, 24767, 24769, 24641, 24513, 24512, 24511,
660 		24510, 24379, 24381, 24382, 24383, 24256, 24257, 24514, 24643,
661 		 24770, 25412, 24898, 24770, 24642, 24514, 24385, 24383,
662 		24510, 24638, 24765, 24893, 25273, 24894, 25023, 24768, 24769,
663 		 24641, 6334, 24385, 24514, 24643, 24770, 24898, 8262, 24766,
664 		25653, 24894, 24895, 7370, 9027, 24514, 24385, 24256, 24383,
665 		24511, 24509, 24637, 24766, 24895, 25024, 24897, 24770, 7624,
666 		24382, 24509, 24637, 24766, 24767, 9163, 24504, 24638, 24895,
667 		24896, 24898, 24771, 24642, 24515, 24514, 24386, 24385, 24257,
668 		 24256, 24255, 24383, 24382, 24510, 24509, 24637, 24765,
669 		24766, 24894, 24895, 25023, 25024, 25025, 24897, 24769, 8013,
670 		24504, 24638, 24767, 7749, 7759, 24611, 8797, 24611, 8790,
671 		24511, 24767, 24769, 24641, 24386, 24257, 24128, 24255, 24382,
672 		 24638, 24766, 24767, 24895, 25406, 24895, 24894, 6473, 24894,
673 		 24895, 25406, 24895, 24767, 24766, 24636, 24382, 24255,
674 		24128, 24257, 24386, 24641, 24769, 24767, 24511, 8775, 8139,
675 		23716, 9948, 23716, 7505, 26432, 6330, 26432, 7238, 8136,
676 		24511, 24767, 24769, 24641, 24514, 24385, 24384, 24383, 24510,
677 		 24638, 24766, 24894, 25277, 7365, 25277, 24894, 24766, 24638,
678 		 24510, 24382, 7756, 24382, 24510, 24638, 24766, 24894, 25277,
679 		 7365, 25277, 24894, 24766, 24638, 24510, 24383, 24384, 24385,
680 		 24514, 24641, 24769, 24767, 24511, 8142, 7755, 24510, 24766,
681 		24770, 24514, 8256, 24612, 8273, 24509, 24754, 24782, 24515,
682 		7492, 24895, 24897, 24385, 24383, 8256, 26176, 7744, 24895,
683 		24897, 24385, 24383, 7484, 7755, 24510, 24766, 24770, 24514,
684 		8256, 24626, 8260, 24510, 24892, 24510, 24514, 24900, 24514,
685 		8252, 24626, 8260, 24510, 24766, 24770, 24514, 7505, 24895,
686 		24897, 24385, 24383, 8256, 26176, 7744, 24895, 24897, 24385,
687 		24383, 7218, 24895, 24897, 24385, 24383, 8256, 26176, 7744,
688 		24895, 24897, 24385, 24383, 7498, 8651, 24619, 6613, 26304,
689 		7222, 25664, 6581, 26304, 7242, 7622, 25394, 8270, 23858,
690 		7754, 26426, 8262, 22842, 8900, 7232, 6720, 6208, 5696, 5184,
691 		4672, 4160, 3648, 3136, 5196, 5172, 5192, 5176, 5188, 5180,
692 		7232, 26688, 7240, 24624, 8264, 7224, 26704, 6208, 26672,
693 		7240, 8248, 25672, 23624, 23608, 25656, 8264, 7224, 26688,
694 		24656, 22592, 24624, 9288, 7232, 25152, 25156, 8260, 24636,
695 		25148, 8768, 24128, 24124, 8252, 24644, 24132, 8768, 7224,
696 		25156, 24648, 7748, 25148, 25664, 8772, 24124, 24632, 8764,
697 		24132, 23616, 8772, 7232, 26688, 7240, 24624, 8768, 23616,
698 		7748, 24648, 8772, 25664, 8764, 24632, 7236, 7224, 26704,
699 		6208, 26672, 8260, 24124, 7232, 24132, 8264, 25156, 9280,
700 		25148, 7228, 7744, 24128, 8264, 25148, 8768, 24644, 9280,
701 		24124, 8252, 25152, 8248, 24132, 7744, 24636, 7232, 25156,
702 		8772, 7228, 24648, 25156, 25664, 25148, 24632, 24124, 23616,
703 		24132, 9284, 8644, 24511, 24767, 24769, 24641, 24386, 24385,
704 		24256, 24255, 24382, 24509, 24638, 24765, 24894, 25023, 24896,
705 		 25025, 24898, 7371, 24383, 24382, 24509, 24638, 24765, 24894,
706 		 24895, 8401, 24620, 7882, 7234, 26944, 24636, 7234, 6964,
707 		26944, 6988, 7235, 24770, 24897, 24896, 25023, 24895, 25023,
708 		24896, 24897, 24770, 5945, 26944, 5948, 26944, 7237, 7237,
709 		24767, 24511, 24513, 24641, 24770, 24769, 24897, 25024, 25023,
710 		 24767, 24766, 24638, 24510, 24511, 24126, 8395, 24895, 24767,
711 		 24766, 24638, 24510, 24382, 8013, 24510, 24753, 24783, 24514,
712 		 8254, 24632, 8246, 24511, 24767, 24769, 24513, 7880, 7745,
713 		24254, 25022, 8647, 23995, 25275, 7621, 26944, 7621, 25275,
714 		23995, 8647, 25022, 24254, 7747, 9287, 23744, 24127, 24383,
715 		24382, 24509, 24638, 24765, 24894, 24895, 25151, 25536, 6216,
716 		26176, 8138, 23980, 8523, 6987, 25515, 25557, 6714, 25920,
717 		7227, 9287, 23232, 24383, 24382, 24510, 24638, 24766, 24894,
718 		24895, 26048, 6204, 26688, 7241, 7239, 26048, 24895, 24894,
719 		24766, 24638, 24510, 24382, 24383, 23232, 8252, 26688, 7241,
720 		7879, 24255, 24382, 24509, 24638, 24765, 24894, 25023, 24896,
721 		25025, 24898, 24771, 24642, 24515, 24386, 24257, 24384, 8382,
722 		24630, 7621, 25920, 7360, 7879, 24255, 24382, 24509, 24638,
723 		24765, 24894, 25023, 24896, 25025, 24898, 24771, 24642, 24515,
724 		 24386, 24257, 24384, 8893, 23608, 8264, 25656, 7492, 7499,
725 		24619, 8405, 24619, 8267, 24898, 25025, 24896, 25023, 24766,
726 		24629, 7758, 24895, 24766, 24629, 6485, 25152, 7723, 25536,
727 		8768, 25536, 7636, 22840, 9406, 7115, 24896, 24895, 24767,
728 		24766, 25394, 24766, 24767, 6741, 24894, 24766, 25394, 24766,
729 		24895, 24768, 7246, 23602, 9294, 23730, 9556, 23351, 8895,
730 		7108, 25152, 25396, 7372, 25522, 25819, 6703, 6704, 27456,
731 		6736, 6737, 27456, 6703, 6991, 26912, 6993 };
732 
733 
734     /* System generated locals */
735     integer i__1;
736 
737     /* Local variables */
738     static integer ioff, istr;
739     static real xcur, ycur, scale, bb, gg;
740     static integer is;
741     static real rr;
742 #define nstrok ((integer *)&equiv_38)
743     static char ccc[1];
744     static integer ich, inc;
745 #define ns01 ((integer *)&equiv_38)
746 #define ns02 ((integer *)&equiv_38 + 100)
747 #define ns03 ((integer *)&equiv_38 + 200)
748 #define ns04 ((integer *)&equiv_38 + 300)
749 #define ns05 ((integer *)&equiv_38 + 400)
750 #define ns06 ((integer *)&equiv_38 + 500)
751 #define ns07 ((integer *)&equiv_38 + 600)
752 #define ns08 ((integer *)&equiv_38 + 700)
753 #define ns09 ((integer *)&equiv_38 + 800)
754 #define ns10 ((integer *)&equiv_38 + 900)
755 #define ns11 ((integer *)&equiv_38 + 1000)
756 #define ns12 ((integer *)&equiv_38 + 1100)
757 #define ns13 ((integer *)&equiv_38 + 1200)
758 #define ns14 ((integer *)&equiv_38 + 1300)
759 #define ns15 ((integer *)&equiv_38 + 1400)
760 #define ns16 ((integer *)&equiv_38 + 1500)
761     static integer kst;
762 #define ns17 ((integer *)&equiv_38 + 1600)
763 #define ns18 ((integer *)&equiv_38 + 1700)
764 #define ns19 ((integer *)&equiv_38 + 1800)
765 #define ns20 ((integer *)&equiv_38 + 1900)
766 #define ns21 ((integer *)&equiv_38 + 2000)
767 #define ns22 ((integer *)&equiv_38 + 2100)
768 #define ns23 ((integer *)&equiv_38 + 2200)
769 #define ns24 ((integer *)&equiv_38 + 2300)
770 #define ns25 ((integer *)&equiv_38 + 2400)
771 #define ns26 ((integer *)&equiv_38 + 2500)
772 #define ns27 ((integer *)&equiv_38 + 2600)
773 #define ns28 ((integer *)&equiv_38 + 2700)
774 #define ns29 ((integer *)&equiv_38 + 2800)
775 #define ns30 ((integer *)&equiv_38 + 2900)
776 #define ns31 ((integer *)&equiv_38 + 3000)
777 #define ns32 ((integer *)&equiv_38 + 3100)
778 #define ns33 ((integer *)&equiv_38 + 3200)
779 #define ns34 ((integer *)&equiv_38 + 3300)
780 #define ns35 ((integer *)&equiv_38 + 3400)
781 #define ns36 ((integer *)&equiv_38 + 3500)
782 #define ns37 ((integer *)&equiv_38 + 3600)
783 #define ns38 ((integer *)&equiv_38 + 3700)
784 #define ns39 ((integer *)&equiv_38 + 3800)
785 
786 
787 /*  Convert a string of generalized characters into a set of strokes, */
788 /*  normalized to character size = 1.  The stroke tables are taken */
789 /*  from the C source code to the program "axis". */
790 
791 
792 /* .....................................................................
793 */
794 /*  A list of the offsets of the start of the stroke data for each */
795 /*  character.   0 means a control character */
796 
797 
798 
799     /* Parameter adjustments */
800     --lstr;
801     --ystr;
802     --xstr;
803 
804     /* Function Body */
805 /* .....................................................................
806 */
807 /*  List of the number of strokes in each character. */
808 /*  For control characters, the entry is the switch index. */
809 
810 /* .....................................................................
811 */
812 /*  List of the strokes, stored in the format */
813 /*   16384*blanking + 128*(DX+64) + (DY+64) */
814 
815 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
816  */
817     *nstr = 0;
818     xcur = 0.f;
819     ycur = 0.f;
820     scale = .051f;
821 
822     inc = 1;
823 L100:
824 
825 /*  Load the offset into the stroke table and the number of strokes */
826 
827     ich = *(unsigned char *)&ch[inc - 1];
828     if (ich <= 0) {
829 	ich += 256;
830     }
831 
832     ioff = noff[ich];
833     istr = numstr[ich];
834 /* .....................................................................
835 */
836 /*  If the offset is 0, this is a control character, so treat it */
837 /*  specially -- ISTR is the control code in this case: */
838 /*     1 = start superscript */
839 /*     2 = end superscript */
840 /*     3 = start subscript */
841 /*     4 = end subscript */
842 /*     5,6,7,8,9,10,11 = change color */
843 /*     12 = smaller text  [28 Oct 2013] */
844 /*     13 = larger text */
845 /*     14 = color:R:G:B (consumes 3 extra bytes) */
846 
847     if (ioff <= 0) {
848 	if (istr == 1) {
849 	    xcur -= scale * 2.666667f;
850 	    ycur += scale * 12.f;
851 	    scale *= .6666667f;
852 	} else if (istr == 2) {
853 	    scale *= 1.5f;
854 	    xcur += scale * 4.f;
855 	    ycur -= scale * 12.f;
856 	} else if (istr == 3) {
857 	    xcur -= scale * 2.666667f;
858 	    ycur -= scale * 12.f;
859 	    scale *= .6666667f;
860 	} else if (istr == 4) {
861 	    scale *= 1.5f;
862 	    xcur += scale * 4.f;
863 	    ycur += scale * 12.f;
864 	} else if (istr >= 5 && istr <= 11) {
865 	    ++(*nstr);
866 	    lstr[*nstr] = istr + 96;
867 	    xstr[*nstr] = xcur;
868 	    ystr[*nstr] = ycur;
869 	} else if (istr == 12) {
870 	    scale *= .8f;
871 	} else if (istr == 13) {
872 	    scale *= 1.25f;
873 	} else if (istr == 14) {
874 	    ++inc;
875 	    *(unsigned char *)ccc = *(unsigned char *)&ch[inc - 1];
876 	    rr = 0.f;
877 	    if (*(unsigned char *)ccc == '1') {
878 		rr = 1.f;
879 	    }
880 	    if (*(unsigned char *)ccc == '2') {
881 		rr = 2.f;
882 	    }
883 	    if (*(unsigned char *)ccc == '3') {
884 		rr = 3.f;
885 	    }
886 	    if (*(unsigned char *)ccc == '4') {
887 		rr = 4.f;
888 	    }
889 	    if (*(unsigned char *)ccc == '5') {
890 		rr = 5.f;
891 	    }
892 	    if (*(unsigned char *)ccc == '6') {
893 		rr = 6.f;
894 	    }
895 	    if (*(unsigned char *)ccc == '7') {
896 		rr = 7.f;
897 	    }
898 	    if (*(unsigned char *)ccc == '8') {
899 		rr = 8.f;
900 	    }
901 	    if (*(unsigned char *)ccc == '9') {
902 		rr = 9.f;
903 	    }
904 	    if (*(unsigned char *)ccc == 'a' || *(unsigned char *)ccc == 'A')
905 		    {
906 		rr = 10.f;
907 	    }
908 	    if (*(unsigned char *)ccc == 'b' || *(unsigned char *)ccc == 'B')
909 		    {
910 		rr = 11.f;
911 	    }
912 	    if (*(unsigned char *)ccc == 'c' || *(unsigned char *)ccc == 'C')
913 		    {
914 		rr = 12.f;
915 	    }
916 	    if (*(unsigned char *)ccc == 'd' || *(unsigned char *)ccc == 'D')
917 		    {
918 		rr = 13.f;
919 	    }
920 	    if (*(unsigned char *)ccc == 'e' || *(unsigned char *)ccc == 'E')
921 		    {
922 		rr = 14.f;
923 	    }
924 	    if (*(unsigned char *)ccc == 'f' || *(unsigned char *)ccc == 'F')
925 		    {
926 		rr = 15.f;
927 	    }
928 	    ++inc;
929 	    *(unsigned char *)ccc = *(unsigned char *)&ch[inc - 1];
930 	    gg = 0.f;
931 	    if (*(unsigned char *)ccc == '1') {
932 		gg = 1.f;
933 	    }
934 	    if (*(unsigned char *)ccc == '2') {
935 		gg = 2.f;
936 	    }
937 	    if (*(unsigned char *)ccc == '3') {
938 		gg = 3.f;
939 	    }
940 	    if (*(unsigned char *)ccc == '4') {
941 		gg = 4.f;
942 	    }
943 	    if (*(unsigned char *)ccc == '5') {
944 		gg = 5.f;
945 	    }
946 	    if (*(unsigned char *)ccc == '6') {
947 		gg = 6.f;
948 	    }
949 	    if (*(unsigned char *)ccc == '7') {
950 		gg = 7.f;
951 	    }
952 	    if (*(unsigned char *)ccc == '8') {
953 		gg = 8.f;
954 	    }
955 	    if (*(unsigned char *)ccc == '9') {
956 		gg = 9.f;
957 	    }
958 	    if (*(unsigned char *)ccc == 'a' || *(unsigned char *)ccc == 'A')
959 		    {
960 		gg = 10.f;
961 	    }
962 	    if (*(unsigned char *)ccc == 'b' || *(unsigned char *)ccc == 'B')
963 		    {
964 		gg = 11.f;
965 	    }
966 	    if (*(unsigned char *)ccc == 'c' || *(unsigned char *)ccc == 'C')
967 		    {
968 		gg = 12.f;
969 	    }
970 	    if (*(unsigned char *)ccc == 'd' || *(unsigned char *)ccc == 'D')
971 		    {
972 		gg = 13.f;
973 	    }
974 	    if (*(unsigned char *)ccc == 'e' || *(unsigned char *)ccc == 'E')
975 		    {
976 		gg = 14.f;
977 	    }
978 	    if (*(unsigned char *)ccc == 'f' || *(unsigned char *)ccc == 'F')
979 		    {
980 		gg = 15.f;
981 	    }
982 	    ++inc;
983 	    *(unsigned char *)ccc = *(unsigned char *)&ch[inc - 1];
984 	    bb = 0.f;
985 	    if (*(unsigned char *)ccc == '1') {
986 		bb = 1.f;
987 	    }
988 	    if (*(unsigned char *)ccc == '2') {
989 		bb = 2.f;
990 	    }
991 	    if (*(unsigned char *)ccc == '3') {
992 		bb = 3.f;
993 	    }
994 	    if (*(unsigned char *)ccc == '4') {
995 		bb = 4.f;
996 	    }
997 	    if (*(unsigned char *)ccc == '5') {
998 		bb = 5.f;
999 	    }
1000 	    if (*(unsigned char *)ccc == '6') {
1001 		bb = 6.f;
1002 	    }
1003 	    if (*(unsigned char *)ccc == '7') {
1004 		bb = 7.f;
1005 	    }
1006 	    if (*(unsigned char *)ccc == '8') {
1007 		bb = 8.f;
1008 	    }
1009 	    if (*(unsigned char *)ccc == '9') {
1010 		bb = 9.f;
1011 	    }
1012 	    if (*(unsigned char *)ccc == 'a' || *(unsigned char *)ccc == 'A')
1013 		    {
1014 		bb = 10.f;
1015 	    }
1016 	    if (*(unsigned char *)ccc == 'b' || *(unsigned char *)ccc == 'B')
1017 		    {
1018 		bb = 11.f;
1019 	    }
1020 	    if (*(unsigned char *)ccc == 'c' || *(unsigned char *)ccc == 'C')
1021 		    {
1022 		bb = 12.f;
1023 	    }
1024 	    if (*(unsigned char *)ccc == 'd' || *(unsigned char *)ccc == 'D')
1025 		    {
1026 		bb = 13.f;
1027 	    }
1028 	    if (*(unsigned char *)ccc == 'e' || *(unsigned char *)ccc == 'E')
1029 		    {
1030 		bb = 14.f;
1031 	    }
1032 	    if (*(unsigned char *)ccc == 'f' || *(unsigned char *)ccc == 'F')
1033 		    {
1034 		bb = 15.f;
1035 	    }
1036 	    ++(*nstr);
1037 	    lstr[*nstr] = istr + 96;
1038 	    xstr[*nstr] = rr * 256.f + gg * 16.f + bb;
1039 	    ystr[*nstr] = ycur;
1040 	}
1041 /* ...................................................................
1042 .. */
1043 /*  Check if this is a newline character */
1044 
1045     } else if (ich == 10) {
1046 	xcur = 0.f;
1047 	ycur += -1.36f;
1048 /* ...................................................................
1049 .. */
1050 /*  Otherwise, this is a real character with real strokes */
1051 
1052     } else {
1053 	i__1 = istr - 1;
1054 	for (is = 0; is <= i__1; ++is) {
1055 	    ++(*nstr);
1056 	    kst = nstrok[ioff + is - 1];
1057 
1058 	    lstr[*nstr] = 0;
1059 	    if (kst >= 16384) {
1060 		lstr[*nstr] = 1;
1061 		kst += -16384;
1062 	    }
1063 
1064 	    xcur += scale * (real) (kst / 128 - 64);
1065 	    ycur += scale * (real) (kst % 128 - 64);
1066 	    if (is == istr - 1) {
1067 		xcur += scale * 24.f;
1068 	    }
1069 
1070 	    xstr[*nstr] = xcur;
1071 	    ystr[*nstr] = ycur;
1072 /* L500: */
1073 	}
1074     }
1075 
1076 /*  Loopback if not done */
1077 
1078 /* L900: */
1079     ++inc;
1080     if (inc <= *nch) {
1081 	goto L100;
1082     }
1083     return 0;
1084 } /* zzstro_ */
1085 
1086 #undef ns39
1087 #undef ns38
1088 #undef ns37
1089 #undef ns36
1090 #undef ns35
1091 #undef ns34
1092 #undef ns33
1093 #undef ns32
1094 #undef ns31
1095 #undef ns30
1096 #undef ns29
1097 #undef ns28
1098 #undef ns27
1099 #undef ns26
1100 #undef ns25
1101 #undef ns24
1102 #undef ns23
1103 #undef ns22
1104 #undef ns21
1105 #undef ns20
1106 #undef ns19
1107 #undef ns18
1108 #undef ns17
1109 #undef ns16
1110 #undef ns15
1111 #undef ns14
1112 #undef ns13
1113 #undef ns12
1114 #undef ns11
1115 #undef ns10
1116 #undef ns09
1117 #undef ns08
1118 #undef ns07
1119 #undef ns06
1120 #undef ns05
1121 #undef ns04
1122 #undef ns03
1123 #undef ns02
1124 #undef ns01
1125 #undef nstrok
1126 
1127 
1128 
1129 
1130 
zzconv_(char * chin,integer * nchin,char * chout,integer * nchout,ftnlen chin_len,ftnlen chout_len)1131 /* Subroutine */ int zzconv_(char *chin, integer *nchin, char *chout, integer
1132 	*nchout, ftnlen chin_len, ftnlen chout_len)
1133 {
1134     /* Initialized data */
1135 
1136     static char chesc[15] = "\\esc           ";
1137     static char chnesc[15] = "\\noesc         ";
1138     static char chcolr[15] = "\\color         ";
1139     static char chcoln[15] = ":              ";
1140     static char chtex[15*116] = "\\Plus          " "\\Cross         " "\\Dia"
1141 	    "mond       " "\\Box           " "\\FDiamond      " "\\FBox      "
1142 	    "    " "\\FPlus         " "\\FCross        " "\\Burst         "
1143 	    "\\Octagon       " "\\alpha         " "\\beta          " "\\gamm"
1144 	    "a         " "\\delta         " "\\epsilon       " "\\zeta       "
1145 	    "   " "\\eta           " "\\theta         " "\\iota          "
1146 	    "\\kappa         " "\\lambda        " "\\mu            " "\\nu  "
1147 	    "          " "\\xi            " "\\omicron       " "\\pi         "
1148 	    "   " "\\rho           " "\\sigma         " "\\tau           "
1149 	    "\\upsilon       " "\\phi           " "\\chi           " "\\psi "
1150 	    "          " "\\omega         " "\\Alpha         " "\\Beta       "
1151 	    "   " "\\Gamma         " "\\Delta         " "\\Epsilon       "
1152 	    "\\Zeta          " "\\Eta           " "\\Theta         " "\\Iota"
1153 	    "          " "\\Kappa         " "\\Lambda        " "\\Mu         "
1154 	    "   " "\\Nu            " "\\Xi            " "\\Omicron       "
1155 	    "\\Pi            " "\\Rho           " "\\Sigma         " "\\Tau "
1156 	    "          " "\\Upsilon       " "\\Phi           " "\\Chi        "
1157 	    "   " "\\Psi           " "\\Omega         " "\\propto        "
1158 	    "\\int           " "\\times         " "\\div           " "\\appr"
1159 	    "ox        " "\\partial       " "\\cap           " "\\?          "
1160 	    "   " "\\langle        " "\\rangle        " "\\ddagger       "
1161 	    "\\pm            " "\\leq           " "\\S             " "\\hbar"
1162 	    "          " "\\lambar        " "\\cup           " "\\degree     "
1163 	    "   " "\\nabla         " "\\downarrow     " "\\leftarrow     "
1164 	    "\\rightarrow    " "\\leftrightarrow" "\\oint          " "\\in  "
1165 	    "          " "\\notin         " "\\surd          " "\\_          "
1166 	    "   " "\\bar           " "\\exists        " "\\geq           "
1167 	    "\\forall        " "\\subset        " "\\oplus         " "\\otim"
1168 	    "es        " "\\dagger        " "\\neq           " "\\supset     "
1169 	    "   " "\\infty         " "\\uparrow       " "\\#             "
1170 	    "\\$             " "\\%             " "\\&             " "\\{   "
1171 	    "          " "\\}             " "\\\\             " "\\cents     "
1172 	    "    " "\\black         " "\\red           " "\\blue          "
1173 	    "\\green         " "\\yellow        " "\\magenta       " "\\cyan"
1174 	    "          " "\\small         " "\\large         " "\\newline    "
1175 	    "   ";
1176     static integer ichext[116] = { 176,177,178,179,180,181,182,183,184,185,
1177 	    225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,
1178 	    241,242,243,244,245,246,247,248,193,194,195,196,197,198,199,200,
1179 	    201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,
1180 	    128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
1181 	    160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
1182 	    186,187,188,189,190,191,255,96,35,36,37,38,123,125,92,94,148,149,
1183 	    150,151,152,153,154,155,156,10 };
1184 
1185     /* System generated locals */
1186     integer i__1;
1187 
1188     /* Builtin functions */
1189     integer s_cmp(char *, char *, ftnlen, ftnlen);
1190     /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen);
1191 
1192     /* Local variables */
1193     static logical lesc;
1194     static integer itop;
1195     static logical lout;
1196     static integer i__, nused, nsupb;
1197     static char chcont[15], chcolx[15];
1198     static integer ntsupb[10], inc;
1199 
1200 
1201 /*  Convert input string (using TeX-like escapes) to extended character */
1202 /*  set, for plotting with ZZSTRO. */
1203 
1204 /* .......................................................................
1205  */
1206 
1207 /*  super/subscript control characters */
1208 
1209 /* .......................................................................
1210  */
1211 /*  INC    = input character being scanned */
1212 /*  NUSED  = no. of input characters consumed by this operation */
1213 /*  NSUPB  = super/subscript level */
1214 /*  NTSUPB = super/subscript type at each level: */
1215 /*                1 = single character superscript -- like a^b */
1216 /*                2 = multi-character superscript -- like a^{b+c} */
1217 /*            -1,-2 = similar for subscripts */
1218 /*  LOUT   = .TRUE. if we just output something to CHOUT, */
1219 /*           otherwise .FALSE. */
1220 
1221 
1222 /*  Table of Tex-like escapes */
1223 
1224 
1225 /*  Corresponding extended character set bytes */
1226 
1227 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1228  */
1229 /*  Test if a character is alphabetic */
1230 
1231 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1232  */
1233     *nchout = 0;
1234     nsupb = 0;
1235     inc = 1;
1236 /* -----------------------------------------------------------------------
1237  */
1238 /*  Process input character no. INC */
1239 
1240     lesc = TRUE_;
1241 L100:
1242 
1243 /* CC      WRITE(*,666) 'ZZCONV at: ' // CHIN(INC:INC) */
1244 /* CC666   FORMAT(A) */
1245 
1246     lout = FALSE_;
1247 
1248 /*  Superscript:  ^{ starts a multi-character superscript, otherwise */
1249 /*                ^ starts a single-character superscript */
1250 
1251     if (lesc && *(unsigned char *)&chin[inc - 1] == '^' && inc < *nchin) {
1252 	++nsupb;
1253 	i__1 = inc;
1254 	if (s_cmp(chin + i__1, "{", inc + 1 - i__1, 1L) == 0) {
1255 	    ntsupb[nsupb - 1] = 2;
1256 	    nused = 2;
1257 	} else {
1258 	    ntsupb[nsupb - 1] = 1;
1259 	    nused = 1;
1260 	}
1261 	++(*nchout);
1262 	*(unsigned char *)&chout[*nchout - 1] = 144;
1263 /* CC            WRITE(*,666) ' start superscript' */
1264 /* ...................................................................
1265 .... */
1266 /*  Subscript:  similar to above code */
1267 
1268     } else if (lesc && *(unsigned char *)&chin[inc - 1] == '_' && inc < *
1269 	    nchin) {
1270 	++nsupb;
1271 	i__1 = inc;
1272 	if (s_cmp(chin + i__1, "{", inc + 1 - i__1, 1L) == 0) {
1273 	    ntsupb[nsupb - 1] = -2;
1274 	    nused = 2;
1275 	} else {
1276 	    ntsupb[nsupb - 1] = -1;
1277 	    nused = 1;
1278 	}
1279 	++(*nchout);
1280 	*(unsigned char *)&chout[*nchout - 1] = 146;
1281 /* CC            WRITE(*,666) ' start subscript' */
1282 /* ...................................................................
1283 .... */
1284 /*  If in super/subscript mode and we have a '}', then this terminates
1285  */
1286 /*  the current level of super/subscripts */
1287 
1288     } else if (lesc && *(unsigned char *)&chin[inc - 1] == '}' && nsupb > 0) {
1289 	nused = 1;
1290 	++(*nchout);
1291 	if (ntsupb[nsupb - 1] > 0) {
1292 	    *(unsigned char *)&chout[*nchout - 1] = 145;
1293 	} else {
1294 	    *(unsigned char *)&chout[*nchout - 1] = 147;
1295 	}
1296 	--nsupb;
1297 /* CC            WRITE(*,666) ' end compound super/subscript' */
1298 /* ...................................................................
1299 .... */
1300 /*  Special case: \esc turns LESC back on */
1301 
1302     } else if (! lesc && inc + 4 <= *nchin && s_cmp(chin + (inc - 1), chesc,
1303 	    4L, 15L) == 0) {
1304 	lesc = TRUE_;
1305 	nused = 4;
1306 /* ...................................................................
1307 .... */
1308 /*  Anything else that doesn't start with a \ is passed straight throu
1309 gh */
1310 
1311     } else if (! lesc || *(unsigned char *)&chin[inc - 1] != '\\') {
1312 	lout = TRUE_;
1313 	nused = 1;
1314 	++(*nchout);
1315 	*(unsigned char *)&chout[*nchout - 1] = *(unsigned char *)&chin[inc -
1316 		1];
1317 /* CC            WRITE(*,666) ' passthru' */
1318 /* ...................................................................
1319 .... */
1320 /*  If it started with a \ but we are at the last character, quit */
1321 
1322     } else if (inc == *nchin) {
1323 /* CC            WRITE(*,666) ' end of input' */
1324 	goto L8000;
1325 /* ...................................................................
1326 .... */
1327 /*  TeX-like escapes -- there are 2 possibilities: */
1328 /*   1)  \asciistring */
1329 /*   2)  \specialcharacter */
1330 
1331     } else {
1332 	itop = inc + 1;
1333 
1334 /*  If the next character is alphabetic, then scan until end-of-input
1335 */
1336 /*  or a non-alphabetic character is found.  This will be the end */
1337 /*  of the escape sequence. */
1338 
1339 	i__1 = *(unsigned char *)&chin[itop - 1];
1340 	if (i__1 >= 'A' && i__1 <= 'Z' || i__1 >= 'a' && i__1 <= 'z') {
1341 L200:
1342 	    ++itop;
1343 	    if (itop > *nchin) {
1344 		goto L300;
1345 	    }
1346 	    i__1 = *(unsigned char *)&chin[itop - 1];
1347 	    if (i__1 >= 'A' && i__1 <= 'Z' || i__1 >= 'a' && i__1 <= 'z') {
1348 		goto L200;
1349 	    }
1350 L300:
1351 	    --itop;
1352 
1353 /*  If the character following the \asciistring is a blank, skip i
1354 t also */
1355 
1356 	    if (itop < *nchin) {
1357 		i__1 = itop;
1358 		if (s_cmp(chin + i__1, " ", itop + 1 - i__1, 1L) == 0) {
1359 		    ++itop;
1360 		}
1361 	    }
1362 	}
1363 
1364 /*  At this point, characters INC thru ITOP are the escape sequence.
1365 */
1366 /*  Check for a match with the table. */
1367 
1368 	nused = itop - inc + 1;
1369 	s_copy(chcont, chin + (inc - 1), 15L, itop - (inc - 1));
1370 
1371 	for (i__ = 1; i__ <= 116; ++i__) {
1372 	    if (s_cmp(chcont, chtex + (i__ - 1) * 15, 15L, 15L) == 0) {
1373 		goto L410;
1374 	    }
1375 /* L400: */
1376 	}
1377 	i__ = 0;
1378 L410:
1379 
1380 /*  If a match, enter the control character into the output; */
1381 /*  if no match, just ignore it */
1382 
1383 	if (i__ > 0) {
1384 	    lout = TRUE_;
1385 	    ++(*nchout);
1386 	    *(unsigned char *)&chout[*nchout - 1] = (char) ichext[i__ - 1];
1387 /* CC               WRITE(*,666) ' TeX escape: ' // CHCONT */
1388 /* CC            ELSE */
1389 /* CC               WRITE(*,666) ' unknown TeX escape: ' // CHCONT
1390  */
1391 	} else if (s_cmp(chcont, chnesc, 15L, 15L) == 0) {
1392 	    lesc = FALSE_;
1393 	} else if (s_cmp(chcont, chesc, 15L, 15L) == 0) {
1394 	    lesc = TRUE_;
1395 	} else if (s_cmp(chcont, chcolr, 15L, 15L) == 0 && itop + 4 <= *nchin)
1396 		 {
1397 	    i__1 = itop;
1398 	    s_copy(chcolx, chin + i__1, 15L, itop + 1 - i__1);
1399 	    if (s_cmp(chcolx, chcoln, 15L, 15L) == 0) {
1400 		++(*nchout);
1401 		*(unsigned char *)&chout[*nchout - 1] = 157;
1402 		++(*nchout);
1403 		i__1 = itop + 1;
1404 		s_copy(chout + (*nchout - 1), chin + i__1, 1L, itop + 2 -
1405 			i__1);
1406 		++(*nchout);
1407 		i__1 = itop + 2;
1408 		s_copy(chout + (*nchout - 1), chin + i__1, 1L, itop + 3 -
1409 			i__1);
1410 		++(*nchout);
1411 		i__1 = itop + 3;
1412 		s_copy(chout + (*nchout - 1), chin + i__1, 1L, itop + 4 -
1413 			i__1);
1414 		nused += 4;
1415 	    }
1416 	}
1417     }
1418 /* .......................................................................
1419  */
1420 /*  If we are in single-character super/subscript mode, we must drop */
1421 /*  out of it after outputting something */
1422 
1423     if (lout && nsupb > 0) {
1424 	if (ntsupb[nsupb - 1] == 1) {
1425 	    --nsupb;
1426 	    ++(*nchout);
1427 	    *(unsigned char *)&chout[*nchout - 1] = 145;
1428 /* CC           WRITE(*,666) ' end single-character superscript'
1429 */
1430 	} else if (ntsupb[nsupb - 1] == -1) {
1431 	    --nsupb;
1432 	    ++(*nchout);
1433 	    *(unsigned char *)&chout[*nchout - 1] = 147;
1434 /* CC           WRITE(*,666) ' end single-character subscript' */
1435 	}
1436     }
1437 
1438 /*  "Use up" the appropriate number of characters, and go on to */
1439 /*  the next bunch */
1440 
1441     inc += nused;
1442     if (inc <= *nchin) {
1443 	goto L100;
1444     }
1445 /* -----------------------------------------------------------------------
1446  */
1447 L8000:
1448     return 0;
1449 } /* zzconv_ */
1450 
1451