w32tex
About: TeX Live provides a comprehensive TeX system including all the major TeX-related programs, macro packages, and fonts that are free software. Windows sources.
  Fossies Dox: w32tex-src.tar.xz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

ttfspecial.c
Go to the documentation of this file.
1 /* Copyright (C) 2000-2012 by George Williams */
2 /*
3  * Redistribution and use in source and binary forms, with or without
4  * modification, are permitted provided that the following conditions are met:
5 
6  * Redistributions of source code must retain the above copyright notice, this
7  * list of conditions and the following disclaimer.
8 
9  * Redistributions in binary form must reproduce the above copyright notice,
10  * this list of conditions and the following disclaimer in the documentation
11  * and/or other materials provided with the distribution.
12 
13  * The name of the author may not be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15 
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 #include "fontforge.h"
28 #include <math.h>
29 #include <gimage.h> /* For COLOR_DEFAULT */
30 
31 #include "ttf.h"
32 
33 /* This file contains routines to generate non-standard true/opentype tables */
34 /* The first is the 'PfEd' table containing PfaEdit specific information */
35 /* glyph comments & colours ... perhaps other info later */
36 
37 /* ************************************************************************** */
38 /* ************************* The 'PfEd' table ************************* */
39 /* ************************* Output ************************* */
40 /* ************************************************************************** */
41 
42 #include "PfEd.h" /* This describes the format of the 'PfEd' table */
43  /* and its many subtables. */
44 
45 #define MAX_SUBTABLE_TYPES 20
46 
47 struct PfEd_subtabs {
48  int next;
49  struct {
54 };
55 
56 static void PfEd_FontComment(SplineFont *sf, struct PfEd_subtabs *pfed, uint32 tag ) {
57  FILE *fcmt;
58  char *pt;
59  char *text = tag==fcmt_TAG ? sf->comments : sf->fontlog;
60 
61  if ( text==NULL || *text=='\0' )
62 return;
63  pfed->subtabs[pfed->next].tag = tag;
64  pfed->subtabs[pfed->next++].data = fcmt = tmpfile2();
65 
66  putshort(fcmt,1); /* sub-table version number */
67  putshort(fcmt,strlen(text));
68  for ( pt = text; *pt; ++pt )
69  putc(*pt,fcmt);
70  putshort(fcmt,0);
71  if ( ftell(fcmt)&1 ) putc(0,fcmt);
72  if ( ftell(fcmt)&2 ) putshort(fcmt,0);
73 }
74 
75 static void PfEd_GlyphComments(SplineFont *sf, struct PfEd_subtabs *pfed,
76  struct glyphinfo *gi ) {
77  int i, j, k, any, cnt, last, skipped;
78  uint32 offset;
79  SplineChar *sc, *sc2;
80  FILE *cmnt;
81 
82  any = 0;
83  /* We don't need to check in bygid order. We just want to know existance */
84  for ( i=0; i<sf->glyphcnt; ++i ) {
85  if ( sf->glyphs[i]!=NULL && sf->glyphs[i]->ttf_glyph!=-1 &&
86  sf->glyphs[i]->comment!=NULL ) {
87  any = true;
88  break;
89  }
90  }
91 
92  if ( !any )
93 return;
94 
95  pfed->subtabs[pfed->next].tag = cmnt_TAG;
96  pfed->subtabs[pfed->next++].data = cmnt = tmpfile2();
97 
98  putshort(cmnt,1); /* sub-table version number */
99  /* Version 0 used ucs2, version 1 uses utf8 */
100 
101  offset = 0;
102  for ( j=0; j<4; ++j ) {
103  cnt = 0;
104  for ( i=0; i<gi->gcnt; ++i ) if ( gi->bygid[i]!=-1 ) {
105  sc=sf->glyphs[gi->bygid[i]];
106  if ( sc!=NULL && sc->comment!=NULL ) {
107  last = i; skipped = false;
108  for ( k=i+1; k<gi->gcnt; ++k ) {
109  if ( gi->bygid[k]!=-1 )
110  sc2 = sf->glyphs[gi->bygid[k]];
111  if ( (gi->bygid[k]==-1 || sc2->comment==NULL) && skipped )
112  break;
113  if ( gi->bygid[k]!=-1 && sc2->comment!=NULL ) {
114  last = k;
115  skipped = false;
116  } else
117  skipped = true;
118  }
119  ++cnt;
120  if ( j==1 ) {
121  putshort(cmnt,i);
122  putshort(cmnt,last);
123  putlong(cmnt,offset);
124  offset += sizeof(uint32)*(last-i+2);
125  } else if ( j==2 ) {
126  for ( ; i<=last; ++i ) {
127  if ( gi->bygid[i]==-1 || (sc=sf->glyphs[gi->bygid[i]])->comment==NULL )
128  putlong(cmnt,0);
129  else {
130  putlong(cmnt,offset);
131  offset += strlen(sc->comment)+1;
132  }
133  }
134  putlong(cmnt,offset); /* Guard data, to let us calculate the string lengths */
135  } else if ( j==3 ) {
136  for ( ; i<=last; ++i ) {
137  if ( gi->bygid[i]==-1 || (sc=sf->glyphs[gi->bygid[i]])->comment==NULL )
138  continue;
139  fputs(sc->comment,cmnt);
140  putc('\0',cmnt);
141  }
142  }
143  i = last;
144  }
145  }
146  if ( j==0 ) {
147  putshort(cmnt,cnt);
148  offset = 2*sizeof(short) + cnt*(2*sizeof(short)+sizeof(uint32));
149  }
150  }
151  if ( ftell(cmnt) & 1 )
152  putc('\0',cmnt);
153  if ( ftell(cmnt) & 2 )
154  putshort(cmnt,0);
155 }
156 
157 static void PfEd_CvtComments(SplineFont *sf, struct PfEd_subtabs *pfed ) {
158  FILE *cvtcmt;
159  int i, offset;
160 
161  if ( sf->cvt_names==NULL )
162 return;
163  pfed->subtabs[pfed->next].tag = cvtc_TAG;
164  pfed->subtabs[pfed->next++].data = cvtcmt = tmpfile2();
165 
166  for ( i=0; sf->cvt_names[i]!=END_CVT_NAMES; ++i);
167 
168  putshort(cvtcmt,0); /* sub-table version number */
169  putshort(cvtcmt,i);
170  offset = 2*2 + i*2;
171  for ( i=0; sf->cvt_names[i]!=END_CVT_NAMES; ++i) {
172  if ( sf->cvt_names[i]==NULL )
173  putshort(cvtcmt,0);
174  else {
175  putshort(cvtcmt,offset);
176  offset += strlen(sf->cvt_names[i])+1;
177  }
178  }
179  for ( i=0; sf->cvt_names[i]!=END_CVT_NAMES; ++i) {
180  if ( sf->cvt_names[i]!=NULL ) {
181  fputs(sf->cvt_names[i],cvtcmt);
182  putc('\0',cvtcmt);
183  }
184  }
185  if ( ftell(cvtcmt)&1 ) putc(0,cvtcmt);
186  if ( ftell(cvtcmt)&2 ) putshort(cvtcmt,0);
187 }
188 
189 static void PfEd_Colours(SplineFont *sf, struct PfEd_subtabs *pfed, struct glyphinfo *gi ) {
190  int i, j, k, any, cnt, last;
191  SplineChar *sc, *sc2;
192  FILE *colr;
193 
194  any = 0;
195  for ( i=0; i<sf->glyphcnt; ++i ) {
196  if ( sf->glyphs[i]!=NULL && sf->glyphs[i]->ttf_glyph!=-1 &&
197  sf->glyphs[i]->color!=COLOR_DEFAULT ) {
198  any = true;
199  break;
200  }
201  }
202 
203  if ( !any )
204 return;
205 
206  pfed->subtabs[pfed->next].tag = colr_TAG;
207  pfed->subtabs[pfed->next++].data = colr = tmpfile2();
208 
209  putshort(colr,0); /* sub-table version number */
210  for ( j=0; j<2; ++j ) {
211  cnt = 0;
212  for ( i=0; i<gi->gcnt; ++i ) if ( gi->bygid[i]!=-1 ) {
213  sc = sf->glyphs[gi->bygid[i]];
214  if ( sc!=NULL && sc->color!=COLOR_DEFAULT ) {
215  last = i;
216  for ( k=i+1; k<gi->gcnt; ++k ) {
217  if ( gi->bygid[k]==-1 )
218  break;
219  sc2 = sf->glyphs[gi->bygid[k]];
220  if ( sc2->color != sc->color )
221  break;
222  last = k;
223  }
224  ++cnt;
225  if ( j==1 ) {
226  putshort(colr,i);
227  putshort(colr,last);
228  putlong(colr,sc->color);
229  }
230  i = last;
231  }
232  }
233  if ( j==0 )
234  putshort(colr,cnt);
235  }
236  if ( ftell(colr) & 2 )
237  putshort(colr,0);
238 }
239 
240 static void PfEd_Lookups(SplineFont *sf, struct PfEd_subtabs *pfed,
241  OTLookup *lookups, uint32 tag) {
242  OTLookup *otl;
243  int lcnt, scnt, ascnt, acnt, s, a;
244  FILE *lkf;
245  struct lookup_subtable *subs;
246  AnchorClass *ac;
247  int sub_info, ac_info, name_info;
248 
249  if ( lookups==NULL )
250 return;
251  for ( otl=lookups, lcnt=scnt=acnt=ascnt=0; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
252  ++lcnt;
253  for ( subs = otl->subtables; subs!=NULL; subs=subs->next ) if ( !subs->unused ) {
254  ++scnt;
255  if ( subs->anchor_classes ) {
256  ++ascnt;
257  for ( ac=sf->anchor; ac!=NULL; ac=ac->next )
258  if ( ac->subtable==subs && ac->has_base && ac->has_mark )
259  ++acnt;
260  }
261  }
262  }
263 
264  pfed->subtabs[pfed->next].tag = tag;
265  pfed->subtabs[pfed->next++].data = lkf = tmpfile2();
266 
267  putshort(lkf,0); /* Subtable version */
268  putshort(lkf,lcnt);
269 
270  sub_info = 4 + 4*lcnt;
271  ac_info = sub_info + 2*lcnt + 4*scnt;
272  name_info = ac_info + 2*ascnt + 2*acnt;
273  for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
274  putshort(lkf,name_info);
275  name_info += strlen(otl->lookup_name)+1;
276  putshort(lkf,sub_info);
277  for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) ++s;
278  sub_info += 2 + 4*s;
279  }
280  if ( sub_info!=ac_info )
281  IError("Lookup name data didn't behave as expected");
282  for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
283  for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) ++s;
284  putshort(lkf,s); /* Subtable count */
285  for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) {
286  putshort(lkf,name_info);
287  name_info += strlen(subs->subtable_name)+1;
288  if ( subs->anchor_classes ) {
289  putshort(lkf,ac_info);
290  for ( ac=sf->anchor, a=0; ac!=NULL; ac=ac->next )
291  if ( ac->subtable==subs && ac->has_base && ac->has_mark )
292  ++a;
293  ac_info += 2 + 2*a;
294  } else
295  putshort(lkf,0);
296  }
297  }
298  for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
299  for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) {
300  if ( subs->anchor_classes ) {
301  for ( ac=sf->anchor, a=0; ac!=NULL; ac=ac->next )
302  if ( ac->subtable==subs && ac->has_base && ac->has_mark )
303  ++a;
304  putshort(lkf,a);
305  for ( ac=sf->anchor, a=0; ac!=NULL; ac=ac->next )
306  if ( ac->subtable==subs && ac->has_base && ac->has_mark ) {
307  putshort(lkf,name_info);
308  name_info += strlen(ac->name)+1;
309  }
310  }
311  }
312  }
313  for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
314  fputs(otl->lookup_name,lkf);
315  putc('\0',lkf);
316  }
317  for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
318  for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) {
319  fputs(subs->subtable_name,lkf);
320  putc('\0',lkf);
321  }
322  }
323  for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
324  for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) {
325  for ( ac=sf->anchor, a=0; ac!=NULL; ac=ac->next )
326  if ( ac->subtable==subs && ac->has_base && ac->has_mark ) {
327  fputs(ac->name,lkf);
328  putc('\0',lkf);
329  }
330  }
331  }
332  if ( ftell(lkf) & 1 )
333  putc('\0',lkf);
334  if ( ftell(lkf) & 2 )
335  putshort(lkf,0);
336 }
337 
338 static int pfed_mod_type(float val,int last_mod) {
339  float ival;
340 
341  if ( last_mod==V_F )
342 return( V_F );
343  ival = rint(val);
344  if ( ival!=val || ival<-32768 || ival>32767 )
345 return( V_F );
346  if ( last_mod==V_S || ival<-128 || ival>127 )
347 return( V_S );
348 
349 return( V_B );
350 }
351 
352 static void pfed_write_data(FILE *ttf, float val, int mod) {
353  if ( mod==V_F )
354  putlong(ttf,(int) rint(val*256.0f));
355  else if ( mod==V_S )
356  putshort(ttf,(int) rint(val));
357  else
358  putc(((int) rint(val)), ttf);
359 }
360 
361 static void pfed_glyph_layer(FILE *layr,Layer *layer, int do_spiro) {
362  int contour_cnt, image_cnt, ref_cnt, name_off, i,j;
363  SplineSet *ss;
364  SplinePoint *sp;
365  uint32 base;
366  int mod, was_implicit;
367  RefChar *ref;
368 
369  contour_cnt = 0;
370  for ( ss=layer->splines; ss!=NULL; ss=ss->next )
371  ++contour_cnt;
372  image_cnt = 0;
373  /* I'm not doing images yet (if ever) but I leave space for them */
374  ref_cnt = 0;
375  for ( ref=layer->refs; ref!=NULL; ref=ref->next )
376  ++ref_cnt;
377 
378  base = ftell(layr);
379  putshort(layr,contour_cnt);
380  putshort(layr,ref_cnt);
381  putshort(layr,image_cnt);
382 
383  name_off = 2*3 + 4 * contour_cnt + (4*7+2)* ref_cnt;
384  for ( ss=layer->splines; ss!=NULL; ss=ss->next ) {
385  putshort(layr,0); /* fill in later */
386  if ( ss->contour_name!=NULL ) {
387  putshort(layr,name_off);
388  name_off += strlen(ss->contour_name)+1;
389  } else {
390  putshort(layr,0);
391  }
392  }
393  for ( ref=layer->refs; ref!=NULL; ref=ref->next ) {
394  for ( j=0; j<6; ++j )
395  putlong(layr, (int) rint(ref->transform[j]*32768));
396  putshort(layr,ref->sc->ttf_glyph);
397  }
398  for ( ss=layer->splines; ss!=NULL; ss=ss->next ) {
399  if ( ss->contour_name!=NULL ) {
400  fputs(ss->contour_name,layr);
401  putc('\0',layr);
402  }
403  }
404 
405  contour_cnt=0;
406  for ( ss=layer->splines; ss!=NULL; ss=ss->next, ++contour_cnt ) {
407  uint32 pos = ftell(layr);
408  fseek( layr, base + 6 + 4*contour_cnt, SEEK_SET);
409  putshort( layr, pos-base);
410  fseek( layr, pos, SEEK_SET );
411 
412  if ( !do_spiro ) {
413  sp = ss->first;
414  mod = pfed_mod_type(sp->me.x, pfed_mod_type(sp->me.y,V_B));
415  putc( (V_MoveTo|mod),layr);
416  pfed_write_data(layr,sp->me.x,mod);
417  pfed_write_data(layr,sp->me.y,mod);
418  was_implicit = false;
419 
420  while ( sp->next!=NULL ) {
421  SplinePoint *nsp = sp->next->to;
422  float offx = nsp->me.x - sp->me.x;
423  float offy = nsp->me.y - sp->me.y;
424  if ( offx==0 && offy==0 )
425  /* Do Nothing */;
426  else if ( sp->next->knownlinear ) {
427  mod = pfed_mod_type(offx, pfed_mod_type(offy,V_B));
428  if ( offx==0 ) {
429  putc( (V_VLineTo|mod), layr);
430  pfed_write_data(layr,offy,mod);
431  } else if ( offy==0 ) {
432  putc( (V_HLineTo|mod), layr);
433  pfed_write_data(layr,offx,mod);
434  } else {
435  putc( (V_LineTo|mod), layr);
436  pfed_write_data(layr,offx,mod);
437  pfed_write_data(layr,offy,mod);
438  }
439  } else if ( sp->next->order2 ) {
440  float offx1, offx2, offy1, offy2;
441  BasePoint *base = was_implicit ? &sp->prevcp : &sp->me;
442  offx1 = sp->nextcp.x - base->x;
443  offy1 = sp->nextcp.y - base->y;
444  mod = pfed_mod_type(offx1, pfed_mod_type(offy1,V_B));
445  if ( SPInterpolate(nsp) && nsp!=ss->first ) {
446  was_implicit = true;
447  if ( offx1==0 ) {
448  putc( (V_QVImplicit|mod), layr);
449  pfed_write_data(layr,offy1,mod);
450  } else if ( offy1==0 ) {
451  putc( (V_QHImplicit|mod), layr);
452  pfed_write_data(layr,offx1,mod);
453  } else {
454  putc( (V_QImplicit|mod), layr);
455  pfed_write_data(layr,offx1,mod);
456  pfed_write_data(layr,offy1,mod);
457  }
458  } else {
459  offx2 = nsp->me.x - sp->nextcp.x;
460  offy2 = nsp->me.y - sp->nextcp.y;
461  mod = pfed_mod_type(offx2, pfed_mod_type(offy2,mod));
462  was_implicit = false;
463  putc( (V_QCurveTo|mod), layr);
464  pfed_write_data(layr,offx1,mod);
465  pfed_write_data(layr,offy1,mod);
466  pfed_write_data(layr,offx2,mod);
467  pfed_write_data(layr,offy2,mod);
468  }
469  } else {
470  float offx1 = sp->nextcp.x - sp->me.x;
471  float offy1 = sp->nextcp.y - sp->me.y;
472  float offx2 = nsp->prevcp.x - sp->nextcp.x;
473  float offy2 = nsp->prevcp.y - sp->nextcp.y;
474  float offx3 = nsp->me.x - nsp->prevcp.x;
475  float offy3 = nsp->me.y - nsp->prevcp.y;
476  mod = pfed_mod_type(offx1, pfed_mod_type(offy1,V_B));
477  mod = pfed_mod_type(offx2, pfed_mod_type(offy2,mod));
478  mod = pfed_mod_type(offx3, pfed_mod_type(offy3,mod));
479  if ( offx1==0 && offy3==0 ) {
480  putc((V_VHCurveTo|mod),layr);
481  pfed_write_data(layr,offy1,mod);
482  pfed_write_data(layr,offx2,mod);
483  pfed_write_data(layr,offy2,mod);
484  pfed_write_data(layr,offx3,mod);
485  } else if ( offy1==0 && offx3==0 ) {
486  putc((V_HVCurveTo|mod),layr);
487  pfed_write_data(layr,offx1,mod);
488  pfed_write_data(layr,offx2,mod);
489  pfed_write_data(layr,offy2,mod);
490  pfed_write_data(layr,offy3,mod);
491  } else {
492  putc((V_CurveTo|mod),layr);
493  pfed_write_data(layr,offx1,mod);
494  pfed_write_data(layr,offy1,mod);
495  pfed_write_data(layr,offx2,mod);
496  pfed_write_data(layr,offy2,mod);
497  pfed_write_data(layr,offx3,mod);
498  pfed_write_data(layr,offy3,mod);
499  }
500  }
501  if ( nsp == ss->first )
502  break;
503  if ( nsp->next!=NULL && nsp->next->to==ss->first && nsp->next->knownlinear )
504  break;
505  sp = nsp;
506  }
507  if ( sp->next==NULL )
508  putc(V_End,layr);
509  else
510  putc(V_Close,layr);
511  } else if ( ss->spiro_cnt==0 )
512  putc(SPIRO_CLOSE_CONTOUR,layr); /* Mark for an empty spiro contour */
513  else {
514  for ( i=0; i<ss->spiro_cnt; ++i ) {
515  if ( i==ss->spiro_cnt-1 && ss->first->prev==NULL )
517  else if ( i==0 && ss->first->prev==NULL ) /* Open */
518  putc(SPIRO_OPEN_CONTOUR,layr);
519  else
520  putc(ss->spiros[i].ty&0x7f,layr);
521  putlong(layr,rint(ss->spiros[i].x*256.0));
522  putlong(layr,rint(ss->spiros[i].y*256.0));
523  }
524  putc(SPIRO_END,layr); /* Add the z whether open or not. Might as well */
525  }
526  }
527 }
528 
529 struct pos_name {
531  char *name;
532 };
533 
534 static int pfed_guide_real_comp(const void *_r1, const void *_r2) {
535  const struct pos_name *r1 = _r1, *r2 = _r2;
536 
537  if ( r1->pos>r2->pos )
538 return( 1 );
539  else if ( r1->pos<r2->pos )
540 return( -1 );
541  else
542 return( 0 );
543 }
544 
545 static int pfed_guide_sortuniq( struct pos_name *array, int cnt) {
546  int i,j;
547 
548  qsort(array,cnt,sizeof(struct pos_name),pfed_guide_real_comp);
549  for ( i=j=0; i<cnt; ++i ) {
550  if ( array[i].pos<-32768 || array[i].pos>32767 )
551  /* Out of bounds, ignore it */;
552  else if ( i!=0 && array[i].pos == array[i-1].pos )
553  /* Duplicate, ignore it */;
554  else
555  array[j++] = array[i];
556  }
557 return( j );
558 }
559 
560 static int pfed_guide_dump_pos_name(FILE *guid, struct pos_name *pn, int namestart ) {
561  putshort(guid,(short) rint(pn->pos));
562  if ( pn->name!=NULL ) {
563  putshort(guid,namestart);
564  namestart += strlen(pn->name)+1;
565  } else {
566  putshort(guid,0);
567  }
568 return( namestart );
569 }
570 
571 static void PfEd_Guides(SplineFont *sf, struct PfEd_subtabs *pfed ) {
572  int h,v, i;
573  SplineSet *ss;
574  Spline *s, *first;
575  FILE *guid;
576  struct pos_name hs[100], vs[100];
577  int nameoff, namelen;
578 
579  if ( sf->grid.splines==NULL )
580 return;
581 
582  h=v=0;
583  for ( ss=sf->grid.splines; ss!=NULL; ss=ss->next ) {
584  first = NULL;
585  for ( s=ss->first->next; s!=NULL && s!=first; s=s->to->next ) {
586  if ( first==NULL ) first = s;
587  if ( s->from->me.x==s->to->me.x ) {
588  if ( s->from->me.y!=s->to->me.y && v<100 ) {
589  vs[v].name = ss->contour_name;
590  vs[v++].pos = s->from->me.x;
591  }
592  } else if ( s->from->me.y==s->to->me.y ) {
593  if ( h<100 ) {
594  hs[h].name = ss->contour_name;
595  hs[h++].pos = s->from->me.y;
596  }
597  }
598  }
599  }
600 
601  v = pfed_guide_sortuniq(vs,v);
602  h = pfed_guide_sortuniq(hs,h);
603 
604  pfed->subtabs[pfed->next].tag = guid_TAG;
605  pfed->subtabs[pfed->next++].data = guid = tmpfile2();
606 
607  nameoff = 5*2 + (h+v) * 4;
608  namelen = 0;
609  for ( i=0; i<v; ++i ) if ( vs[i].name!=NULL )
610  namelen += strlen( vs[i].name )+1;
611  for ( i=0; i<h; ++i ) if ( hs[i].name!=NULL )
612  namelen += strlen( hs[i].name )+1;
613 
614  putshort(guid,1); /* sub-table version number */
615  putshort(guid,v);
616  putshort(guid,h);
617  putshort(guid,0); /* Diagonal lines someday? nothing for now */
618  putshort(guid,nameoff+namelen); /* full spline output */
619  for ( i=0; i<v; ++i )
620  nameoff = pfed_guide_dump_pos_name(guid, &vs[i], nameoff );
621  for ( i=0; i<h; ++i )
622  nameoff = pfed_guide_dump_pos_name(guid, &hs[i], nameoff );
623 
624  for ( i=0; i<v; ++i ) if ( vs[i].name!=NULL ) {
625  fputs(vs[i].name,guid);
626  putc('\0',guid);
627  }
628  for ( i=0; i<h; ++i ) if ( hs[i].name!=NULL ) {
629  fputs(hs[i].name,guid);
630  putc('\0',guid);
631  }
632 
633  pfed_glyph_layer(guid,&sf->grid,false);
634 
635  if ( ftell(guid) & 1 )
636  putc('\0',guid);
637  if ( ftell(guid) & 2 )
638  putshort(guid,0);
639 }
640 
642  SplineSet *ss;
643 
644  for ( ss=layer->splines; ss!=NULL; ss=ss->next ) {
645  if ( ss->spiro_cnt>1 )
646 return( true );
647  }
648 return( false );
649 }
650 
651 static void PfEd_Layer(SplineFont *sf, struct glyphinfo *gi, int layer, int dospiro,
652  FILE *layr) {
653  int i, j, k, gid, cnt, last, skipped;
654  SplineChar *sc, *sc2;
655  uint32 offset;
656  uint32 *glyph_data_offset_location;
657 
658  for ( i=0; i<gi->gcnt; ++i ) if ( gi->bygid[i]!=-1 )
659  if ( (sc=sf->glyphs[gi->bygid[i]])!=NULL ) {
660  sc->ticked = false;
661  if ( (!dospiro && (sc->layers[layer].splines!=NULL || sc->layers[layer].refs!=NULL) ) ||
662  (dospiro && pfed_has_spiros(&sc->layers[layer])) )
663  sc->ticked=true;
664  }
665 
666  offset = ftell(layr);
667  glyph_data_offset_location = calloc(gi->gcnt,sizeof(uint32));
668  for ( j=0; j<4; ++j ) {
669  cnt = 0;
670  for ( i=0; i<gi->gcnt; ++i ) if ( (gid=gi->bygid[i])!=-1 && (sc=sf->glyphs[gid])!=NULL ) {
671  if ( sc->ticked ) {
672  last = i; skipped = false;
673  for ( k=i+1; k<gi->gcnt; ++k ) {
674  sc2 = NULL;
675  if ( gi->bygid[k]!=-1 )
676  sc2 = sf->glyphs[gi->bygid[k]];
677  if ( skipped && (sc2==NULL || !sc2->ticked))
678  break;
679  if ( sc2!=NULL && sc2->ticked ) {
680  last = k;
681  skipped = false;
682  } else
683  skipped = true;
684  }
685  ++cnt;
686  if ( j==1 ) {
687  putshort(layr,i);
688  putshort(layr,last);
689  putlong(layr,offset);
690  offset += sizeof(uint32)*(last-i+1);
691  } else if ( j==2 ) {
692  for ( ; i<=last; ++i ) {
693  if ( gi->bygid[i]==-1 || !sf->glyphs[gi->bygid[i]]->ticked )
694  putlong(layr,0);
695  else {
696  glyph_data_offset_location[i] = ftell(layr);
697  putlong(layr,0);
698  }
699  }
700  } else if ( j==3 ) {
701  for ( ; i<=last; ++i ) {
702  if ( gi->bygid[i]!=-1 && (sc=sf->glyphs[gi->bygid[i]])->ticked ) {
703  uint32 pos = ftell(layr);
704  fseek(layr,glyph_data_offset_location[i],SEEK_SET);
705  putlong(layr,pos); /* Offset relative to start of subtable==start of file */
706  fseek(layr,pos,SEEK_SET);
707  pfed_glyph_layer(layr,&sc->layers[layer],dospiro);
708  }
709  }
710  }
711  i = last;
712  }
713  }
714  if ( j==0 ) {
715  offset += sizeof(short) + cnt*(2*sizeof(short)+sizeof(uint32));
716  putshort(layr,cnt);
717  }
718  }
719  free(glyph_data_offset_location);
720 }
721 
722 static void PfEd_Layers(SplineFont *sf, struct PfEd_subtabs *pfed,
723  struct glyphinfo *gi ) {
724  /* currently we output the following: */
725  /* The background layer */
726  /* And the spiro representation of the foreground */
727  /* if the foreground is cubic and output is quad then the foreground */
728  /* Any other layers */
729  /* Check if any of these data exist */
730  uint8 has_spiro=0;
731  uint8 *otherlayers;
732  int i, name_off, l, cnt, sofar;
733  SplineChar *sc;
734  FILE *layr;
735 
736  otherlayers = calloc(sf->layer_cnt,sizeof(uint8));
737 
738  /* We don't need to check in bygid order. We just want to know existance */
739  /* We don't check for refs because a reference to an empty glyph is empty too */
740  for ( i=0; i<sf->glyphcnt; ++i ) {
741  if ( (sc=sf->glyphs[i])!=NULL && sc->ttf_glyph!=-1 ) {
742  if ( pfed_has_spiros(&sc->layers[ly_fore]))
743  has_spiro = true;
744  for ( l=ly_back ; l<sf->layer_cnt; ++l )
745  if ( sc->layers[l].splines!=NULL )
746  otherlayers[l] = true;
747  }
748  }
749  otherlayers[gi->layer] = (!sf->layers[gi->layer].order2 && gi->is_ttf) ||
750  ( sf->layers[gi->layer].order2 && !gi->is_ttf);
751 
752  for ( l=cnt=0; l<sf->layer_cnt; ++l )
753  if ( otherlayers[l] )
754  ++cnt;
755  cnt += has_spiro;
756  if ( cnt==0 ) {
757  free(otherlayers);
758 return;
759  }
760 
761  pfed->subtabs[pfed->next].tag = layr_TAG;
762  pfed->subtabs[pfed->next++].data = layr = tmpfile2();
763 
764  putshort(layr,1); /* sub-table version */
765  putshort(layr,cnt); /* layer count */
766 
767  name_off = 4 + 8 * cnt;
768  if ( has_spiro ) {
769  putshort(layr,1); /* spiros */
770  putshort(layr,name_off);
771  name_off += strlen("Spiro")+1;
772  putlong(layr,0); /* Fill in later */
773  }
774  for ( l=0; l<sf->layer_cnt; ++l ) if ( otherlayers[l]) {
775  putshort(layr,(sf->layers[l].order2?2:3) | /* Quadratic/cubic */
776  (sf->layers[l].background?0:0x100)); /* Fore/Back */
777  putshort(layr,name_off);
778  if ( l==ly_fore ) name_off += strlen("Old_");
779  name_off += strlen(sf->layers[l].name)+1;
780  putlong(layr,0); /* Fill in later */
781  }
782  if ( has_spiro ) {
783  fputs("Spiro",layr);
784  putc('\0',layr);
785  }
786  for ( l=0; l<sf->layer_cnt; ++l ) if ( otherlayers[l]) {
787  if ( l==ly_fore ) fputs("Old_",layr);
788  fputs(sf->layers[l].name,layr);
789  putc('\0',layr);
790  }
791 
792  sofar = 0;
793  if ( has_spiro ) {
794  uint32 pos = ftell(layr);
795  fseek(layr, 4 + 0*8 + 4, SEEK_SET);
796  putlong(layr,pos);
797  fseek(layr, 0, SEEK_END);
798  PfEd_Layer(sf, gi, ly_fore, true, layr);
799  ++sofar;
800  }
801  for ( l=0; l<sf->layer_cnt; ++l ) if ( otherlayers[l]) {
802  uint32 pos = ftell(layr);
803  fseek(layr, 4 + sofar*8 + 4, SEEK_SET);
804  putlong(layr,pos);
805  fseek(layr, 0, SEEK_END);
806  PfEd_Layer(sf, gi, l, false, layr);
807  ++sofar;
808  }
809 
810  if ( ftell(layr) & 1 )
811  putc('\0',layr);
812  if ( ftell(layr) & 2 )
813  putshort(layr,0);
814  free(otherlayers);
815 }
816 
817 void pfed_dump(struct alltabs *at, SplineFont *sf) {
818  struct PfEd_subtabs pfed;
819  FILE *file;
820  int i;
821  uint32 offset;
822 
823  memset(&pfed,0,sizeof(pfed));
824  if ( at->gi.flags & ttf_flag_pfed_comments ) {
825  PfEd_FontComment(sf, &pfed, fcmt_TAG );
826  PfEd_FontComment(sf, &pfed, flog_TAG );
827  PfEd_GlyphComments(sf, &pfed, &at->gi );
828  PfEd_CvtComments(sf, &pfed );
829  }
830  if ( at->gi.flags & ttf_flag_pfed_colors )
831  PfEd_Colours(sf, &pfed, &at->gi );
832  if ( (at->gi.flags & ttf_flag_pfed_lookupnames) && at->opentypemode ) {
833  PfEd_Lookups(sf, &pfed, sf->gsub_lookups, GSUB_TAG );
834  PfEd_Lookups(sf, &pfed, sf->gpos_lookups, GPOS_TAG );
835  }
836  if ( at->gi.flags & ttf_flag_pfed_guides )
837  PfEd_Guides(sf, &pfed);
838  if ( at->gi.flags & ttf_flag_pfed_layers )
839  PfEd_Layers(sf, &pfed, &at->gi);
840 
841  if ( pfed.next==0 )
842 return; /* No subtables */
843 
844  at->pfed = file = tmpfile2();
845  putlong(file, 0x00010000); /* Version number */
846  putlong(file, pfed.next); /* sub-table count */
847  offset = 2*sizeof(uint32) + 2*pfed.next*sizeof(uint32);
848  for ( i=0; i<pfed.next; ++i ) {
849  putlong(file,pfed.subtabs[i].tag);
851  fseek(pfed.subtabs[i].data,0,SEEK_END);
852  pfed.subtabs[i].offset = offset;
853  offset += ftell(pfed.subtabs[i].data);
854  }
855  for ( i=0; i<pfed.next; ++i ) {
856  fseek(pfed.subtabs[i].data,0,SEEK_SET);
857  ttfcopyfile(file,pfed.subtabs[i].data,pfed.subtabs[i].offset,"PfEd-subtable");
858  }
859  if ( ftell(file)&3 )
860  IError("'PfEd' table not properly aligned");
861  at->pfedlen = ftell(file);
862 }
863 
864 /* ************************* The 'PfEd' table ************************* */
865 /* ************************* Input ************************* */
866 
867 static void pfed_readfontcomment(FILE *ttf,struct ttfinfo *info,uint32 base,
868  uint32 tag) {
869  int len;
870  char *start, *pt, *end;
871  int use_utf8;
872 
873  fseek(ttf,base,SEEK_SET);
874  use_utf8 = getushort(ttf);
875  if ( use_utf8!=0 && use_utf8!=1 )
876 return; /* Bad version number */
877  len = getushort(ttf);
878  start = pt = malloc(len+1);
879 
880  end = pt+len;
881  if ( use_utf8 ) {
882  while ( pt<end )
883  *pt++ = getc(ttf);
884  } else {
885  while ( pt<end )
886  *pt++ = getushort(ttf);
887  }
888  *pt = '\0';
889  if ( !use_utf8 ) {
890  pt = latin1_2_utf8_copy(info->fontcomments);
891  free(start);
892  start = pt;
893  }
894  if ( tag==flog_TAG )
895  info->fontlog = start;
896  else
897  info->fontcomments = start;
898 }
899 
900 static char *pfed_read_utf8(FILE *ttf, uint32 start) {
901  int ch, len;
902  char *str, *pt;
903 
904  fseek( ttf, start, SEEK_SET);
905  len = 0;
906  while ( (ch=getc(ttf))!='\0' && ch!=EOF )
907  ++len;
908  fseek( ttf, start, SEEK_SET);
909  str = pt = malloc(len+1);
910  while ( (ch=getc(ttf))!='\0' && ch!=EOF )
911  *pt++ = ch;
912  *pt = '\0';
913 return( str );
914 }
915 
916 static char *pfed_read_ucs2_len(FILE *ttf,uint32 offset,int len) {
917  char *pt, *str;
918  uint32 uch, uch2;
919  int i;
920 
921  if ( len<0 )
922 return( NULL );
923 
924  len>>=1;
925  if ( (pt=str=malloc(len>0 ? 3*len:1))==NULL )
926  return( NULL );
927  fseek(ttf,offset,SEEK_SET);
928  for ( i=0; i<len; ++i ) {
929  uch = getushort(ttf);
930  if ( uch>=0xd800 && uch<0xdc00 ) {
931  /* Is this a possible utf16 surrogate value? */
932  uch2 = getushort(ttf);
933  if ( uch2>=0xdc00 && uch2<0xe000 )
934  uch = ((uch-0xd800)<<10) | (uch2&0x3ff);
935  else {
936  pt = utf8_idpb(pt,uch,0);
937  uch = uch2;
938  }
939  }
940  pt = utf8_idpb(pt,uch,0);
941  }
942  *pt++ = 0;
943 return( realloc(str,pt-str) );
944 }
945 
946 static char *pfed_read_utf8_len(FILE *ttf,uint32 offset,int len) {
947  char *pt, *str;
948  int i;
949 
950  if ( len<0 )
951 return( NULL );
952 
953  pt = str = malloc(len+1);
954  fseek(ttf,offset,SEEK_SET);
955  for ( i=0; i<len; ++i )
956  *pt++ = getc(ttf);
957  *pt = '\0';
958 return( str );
959 }
960 
961 static void pfed_readcvtcomments(FILE *ttf,struct ttfinfo *info,uint32 base ) {
962  int count, i;
963  uint16 *offsets;
964 
965  fseek(ttf,base,SEEK_SET);
966  if ( getushort(ttf)!=0 )
967 return; /* Bad version number */
968  count = getushort(ttf);
969 
970  offsets = malloc(count*sizeof(uint16));
971  info->cvt_names = malloc((count+1)*sizeof(char *));
972  for ( i=0; i<count; ++i )
973  offsets[i] = getushort(ttf);
974  for ( i=0; i<count; ++i ) {
975  if ( offsets[i]==0 )
976  info->cvt_names[i] = NULL;
977  else
978  info->cvt_names[i] = pfed_read_utf8(ttf,base+offsets[i]);
979  }
980  free(offsets);
981 }
982 
983 static void pfed_readglyphcomments(FILE *ttf,struct ttfinfo *info,uint32 base) {
984  int n, i, j;
985  struct grange { int start, end; uint32 offset; } *grange;
986  uint32 offset, next;
987  int use_utf8;
988 
989  fseek(ttf,base,SEEK_SET);
990  use_utf8 = getushort(ttf);
991  if ( use_utf8!=0 && use_utf8!=1 )
992 return; /* Bad version number */
993  n = getushort(ttf);
994  grange = malloc(n*sizeof(struct grange));
995  for ( i=0; i<n; ++i ) {
996  grange[i].start = getushort(ttf);
997  grange[i].end = getushort(ttf);
998  grange[i].offset = getlong(ttf);
999  if ( grange[i].start>grange[i].end || grange[i].end>info->glyph_cnt ) {
1000  LogError( _("Bad glyph range specified in glyph comment subtable of PfEd table\n") );
1001  grange[i].start = 1; grange[i].end = 0;
1002  }
1003  }
1004  for ( i=0; i<n; ++i ) {
1005  for ( j=grange[i].start; j<=grange[i].end; ++j ) {
1006  fseek( ttf,base+grange[i].offset+(j-grange[i].start)*sizeof(uint32),SEEK_SET);
1007  offset = getlong(ttf);
1008  next = getlong(ttf);
1009  if ( use_utf8 )
1010  info->chars[j]->comment = pfed_read_utf8_len(ttf,base+offset,next-offset);
1011  else
1012  info->chars[j]->comment = pfed_read_ucs2_len(ttf,base+offset,next-offset);
1013  if ( info->chars[j]->comment == NULL )
1014  LogError(_("Invalid comment string (negative length?) in 'PfEd' table for glyph %s."),
1015  info->chars[j]->name );
1016  }
1017  }
1018  free(grange);
1019 }
1020 
1021 static void pfed_readcolours(FILE *ttf,struct ttfinfo *info,uint32 base) {
1022  int n, i, j, start, end;
1023  uint32 col;
1024 
1025  fseek(ttf,base,SEEK_SET);
1026  if ( getushort(ttf)!=0 )
1027 return; /* Bad version number */
1028  n = getushort(ttf);
1029  for ( i=0; i<n; ++i ) {
1030  start = getushort(ttf);
1031  end = getushort(ttf);
1032  col = getlong(ttf);
1033  if ( start>end || end>info->glyph_cnt )
1034  LogError( _("Bad glyph range specified in color subtable of PfEd table\n") );
1035  else {
1036  for ( j=start; j<=end; ++j )
1037  info->chars[j]->color = col;
1038  }
1039  }
1040 }
1041 
1043  OTLookup *lookups) {
1044  OTLookup *otl;
1045  struct lookup_subtable *sub;
1046  AnchorClass *ac;
1047  int i, j, k, n, s, a;
1048  struct lstruct { int name_off, subs_off; } *ls, *ss, *as;
1049 
1050  fseek(ttf,base,SEEK_SET);
1051  if ( getushort(ttf)!=0 )
1052 return; /* Bad version number */
1053  n = getushort(ttf);
1054  ls = malloc(n*sizeof(struct lstruct));
1055  for ( i=0; i<n; ++i ) {
1056  ls[i].name_off = getushort(ttf);
1057  ls[i].subs_off = getushort(ttf);
1058  }
1059  for ( i=0, otl=lookups; i<n && otl!=NULL; ++i, otl=otl->next ) {
1060  if ( ls[i].name_off!=0 ) {
1061  free( otl->lookup_name );
1062  otl->lookup_name = pfed_read_utf8(ttf,base+ls[i].name_off);
1063  }
1064  if ( ls[i].subs_off!=0 ) {
1065  fseek(ttf,base+ls[i].subs_off,SEEK_SET);
1066  s = getushort(ttf);
1067  ss = malloc(s*sizeof(struct lstruct));
1068  for ( j=0; j<s; ++j ) {
1069  ss[j].name_off = getushort(ttf);
1070  ss[j].subs_off = getushort(ttf);
1071  }
1072  for ( j=0, sub=otl->subtables; j<s && sub!=NULL; ++j, sub=sub->next ) {
1073  if ( ss[j].name_off!=0 ) {
1074  free( sub->subtable_name );
1075  sub->subtable_name = pfed_read_utf8(ttf,base+ss[j].name_off);
1076  }
1077  if ( ss[j].subs_off!=0 ) {
1078  if ( !sub->anchor_classes )
1079  LogError(_("Whoops, attempt to name anchors in a subtable which doesn't contain any\n"));
1080  else {
1081  fseek(ttf,base+ss[j].subs_off,SEEK_SET);
1082  a = getushort(ttf);
1083  as = malloc(a*sizeof(struct lstruct));
1084  for ( k=0; k<a; ++k ) {
1085  as[k].name_off = getushort(ttf);
1086  }
1087  k=0;
1088  for ( ac=info->ahead; ac!=NULL; ac=ac->next ) {
1089  if ( ac->subtable==sub ) {
1090  if ( as[k].name_off!=0 ) {
1091  free( ac->name );
1092  ac->name = pfed_read_utf8(ttf,base+as[k].name_off);
1093  }
1094  ++k;
1095  }
1096  }
1097  free(as);
1098  }
1099  }
1100  }
1101  /* I guess it's ok for some subtables to be unnamed, so no check for sub!=NULL */
1102  if ( j<s )
1103  LogError(_("Whoops, more names than subtables of lookup %s\n"), otl->lookup_name );
1104  free(ss);
1105  }
1106  }
1107  /* I guess it's ok for some lookups to be unnamed, so no check for otf!=NULL */
1108  if ( i<n )
1109  LogError(_("Whoops, more names than lookups\n") );
1110  free(ls);
1111 }
1112 
1113 static float pfed_get_coord(FILE *ttf,int mod) {
1114  if ( mod==V_B )
1115 return( (float) (signed char) getc(ttf) );
1116  else if ( mod==V_S )
1117 return( (float) (short) getushort(ttf));
1118  else if ( mod==V_F )
1119 return( getlong(ttf)/256.0 );
1120  else {
1121  LogError(_("Bad data type in contour verb in 'PfEd'\n"));
1122 return( 0 );
1123  }
1124 }
1125 
1127  uint32 base, int type) {
1128  SplinePoint *sp, *current;
1129  int verb, v, m;
1130  float offx, offy, offx1, offy1, offx2, offy2;
1131  int was_implicit=false;
1132 
1133  fseek(ttf,base,SEEK_SET);
1134 
1135  verb = getc(ttf);
1136  if ( COM_VERB(verb)!=V_MoveTo ) {
1137  LogError(_("Whoops, contours must begin with a move to\n") );
1138  ss->first = ss->last = SplinePointCreate(0,0);
1139  ss->start_offset = 0;
1140 return;
1141  }
1142  offx = pfed_get_coord(ttf,COM_MOD(verb));
1143  offy = pfed_get_coord(ttf,COM_MOD(verb));
1144  ss->first = current = SplinePointCreate(offx,offy);
1145  ss->start_offset = 0;
1146  for (;;) {
1147  verb = getc(ttf);
1148  v = COM_VERB(verb); m = COM_MOD(verb);
1149  if ( m==3 ) {
1150  LogError(_("Bad data modifier in contour command in 'PfEd'\n") );
1151  break;
1152  }
1153  if ( verb==V_Close || verb==V_End )
1154  break;
1155  else if ( v>=V_LineTo && v<=V_VLineTo ) {
1156  offx = offy = 0;
1157  if ( v==V_LineTo ) {
1158  offx = pfed_get_coord(ttf,m);
1159  offy = pfed_get_coord(ttf,m);
1160  } else if ( v==V_HLineTo )
1161  offx = pfed_get_coord(ttf,m);
1162  else if ( v==V_VLineTo )
1163  offy = pfed_get_coord(ttf,m);
1164  sp = SplinePointCreate(current->me.x+offx,current->me.y+offy);
1165  } else if ( v>=V_QCurveTo && v<=V_QVImplicit ) {
1166  int will_be_implicit = true;
1167  offx = offy = 0; offx1 = offy1 = 1; /* else implicit points become straight lines too soon */
1168  if ( v==V_QCurveTo ) {
1169  offx = pfed_get_coord(ttf,m);
1170  offy = pfed_get_coord(ttf,m);
1171  offx1 = pfed_get_coord(ttf,m);
1172  offy1 = pfed_get_coord(ttf,m);
1173  will_be_implicit = false;
1174  } else if ( v==V_QImplicit ) {
1175  offx = pfed_get_coord(ttf,m);
1176  offy = pfed_get_coord(ttf,m);
1177  } else if ( v==V_QHImplicit ) {
1178  offx = pfed_get_coord(ttf,m);
1179  } else if ( v==V_QVImplicit ) {
1180  offy = pfed_get_coord(ttf,m);
1181  }
1182 
1183  current->nextcp.x = current->me.x+offx;
1184  current->nextcp.y = current->me.y+offy;
1185  current->nonextcp = false;
1186  sp = SplinePointCreate(current->nextcp.x+offx1,current->nextcp.y+offy1);
1187  sp->prevcp = current->nextcp;
1188  sp->noprevcp = false;
1189  if ( was_implicit ) {
1190  current->me.x = (current->prevcp.x + current->nextcp.x)/2;
1191  current->me.y = (current->prevcp.y + current->nextcp.y)/2;
1192  SplineRefigure(current->prev);
1193  }
1194  was_implicit = will_be_implicit;
1195  } else if ( v>=V_CurveTo && v<=V_HVCurveTo ) {
1196  offx=offy=offx2=offy2=0;
1197  if ( v==V_CurveTo ) {
1198  offx = pfed_get_coord(ttf,m);
1199  offy = pfed_get_coord(ttf,m);
1200  offx1 = pfed_get_coord(ttf,m);
1201  offy1 = pfed_get_coord(ttf,m);
1202  offx2 = pfed_get_coord(ttf,m);
1203  offy2 = pfed_get_coord(ttf,m);
1204  } else if ( v==V_VHCurveTo ) {
1205  offy = pfed_get_coord(ttf,m);
1206  offx1 = pfed_get_coord(ttf,m);
1207  offy1 = pfed_get_coord(ttf,m);
1208  offx2 = pfed_get_coord(ttf,m);
1209  } else if ( v==V_HVCurveTo ) {
1210  offx = pfed_get_coord(ttf,m);
1211  offx1 = pfed_get_coord(ttf,m);
1212  offy1 = pfed_get_coord(ttf,m);
1213  offy2 = pfed_get_coord(ttf,m);
1214  }
1215  current->nextcp.x = current->me.x+offx;
1216  current->nextcp.y = current->me.y+offy;
1217  current->nonextcp = false;
1218  sp = SplinePointCreate(current->nextcp.x+offx1+offx2,current->nextcp.y+offy1+offy2);
1219  sp->prevcp.x = current->nextcp.x+offx1;
1220  sp->prevcp.y = current->nextcp.y+offy1;
1221  sp->noprevcp = false;
1222  } else {
1223  LogError(_("Whoops, unexpected verb in contour %d.%d\n"), v, m );
1224  break;
1225  }
1226  SplineMake(current,sp,type==2);
1227  current = sp;
1228  }
1229  if ( verb==V_Close ) {
1230  if ( was_implicit ) {
1231  current->me.x = (current->prevcp.x + ss->first->nextcp.x)/2;
1232  current->me.y = (current->prevcp.y + ss->first->nextcp.y)/2;
1233  }
1234  if ( current->me.x==ss->first->me.x && current->me.y==ss->first->me.y ) {
1235  current->prev->to = ss->first;
1236  ss->first->prev = current->prev;
1237  ss->first->prevcp = current->prevcp;
1238  ss->first->noprevcp = current->noprevcp;
1240  } else
1241  SplineMake(current,ss->first,type==2);
1242  ss->last = ss->first;
1243  } else {
1244  ss->last = current;
1245  }
1246  SPLCategorizePoints(ss);
1247 }
1248 
1250  uint32 base, int type) {
1251  int ch;
1252 
1253  fseek(ttf,base,SEEK_SET);
1254 
1255  for (; ; ) {
1256  ch = getc(ttf);
1257  if ( ch!=SPIRO_OPEN_CONTOUR && ch!=SPIRO_CORNER && ch!=SPIRO_G4 &&
1258  ch!=SPIRO_G2 && ch!=SPIRO_LEFT && ch!=SPIRO_RIGHT &&
1260  LogError(_("Whoops, bad spiro command %d\n"), ch);
1261  break;
1262  }
1263  if ( ss->spiro_cnt>=ss->spiro_max )
1264  ss->spiros = realloc(ss->spiros,(ss->spiro_max+=10)*sizeof(spiro_cp));
1265  ss->spiros[ss->spiro_cnt].ty = ch;
1266  if ( ch!=SPIRO_END ) {
1267  ss->spiros[ss->spiro_cnt].x = getlong(ttf)/256.0;
1268  ss->spiros[ss->spiro_cnt].y = getlong(ttf)/256.0;
1269  } else {
1270  ss->spiros[ss->spiro_cnt].x = 0;
1271  ss->spiros[ss->spiro_cnt].y = 0;
1272  }
1273  ++(ss->spiro_cnt);
1274  if ( ch==SPIRO_END || ch=='}' )
1275  break;
1276  }
1277  if ( ss->spiro_cnt!=0 && ss->spiros[ss->spiro_cnt-1].ty!= SPIRO_END ) {
1278  if ( ss->spiros[ss->spiro_cnt-1].ty==SPIRO_CLOSE_CONTOUR )
1279  ss->spiros[ss->spiro_cnt-1].ty = SPIRO_G4;
1280  if ( ss->spiro_cnt>=ss->spiro_max )
1281  ss->spiros = realloc(ss->spiros,(ss->spiro_max+=2)*sizeof(spiro_cp));
1282  ss->spiros[ss->spiro_cnt].ty = SPIRO_END;
1283  ss->spiros[ss->spiro_cnt].x = 0;
1284  ss->spiros[ss->spiro_cnt].y = 0;
1285  }
1286 }
1287 
1288 static void pfed_read_glyph_layer(FILE *ttf,struct ttfinfo *info,Layer *ly,
1289  uint32 base, int type, int version) {
1290  int cc, rc, i, j;
1291  SplineSet *ss;
1292  struct contours { int data_off, name_off; SplineSet *ss; } *contours;
1293  int gid;
1294  RefChar *last, *cur;
1295 
1296  fseek(ttf,base,SEEK_SET);
1297  cc = getushort(ttf); /* Contours */
1298  rc = 0;
1299  if ( version==1 )
1300  rc = getushort(ttf); /* References */
1301  contours = malloc(cc*sizeof(struct contours));
1302  for ( i=0; i<cc; ++i ) {
1303  contours[i].data_off = getushort(ttf);
1304  contours[i].name_off = getushort(ttf);
1305  }
1306  last = NULL;
1307  for ( i=0; i<rc; ++i ) {
1308  cur = RefCharCreate();
1309  for ( j=0; j<6; ++j )
1310  cur->transform[j] = getlong(ttf)/32768.0;
1311  gid = getushort(ttf);
1312  if ( gid>=info->glyph_cnt ) {
1313  LogError(_("Bad glyph reference in layer info.\n"));
1314  break;
1315  }
1316  cur->sc = info->chars[gid];
1317  cur->orig_pos = gid;
1318  cur->unicode_enc = cur->sc->unicodeenc;
1319  if ( last==NULL )
1320  ly->refs = cur;
1321  else
1322  last->next = cur;
1323  last = cur;
1324  }
1325 
1326  ss = ly->splines; /* Only relevant for spiros where they live in someone else's layer */
1327  for ( i=0; i<cc; ++i ) {
1328  if ( type!=1 ) { /* Not spiros */
1329  contours[i].ss = chunkalloc(sizeof(SplineSet));
1330  if ( i==0 )
1331  ly->splines = contours[i].ss;
1332  else
1333  contours[i-1].ss->next = contours[i].ss;
1334  if ( contours[i].name_off!=0 )
1335  contours[i].ss->contour_name = pfed_read_utf8(ttf,base+contours[i].name_off);
1336  pfed_read_normal_contour(ttf,contours[i].ss,base+contours[i].data_off,type);
1337  } else { /* Spiros are actually bound to an already existing layer and don't have an independent existance yet */
1338  contours[i].ss = ss;
1339  if ( ss!=NULL ) {
1340  pfed_read_spiro_contour(ttf,ss,base+contours[i].data_off,type);
1341  ss = ss->next;
1342  } else
1343  LogError(_("Whoops, Ran out of spiros\n"));
1344  }
1345  }
1346  free(contours);
1347 }
1348 
1349 static void pfed_readguidelines(FILE *ttf,struct ttfinfo *info,uint32 base) {
1350  int i,v,h,off;
1351  int version;
1352  SplinePoint *sp, *nsp;
1353  SplineSet *ss;
1354 
1355  fseek(ttf,base,SEEK_SET);
1356  version = getushort(ttf);
1357  if ( version>1 )
1358 return; /* Bad version number */
1359  v = getushort(ttf);
1360  h = getushort(ttf);
1361  (void) getushort(ttf);
1362  off = getushort(ttf);
1363 
1364  if ( off!=0 ) {
1365  pfed_read_glyph_layer(ttf,info,&info->guidelines,base+off,info->to_order2?2:3,version);
1366  } else {
1367  struct npos { int pos; int offset; } *vs, *hs;
1368  vs = malloc(v*sizeof(struct npos));
1369  hs = malloc(h*sizeof(struct npos));
1370  for ( i=0; i<v; ++i ) {
1371  vs[i].pos = (short) getushort(ttf);
1372  vs[i].offset = getushort(ttf);
1373  }
1374  for ( i=0; i<h; ++i ) {
1375  hs[i].pos = (short) getushort(ttf);
1376  hs[i].offset = getushort(ttf);
1377  }
1378  for ( i=0; i<v; ++i ) {
1379  sp = SplinePointCreate(vs[i].pos,-info->emsize);
1380  nsp = SplinePointCreate(vs[i].pos,2*info->emsize);
1381  SplineMake(sp,nsp,info->to_order2);
1382  ss = chunkalloc(sizeof(SplineSet));
1383  ss->first = sp; ss->last = nsp;
1384  if ( vs[i].offset!=0 )
1385  ss->contour_name = pfed_read_utf8(ttf,base+vs[i].offset);
1386  ss->next = info->guidelines.splines;
1387  info->guidelines.splines = ss;
1388  }
1389  for ( i=0; i<h; ++i ) {
1390  sp = SplinePointCreate(-info->emsize,hs[i].pos);
1391  nsp = SplinePointCreate(2*info->emsize,hs[i].pos);
1392  SplineMake(sp,nsp,info->to_order2);
1393  ss = chunkalloc(sizeof(SplineSet));
1394  ss->first = sp; ss->last = nsp;
1395  if ( hs[i].offset!=0 )
1396  ss->contour_name = pfed_read_utf8(ttf,base+hs[i].offset);
1397  ss->next = info->guidelines.splines;
1398  info->guidelines.splines = ss;
1399  }
1400  SPLCategorizePoints(info->guidelines.splines);
1401  free(vs); free(hs);
1402  }
1403 }
1404 
1405 static void pfed_redo_refs(SplineChar *sc,int layer) {
1406  RefChar *refs;
1407 
1408  sc->ticked = true;
1409  for ( refs=sc->layers[layer].refs; refs!=NULL; refs=refs->next ) {
1410  if ( layer==1 && refs->sc==NULL ) /* If main layer has spiros attached, then we'll get here. Any refs will come from the main ttf reading routines and won't be fixed up yet */
1411  continue;
1412  if ( !refs->sc->ticked )
1413  pfed_redo_refs(refs->sc,layer);
1415  }
1416 }
1417 
1418 static void pfed_read_layer(FILE *ttf,struct ttfinfo *info,int layer,int type, uint32 base,
1419  uint32 start,int version) {
1420  uint32 *loca = calloc(info->glyph_cnt,sizeof(uint32));
1421  int i,j;
1422  SplineChar *sc;
1423  int rcnt;
1424  struct range { int start, last; uint32 offset; } *ranges;
1425 
1426  fseek(ttf,start,SEEK_SET);
1427  rcnt = getushort(ttf);
1428  ranges = malloc(rcnt*sizeof(struct range));
1429  for ( i=0; i<rcnt; ++i ) {
1430  ranges[i].start = getushort(ttf);
1431  ranges[i].last = getushort(ttf);
1432  ranges[i].offset = getlong(ttf);
1433  }
1434  for ( i=0; i<rcnt; ++i ) {
1435  fseek(ttf,base+ranges[i].offset,SEEK_SET);
1436  for ( j=ranges[i].start; j<=ranges[i].last; ++j )
1437  loca[j] = getlong(ttf);
1438  for ( j=ranges[i].start; j<=ranges[i].last; ++j ) {
1439  Layer *ly;
1440  sc = info->chars[j];
1441  ly = &sc->layers[layer];
1442  if ( loca[j]!=0 )
1443  pfed_read_glyph_layer(ttf,info,ly,base+loca[j],type,version);
1444  }
1445  }
1446  free(ranges); free(loca);
1447 
1448  for ( i=0; i<info->glyph_cnt; ++i ) if ( info->chars[i]!=NULL )
1449  info->chars[i]->ticked = false;
1450  for ( i=0; i<info->glyph_cnt; ++i ) if ( info->chars[i]!=NULL )
1451  pfed_redo_refs(info->chars[i],layer);
1452 }
1453 
1454 static void pfed_readotherlayers(FILE *ttf,struct ttfinfo *info,uint32 base) {
1455  int i, l, lcnt, spiro_index, gid;
1456  int version;
1457  struct layer_info { int type, name_off, data_off, sf_layer; char *name; } *layers;
1458  int non_spiro_cnt=0;
1459  SplineChar *sc;
1460 
1461  fseek(ttf,base,SEEK_SET);
1462  version = getushort(ttf);
1463  if ( version>1 )
1464 return; /* Bad version number */
1465  lcnt = getushort(ttf);
1466  layers = malloc(lcnt*sizeof(struct layer_info));
1467  for ( i=0; i<lcnt; ++i ) {
1468  layers[i].type = getushort(ttf);
1469  layers[i].name_off = getushort(ttf);
1470  layers[i].data_off = getlong(ttf);
1471  layers[i].sf_layer = -1;
1472  }
1473  spiro_index = -1;
1474  non_spiro_cnt = 0;
1475  for ( i=0; i<lcnt; ++i ) {
1476  if ( layers[i].name_off==0 )
1477  layers[i].name = copy("Unnamed");
1478  else {
1479  layers[i].name = pfed_read_utf8(ttf,base+layers[i].name_off);
1480  if ( layers[i].type==1 && strcmp(layers[i].name,"Spiro")==0 )
1481  spiro_index = i;
1482  }
1483  if ( layers[i].type==2 || layers[i].type==3 || layers[i].type==0x102 || layers[i].type==0x103 )
1484  ++non_spiro_cnt;
1485  }
1486  if ( spiro_index==-1 ) {
1487  for ( i=0; i<lcnt; ++i )
1488  if ( layers[i].type==1 ) {
1489  spiro_index=i;
1490  break;
1491  }
1492  }
1493 
1494  if ( non_spiro_cnt!=0 ) {
1495  info->layer_cnt = non_spiro_cnt+1;
1496  info->layers = calloc(info->layer_cnt+1,sizeof(LayerInfo));
1497  info->layers[ly_back].background = true;
1498  info->layers[ly_fore].order2 = info->to_order2;
1499  info->layers[ly_fore].background = false;
1500  l = i = 0;
1501  if ( (layers[i].type&0xff)==1 )
1502  ++i;
1503  if ( layers[i].type&0x100 ) {
1504  /* first layer output is foreground, so it can't replace the background layer */
1505  ++info->layer_cnt;
1506  l = 2;
1507  info->layers[ly_back].order2 = info->to_order2;
1508  }
1509  for ( ; i<lcnt; ++i ) if ( (layers[i].type&0xff)==2 || (layers[i].type&0xff)==3 ) {
1510  info->layers[l].name = layers[i].name;
1511  layers[i].name = NULL;
1512  layers[i].sf_layer = l;
1513  info->layers[l].order2 = (layers[i].type&0xff)==2;
1514  info->layers[l].background = (layers[i].type&0x100)?0:1;
1515  if ( l==0 ) l=2; else ++l;
1516  }
1517  if ( info->layer_cnt!=2 ) {
1518  for ( gid = 0; gid<info->glyph_cnt; ++gid ) if ((sc=info->chars[gid])!=NULL ) {
1519  sc->layers = realloc(sc->layers,info->layer_cnt*sizeof(Layer));
1520  memset(sc->layers+2,0,(info->layer_cnt-2)*sizeof(Layer));
1521  sc->layer_cnt = info->layer_cnt;
1522  }
1523  }
1524  }
1525  if ( spiro_index!=-1 )
1526  pfed_read_layer(ttf,info,ly_fore,layers[spiro_index].type,base,base+layers[spiro_index].data_off,version);
1527  for ( i=0; i<lcnt; ++i ) if ( layers[i].sf_layer!=-1 ) {
1528  pfed_read_layer(ttf,info,layers[i].sf_layer,layers[i].type&0xff,
1529  base,base+layers[i].data_off,version);
1530  }
1531  for ( i=0; i<lcnt; ++i )
1532  free( layers[i].name );
1533  free( layers );
1534 }
1535 
1536 void pfed_read(FILE *ttf,struct ttfinfo *info) {
1537  int n,i;
1538  struct tagoff { uint32 tag, offset; } tagoff[MAX_SUBTABLE_TYPES+30];
1539 
1540  fseek(ttf,info->pfed_start,SEEK_SET);
1541 
1542  if ( getlong(ttf)!=0x00010000 )
1543 return;
1544  n = getlong(ttf);
1545  if ( n>=MAX_SUBTABLE_TYPES+30 )
1546  n = MAX_SUBTABLE_TYPES+30;
1547  for ( i=0; i<n; ++i ) {
1548  tagoff[i].tag = getlong(ttf);
1549  tagoff[i].offset = getlong(ttf);
1550  }
1551  for ( i=0; i<n; ++i ) switch ( tagoff[i].tag ) {
1552  case fcmt_TAG: case flog_TAG:
1553  pfed_readfontcomment(ttf,info,info->pfed_start+tagoff[i].offset, tagoff[i].tag);
1554  break;
1555  case cvtc_TAG:
1556  pfed_readcvtcomments(ttf,info,info->pfed_start+tagoff[i].offset);
1557  break;
1558  case cmnt_TAG:
1559  pfed_readglyphcomments(ttf,info,info->pfed_start+tagoff[i].offset);
1560  break;
1561  case colr_TAG:
1562  pfed_readcolours(ttf,info,info->pfed_start+tagoff[i].offset);
1563  break;
1564  case GPOS_TAG:
1565  pfed_readlookupnames(ttf,info,info->pfed_start+tagoff[i].offset,info->gpos_lookups);
1566  break;
1567  case GSUB_TAG:
1568  pfed_readlookupnames(ttf,info,info->pfed_start+tagoff[i].offset,info->gsub_lookups);
1569  break;
1570  case layr_TAG:
1571  pfed_readotherlayers(ttf,info,info->pfed_start+tagoff[i].offset);
1572  break;
1573  case guid_TAG:
1574  pfed_readguidelines(ttf,info,info->pfed_start+tagoff[i].offset);
1575  break;
1576  default:
1577  LogError( _("Unknown subtable '%c%c%c%c' in 'PfEd' table, ignored\n"),
1578  tagoff[i].tag>>24, (tagoff[i].tag>>16)&0xff, (tagoff[i].tag>>8)&0xff, tagoff[i].tag&0xff );
1579  break;
1580  }
1581 }
1582 
1583 /* 'TeX ' table format is as follows... */
1584 /* uint32 version number 0x00010000 */
1585 /* uint32 subtable count */
1586 /* struct { uint32 tab, offset } tag/offset for first subtable */
1587 /* struct { uint32 tab, offset } tag/offset for second subtable */
1588 /* ... */
1589 
1590 /* 'TeX ' 'ftpm' font parameter subtable format */
1591 /* short version number 0 */
1592 /* parameter count */
1593 /* array of { 4chr tag, value } */
1594 
1595 /* 'TeX ' 'htdp' per-glyph height/depth subtable format */
1596 /* short version number 0 */
1597 /* short glyph-count */
1598 /* array[glyph-count] of { int16 height,depth } */
1599 
1600 /* 'TeX ' 'itlc' per-glyph italic correction subtable */
1601 /* short version number 0 */
1602 /* short glyph-count */
1603 /* array[glyph-count] of int16 italic_correction */
1604 
1605 /* !!!!!!!!!!! OBSOLETE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
1606 /* 'TeX ' 'sbsp' per-glyph sub/super script positioning subtable */
1607 /* short version number 0 */
1608 /* short glyph-count */
1609 /* array[glyph-count] of { int16 sub,super } */
1610 
1611 #undef MAX_SUBTABLE_TYPES
1612 #define MAX_SUBTABLE_TYPES 4
1613 
1614 struct TeX_subtabs {
1615  int next;
1616  struct {
1621 };
1622 
1624  TeX_Slant,
1625  TeX_Space,
1626  TeX_Stretch,
1627  TeX_Shrink,
1628  TeX_XHeight,
1629  TeX_Quad,
1630  TeX_ExtraSp,
1631  0
1632 };
1634  TeX_Slant,
1635  TeX_Space,
1636  TeX_Stretch,
1637  TeX_Shrink,
1638  TeX_XHeight,
1639  TeX_Quad,
1640  TeX_MathSp,
1641  TeX_Num1,
1642  TeX_Num2,
1643  TeX_Num3,
1644  TeX_Denom1,
1645  TeX_Denom2,
1646  TeX_Sup1,
1647  TeX_Sup2,
1648  TeX_Sup3,
1649  TeX_Sub1,
1650  TeX_Sub2,
1651  TeX_SupDrop,
1652  TeX_SubDrop,
1653  TeX_Delim1,
1654  TeX_Delim2,
1656  0};
1658  TeX_Slant,
1659  TeX_Space,
1660  TeX_Stretch,
1661  TeX_Shrink,
1662  TeX_XHeight,
1663  TeX_Quad,
1664  TeX_MathSp,
1671  0};
1672 
1673 /* ************************************************************************** */
1674 /* ************************* The 'TeX ' table ************************* */
1675 /* ************************* Output ************************* */
1676 /* ************************************************************************** */
1677 
1678 static void TeX_dumpFontParams(SplineFont *sf, struct TeX_subtabs *tex, struct alltabs *at ) {
1679  FILE *fprm;
1680  int i,pcnt;
1681  uint32 *tags;
1682 
1683  if ( sf->texdata.type==tex_unset )
1684 return;
1685  tex->subtabs[tex->next].tag = CHR('f','t','p','m');
1686  tex->subtabs[tex->next++].data = fprm = tmpfile2();
1687 
1688  putshort(fprm,0); /* sub-table version number */
1689  pcnt = sf->texdata.type==tex_math ? 22 : sf->texdata.type==tex_mathext ? 13 : 7;
1690  tags = sf->texdata.type==tex_math ? tex_math_params :
1691  sf->texdata.type==tex_mathext ? tex_mathext_params :
1693  putshort(fprm,pcnt);
1694  for ( i=0; i<pcnt; ++i ) {
1695  putlong(fprm,tags[i]);
1696  putlong(fprm,sf->texdata.params[i]);
1697  }
1698  /* always aligned */
1699 }
1700 
1701 static void TeX_dumpHeightDepth(SplineFont *sf, struct TeX_subtabs *tex, struct alltabs *at ) {
1702  FILE *htdp;
1703  int i,j,k,last_g, gid;
1704  DBounds b;
1705 
1706  for ( i=at->gi.gcnt-1; i>=0; --i ) {
1707  gid = at->gi.bygid[i];
1708  if ( gid!=-1 && sf->glyphs[gid]!=NULL &&
1709  (sf->glyphs[gid]->tex_height!=TEX_UNDEF || sf->glyphs[gid]->tex_depth!=TEX_UNDEF))
1710  break;
1711  }
1712  if ( i<0 ) /* No height/depth info */
1713 return;
1714 
1715  tex->subtabs[tex->next].tag = CHR('h','t','d','p');
1716  tex->subtabs[tex->next++].data = htdp = tmpfile2();
1717 
1718  putshort(htdp,0); /* sub-table version number */
1719  putshort(htdp,sf->glyphs[gid]->ttf_glyph+1);/* data for this many glyphs */
1720 
1721  last_g = -1;
1722  for ( j=0; j<=i; ++j ) {
1723  gid = at->gi.bygid[j];
1724  if ( gid!=-1 && sf->glyphs[gid]!=NULL ) {
1725  SplineChar *sc = sf->glyphs[gid];
1726  for ( k=last_g+1; k<sc->ttf_glyph; ++k ) {
1727  putshort(htdp,0);
1728  putshort(htdp,0);
1729  }
1730  if ( sc->tex_depth==TEX_UNDEF || sc->tex_height==TEX_UNDEF )
1732  putshort( htdp, sc->tex_height==TEX_UNDEF ? b.maxy : sc->tex_height );
1733  putshort( htdp, sc->tex_depth==TEX_UNDEF ? -b.miny : sc->tex_depth );
1734  last_g = sc->ttf_glyph;
1735  }
1736  }
1737  /* always aligned */
1738 }
1739 
1740 static void TeX_dumpItalicCorr(SplineFont *sf, struct TeX_subtabs *tex, struct alltabs *at ) {
1741  FILE *itlc;
1742  int i,j,k,last_g, gid;
1743 
1744  for ( i=at->gi.gcnt-1; i>=0; --i ) {
1745  gid = at->gi.bygid[i];
1746  if ( gid!=-1 && sf->glyphs[gid]!=NULL &&
1747  sf->glyphs[gid]->italic_correction!=TEX_UNDEF )
1748  break;
1749  }
1750  if ( i<0 ) /* No italic_correction info */
1751 return;
1752 
1753  tex->subtabs[tex->next].tag = CHR('i','t','l','c');
1754  tex->subtabs[tex->next++].data = itlc = tmpfile2();
1755 
1756  putshort(itlc,0); /* sub-table version number */
1757  putshort(itlc,sf->glyphs[gid]->ttf_glyph+1);/* data for this many glyphs */
1758 
1759  last_g = -1;
1760  for ( j=0; j<=i; ++j ) {
1761  gid = at->gi.bygid[j];
1762  if ( gid!=-1 && sf->glyphs[gid]!=NULL ) {
1763  SplineChar *sc = sf->glyphs[gid];
1764  for ( k=last_g+1; k<sc->ttf_glyph; ++k ) {
1765  putshort(itlc,0);
1766  putshort(itlc,0);
1767  }
1768  putshort( itlc, sc->italic_correction!=TEX_UNDEF ? sc->italic_correction :
1769  0 );
1770  last_g = sc->ttf_glyph;
1771  }
1772  }
1773  /* always aligned */
1774 }
1775 
1776 void tex_dump(struct alltabs *at, SplineFont *sf) {
1777  struct TeX_subtabs tex;
1778  FILE *file;
1779  int i;
1780  uint32 offset;
1781 
1782  if ( !(at->gi.flags & ttf_flag_TeXtable ))
1783 return;
1784 
1785  memset(&tex,0,sizeof(tex));
1786  TeX_dumpFontParams(sf,&tex,at);
1787  TeX_dumpHeightDepth(sf,&tex,at);
1788  TeX_dumpItalicCorr(sf,&tex,at);
1789 
1790  if ( tex.next==0 )
1791 return; /* No subtables */
1792 
1793  at->tex = file = tmpfile2();
1794  putlong(file, 0x00010000); /* Version number */
1795  putlong(file, tex.next); /* sub-table count */
1796  offset = 2*sizeof(uint32) + 2*tex.next*sizeof(uint32);
1797  for ( i=0; i<tex.next; ++i ) {
1798  putlong(file,tex.subtabs[i].tag);
1799  putlong(file,offset);
1800  fseek(tex.subtabs[i].data,0,SEEK_END);
1801  tex.subtabs[i].offset = offset;
1802  offset += ftell(tex.subtabs[i].data);
1803  }
1804  for ( i=0; i<tex.next; ++i ) {
1805  fseek(tex.subtabs[i].data,0,SEEK_SET);
1806  ttfcopyfile(file,tex.subtabs[i].data,tex.subtabs[i].offset,"TeX-subtable");
1807  }
1808  if ( ftell(file)&2 )
1809  putshort(file,0);
1810  if ( ftell(file)&3 )
1811  IError("'TeX ' table not properly aligned");
1812  at->texlen = ftell(file);
1813 }
1814 
1815 /* ************************* The 'TeX ' table ************************* */
1816 /* ************************* Input ************************* */
1817 
1818 static void TeX_readFontParams(FILE *ttf,struct ttfinfo *info,uint32 base) {
1819  int i,pcnt;
1820  static uint32 *alltags[] = { tex_text_params, tex_math_params, tex_mathext_params };
1821  int j,k;
1822  uint32 tag;
1823  int32 val;
1824 
1825  fseek(ttf,base,SEEK_SET);
1826  if ( getushort(ttf)!=0 ) /* Don't know how to read this version of the subtable */
1827 return;
1828  pcnt = getushort(ttf);
1829  if ( pcnt==22 ) info->texdata.type = tex_math;
1830  else if ( pcnt==13 ) info->texdata.type = tex_mathext;
1831  else if ( pcnt>=7 ) info->texdata.type = tex_text;
1832  for ( i=0; i<pcnt; ++i ) {
1833  tag = getlong(ttf);
1834  val = getlong(ttf);
1835  for ( j=0; j<3; ++j ) {
1836  for ( k=0; alltags[j][k]!=0; ++k )
1837  if ( alltags[j][k]==tag )
1838  break;
1839  if ( alltags[j][k]==tag )
1840  break;
1841  }
1842  if ( j<3 )
1843  info->texdata.params[k] = val;
1844  }
1845 }
1846 
1847 static void TeX_readHeightDepth(FILE *ttf,struct ttfinfo *info,uint32 base) {
1848  int i,gcnt;
1849 
1850  fseek(ttf,base,SEEK_SET);
1851  if ( getushort(ttf)!=0 ) /* Don't know how to read this version of the subtable */
1852 return;
1853  gcnt = getushort(ttf);
1854  for ( i=0; i<gcnt && i<info->glyph_cnt; ++i ) {
1855  int h, d;
1856  h = getushort(ttf);
1857  d = getushort(ttf);
1858  if ( info->chars[i]!=NULL ) {
1859  info->chars[i]->tex_height = h;
1860  info->chars[i]->tex_depth = d;
1861  }
1862  }
1863 }
1864 
1865 static void TeX_readItalicCorr(FILE *ttf,struct ttfinfo *info,uint32 base) {
1866  int i,gcnt;
1867 
1868  fseek(ttf,base,SEEK_SET);
1869  if ( getushort(ttf)!=0 ) /* Don't know how to read this version of the subtable */
1870 return;
1871  gcnt = getushort(ttf);
1872  for ( i=0; i<gcnt && i<info->glyph_cnt; ++i ) {
1873  int ital;
1874  ital = getushort(ttf);
1875  if ( info->chars[i]!=NULL ) {
1876  info->chars[i]->italic_correction = ital;
1877  }
1878  }
1879 }
1880 
1881 void tex_read(FILE *ttf,struct ttfinfo *info) {
1882  int n,i;
1883  struct tagoff { uint32 tag, offset; } tagoff[MAX_SUBTABLE_TYPES+30];
1884 
1885  fseek(ttf,info->tex_start,SEEK_SET);
1886 
1887  if ( getlong(ttf)!=0x00010000 )
1888 return;
1889  n = getlong(ttf);
1890  if ( n>=MAX_SUBTABLE_TYPES+30 )
1891  n = MAX_SUBTABLE_TYPES+30;
1892  for ( i=0; i<n; ++i ) {
1893  tagoff[i].tag = getlong(ttf);
1894  tagoff[i].offset = getlong(ttf);
1895  }
1896  for ( i=0; i<n; ++i ) switch ( tagoff[i].tag ) {
1897  case CHR('f','t','p','m'):
1898  TeX_readFontParams(ttf,info,info->tex_start+tagoff[i].offset);
1899  break;
1900  case CHR('h','t','d','p'):
1901  TeX_readHeightDepth(ttf,info,info->tex_start+tagoff[i].offset);
1902  break;
1903  case CHR('i','t','l','c'):
1904  TeX_readItalicCorr(ttf,info,info->tex_start+tagoff[i].offset);
1905  break;
1906  default:
1907  LogError( _("Unknown subtable '%c%c%c%c' in 'TeX ' table, ignored\n"),
1908  tagoff[i].tag>>24, (tagoff[i].tag>>16)&0xff, (tagoff[i].tag>>8)&0xff, tagoff[i].tag&0xff );
1909  break;
1910  }
1911 }
1912 
1913 /* ************************************************************************** */
1914 /* ************************* The 'BDF ' table ************************* */
1915 /* ************************* Output ************************* */
1916 /* ************************************************************************** */
1917 
1918 /* the BDF table is used to store BDF properties so that we can do round trip */
1919 /* conversion from BDF->otb->BDF without losing anything. */
1920 /* Format:
1921  USHORT version : 'BDF' table version number, must be 0x0001
1922  USHORT strikeCount : number of strikes in table
1923  ULONG stringTable : offset (from start of BDF table) to string table
1924 
1925 followed by an array of 'strikeCount' descriptors that look like:
1926  USHORT ppem : vertical pixels-per-EM for this strike
1927  USHORT num_items : number of items (properties and atoms), max is 255
1928 
1929 this array is followed by 'strikeCount' value sets. Each "value set" is
1930 an array of (num_items) items that look like:
1931  ULONG item_name : offset in string table to item name
1932  USHORT item_type : item type: 0 => non-property string (e.g. COMMENT)
1933  1 => non-property atom (e.g. FONT)
1934  2 => non-property int32
1935  3 => non-property uint32
1936  0x10 => flag for a property, ored
1937  with above value types)
1938  ULONG item_value : item value.
1939  strings => an offset into the string table
1940  to the corresponding string,
1941  without the surrending double-quotes
1942 
1943  atoms => an offset into the string table
1944 
1945  integers => the corresponding 32-bit value
1946 Then the string table of null terminated strings. These strings should be in
1947 ASCII.
1948 */
1949 
1950 /* ************************* The 'BDF ' table ************************* */
1951 /* ************************* Input ************************* */
1952 
1953 static char *getstring(FILE *ttf,long start) {
1954  long here = ftell(ttf);
1955  int len, ch;
1956  char *str, *pt;
1957 
1958  if ( here<0 ) return( NULL );
1959  fseek(ttf,start,SEEK_SET);
1960  for ( len=1; (ch=getc(ttf))>0 ; ++len );
1961  fseek(ttf,start,SEEK_SET);
1962  pt = str = malloc(len);
1963  while ( (ch=getc(ttf))>0 )
1964  *pt++ = ch;
1965  *pt = '\0';
1966  fseek(ttf,here,SEEK_SET);
1967 return( str );
1968 }
1969 
1970 /* COMMENTS get stored all in one lump by freetype. De-lump them */
1971 static int CheckForNewlines(BDFFont *bdf,int k) {
1972  char *pt, *start;
1973  int cnt, i;
1974 
1975  for ( cnt=0, pt = bdf->props[k].u.atom; *pt; ++pt )
1976  if ( *pt=='\n' )
1977  ++cnt;
1978  if ( cnt==0 )
1979 return( k );
1980 
1981  bdf->prop_cnt += cnt;
1982  bdf->props = realloc(bdf->props, bdf->prop_cnt*sizeof( BDFProperties ));
1983 
1984  pt = strchr(bdf->props[k].u.atom,'\n');
1985  *pt = '\0'; ++pt;
1986  for ( i=1; i<=cnt; ++i ) {
1987  start = pt;
1988  while ( *pt!='\n' && *pt!='\0' ) ++pt;
1989  bdf->props[k+i].name = copy(bdf->props[k].name);
1990  bdf->props[k+i].type = bdf->props[k].type;
1991  bdf->props[k+i].u.atom = copyn(start,pt-start);
1992  if ( *pt=='\n' ) ++pt;
1993  }
1994  pt = copy( bdf->props[k].u.atom );
1995  free( bdf->props[k].u.atom );
1996  bdf->props[k].u.atom = pt;
1997 return( k+cnt );
1998 }
1999 
2000 void ttf_bdf_read(FILE *ttf,struct ttfinfo *info) {
2001  int strike_cnt, i,j,k;
2002  long string_start;
2003  struct bdfinfo { BDFFont *bdf; int cnt; } *bdfinfo;
2004  BDFFont *bdf;
2005 
2006  if ( info->bdf_start==0 )
2007 return;
2008  fseek(ttf,info->bdf_start,SEEK_SET);
2009  if ( getushort(ttf)!=1 )
2010 return;
2011  strike_cnt = getushort(ttf);
2012  string_start = getlong(ttf) + info->bdf_start;
2013 
2014  bdfinfo = malloc(strike_cnt*sizeof(struct bdfinfo));
2015  for ( i=0; i<strike_cnt; ++i ) {
2016  int ppem, num_items;
2017  ppem = getushort(ttf);
2018  num_items = getushort(ttf);
2019  for ( bdf=info->bitmaps; bdf!=NULL; bdf=bdf->next )
2020  if ( bdf->pixelsize==ppem )
2021  break;
2022  bdfinfo[i].bdf = bdf;
2023  bdfinfo[i].cnt = num_items;
2024  }
2025 
2026  for ( i=0; i<strike_cnt; ++i ) {
2027  if ( (bdf = bdfinfo[i].bdf) ==NULL )
2028  fseek(ttf,10*bdfinfo[i].cnt,SEEK_CUR);
2029  else {
2030  bdf->prop_cnt = bdfinfo[i].cnt;
2031  bdf->props = malloc(bdf->prop_cnt*sizeof(BDFProperties));
2032  for ( j=k=0; j<bdfinfo[i].cnt; ++j, ++k ) {
2033  long name = getlong(ttf);
2034  int type = getushort(ttf);
2035  long value = getlong(ttf);
2036  bdf->props[k].type = type;
2037  bdf->props[k].name = getstring(ttf,string_start+name);
2038  switch ( type&~prt_property ) {
2039  case prt_int: case prt_uint:
2040  bdf->props[k].u.val = value;
2041  if ( strcmp(bdf->props[k].name,"FONT_ASCENT")==0 &&
2042  value<=bdf->pixelsize ) {
2043  bdf->ascent = value;
2044  bdf->descent = bdf->pixelsize-value;
2045  }
2046  break;
2047  case prt_string: case prt_atom:
2048  bdf->props[k].u.str = getstring(ttf,string_start+value);
2049  k = CheckForNewlines(bdf,k);
2050  break;
2051  }
2052  }
2053  }
2054  }
2055  free(bdfinfo);
2056 }
2057 
2058 
2059 /* ************************************************************************** */
2060 /* ************************* The 'FFTM' table ************************* */
2061 /* ************************* Output ************************* */
2062 /* ************************************************************************** */
2063 
2064 /* FontForge timestamp table */
2065 /* Contains: */
2066 /* date of fontforge sources */
2067 /* date of font's (not file's) creation */
2068 /* date of font's modification */
2070  int32 results[2];
2071 
2072  at->fftmf = tmpfile2();
2073 
2074  putlong(at->fftmf,0x00000001); /* Version */
2075 
2077  putlong(at->fftmf,results[1]);
2078  putlong(at->fftmf,results[0]);
2079 
2080  cvt_unix_to_1904(sf->creationtime,results);
2081  putlong(at->fftmf,results[1]);
2082  putlong(at->fftmf,results[0]);
2083 
2084  cvt_unix_to_1904(sf->modificationtime,results);
2085  putlong(at->fftmf,results[1]);
2086  putlong(at->fftmf,results[0]);
2087 
2088  at->fftmlen = ftell(at->fftmf); /* had better be 7*4 */
2089  /* It will never be misaligned */
2090  if ( (at->fftmlen&1)!=0 )
2091  putc(0,at->fftmf);
2092  if ( ((at->fftmlen+1)&2)!=0 )
2093  putshort(at->fftmf,0);
2094 return( true );
2095 }
double __cdecl rint(double _X)
return _Result< 0 ? -1 :_Result;} #line 1069 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vsnwprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsnwprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1091 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vsnwprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format, va_list _ArgList) { return _vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);} #line 1108 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnwprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format, va_list _Args);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnwprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format, va_list _ArgList) { return _vsnwprintf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1133 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_c_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1163 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_c(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1179 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);} #line 1196 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl __vswprintf_l(wchar_t *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vswprintf_l(_Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1212 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf(wchar_t *const _Buffer, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_l(_Buffer,(size_t) -1, _Format,((void *) 0), _ArgList);} #line 1227 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswprintf(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1243 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1264 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1281 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 1283 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_p_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf_p((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1312 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_p(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1328 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf_l(wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1347 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf(wchar_t const *const _Format, va_list _ArgList) { return _vscwprintf_l(_Format,((void *) 0), _ArgList);} #line 1361 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf_p_l(wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf_p((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1380 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf_p(wchar_t const *const _Format, va_list _ArgList) { return _vscwprintf_p_l(_Format,((void *) 0), _ArgList);} #line 1394 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl __swprintf_l(wchar_t *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__vswprintf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1414 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1435 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf(wchar_t *const _Buffer, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__vswprintf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1454 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl swprintf(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1474 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "__swprintf_l_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl __swprintf_l(wchar_t *_Buffer, wchar_t const *_Format, _locale_t _Locale,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vswprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl __vswprintf_l(wchar_t *_Buffer, wchar_t const *_Format, _locale_t _Locale, va_list _Args);__declspec(deprecated("This function or variable may be unsafe. Consider using " "swprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _swprintf(wchar_t *_Buffer, wchar_t const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "vswprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vswprintf(wchar_t *_Buffer, wchar_t const *_Format, va_list _Args);__inline int __cdecl _swprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1511 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl swprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1532 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 1534 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_p_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_p_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1562 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_p(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1582 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_c_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1603 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_c(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1623 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwprintf_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1646 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1668 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1690 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1711 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf_l(wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1737 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf(wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_l(_Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1755 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf_p_l(wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_p_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1774 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf_p(wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_p_l(_Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1792 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #pragma warning(push) #pragma warning(disable:4141 6054) #pragma warning(pop) #line 1856 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" int __cdecl __stdio_common_vswscanf(unsigned __int64 _Options, wchar_t const *_Buffer, size_t _BufferCount, wchar_t const *_Format, _locale_t _Locale, va_list _ArgList);__inline int __cdecl _vswscanf_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options()), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1897 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswscanf(wchar_t const *_Buffer, wchar_t const *_Format, va_list _ArgList) { return _vswscanf_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 1912 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswscanf_s_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1930 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswscanf_s(wchar_t const *const _Buffer, wchar_t const *const _Format, va_list _ArgList) { return _vswscanf_s_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 1947 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 1949 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnwscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnwscanf_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);} #line 1976 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vsnwscanf_s_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format, _Locale, _ArgList);} #line 1995 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_swscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _swscanf_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2015 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "swscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl swscanf(wchar_t const *const _Buffer, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2034 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swscanf_s_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_s_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2054 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl swscanf_s(wchar_t const *const _Buffer, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_s_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2075 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 2077 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwscanf_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2100 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwscanf(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2122 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwscanf_s_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2143 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwscanf_s(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2163 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __pragma(pack(pop))#pragma warning(pop) #pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) typedef __int64 fpos_t;errno_t __cdecl _get_stream_buffer_pointers(FILE *_Stream, char ***_Base, char ***_Pointer, int **_Count);errno_t __cdecl clearerr_s(FILE *_Stream);errno_t __cdecl fopen_s(FILE **_Stream, char const *_FileName, char const *_Mode);size_t __cdecl fread_s(void *_Buffer, size_t _BufferSize, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);errno_t __cdecl freopen_s(FILE **_Stream, char const *_FileName, char const *_Mode, FILE *_OldStream);char *__cdecl gets_s(char *_Buffer, rsize_t _Size);errno_t __cdecl tmpfile_s(FILE **_Stream);errno_t __cdecl tmpnam_s(char *_Buffer, rsize_t _Size);#line 145 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" void __cdecl clearerr(FILE *_Stream);int __cdecl fclose(FILE *_Stream);int __cdecl _fcloseall(void);FILE *__cdecl _fdopen(int _FileHandle, char const *_Mode);int __cdecl feof(FILE *_Stream);int __cdecl ferror(FILE *_Stream);int __cdecl fflush(FILE *_Stream);int __cdecl fgetc(FILE *_Stream);int __cdecl _fgetchar(void);int __cdecl fgetpos(FILE *_Stream, fpos_t *_Position);char *__cdecl fgets(char *_Buffer, int _MaxCount, FILE *_Stream);int __cdecl _fileno(FILE *_Stream);int __cdecl _flushall(void);__declspec(deprecated("This function or variable may be unsafe. Consider using " "fopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) FILE *__cdecl fopen(char const *_FileName, char const *_Mode);int __cdecl fputc(int _Character, FILE *_Stream);int __cdecl _fputchar(int _Character);int __cdecl fputs(char const *_Buffer, FILE *_Stream);size_t __cdecl fread(void *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);__declspec(deprecated("This function or variable may be unsafe. Consider using " "freopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) FILE *__cdecl freopen(char const *_FileName, char const *_Mode, FILE *_Stream);FILE *__cdecl _fsopen(char const *_FileName, char const *_Mode, int _ShFlag);int __cdecl fsetpos(FILE *_Stream, fpos_t const *_Position);int __cdecl fseek(FILE *_Stream, long _Offset, int _Origin);int __cdecl _fseeki64(FILE *_Stream, __int64 _Offset, int _Origin);long __cdecl ftell(FILE *_Stream);__int64 __cdecl _ftelli64(FILE *_Stream);size_t __cdecl fwrite(void const *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);int __cdecl getc(FILE *_Stream);int __cdecl getchar(void);int __cdecl _getmaxstdio(void);int __cdecl _getw(FILE *_Stream);void __cdecl perror(char const *_ErrorMessage);int __cdecl _pclose(FILE *_Stream);FILE *__cdecl _popen(char const *_Command, char const *_Mode);#line 344 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl putc(int _Character, FILE *_Stream);int __cdecl putchar(int _Character);int __cdecl puts(char const *_Buffer);int __cdecl _putw(int _Word, FILE *_Stream);int __cdecl remove(char const *_FileName);int __cdecl rename(char const *_OldFileName, char const *_NewFileName);int __cdecl _unlink(char const *_FileName);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_unlink" ". See online help for details.")) int __cdecl unlink(char const *_FileName);#line 391 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" void __cdecl rewind(FILE *_Stream);int __cdecl _rmtmp(void);__declspec(deprecated("This function or variable may be unsafe. Consider using " "setvbuf" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) void __cdecl setbuf(FILE *_Stream, char *_Buffer);int __cdecl _setmaxstdio(int _Maximum);int __cdecl setvbuf(FILE *_Stream, char *_Buffer, int _Mode, size_t _Size);__declspec(allocator) char *__cdecl _tempnam(char const *_DirectoryName, char const *_FilePrefix);__declspec(deprecated("This function or variable may be unsafe. Consider using " "tmpfile_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) FILE *__cdecl tmpfile(void);__declspec(deprecated("This function or variable may be unsafe. Consider using " "tmpnam_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl tmpnam(char *_Buffer);int __cdecl ungetc(int _Character, FILE *_Stream);void __cdecl _lock_file(FILE *_Stream);void __cdecl _unlock_file(FILE *_Stream);int __cdecl _fclose_nolock(FILE *_Stream);int __cdecl _fflush_nolock(FILE *_Stream);int __cdecl _fgetc_nolock(FILE *_Stream);int __cdecl _fputc_nolock(int _Character, FILE *_Stream);size_t __cdecl _fread_nolock(void *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);size_t __cdecl _fread_nolock_s(void *_Buffer, size_t _BufferSize, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);int __cdecl _fseek_nolock(FILE *_Stream, long _Offset, int _Origin);int __cdecl _fseeki64_nolock(FILE *_Stream, __int64 _Offset, int _Origin);long __cdecl _ftell_nolock(FILE *_Stream);__int64 __cdecl _ftelli64_nolock(FILE *_Stream);size_t __cdecl _fwrite_nolock(void const *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);int __cdecl _getc_nolock(FILE *_Stream);int __cdecl _putc_nolock(int _Character, FILE *_Stream);int __cdecl _ungetc_nolock(int _Character, FILE *_Stream);int *__cdecl __p__commode(void);#line 596 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vfprintf(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vfprintf_s(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vfprintf_p(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _ArgList);__inline int __cdecl _vfprintf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfprintf((*__local_stdio_printf_options()), _Stream, _Format, _Locale, _ArgList);} #line 648 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfprintf(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfprintf_l(_Stream, _Format,((void *) 0), _ArgList);} #line 662 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfprintf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfprintf_s((*__local_stdio_printf_options()), _Stream, _Format, _Locale, _ArgList);} #line 677 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfprintf_s(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfprintf_s_l(_Stream, _Format,((void *) 0), _ArgList);} #line 693 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 695 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfprintf_p_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfprintf_p((*__local_stdio_printf_options()), _Stream, _Format, _Locale, _ArgList);} #line 710 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfprintf_p(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfprintf_p_l(_Stream, _Format,((void *) 0), _ArgList);} #line 724 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfprintf_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);} #line 738 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vprintf(char const *const _Format, va_list _ArgList) { return _vfprintf_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);} #line 751 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_s_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfprintf_s_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);} #line 765 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vprintf_s(char const *const _Format, va_list _ArgList) { return _vfprintf_s_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);} #line 780 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 782 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_p_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfprintf_p_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);} #line 796 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_p(char const *const _Format, va_list _ArgList) { return _vfprintf_p_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);} #line 809 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fprintf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 828 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl fprintf(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 846 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl _set_printf_count_output(int _Value);int __cdecl _get_printf_count_output(void);__inline int __cdecl _fprintf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 871 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl fprintf_s(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 891 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 893 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fprintf_p_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 912 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fprintf_p(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 930 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 948 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl printf(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 965 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_s_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 983 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl printf_s(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1002 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1004 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_p_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1022 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_p(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1039 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vfscanf(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _Arglist);__inline int __cdecl _vfscanf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfscanf((*__local_stdio_scanf_options()), _Stream, _Format, _Locale, _ArgList);} #line 1070 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfscanf(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfscanf_l(_Stream, _Format,((void *) 0), _ArgList);} #line 1084 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfscanf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Stream, _Format, _Locale, _ArgList);} #line 1101 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfscanf_s(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfscanf_s_l(_Stream, _Format,((void *) 0), _ArgList);} #line 1118 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1120 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscanf_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfscanf_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);} #line 1134 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vscanf(char const *const _Format, va_list _ArgList) { return _vfscanf_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);} #line 1147 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscanf_s_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfscanf_s_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);} #line 1161 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vscanf_s(char const *const _Format, va_list _ArgList) { return _vfscanf_s_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);} #line 1176 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1178 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_fscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _fscanf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1197 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "fscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl fscanf(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1215 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fscanf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1234 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl fscanf_s(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1254 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1256 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_scanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _scanf_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1274 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "scanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl scanf(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1291 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scanf_s_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1309 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl scanf_s(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1328 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1330 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vsprintf(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vsprintf_s(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vsnprintf_s(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, size_t _MaxCount, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vsprintf_p(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnprintf_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1399 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1415 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsnprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options())|(1ULL<< 1), _Buffer, _BufferCount, _Format,((void *) 0), _ArgList);return _Result< 0 ? -1 :_Result;} #line 1446 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsprintf_l(char *const _Buffer, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vsnprintf_l(_Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1462 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "vsprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl vsprintf(char *const _Buffer, char const *const _Format, va_list _ArgList) { return _vsnprintf_l(_Buffer,(size_t) -1, _Format,((void *) 0), _ArgList);} #line 1477 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsprintf_s_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1498 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsprintf_s(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1516 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1526 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsprintf_p_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf_p((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1547 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsprintf_p(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1563 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_s_l(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsnprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1585 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_s(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);} #line 1602 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsnprintf_s(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);} #line 1630 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1641 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1659 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf(char const *const _Format, va_list _ArgList) { return _vscprintf_l(_Format,((void *) 0), _ArgList);} #line 1672 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf_p_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf_p((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1690 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf_p(char const *const _Format, va_list _ArgList) { return _vscprintf_p_l(_Format,((void *) 0), _ArgList);} #line 1703 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_c_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1723 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_c(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1739 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_sprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _sprintf_l(char *const _Buffer, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1761 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl sprintf(char *const _Buffer, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1782 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "sprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl sprintf(char *_Buffer, char const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "vsprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl vsprintf(char *_Buffer, char const *_Format, va_list _Args);__inline int __cdecl _sprintf_s_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1810 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl sprintf_s(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1832 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1834 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _sprintf_p_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_p_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1862 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _sprintf_p(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1882 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snprintf_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1905 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl snprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=vsnprintf(_Buffer, _BufferCount, _Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1936 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf(_Buffer, _BufferCount, _Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1956 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl _snprintf(char *_Buffer, size_t _BufferCount, char const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl _vsnprintf(char *_Buffer, size_t _BufferCount, char const *_Format, va_list _Args);__inline int __cdecl _snprintf_c_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1986 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf_c(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2006 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf_s_l(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2028 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf_s(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2049 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2075 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_l(_Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2092 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf_p_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_p_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2110 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf_p(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_p(_Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2127 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vsscanf(unsigned __int64 _Options, char const *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);__inline int __cdecl _vsscanf_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vsscanf((*__local_stdio_scanf_options()), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 2158 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsscanf(char const *const _Buffer, char const *const _Format, va_list _ArgList) { return _vsscanf_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 2172 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsscanf_s_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vsscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 2189 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(push) #pragma warning(disable:6530) __inline int __cdecl vsscanf_s(char const *const _Buffer, char const *const _Format, va_list _ArgList) { return _vsscanf_s_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 2208 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(pop) #line 2219 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_sscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _sscanf_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsscanf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2238 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "sscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl sscanf(char const *const _Buffer, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsscanf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2256 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _sscanf_s_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsscanf_s_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2275 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl sscanf_s(char const *const _Buffer, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=vsscanf_s(_Buffer, _Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2297 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 2299 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(push) #pragma warning(disable:6530) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snscanf_l(char const *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2326 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snscanf(char const *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options()), _Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2349 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snscanf_s_l(char const *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2374 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snscanf_s(char const *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2397 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(pop) __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_tempnam" ". See online help for details.")) char *__cdecl tempnam(char const *_Directory, char const *_FilePrefix);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fcloseall" ". See online help for details.")) int __cdecl fcloseall(void);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fdopen" ". See online help for details.")) FILE *__cdecl fdopen(int _FileHandle, char const *_Format);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fgetchar" ". See online help for details.")) int __cdecl fgetchar(void);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fileno" ". See online help for details.")) int __cdecl fileno(FILE *_Stream);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_flushall" ". See online help for details.")) int __cdecl flushall(void);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fputchar" ". See online help for details.")) int __cdecl fputchar(int _Ch);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_getw" ". See online help for details.")) int __cdecl getw(FILE *_Stream);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_putw" ". See online help for details.")) int __cdecl putw(int _Ch, FILE *_Stream);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_rmtmp" ". See online help for details.")) int __cdecl rmtmp(void);#line 2441 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h"__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma once#pragma once#pragma once#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) int *__cdecl _errno(void);errno_t __cdecl _set_errno(int _Value);errno_t __cdecl _get_errno(int *_Value);unsigned long *__cdecl __doserrno(void);errno_t __cdecl _set_doserrno(unsigned long _Value);errno_t __cdecl _get_doserrno(unsigned long *_Value);__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4514 4820) __pragma(pack(push, 8)) void *__cdecl memchr(void const *_Buf, int _Val, size_t _MaxCount);int __cdecl memcmp(void const *_Buf1, void const *_Buf2, size_t _Size);void *__cdecl memcpy(void *_Dst, void const *_Src, size_t _Size);void *__cdecl memmove(void *_Dst, void const *_Src, size_t _Size);void *__cdecl memset(void *_Dst, int _Val, size_t _Size);char *__cdecl strchr(char const *_Str, int _Val);char *__cdecl strrchr(char const *_Str, int _Ch);char *__cdecl strstr(char const *_Str, char const *_SubStr);wchar_t *__cdecl wcschr(wchar_t const *_Str, wchar_t _Ch);wchar_t *__cdecl wcsrchr(wchar_t const *_Str, wchar_t _Ch);wchar_t *__cdecl wcsstr(wchar_t const *_Str, wchar_t const *_SubStr);__pragma(pack(pop))#pragma warning(pop) #pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) static __inline errno_t __cdecl memcpy_s(void *const _Destination, rsize_t const _DestinationSize, void const *const _Source, rsize_t const _SourceSize) { if(_SourceSize==0) { return 0;} { int _Expr_val=!!(_Destination !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;if(_Source==((void *) 0)||_DestinationSize< _SourceSize) { memset(_Destination, 0, _DestinationSize);{ int _Expr_val=!!(_Source !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;{ int _Expr_val=!!(_DestinationSize >=_SourceSize);if(!(_Expr_val)) {(*_errno())=34;_invalid_parameter_noinfo();return 34;} } ;return 22 ;} memcpy(_Destination, _Source, _SourceSize);return 0;} static __inline errno_t __cdecl memmove_s(void *const _Destination, rsize_t const _DestinationSize, void const *const _Source, rsize_t const _SourceSize) { if(_SourceSize==0) { return 0;} { int _Expr_val=!!(_Destination !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;{ int _Expr_val=!!(_Source !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;{ int _Expr_val=!!(_DestinationSize >=_SourceSize);if(!(_Expr_val)) {(*_errno())=34;_invalid_parameter_noinfo();return 34;} } ;memmove(_Destination, _Source, _SourceSize);return 0;}#pragma warning(pop) __pragma(pack(pop))#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) int __cdecl _memicmp(void const *_Buf1, void const *_Buf2, size_t _Size);int __cdecl _memicmp_l(void const *_Buf1, void const *_Buf2, size_t _Size, _locale_t _Locale);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_memccpy" ". See online help for details.")) void *__cdecl memccpy(void *_Dst, void const *_Src, int _Val, size_t _Size);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_memicmp" ". See online help for details.")) int __cdecl memicmp(void const *_Buf1, void const *_Buf2, size_t _Size);__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) errno_t __cdecl wcscat_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source);errno_t __cdecl wcscpy_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source);errno_t __cdecl wcsncat_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source, rsize_t _MaxCount);errno_t __cdecl wcsncpy_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source, rsize_t _MaxCount);wchar_t *__cdecl wcstok_s(wchar_t *_String, wchar_t const *_Delimiter, wchar_t **_Context);__declspec(allocator) wchar_t *__cdecl _wcsdup(wchar_t const *_String);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcscat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcscat(wchar_t *_Destination, wchar_t const *_Source);int __cdecl wcscmp(wchar_t const *_String1, wchar_t const *_String2);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcscpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcscpy(wchar_t *_Destination, wchar_t const *_Source);size_t __cdecl wcscspn(wchar_t const *_String, wchar_t const *_Control);size_t __cdecl wcslen(wchar_t const *_String);size_t __cdecl wcsnlen(wchar_t const *_Source, size_t _MaxCount);static __inline size_t __cdecl wcsnlen_s(wchar_t const *_Source, size_t _MaxCount) { return(_Source==0) ? 0 :wcsnlen(_Source, _MaxCount);}__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcsncat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcsncat(wchar_t *_Destination, wchar_t const *_Source, size_t _Count);int __cdecl wcsncmp(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcsncpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcsncpy(wchar_t *_Destination, wchar_t const *_Source, size_t _Count);wchar_t *__cdecl wcspbrk(wchar_t const *_String, wchar_t const *_Control);size_t __cdecl wcsspn(wchar_t const *_String, wchar_t const *_Control);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcstok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcstok(wchar_t *_String, wchar_t const *_Delimiter, wchar_t **_Context);#line 237 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstring.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "wcstok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) static __inline wchar_t *__cdecl _wcstok(wchar_t *const _String, wchar_t const *const _Delimiter) { return wcstok(_String, _Delimiter, 0);} __declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcserror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcserror(int _ErrorNumber);errno_t __cdecl _wcserror_s(wchar_t *_Buffer, size_t _SizeInWords, int _ErrorNumber);__declspec(deprecated("This function or variable may be unsafe. Consider using " "__wcserror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl __wcserror(wchar_t const *_String);errno_t __cdecl __wcserror_s(wchar_t *_Buffer, size_t _SizeInWords, wchar_t const *_ErrorMessage);int __cdecl _wcsicmp(wchar_t const *_String1, wchar_t const *_String2);int __cdecl _wcsicmp_l(wchar_t const *_String1, wchar_t const *_String2, _locale_t _Locale);int __cdecl _wcsnicmp(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);int __cdecl _wcsnicmp_l(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount, _locale_t _Locale);errno_t __cdecl _wcsnset_s(wchar_t *_Destination, size_t _SizeInWords, wchar_t _Value, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsnset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsnset(wchar_t *_String, wchar_t _Value, size_t _MaxCount);wchar_t *__cdecl _wcsrev(wchar_t *_String);errno_t __cdecl _wcsset_s(wchar_t *_Destination, size_t _SizeInWords, wchar_t _Value);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsset(wchar_t *_String, wchar_t _Value);errno_t __cdecl _wcslwr_s(wchar_t *_String, size_t _SizeInWords);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcslwr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcslwr(wchar_t *_String);errno_t __cdecl _wcslwr_s_l(wchar_t *_String, size_t _SizeInWords, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcslwr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcslwr_l(wchar_t *_String, _locale_t _Locale);errno_t __cdecl _wcsupr_s(wchar_t *_String, size_t _Size);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsupr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsupr(wchar_t *_String);errno_t __cdecl _wcsupr_s_l(wchar_t *_String, size_t _Size, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsupr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsupr_l(wchar_t *_String, _locale_t _Locale);size_t __cdecl wcsxfrm(wchar_t *_Destination, wchar_t const *_Source, size_t _MaxCount);size_t __cdecl _wcsxfrm_l(wchar_t *_Destination, wchar_t const *_Source, size_t _MaxCount, _locale_t _Locale);int __cdecl wcscoll(wchar_t const *_String1, wchar_t const *_String2);int __cdecl _wcscoll_l(wchar_t const *_String1, wchar_t const *_String2, _locale_t _Locale);int __cdecl _wcsicoll(wchar_t const *_String1, wchar_t const *_String2);int __cdecl _wcsicoll_l(wchar_t const *_String1, wchar_t const *_String2, _locale_t _Locale);int __cdecl _wcsncoll(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);int __cdecl _wcsncoll_l(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount, _locale_t _Locale);int __cdecl _wcsnicoll(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);int __cdecl _wcsnicoll_l(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount, _locale_t _Locale);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsdup" ". See online help for details.")) wchar_t *__cdecl wcsdup(wchar_t const *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsicmp" ". See online help for details.")) int __cdecl wcsicmp(wchar_t const *_String1, wchar_t const *_String2);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsnicmp" ". See online help for details.")) int __cdecl wcsnicmp(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsnset" ". See online help for details.")) wchar_t *__cdecl wcsnset(wchar_t *_String, wchar_t _Value, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsrev" ". See online help for details.")) wchar_t *__cdecl wcsrev(wchar_t *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsset" ". See online help for details.")) wchar_t *__cdecl wcsset(wchar_t *_String, wchar_t _Value);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcslwr" ". See online help for details.")) wchar_t *__cdecl wcslwr(wchar_t *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsupr" ". See online help for details.")) wchar_t *__cdecl wcsupr(wchar_t *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsicoll" ". See online help for details.")) int __cdecl wcsicoll(wchar_t const *_String1, wchar_t const *_String2);__pragma(pack(pop))#pragma warning(pop) #pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) errno_t __cdecl strcpy_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source);errno_t __cdecl strcat_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source);errno_t __cdecl strerror_s(char *_Buffer, size_t _SizeInBytes, int _ErrorNumber);errno_t __cdecl strncat_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source, rsize_t _MaxCount);errno_t __cdecl strncpy_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source, rsize_t _MaxCount);char *__cdecl strtok_s(char *_String, char const *_Delimiter, char **_Context);void *__cdecl _memccpy(void *_Dst, void const *_Src, int _Val, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strcat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strcat(char *_Destination, char const *_Source);int __cdecl strcmp(char const *_Str1, char const *_Str2);int __cdecl _strcmpi(char const *_String1, char const *_String2);int __cdecl strcoll(char const *_String1, char const *_String2);int __cdecl _strcoll_l(char const *_String1, char const *_String2, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strcpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strcpy(char *_Destination, char const *_Source);size_t __cdecl strcspn(char const *_Str, char const *_Control);__declspec(allocator) char *__cdecl _strdup(char const *_Source);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strerror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strerror(char const *_ErrorMessage);errno_t __cdecl _strerror_s(char *_Buffer, size_t _SizeInBytes, char const *_ErrorMessage);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strerror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strerror(int _ErrorMessage);int __cdecl _stricmp(char const *_String1, char const *_String2);int __cdecl _stricoll(char const *_String1, char const *_String2);int __cdecl _stricoll_l(char const *_String1, char const *_String2, _locale_t _Locale);int __cdecl _stricmp_l(char const *_String1, char const *_String2, _locale_t _Locale);size_t __cdecl strlen(char const *_Str);errno_t __cdecl _strlwr_s(char *_String, size_t _Size);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strlwr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strlwr(char *_String);errno_t __cdecl _strlwr_s_l(char *_String, size_t _Size, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strlwr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strlwr_l(char *_String, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strncat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strncat(char *_Destination, char const *_Source, size_t _Count);int __cdecl strncmp(char const *_Str1, char const *_Str2, size_t _MaxCount);int __cdecl _strnicmp(char const *_String1, char const *_String2, size_t _MaxCount);int __cdecl _strnicmp_l(char const *_String1, char const *_String2, size_t _MaxCount, _locale_t _Locale);int __cdecl _strnicoll(char const *_String1, char const *_String2, size_t _MaxCount);int __cdecl _strnicoll_l(char const *_String1, char const *_String2, size_t _MaxCount, _locale_t _Locale);int __cdecl _strncoll(char const *_String1, char const *_String2, size_t _MaxCount);int __cdecl _strncoll_l(char const *_String1, char const *_String2, size_t _MaxCount, _locale_t _Locale);size_t __cdecl __strncnt(char const *_String, size_t _Count);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strncpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strncpy(char *_Destination, char const *_Source, size_t _Count);size_t __cdecl strnlen(char const *_String, size_t _MaxCount);static __inline size_t __cdecl strnlen_s(char const *_String, size_t _MaxCount) { return _String==0 ? 0 :strnlen(_String, _MaxCount);} errno_t __cdecl _strnset_s(char *_String, size_t _SizeInBytes, int _Value, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strnset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strnset(char *_Destination, int _Value, size_t _Count);char *__cdecl strpbrk(char const *_Str, char const *_Control);char *__cdecl _strrev(char *_Str);errno_t __cdecl _strset_s(char *_Destination, size_t _DestinationSize, int _Value);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strset(char *_Destination, int _Value);size_t __cdecl strspn(char const *_Str, char const *_Control);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strtok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strtok(char *_String, char const *_Delimiter);errno_t __cdecl _strupr_s(char *_String, size_t _Size);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strupr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strupr(char *_String);errno_t __cdecl _strupr_s_l(char *_String, size_t _Size, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strupr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strupr_l(char *_String, _locale_t _Locale);size_t __cdecl strxfrm(char *_Destination, char const *_Source, size_t _MaxCount);size_t __cdecl _strxfrm_l(char *_Destination, char const *_Source, size_t _MaxCount, _locale_t _Locale);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strdup" ". See online help for details.")) char *__cdecl strdup(char const *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strcmpi" ". See online help for details.")) int __cdecl strcmpi(char const *_String1, char const *_String2);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_stricmp" ". See online help for details.")) int __cdecl stricmp(char const *_String1, char const *_String2);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strlwr" ". See online help for details.")) char *__cdecl strlwr(char *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strnicmp" ". See online help for details.")) int __cdecl strnicmp(char const *_String1, char const *_String2, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strnset" ". See online help for details.")) char *__cdecl strnset(char *_String, int _Value, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strrev" ". See online help for details.")) char *__cdecl strrev(char *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strset" ". See online help for details.")) char *__cdecl strset(char *_String, int _Value);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strupr" ". See online help for details.")) char *__cdecl strupr(char *_String);__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4514 4820) __pragma(pack(push, 8)) __pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) typedef unsigned short _ino_t;typedef _ino_t ino_t;#line 24 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\sys/types.h" typedef unsigned int _dev_t;typedef _dev_t dev_t;#line 36 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\sys/types.h" typedef long _off_t;typedef _off_t off_t;#line 48 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\sys/types.h"#pragma warning(pop) typedef char *sds;#pragma pack(push, 1) struct sdshdr5 { unsigned char flags;char buf[];};struct sdshdr8 { uint8_t len;uint8_t alloc;unsigned char flags;char buf[];};struct sdshdr16 { uint16_t len;uint16_t alloc;unsigned char flags;char buf[];};struct sdshdr32 { uint32_t len;uint32_t alloc;unsigned char flags;char buf[];};struct sdshdr64 { uint64_t len;uint64_t alloc;unsigned char flags;char buf[];};#pragma pack(pop) static inline size_t sdslen(const sds s) { unsigned char flags=s[-1];switch(flags &7) { case 0 :return((flags) >> 3) ;case 1 :return((struct sdshdr8 *)((s) -(sizeof(struct sdshdr8)))) ->len;case 2 :return((struct sdshdr16 *)((s) -(sizeof(struct sdshdr16)))) ->len;case 3 :return((struct sdshdr32 *)((s) -(sizeof(struct sdshdr32)))) ->len;case 4 :return((struct sdshdr64 *)((s) -(sizeof(struct sdshdr64)))) ->len;} return 0;}static inline size_t sdsavail(const sds s) { unsigned char flags=s[-1];switch(flags &7) { case 0 :{ return 0;} case 1 :{ struct sdshdr8 *sh=(void *)((s) -(sizeof(struct sdshdr8)));;return sh->alloc - sh->len;} case 2 :{ struct sdshdr16 *sh=(void *)((s) -(sizeof(struct sdshdr16)));;return sh->alloc - sh->len;} case 3 :{ struct sdshdr32 *sh=(void *)((s) -(sizeof(struct sdshdr32)));;return sh->alloc - sh->len;} case 4 :{ struct sdshdr64 *sh=(void *)((s) -(sizeof(struct sdshdr64)));;return sh->alloc - sh->len;} } return 0;}static inline void sdssetlen(sds s, size_t newlen) { unsigned char flags=s[-1];switch(flags &7) { case 0 :{ unsigned char *fp=((unsigned char *) s) - 1;*fp=0|(newlen<< 3);} break;case 1 :((struct sdshdr8 *)((s) -(sizeof(struct sdshdr8)))) ->len=(uint8_t) newlen;break;case 2 :((struct sdshdr16 *)((s) -(sizeof(struct sdshdr16)))) ->len=(uint16_t) newlen;break;case 3 :((struct sdshdr32 *)((s) -(sizeof(struct sdshdr32)))) -> len
Definition: CPAL.d:15583
#define sc
Definition: aptex-macros.h:57
#define type(a)
Definition: aptex-macros.h:171
#define count(a)
Definition: aptex-macros.h:781
#define name
#define next(a)
Definition: aptex-macros.h:924
double mod(double, int)
Definition: axohelp.c:326
static point_t cur
Definition: backend_eps.c:108
int rc
Definition: bmpfont.h:9
#define n
Definition: t4ht.c:1290
#define b
Definition: jpegint.h:372
#define free(a)
Definition: decNumber.cpp:310
int v
Definition: dviconv.c:10
int h
Definition: dviconv.c:9
#define fseek
Definition: xxstdio.h:30
#define ftell
Definition: xxstdio.h:31
double real
Definition: dvips.h:66
int getlong(long *dest, int *j, const char *str)
Definition: dvi2tty.c:666
int strcmp()
Definition: coll.cpp:143
#define info
Definition: dviinfo.c:42
#define putlong
Definition: dvips.h:265
FILE * tmpfile2()
Definition: tmpfile2.cpp:51
static void
Definition: fpif.c:118
#define _(String)
Definition: ftxerr18.c:64
static void copy(GlyphCachePtr *root)
Definition: gcache.c:378
#define s
Definition: afcover.h:80
#define r1
#define r2
#define a(n)
Definition: gpos-common.c:148
#define d(n)
Definition: gpos-common.c:151
static void putshort(int w)
Definition: gsftopk.c:1904
int base
Definition: gsftopk.c:1502
#define strchr
Definition: gsftopk.c:59
int col
Definition: gsftopk.c:443
static char * tags[]
Definition: htex.c:62
#define putc
Definition: jbib.h:20
#define SEEK_SET
Definition: jmemansi.c:26
#define NULL
Definition: ftobjs.h:61
small capitals from c petite p scientific i
Definition: afcover.h:80
#define SEEK_CUR
Definition: ftzconf.h:250
#define SEEK_END
Definition: ftzconf.h:251
unsigned char uch
Definition: zutil.h:34
#define EOF
Definition: afmparse.c:59
voidp calloc()
#define getc
Definition: line.c:39
#define fputs
Definition: mendex.h:67
struct name_info name_info
#define malloc
Definition: alloca.c:91
#define COLOR_DEFAULT
Definition: utils.c:1021
char * as
Definition: fixwrites.c:8
int tex
Definition: fixwrites.c:10
#define uch
Definition: crc32.c:36
#define LibFF_ModTime
Definition: libffstamp.h:6
unsigned short uint16
Definition: tiff.h:62
unsigned long uint32
Definition: tiff.h:68
long int32
Definition: tiff.h:67
unsigned char uint8
Definition: tiff.h:60
#define qsort
Definition: includes.h:72
const int * pos
Definition: combiners.h:905
#define uint32
Definition: unibasics.h:49
#define realloc
Definition: glob.c:206
dictionary off
Definition: fc-lang.py:226
def ref(x)
Definition: pdf-org.py:104
#define version
Definition: nup.c:10
union value value
Definition: obx.h:44
int k
Definition: otp-parser.c:70
void results()
static struct Point current
Definition: picttoppm.c:134
set set set set set set set set set set set set set set set set set set set set *set set set macro pixldst op &r &cond WK op &r &cond WK op &r &cond WK else op &m &cond &ia op &r &cond WK else op &m &cond &ia elseif elseif else error unsupported base if elseif elseif else error unsupported unaligned pixldst unaligned endm macro pixst base base else pixldst base endif endm macro PF base if bpp PF set rept prefetch_distance PF set OFFSET endr endif endm macro preload_leading_step2 base if bpp ifc DST PF PF else if bpp lsl PF PF lsl PF sub
static int cnt
Definition: pkout.c:166
static int32_t last
Definition: ppagelist.c:29
static int32_t first
Definition: ppagelist.c:29
static int offset
Definition: ppmtogif.c:642
bstring c int memset(void *s, int c, int length)
#define V_CurveTo
Definition: PfEd.h:194
#define SPIRO_OPEN_CONTOUR
Definition: PfEd.h:208
#define SPIRO_G2
Definition: PfEd.h:211
#define V_HVCurveTo
Definition: PfEd.h:197
#define COM_VERB(com)
Definition: PfEd.h:203
#define SPIRO_G4
Definition: PfEd.h:210
#define V_VLineTo
Definition: PfEd.h:184
#define V_HLineTo
Definition: PfEd.h:183
#define cmnt_TAG
Definition: PfEd.h:156
#define V_QHImplicit
Definition: PfEd.h:191
#define V_MoveTo
Definition: PfEd.h:181
#define cvtc_TAG
Definition: PfEd.h:157
#define SPIRO_CLOSE_CONTOUR
Definition: PfEd.h:216
#define layr_TAG
Definition: PfEd.h:164
#define GSUB_TAG
Definition: PfEd.h:161
#define V_Close
Definition: PfEd.h:199
#define V_LineTo
Definition: PfEd.h:182
#define V_F
Definition: PfEd.h:178
#define guid_TAG
Definition: PfEd.h:163
#define V_B
Definition: PfEd.h:176
#define V_QVImplicit
Definition: PfEd.h:192
#define SPIRO_END
Definition: PfEd.h:214
#define GPOS_TAG
Definition: PfEd.h:160
#define flog_TAG
Definition: PfEd.h:155
#define SPIRO_LEFT
Definition: PfEd.h:212
#define SPIRO_RIGHT
Definition: PfEd.h:213
#define V_End
Definition: PfEd.h:200
#define colr_TAG
Definition: PfEd.h:158
#define V_QImplicit
Definition: PfEd.h:187
#define COM_MOD(com)
Definition: PfEd.h:202
#define SPIRO_CORNER
Definition: PfEd.h:209
#define V_VHCurveTo
Definition: PfEd.h:195
#define V_QCurveTo
Definition: PfEd.h:186
#define V_S
Definition: PfEd.h:177
#define fcmt_TAG
Definition: PfEd.h:154
char * copyn(const char *str, long n)
Definition: memory.c:35
int getushort(FILE *ttf)
Definition: parsettf.c:47
int SPInterpolate(const SplinePoint *sp)
Definition: splineutil2.c:399
@ ttf_flag_pfed_lookupnames
Definition: splinefont.h:1905
@ ttf_flag_pfed_layers
Definition: splinefont.h:1907
@ ttf_flag_TeXtable
Definition: splinefont.h:1902
@ ttf_flag_pfed_colors
Definition: splinefont.h:1899
@ ttf_flag_pfed_guides
Definition: splinefont.h:1906
@ ttf_flag_pfed_comments
Definition: splinefont.h:1899
@ tex_math
Definition: splinefont.h:1650
@ tex_mathext
Definition: splinefont.h:1650
@ tex_text
Definition: splinefont.h:1650
@ tex_unset
Definition: splinefont.h:1650
int ttfcopyfile(FILE *ttf, FILE *other, int pos, const char *table_name)
Definition: tottf.c:652
void SPLCategorizePoints(SplinePointList *spl)
Definition: splineutil.c:727
Spline * SplineMake(SplinePoint *from, SplinePoint *to, int order2)
#define TEX_UNDEF
Definition: splinefont.h:1428
#define END_CVT_NAMES
Definition: splinefont.h:1754
RefChar * RefCharCreate(void)
Definition: splineutil.c:212
@ ly_back
Definition: splinefont.h:1209
@ ly_fore
Definition: splinefont.h:1209
@ prt_int
Definition: splinefont.h:912
@ prt_property
Definition: splinefont.h:912
@ prt_atom
Definition: splinefont.h:912
@ prt_string
Definition: splinefont.h:912
@ prt_uint
Definition: splinefont.h:912
SplinePoint * SplinePointCreate(float x, float y)
Definition: splineutil.c:120
void SplineCharFindBounds(SplineChar *sc, DBounds *bounds)
Definition: splineutil.c:438
#define chunkalloc(size)
Definition: splinefont.h:1947
void SplinePointFree(SplinePoint *sp)
Definition: splineutil.c:142
void SplineRefigure(Spline *spline)
void SCReinstanciateRefChar(SplineChar *sc, RefChar *rf, int layer)
Definition: splineutil.c:1302
void cvt_unix_to_1904(long long time, int32 result[2])
Definition: tottf.c:2629
#define TeX_Sub1
Definition: ttf.h:856
#define TeX_Space
Definition: ttf.h:838
#define TeX_MathSp
Definition: ttf.h:846
#define TeX_BigOpSpace5
Definition: ttf.h:869
#define TeX_Stretch
Definition: ttf.h:839
#define TeX_SupDrop
Definition: ttf.h:858
#define TeX_Denom2
Definition: ttf.h:852
#define TeX_Num2
Definition: ttf.h:849
#define TeX_Sup2
Definition: ttf.h:854
#define TeX_Num1
Definition: ttf.h:848
#define TeX_Delim1
Definition: ttf.h:860
#define TeX_Num3
Definition: ttf.h:850
#define TeX_Sup1
Definition: ttf.h:853
#define TeX_BigOpSpace1
Definition: ttf.h:865
#define TeX_AxisHeight
Definition: ttf.h:862
#define TeX_Denom1
Definition: ttf.h:851
#define TeX_Delim2
Definition: ttf.h:861
#define TeX_BigOpSpace2
Definition: ttf.h:866
#define TeX_DefRuleThick
Definition: ttf.h:864
#define TeX_Slant
Definition: ttf.h:837
#define TeX_BigOpSpace3
Definition: ttf.h:867
#define TeX_SubDrop
Definition: ttf.h:859
#define TeX_Shrink
Definition: ttf.h:840
#define TeX_Sub2
Definition: ttf.h:857
#define TeX_XHeight
Definition: ttf.h:841
#define TeX_ExtraSp
Definition: ttf.h:844
#define TeX_Quad
Definition: ttf.h:842
#define TeX_BigOpSpace4
Definition: ttf.h:868
#define TeX_Sup3
Definition: ttf.h:855
static void TeX_readHeightDepth(FILE *ttf, struct ttfinfo *info, uint32 base)
Definition: ttfspecial.c:1847
static int pfed_has_spiros(Layer *layer)
Definition: ttfspecial.c:641
static void TeX_dumpFontParams(SplineFont *sf, struct TeX_subtabs *tex, struct alltabs *at)
Definition: ttfspecial.c:1678
static void pfed_redo_refs(SplineChar *sc, int layer)
Definition: ttfspecial.c:1405
static char * pfed_read_utf8(FILE *ttf, uint32 start)
Definition: ttfspecial.c:900
int ttf_fftm_dump(SplineFont *sf, struct alltabs *at)
Definition: ttfspecial.c:2069
static char * pfed_read_ucs2_len(FILE *ttf, uint32 offset, int len)
Definition: ttfspecial.c:916
void tex_dump(struct alltabs *at, SplineFont *sf)
Definition: ttfspecial.c:1776
void pfed_read(FILE *ttf, struct ttfinfo *info)
Definition: ttfspecial.c:1536
static void pfed_glyph_layer(FILE *layr, Layer *layer, int do_spiro)
Definition: ttfspecial.c:361
void pfed_dump(struct alltabs *at, SplineFont *sf)
Definition: ttfspecial.c:817
static void pfed_read_normal_contour(FILE *ttf, SplineSet *ss, uint32 base, int type)
Definition: ttfspecial.c:1126
static void PfEd_Layer(SplineFont *sf, struct glyphinfo *gi, int layer, int dospiro, FILE *layr)
Definition: ttfspecial.c:651
static void PfEd_Colours(SplineFont *sf, struct PfEd_subtabs *pfed, struct glyphinfo *gi)
Definition: ttfspecial.c:189
static void pfed_readfontcomment(FILE *ttf, struct ttfinfo *info, uint32 base, uint32 tag)
Definition: ttfspecial.c:867
static int pfed_mod_type(float val, int last_mod)
Definition: ttfspecial.c:338
#define MAX_SUBTABLE_TYPES
Definition: ttfspecial.c:1612
static char * pfed_read_utf8_len(FILE *ttf, uint32 offset, int len)
Definition: ttfspecial.c:946
static uint32 tex_math_params[]
Definition: ttfspecial.c:1633
static void PfEd_CvtComments(SplineFont *sf, struct PfEd_subtabs *pfed)
Definition: ttfspecial.c:157
void tex_read(FILE *ttf, struct ttfinfo *info)
Definition: ttfspecial.c:1881
static int pfed_guide_dump_pos_name(FILE *guid, struct pos_name *pn, int namestart)
Definition: ttfspecial.c:560
static void pfed_readotherlayers(FILE *ttf, struct ttfinfo *info, uint32 base)
Definition: ttfspecial.c:1454
static void pfed_read_glyph_layer(FILE *ttf, struct ttfinfo *info, Layer *ly, uint32 base, int type, int version)
Definition: ttfspecial.c:1288
static float pfed_get_coord(FILE *ttf, int mod)
Definition: ttfspecial.c:1113
static uint32 tex_text_params[]
Definition: ttfspecial.c:1623
static void PfEd_Lookups(SplineFont *sf, struct PfEd_subtabs *pfed, OTLookup *lookups, uint32 tag)
Definition: ttfspecial.c:240
static void PfEd_Guides(SplineFont *sf, struct PfEd_subtabs *pfed)
Definition: ttfspecial.c:571
static void PfEd_Layers(SplineFont *sf, struct PfEd_subtabs *pfed, struct glyphinfo *gi)
Definition: ttfspecial.c:722
static void PfEd_GlyphComments(SplineFont *sf, struct PfEd_subtabs *pfed, struct glyphinfo *gi)
Definition: ttfspecial.c:75
static uint32 tex_mathext_params[]
Definition: ttfspecial.c:1657
static void TeX_readFontParams(FILE *ttf, struct ttfinfo *info, uint32 base)
Definition: ttfspecial.c:1818
static void pfed_read_layer(FILE *ttf, struct ttfinfo *info, int layer, int type, uint32 base, uint32 start, int version)
Definition: ttfspecial.c:1418
static int pfed_guide_sortuniq(struct pos_name *array, int cnt)
Definition: ttfspecial.c:545
static void TeX_readItalicCorr(FILE *ttf, struct ttfinfo *info, uint32 base)
Definition: ttfspecial.c:1865
static void TeX_dumpHeightDepth(SplineFont *sf, struct TeX_subtabs *tex, struct alltabs *at)
Definition: ttfspecial.c:1701
static void PfEd_FontComment(SplineFont *sf, struct PfEd_subtabs *pfed, uint32 tag)
Definition: ttfspecial.c:56
static void pfed_readguidelines(FILE *ttf, struct ttfinfo *info, uint32 base)
Definition: ttfspecial.c:1349
static void pfed_readlookupnames(FILE *ttf, struct ttfinfo *info, uint32 base, OTLookup *lookups)
Definition: ttfspecial.c:1042
static void pfed_readcolours(FILE *ttf, struct ttfinfo *info, uint32 base)
Definition: ttfspecial.c:1021
void ttf_bdf_read(FILE *ttf, struct ttfinfo *info)
Definition: ttfspecial.c:2000
static int pfed_guide_real_comp(const void *_r1, const void *_r2)
Definition: ttfspecial.c:534
static void pfed_read_spiro_contour(FILE *ttf, SplineSet *ss, uint32 base, int type)
Definition: ttfspecial.c:1249
static void TeX_dumpItalicCorr(SplineFont *sf, struct TeX_subtabs *tex, struct alltabs *at)
Definition: ttfspecial.c:1740
static void pfed_readcvtcomments(FILE *ttf, struct ttfinfo *info, uint32 base)
Definition: ttfspecial.c:961
static void pfed_readglyphcomments(FILE *ttf, struct ttfinfo *info, uint32 base)
Definition: ttfspecial.c:983
static char * getstring(FILE *ttf, long start)
Definition: ttfspecial.c:1953
static int CheckForNewlines(BDFFont *bdf, int k)
Definition: ttfspecial.c:1971
static void pfed_write_data(FILE *ttf, float val, int mod)
Definition: ttfspecial.c:352
#define IError
Definition: uiinterface.h:124
#define LogError
Definition: uiinterface.h:125
char * latin1_2_utf8_copy(const char *lbuf)
Definition: ustring.c:95
char * utf8_idpb(char *utf8_text, uint32 ch, int flags)
Definition: ustring.c:142
#define subs(p, n, t)
Definition: interp.c:107
#define str(s)
Definition: sh6.c:399
struct PfEd_subtabs::@1445 subtabs[20]
FILE * data
Definition: ttfspecial.c:50
uint32 offset
Definition: ttfspecial.c:52
uint32 tag
Definition: ttfspecial.c:51
word x
Definition: picttoppm.c:101
word y
Definition: picttoppm.c:102
uint32 offset
Definition: ttfspecial.c:1619
FILE * data
Definition: ttfspecial.c:1617
struct TeX_subtabs::@1446 subtabs[4]
uint32 tag
Definition: ttfspecial.c:1618
Definition: ttf.h:566
unsigned int opentypemode
Definition: ttf.h:674
int fftmlen
Definition: ttf.h:662
FILE * fftmf
Definition: ttf.h:661
struct glyphinfo gi
Definition: ttf.h:682
int texlen
Definition: ttf.h:650
FILE * tex
Definition: ttf.h:649
FILE * pfed
Definition: ttf.h:647
int pfedlen
Definition: ttf.h:648
struct anchorclass * next
Definition: splinefont.h:510
struct lookup_subtable * subtable
Definition: splinefont.h:505
uint8 has_base
Definition: splinefont.h:507
char * name
Definition: splinefont.h:504
uint8 has_mark
Definition: splinefont.h:508
float x
Definition: splinefont.h:70
float y
Definition: splinefont.h:71
int16 prop_cnt
Definition: splinefont.h:942
int16 pixelsize
Definition: splinefont.h:928
BDFProperties * props
Definition: splinefont.h:944
struct bdffont * next
Definition: splinefont.h:936
int type
Definition: splinefont.h:916
char * name
Definition: splinefont.h:915
char * atom
Definition: splinefont.h:919
union bdfprops::@1443 u
Definition: filedef.h:30
int gcnt
Definition: ttf.h:544
int flags
Definition: ttf.h:533
unsigned int is_ttf
Definition: ttf.h:539
const int * bygid
Definition: splinesave.c:128
Definition: sh5.c:97
RefChar * refs
Definition: splinefont.h:1202
SplinePointList * splines
Definition: splinefont.h:1201
struct otlookup * next
Definition: splinefont.h:458
struct lookup_subtable * subtables
Definition: splinefont.h:463
unsigned int unused
Definition: splinefont.h:464
char * lookup_name
Definition: splinefont.h:461
char * name
Definition: ttfspecial.c:531
float pos
Definition: ttfspecial.c:530
struct splinechar * sc
Definition: splinefont.h:1119
struct refchar * next
Definition: splinefont.h:1117
Definition: tfmaux.c:31
double y
Definition: splinefont.h:1059
double x
Definition: splinefont.h:1058
SplinePoint * to
Definition: splinefont.h:1038
unsigned int knownlinear
Definition: splinefont.h:1030
uint32 color
Definition: splinefont.h:1386
char * comment
Definition: splinefont.h:1385
unsigned int ticked
Definition: splinefont.h:1350
BasePoint me
Definition: splinefont.h:953
unsigned int noprevcp
Definition: splinefont.h:957
struct spline * next
Definition: splinefont.h:979
struct spline * prev
Definition: splinefont.h:980
BasePoint nextcp
Definition: splinefont.h:954
BasePoint prevcp
Definition: splinefont.h:955
struct splinepointlist * next
Definition: splinefont.h:1073
spiro_cp * spiros
Definition: splinefont.h:1074
SplinePoint * last
Definition: splinefont.h:1072
char * contour_name
Definition: splinefont.h:1082
SplinePoint * first
Definition: splinefont.h:1072
Definition: xmlparse.c:179
Definition: ttf.h:76
Definition: strexpr.c:21
#define CHR(x)
Definition: sysdep.h:200
#define FILE
Definition: t1stdio.h:34
ch
Definition: t4ht.c:1443
int j
Definition: t4ht.c:1589
*job_name strlen((char *) job_name) - 4)
char * file
Definition: t4ht.c:931
val
Definition: tex4ht.c:3227
tag int tag
Definition: tex4ht.c:2554
m
Definition: tex4ht.c:3990
#define sp
Definition: stack.c:11
int ppem
Definition: ttflib.c:39
Definition: obx.h:51
@ start
Definition: preamble.c:52
@ range
Definition: preamble.c:52
PATTERN * pt
Definition: vlna.c:74
#define end(cp)
Definition: zic.c:71