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)  

afm2pl.c
Go to the documentation of this file.
1 /* afm2pl
2  * Copyright (C) 2002, 2005, 2009 Siep Kroonenberg
3  * ntg-afm2pl@ntg.nl
4  * based on afm2tfm.
5  */
6 
7 /* Here the opening comments from afm2tfm:
8  *********************************************************************
9  * (Modified by Don Knuth from Tom Rokicki's pre-VPL version.)
10  *
11  * VM/CMS port by J. Hafner (hafner@almaden.ibm.com), based on
12  * the port by Alessio Guglielmi (guglielmi@ipisnsib.bitnet)
13  * and Marco Prevedelli (prevedelli@ipisnsva.bitnet).
14  * This port is still in test state. No guarantees.
15  * 11/3/92: more corrections to VM/CMS port. Now it looks correct
16  * and will be supported by J. Hafner.
17  *
18  * More changes, primarily from Karl Berry, enough for a new version
19  * number to 8.0; 1 December 1996. Note that this version computes
20  * checksums differently (more intelligently).
21  *
22  *********************************************************************/
23 
24 /* Changed features:
25  * writes pl with lig- and kern info instead of tfm
26  * never adds characters not explicitly specified in the encoding
27  * extra ligkern info, previously hardwired in the source, is now
28  * read from an external file. This may include accented char ligatures.
29  * Default behavior still matches afm2tfm, given the right ligkern
30  * files.
31  * letterspacing option, implemented as kerning pairs between any
32  * two characters.
33  *
34  * For VM/CMS we no longer need asciified names for the font or the
35  * encoding since we write an ascii pl file instead of a binary tfm.
36  *
37  * This version doesn't try as hard to always give sensible output.
38  * On the other hand, since it uses simpler logic, it should be
39  * easier for the user to figure out the cause of failures.
40  *
41  * changes in structure:
42  * writes character metrics directly to an array
43  * metric information is transformed in stages
44  * does not create smallcaps
45  */
46 
47 /* differences between afm and tfm:
48  * afm usually has a space char
49  * afm lists chars by name and also includes unencoded chars
50  * afm lists ligatures together with their first `component',
51  * and lists kerns separately.
52  * afm implies 3-way ligs by recursive application of 2-way glyphs
53  * afm allows negative heights and depths
54  *
55  * tfm usually doesn't have a space char
56  * tfm may have boundarychar ligkerns instead of space ligkerns
57  * tfm is lists chars by code and is glyphname-agnostic
58  * tfm contains a ligkern table, where entries are sorted by left
59  * `component'. 3-way ligs are written out in one lig `program'.
60  * tfm may contain some special-purpose ligs such as
61  * question quoteleft =: questiondown
62  */
63 
64 /*******************************************************************
65  * includes, defines, system */
66 
67 #ifdef HAVE_CONFIG_H
68 #define KPATHSEA 1
69 #include <kpathsea/config.h>
70 #include <kpathsea/debug.h>
71 #include <kpathsea/tex-file.h>
72 #include "c-auto.h"
73 #include <kpathsea/c-ctype.h>
74 #include <kpathsea/progname.h>
75 #include <kpathsea/version.h>
76 #else /* HAVE_CONFIG_H */
77 #include <stdio.h>
78 #include <stdlib.h>
79 #include <ctype.h>
80 #include <string.h>
81 #include <math.h>
82 #ifdef ATARIST
83 #include <float.h>
84 #endif
85 #endif /* HAVE_CONFIG_H */
86 
87 #ifdef VMCMS
88 #define interesting lookstr /* for 8 character truncation conflicts */
89 #include "dvipscms.h"
90 extern FILE *cmsfopen ();
91 extern char ascii2ebcdic[];
92 #ifdef fopen
93 #undef fopen
94 #endif
95 #define fopen cmsfopen
96 #endif
97 
98 /* from dvips.h: */
99 
100 #ifdef VMS
101 #include "[.vms]vms.h"
102 #endif /* VMS */
103 
104 /*
105  * Is your malloc big?
106  */
107 #if defined(MSDOS) && !defined(__EMX__) && !defined(DJGPP)
108 #define SMALLMALLOC
109 #endif
110 #if defined(OS2) && defined(_MSC_VER)
111 #define SMALLMALLOC
112 #endif
113 
114 #if (defined(MSDOS) && !defined(DJGPP)) || (defined(OS2) && defined(_MSC_VER)) || defined(ATARIST)
115 typedef long integer;
116 #else
117 typedef int integer;
118 #endif
119 
120 #ifndef KPATHSEA
121 typedef char boolean;
122 #endif
123 
124 #ifdef WIN32
125 #define Boolean boolean
126 #else
127 #ifndef __THINK__
128 typedef short Boolean ;
129 #endif
130 #endif
131 
132 /**************************************************************
133  * data structures */
134 
135 /* Adobe char metrics; one lig- and kern linked list for each
136  * adobechar
137  */
138 
139 struct lig {
140  struct lig *next;
141  const char *succ, *sub;
142  short op, boundright; /* boundright: succ is rboundarychar */
143 };
144 
145 struct kern {
146  struct kern *next;
147  const char *succ;
148  int delta;
149 };
150 
151 /* metric info for one char */
152 struct adobeinfo {
154  const char *adobename;
155  int llx, lly, urx, ury;
156  int nonstd_lk; /* non-standard ligs and/or kerns */
157  struct lig *ligs;
158  struct kern *kerns;
159 };
160 /* The nonstd_lk field is for efficiency in case of letterspacing.
161  * With letterspacing, all glyphs originally without ligs or
162  * kerns do show up in the ligkern table, but with identical
163  * information. We write them in one go to the ligkern table.
164  */
165 
166 /* encodings */
167 struct encoding {
168  const char *name;
169  const char *vec[256];
170 };
171 
172 /* struct to store the names of files with extra ligkern info */
173 struct nstrings {
174  int n;
175  const char **names;
176 };
177 
178 /*************************************************************
179  * global vars */
180 
181 #define buflen 256
182 char buffer[buflen]; /* input buffer (modified while parsing) */
183 char obuffer[buflen]; /* unmodified copy of input buffer */
184 char *param; /* current position in input buffer */
185 
186 const char *fontname = "Unknown";
187 
190 const char *ligoption = "1"; /* which extra ligkerns? */
191 const char *Ligoption = "1"; /* extra ligkern info after letterspacing */
192 int based_on; /* name output file based on name afm file? */
193 int no_prefix = 0; /* don't look for afm2pl- prefixed filenames */
195 const char *afmname, *outname; /* names of input and output files */
196 const char *encfilename; /* encoding file */
197 struct nstrings *ligfilenames; /* for files with extra ligkern info */
198 struct nstrings *Ligfilenames; /* same; for after letterspacing */
199 const char *ligfilename;
200 
201 struct adobeinfo
202 **adobechars, /* array of adobeinfo structs, from afm and in afm order */
203  *tfmptrs[256]; /* same, but indexed by tfm order */
204 
205 int tfmnext[256]; /* for characters encoded multiple times in output */
206 
207 /* global font info */
208 int iglyph, nglyphs, nglyphsb; /* glyph no., n. of glyphs in afm */
209 float italicangle = 0.0;
210 float newslant = 0.0; /* computed from slant and italicangle */
212 int afm2tfm_compat = 0; /* create afm2tfm-compatible font dimensions */
213 int xheight = 0;
214 int fontspace = -1;
215 int fstretch = -1;
216 int fshrink = -1;
217 int fextra = -1;
218 int fquad = -1;
219 int charwidth = 0;
220 
221 float efactor = 1.0, slant = 0.0; /* requested transformation */
222 int lspace = 0; /* for letterspacing */
224 int forceoctal = 0;
225 int keepligs = 0; /* retain afm ligs in spite of lspace>0 */
226 
227 int rboundarychar = -1; /* the (right) boundary character */
228 const char *boundaryname = "||"; /* name of boundarychars for liginfo specs */
230 char *boundglyph = NULL;
231  /* glyph name of rboundarychar; non-null only if encoded */
232  /* track presence of r- and l boundarychar ligkerns.
233  * we don't check whether the real chars in those ligkerns
234  * are encoded, so we may get false positives
235  */
236 
237 int missingchars = 0;
238 int verbose = 0;
239 
240 /**************************************************************
241  * general utility functions */
242 
243 /* little hack: error message is warning unless it starts with '!' */
244 static void
245 error(const char *s)
246 {
247  char *parasave;
248  parasave = param;
249  (void) fprintf (stderr, "%s\n", s);
250  if (obuffer[0]) {
251  (void) fprintf (stderr, "%s\n", obuffer);
252  while (param > buffer) {
253  (void) fprintf (stderr, " ");
254  param--;
255  }
256  (void) fprintf (stderr, "^\n");
257  }
258  if (*s == '!')
259  exit (1);
260  param = parasave;
261 }
262 
263 static char *
264 mymalloc(unsigned long len)
265 {
266  register char *p;
267  unsigned long i;
268 
269 #ifdef SMALLMALLOC
270  if (len > 65500L)
271  error ("! can't allocate more than 64K!");
272 #endif
273  p = malloc ((unsigned) len);
274  if (p == NULL)
275  error ("! out of memory");
276  for (i = 0; i < len; i++)
277  p[i] = 0;
278  return (p);
279 }
280 
281 static char *
282 newstring(const char *s)
283 {
284  char *q = mymalloc ((unsigned long) (strlen (s) + 1));
285  (void) strcpy (q, s);
286  return q;
287 }
288 
289 /* find a glyph name in an adobeinfo array */
290 static struct adobeinfo *
291 findname(struct adobeinfo **achars, int n, const char *p)
292 {
293  register int i;
294  for (i = 0; i < n; i++)
295  if (achars[i] && strcmp (p, achars[i]->adobename) == 0)
296  return achars[i];
297  return NULL;
298 }
299 
300 /* Find glyph info by name in the original adobechars array
301  * We don't include the boundarychars in the search but always test
302  * separately for those.
303  */
304 static struct adobeinfo *
305 findadobe(const char *p)
306 {
307  return findname (adobechars, nglyphs, p);
308 }
309 
310 /* Find glyph info by name in target encoding */
311 static struct adobeinfo *
312 findtfm(const char *p)
313 {
314  return findname (tfmptrs, 256, p);
315 }
316 
317 /* just for adobechars, we sometimes want the index instead */
318 static int
319 findindex(const char *p)
320 {
321  int i;
322  for (i = 0; i < nglyphs; i++)
323  if (adobechars[i] && strcmp (p, adobechars[i]->adobename) == 0)
324  return i;
325  return -1;
326 }
327 
328 /* geometrically transformed boundingbox */
329 static int
330 transform(int x, int y)
331 {
332  register double acc;
333  acc = efactor * x + slant * y;
334  return (int) (acc >= 0 ? floor (acc + 0.5) : ceil (acc - 0.5));
335 }
336 
337 /* read a line from infile into buffer and obuffer */
338 static int
340 {
341  register char *p;
342  register int c;
343  int maxline;
344 
345  param = buffer;
346  p = buffer;
347  maxline = buflen;
348  c = 0; /* to suppress phony compiler warning */
349  while (((c = getc (infile)) != EOF) && (c != '\n') && (c != '\r'))
350  /* added: test for \r. The way we do it, the DOS cr/lf convention
351  * leads to alternating empty lines, but that is ok.
352  */
353  if (--maxline > 0) *p++ = c;
354  *p = 0;
355  (void) strcpy (obuffer, buffer);
356  if (p == buffer && c == EOF)
357  return (0);
358  else
359  return (1);
360 }
361 
362 /*******************************************************
363  * file handling
364  */
365 
366 #ifndef KPATHSEA
367 /* simple versions of concat (concatenate with allocation),
368  * kpse_find_suffix, xbasename and an enum for kpse_file_format_type.
369  * This is to reduce the number of #ifdef KPATHSEA sections.
370  */
371 typedef enum {
374 
375 /* string concatenation with allocation */
376 static char *
377 concat(const char *s1, const char *s2)
378 {
379  char *answer = (char *) malloc (strlen (s1) + strlen (s2) + 1);
380  strcpy (answer, s1);
381  strcat (answer, s2);
382 
383  return answer;
384 }
385 
386 /* Return pointer to first character after `.' in last directory element
387  * of NAME. If the name is `foo' or `/foo.bar/baz', we have no extension.
388  */
389 static const char *
390 find_suffix(const char *name)
391 {
392  const char *slash_pos;
393  const char *dot_pos = (char *) strrchr (name, '.');
394 
395  if (dot_pos == NULL)
396  return NULL;
397 
398  /* find last directory separator */
399  for (slash_pos = name + strlen (name);
400  slash_pos > dot_pos &&
401  (*slash_pos != ':' && *slash_pos != '\\' && *slash_pos != '/');
402  slash_pos--);
403 
404  /* accept suffix only if after last path separator */
405  return slash_pos > dot_pos ? NULL : dot_pos + 1;
406 }
407 
408 /* Return pointer to filename with leading path stripped */
409 static const char *
410 xbasename(const char *name)
411 {
412  const char *base = NULL;
413  unsigned len = strlen (name);
414 
415  for (len = strlen (name); len > 0; len--) {
416  if (name[len - 1] == ':' || name[len - 1] == '\\'
417  || name[len - 1] == '/') {
418  base = name + len;
419  break;
420  }
421  }
422  if (!base)
423  base = name;
424  return base;
425 }
426 
427 #define ISALNUM(c) (isascii (c) && isalnum(c))
428 
429 #endif
430 /* end of KPATHSEA replacements */
431 
432 /* file open functions; abort in case of failure; return filename */
433 
434 /* open file for reading
435  * parameters: (pointer to) requested filename
436  * return (pointer to) actual filename without dir
437  * Since we only have one input file open at any time
438  * we use a global file variable infile.
439  * Note. The kpse lib fu concat itself takes care of
440  * allocating the result string
441  * kpse handling isn't so helpful in the enc- and lig cases,
442  * so we add a suffix explicitly.
443  */
444 static const char *
445 openin(const char *fname, kpse_file_format_type format, const char *ext)
446 {
447 #ifdef KPATHSEA
448  char *realfname;
449 
450  realfname = NULL;
451  if (!no_prefix && (!strcmp(ext, ".enc") || !strcmp(ext, ".lig"))) {
452  realfname = kpse_find_file (concat("afm2pl-", fname), format, false);
453  if (!realfname) {
454  realfname = concat (concat("afm2pl-", fname), ext);
455  realfname = kpse_find_file (realfname, format, false);
456  }
457  }
458  if (!realfname) {
459  realfname = kpse_find_file (fname, format, false);
460  if (!realfname) {
461  realfname = concat (fname, ext);
462  realfname = kpse_find_file (realfname, format, false);
463  }
464  }
465  if (!realfname)
466  FATAL1 ("%s not found", fname);
467  infile = kpse_open_file (realfname, format);
468  if (infile)
469  return xbasename (realfname);
470  else
471  FATAL1 ("couldn't open %s", realfname);
472 #else
473  const char *realfname;
474 
475  realfname = fname;
476  infile = fopen (realfname, "r");
477  if (!infile && !find_suffix (realfname)) {
478  realfname = concat (fname, ext);
479  infile = fopen (realfname, "r");
480  }
481  if (infile)
482  return realfname;
483  else
484  error (concat ("!couldn't open ", realfname));
485 #endif
486  return NULL;
487 }
488 
489 /* open file for writing
490  * Parameter based_on: if non-zero, then fname was the name
491  * of the afm file, and we have to construct a new name
492  * based on fname:
493  * - replace an extension ".afm" with ".pl"
494  * - strip leading path+
495  * In this function, kpathsea functions don't provide better
496  * functionality, but they do improve portability.
497  */
498 static const char *
499 openout(const char *fname, int based_on, const char *outext)
500 {
501  const char *inext = ".afm";
502  /* use inext+1 and outext+1 when the leading dot is not desired */
503  const char *realfname;
504  const char *suf;
505 
506  if (based_on) { /* compute output filename */
507  suf = find_suffix (fname);
508  if (suf && !strcmp ((inext + 1), suf)) { /* replace afm suffix */
509  char * q;
510  q = newstring (fname);
511  q[suf - fname] = 0;
512  strcat (q, (outext + 1));
513  realfname = q;
514  /* no allocation required: new suffix not longer than old one */
515  } else /* append new suffix */
516  realfname = concat (fname, outext);
517  realfname = xbasename (realfname);
518  } else {
519  suf = find_suffix (fname);
520  if (suf)
521  realfname = fname;
522  else
523  realfname = concat (fname, outext);
524  }
525  outfile = fopen (realfname, "w");
526  /* afm2tfm uses WRITEBIN instead of "w" for some OS-es */
527  if (outfile)
528  return realfname;
529  else
530  error (concat ("!", concat (realfname, " not found")));
531  return NULL;
532 }
533 
534 /********************************************************
535  * reading the afm
536  */
537 
538 const char *interesting[] = { "FontName", "ItalicAngle", "IsFixedPitch",
539  "XHeight", "C", "KPX", "EncodingScheme",
540  "StartCharMetrics", "CharWidth", NULL
541 };
542 #define FontName (0)
543 #define ItalicAngle (1)
544 #define IsFixedPitch (2)
545 #define XHeight (3)
546 #define C (4)
547 #define KPX (5)
548 #define EncodingScheme (6)
549 #define StartCharMetrics (7)
550 #define CharWidth (8)
551 #define NONE (-1)
552 static int
553 interest(char *s)
554 {
555  register const char **p;
556  register int n;
557 
558  for (p = interesting, n = 0; *p; p++, n++)
559  if (strcmp (s, *p) == 0)
560  return (n);
561  return (NONE);
562 }
563 
564 /* At function call, param points to the first char of the next
565  * string, or to eol.
566  * In the input buffer, a terminating space is replaced with a null char.
567  * Before termination, param is moved to the start of the next
568  * string, or to eol.
569  */
570 
571 /* next (parameter) string (param is input pointer),
572  * with allocation */
573 
574 static char *
576 {
577  register char *p, *q;
578 
579  p = param;
580  while (*p > ' ')
581  p++;
582  if (*p != 0)
583  *p++ = 0;
584  q = newstring (param);
585  while (*p && *p <= ' ')
586  p++;
587  param = p;
588  return (q);
589 }
590 
591 /* next (parameter) string from afm file (param is input pointer),
592  * pre-allocated */
593 
594 static char *
596 {
597  register char *p, *q;
598 
599  p = param;
600  while (*p > ' ')
601  p++;
602  q = param;
603  if (*p != 0)
604  *p++ = 0;
605  while (*p && *p <= ' ')
606  p++;
607  param = p;
608  return (q);
609 }
610 
611 static int
612 paramnum(void)
613 {
614  register char *p;
615  int i;
616 
617  p = paramstring ();
618  if (sscanf (p, "%d", &i) != 1)
619  error ("! integer expected");
620  return (i);
621 }
622 
623 static float
625 {
626  register char *p;
627  float i;
628 
629  p = paramstring ();
630  if (sscanf (p, "%f", &i) != 1)
631  error ("! number expected");
632  return (i);
633 }
634 
635 static void
636 expect(const char *s)
637 {
638  if (strcmp (paramstring (), s) != 0) {
639  (void) fprintf (stderr, "%s expected: ", s);
640  error ("! syntax error");
641  }
642 }
643 
644 /* allocating and initializing structs */
645 
646 /* initialize afm info for one char */
647 static struct adobeinfo *
648 newchar(void)
649 {
650  register struct adobeinfo *ai;
651 
652  ai = (struct adobeinfo *) mymalloc ((unsigned long)
653  sizeof (struct adobeinfo));
654  ai->adobenum = -1;
655  ai->tfmnum = -1;
656  /* ai->kern_as = NULL; */
657  ai->width = -1;
658  ai->adobename = NULL;
659  ai->llx = -1;
660  ai->lly = -1;
661  ai->urx = -1;
662  ai->ury = -1;
663  ai->ligs = NULL;
664  ai->kerns = NULL;
665  /* ai->kern_equivs = NULL ; */
666  return (ai);
667 }
668 
669 static struct kern *
670 newkern(void)
671 {
672  register struct kern *nk;
673 
674  nk = (struct kern *) mymalloc ((unsigned long) sizeof (struct kern));
675  nk->next = NULL;
676  nk->succ = NULL;
677  nk->delta = 0;
678  return (nk);
679 }
680 
681 static struct lig *
682 newlig(void)
683 {
684  register struct lig *nl;
685 
686  nl = (struct lig *) mymalloc ((unsigned long) sizeof (struct lig));
687  nl->next = NULL;
688  nl->succ = NULL;
689  nl->sub = NULL;
690  nl->op = 0; /* the default =: op */
691  nl->boundright = 0;
692  return (nl);
693 }
694 
695 /* read and interpret afm info for 1 char
696  * adobeptrs is an array of pointers to adobeinfo structs
697  * indexed by adobenum.
698  * */
699 static void
701 { /* an input line beginning with C */
702  register struct adobeinfo *ai;
703  register struct lig *nl;
704 
705  if ((++iglyph) >= nglyphs)
706  error ("!Too many glyphs in afm");
707  adobechars[iglyph] = newchar ();
708  ai = adobechars[iglyph];
709  ai->adobenum = paramnum ();
710  expect (";");
711  expect ("WX");
712  ai->width = paramnum ();
713  if (fixedpitch)
714  charwidth = ai->width;
715  expect (";");
716  expect ("N");
717  ai->adobename = paramnewstring ();
718  if ((ai->adobenum) >= 0)
720  expect (";");
721  expect ("B");
722  ai->llx = paramnum ();
723  ai->lly = paramnum ();
724  ai->urx = paramnum ();
725  ai->ury = paramnum ();
726  expect (";");
727 /* Now look for ligatures (which aren't present in fixedpitch fonts) */
728  while (*param == 'L' && !fixedpitch) {
729  expect ("L");
730  nl = newlig ();
731  nl->succ = paramnewstring ();
732  nl->sub = paramnewstring ();
733  nl->next = ai->ligs;
734  ai->ligs = nl;
735  expect (";");
736  }
737 }
738 
739 static void
741 { /* an input line beginning with KPX */
742  register struct adobeinfo *ai;
743  register char *p, *sc;
744  register struct kern *nk;
745  int dlt;
746 
747  p = paramstring ();
748  ai = findadobe (p);
749  if (!ai)
750  error ("kern char not found");
751  else {
752  sc = paramstring ();
753  dlt = paramnum ();
754  if (dlt) {
755  nk = newkern ();
756  nk->succ = newstring (sc);
757  nk->delta = dlt;
758  nk->next = ai->kerns;
759  ai->kerns = nk;
760  }
761  }
762 }
763 
764 /* read afm file */
765 static void
767 {
768  const char *inname;
769  int i;
770 
771  /* open afm file */
773  inname = openin (inname, kpse_afm_format, ".afm");
774 
775  nglyphs = -1; /* allocate adobechars at StartCharMetrics */
776  afmencoding = (struct encoding *) mymalloc ((unsigned long)
777  sizeof (struct encoding));
778  for (i = 0; i < 256; i++)
779  afmencoding->vec[i] = ".notdef";
780  afmencoding->name = "Unspecified";
781 
782  while (texlive_getline ()) {
783  switch (interest (paramstring ())) {
784  case FontName:
786  break;
787  case EncodingScheme:
789  break;
790  case ItalicAngle:
791  italicangle = paramfloat ();
792  break;
793  case IsFixedPitch:
794  if (*param == 't' || *param == 'T')
795  fixedpitch = 1;
796  else
797  fixedpitch = 0;
798  break;
799  case XHeight:
800  xheight = paramnum ();
801  break;
802  case StartCharMetrics:
803  nglyphs = paramnum ();
804  nglyphsb = nglyphs + 1;
805  iglyph = -1;
806  /* Allocate adobechars array (just the array of pointers).
807  * Reserve extra slot for rboundarychar
808  */
809  adobechars =
810  (struct adobeinfo **) mymalloc ((unsigned long) (nglyphs+1) *
811  (unsigned long) sizeof (struct
812  adobeinfo
813  *));
814  break;
815  case C:
816  handlechar ();
817  break;
818  case KPX:
819  handlekern ();
820  break;
821  case CharWidth:
822  charwidth = paramnum ();
823  fixedpitch = 1;
824  break;
825  default:
826  break;
827  }
828  }
829  fclose (infile);
830  infile = NULL;
831 }
832 
833 /* now some changes to the afm info */
834 static void
836 {
837  struct adobeinfo *ai;
838  int i;
839  /* float newslant; local declaration masks global one */
840 
841  /* A fix: avoiding negative heights or depths.
842  * They break accents in math mode, among other things.
843  */
844  for (i = 0; i < nglyphs; i++) {
845  ai = adobechars[i];
846  if (ai->lly > 0)
847  ai->lly = 0;
848  if (ai->ury < 0)
849  ai->ury = 0;
850  }
851 
852  /* apply any requested geometric transforms */
853  if (efactor != 1.0 || slant != 0.0) {
854  for (i = 0; i < nglyphs; i++) {
855  ai = adobechars[i];
856  ai->width = transform (ai->width, 0);
857  ai->llx = transform (ai->llx, ai->lly);
858  ai->urx = transform (ai->urx, ai->ury);
859  }
860  }
861  newslant = (double) slant -
862  efactor * tan (italicangle * (3.1415926535 / 180.0));
863 
864  /* Avoid output of '(SLANT R -0.000000)' due to floating point
865  * rounding; neither round() nor fabs() need be defined. */
866  if ((newslant < 0.0) && (newslant*2000000.0 >= -1.0))
867  newslant = 0.0;
868 
869  /* if !keepligs, remove native ligatures */
870  if (!keepligs && lspace>0) {
871  for (i = 0; i < nglyphs; i++)
872  adobechars[i]->ligs = NULL;
873  }
874 
875  /* create a left and right boundarychar entries - just in case,
876  * but don't add them (yet) to adobechars */
877  for (i = 0; i < 2; i++) {
878  ai = newchar ();
879  ai->adobenum = -1;
880  ai->width = 0;
881  ai->llx = 0;
882  ai->lly = 0;
883  ai->urx = 0;
884  ai->ury = 0;
885  ai->adobename = boundaryname;
886  if (i == 0)
887  lbound = ai;
888  else
889  rbound = ai;
890  }
891 
892  /* global font dimensions */
893 
894  /* The following may depend on the -f parameter */
895 
896  if (xheight == 0) {
897  ai = findadobe ("x");
898  if (ai)
899  xheight = ai->ury;
900  else
901  xheight = 400;
902  }
903 
904  if (afm2tfm_compat) { /* -f 'afm2tfm'*/
905 
906  ai = findadobe ("space");
907  if (ai)
908  fontspace = ai->width; /* transform already applied */
909  else {
910  if (fixedpitch)
912  else
913  transform(500, 0);
914  }
915  fstretch = (fixedpitch) ? 0 : transform (300, 0);
916  fshrink = (fixedpitch) ? 0 : transform (100, 0);
917  /* fextra = transform (111, 0); */
918  fquad = transform (1000, 0);
919 
920  } else if (!fixedpitch) {
921 
922  /* some may be set by a numerical -f parameter) */
923 
924  if (fontspace<0) {
925  ai = findadobe ("space");
926  if (ai)
927  fontspace = ai->width; /* transform already applied */
928  else {
929  fontspace = transform(500, 0);
930  }
931  }
932  if (fquad<0) {
933  ai = findadobe ("zero");
934  if (ai) fquad = 2 * ai->width;
935  else if (fixedpitch) fquad = 2 * charwidth;
936  else fquad = transform (1000, 0);
937  }
938  if (fstretch<0) fstretch = fontspace / 2;
939  if (fshrink<0) fshrink = fontspace / 3;
940  if (fextra<0) fextra = fontspace / 3;
941  } else { /* fixedpitch && !afm2tfm_compat */
942  if (fontspace<0) fontspace = charwidth;
943  if (fstretch<0) fstretch = 0;
944  if (fshrink<0) fshrink = 0;
945  if (fquad<0) fquad = 2 * charwidth;
946  if (fextra<0) fextra = charwidth;
947  }
948 }
949 
950 /**************************************************
951  * reading encodings
952  */
953 
954 char smbuffer[100]; /* for tokens */
955 
956 /* Here we get a token from the encoding file. We parse just as
957  * much PostScript as we expect to find in an encoding file. We
958  * allow commented lines and names like 0, .notdef, _foo_. We do
959  * not allow //abc.
960  */
961 static char *
962 gettoken(void)
963 {
964  char *p, *q;
965 
966  while (1) {
967  while (param == 0 || *param == 0) {
968  if (texlive_getline () == 0)
969  error ("! premature end in encoding file");
970  }
971  if (param[0] == '%') {
972  param[0] = 0; /* be done with this line */
973  continue;
974  }
975  while (*param && *param <= ' ')
976  param++;
977  if (*param) {
978  if (*param == '[' || *param == ']' ||
979  *param == '{' || *param == '}') {
980  smbuffer[0] = *param++;
981  smbuffer[1] = 0;
982  return smbuffer;
983  } else if (*param == '/' || *param == '-' || *param == '_' ||
984  *param == '.' ||
985  ('0' <= *param && *param <= '9') ||
986  ('a' <= *param && *param <= 'z') ||
987  ('A' <= *param && *param <= 'Z')) {
988  smbuffer[0] = *param;
989  for (p = param + 1, q = smbuffer + 1;
990  *p == '-' || *p == '_' || *p == '.' ||
991  ('0' <= *p && *p <= '9') ||
992  ('a' <= *p && *p <= 'z') ||
993  ('A' <= *p && *p <= 'Z'); p++, q++)
994  *q = *p;
995  *q = 0;
996  param = p;
997  return smbuffer;
998  }
999  }
1000  }
1001 }
1002 
1003 /* This routine reads the encoding file.
1004  * Return value: pointer to encoding.
1005  *
1006  * There is just one reason why we read the encoding vector
1007  * before the extra ligkern information: if a (r)boundarychar is
1008  * specified by number then we want to translate it into
1009  * a glyph name.
1010  *
1011  * We also create tfmptrs as a reencoded version of adobechars, and
1012  * tfmnext, which tracks multiple encodings of a single glyph and is
1013  * best explained by the code creating it.
1014  */
1015 static void
1017 {
1018  char *p;
1019  int i, inx;
1020  struct adobeinfo *ai;
1021 
1022  if (infile)
1023  error ("! oops; internal infile error");
1024  if (encfilename) {
1025  encfilename =
1026  openin (encfilename, kpse_enc_format, ".enc");
1027  param = 0;
1028  if (infile == 0)
1029  error ("! couldn't open that encoding file");
1030  outencoding = (struct encoding *) mymalloc
1031  ((unsigned long) sizeof (struct encoding));
1032  for (i = 0; i < 256; i++)
1033  outencoding->vec[i] = ".notdef";
1034  outencoding->name = "Unspecified";
1035  p = gettoken ();
1036  if (*p != '/' || p[1] == 0)
1037  error ("! first token in encoding must be literal encoding name");
1038  outencoding->name = newstring (p + 1);
1039  p = gettoken ();
1040  if (strcmp (p, "["))
1041  error ("! second token in encoding must be mark ([) token");
1042  for (i = 0; i < 256; i++) {
1043  p = gettoken ();
1044  if (*p != '/' || p[1] == 0)
1045  error ("! tokens 3 to 257 in encoding must be literal names");
1046  outencoding->vec[i] = newstring (p + 1);
1047  }
1048  p = gettoken ();
1049  if (strcmp (p, "]"))
1050  error ("! token 258 in encoding must be make-array (])");
1051  fclose (infile);
1052  infile = 0;
1053  } else
1055 
1056  /* find adobeinfo for each encoded glyph name
1057  * track multiple encodings (tfmnext).
1058  * For missing glyphs, this is not necessary.
1059  */
1060  for (i = 0; i < 256; i++)
1061  tfmnext[i] = -1;
1062  for (i = 0; i < 256; i++) {
1063  if (strcmp (outencoding->vec[i], ".notdef")) {
1064  ai = findadobe (outencoding->vec[i]);
1065  tfmptrs[i] = ai;
1066  if (ai) {
1067  inx = ai->tfmnum;
1068  if (inx == -1)
1069  ai->tfmnum = i;
1070  else {
1071  while (tfmnext[inx] != -1)
1072  inx = tfmnext[inx];
1073  tfmnext[inx] = i;
1074  }
1075  } else { /* missing glyph */
1076  if (!missingchars && verbose)
1077  fputs ("Missing glyphs\n", stderr);
1078  missingchars += 1;
1079  if (verbose) printf ("%s\n", outencoding->vec[i]);
1080  }
1081  } else /* empty slot */
1082  tfmptrs[i] = NULL;
1083  }
1084 }
1085 
1086 /****************************************************************
1087  * Processing extra ligkern info
1088  *
1089  * When these functions are called, we have available the afm data
1090  * and the raw encoding vector.
1091  * changeadobe has created adobeinfos for left and right boundarychar.
1092  * We use the encoding vector ONLY to translate an rboundarychar spec
1093  * into an rboundarychar name. However, normally an rboundarychar will
1094  * occupy an otherwise unused slot in the encoding, in which case
1095  * the name is irrelevant.
1096  * I don't see the point of a numeric rboundarychar specification:
1097  * either one wants to use a specific character or the numeric value
1098  * doesn't matter. But I allow it for backward compatibility.
1099  *
1100  * extra ligkern info can come from:
1101  * - comments in the encoding file
1102  * - lig files. These replace the hard-coded set in afm2tfm.
1103  * afm2tfm applies its own set only if the enc file contains no
1104  * ligkern instructions. This is also the default behavior of
1105  * afm2pl.
1106  *
1107  * Typically, extra ligkern info may contain:
1108  * - tex-specific hacks such as `less less =: guillemotleft'
1109  * - deletion of space- and number kerns
1110  * - kern accented chars as their unaccented versions
1111  * - the f/l/i ligatures, in case they were absent from the afm.
1112  *
1113  * note. afm2pl allows first copying space kerns
1114  * to boundarychar kerns and then deleting the space kerns, leaving
1115  * the boundarychar kerns intact.
1116  *
1117  * There was a function for creating accented char ligatures.
1118  * This doesn't prevent TeX from compositing accented chars
1119  * so it is not very useful.
1120  * In afm2tfm this function was never called and I removed it.
1121  * I created a file accents.lig which may be loaded for these
1122  * accent ligs but default isn't.
1123  */
1124 
1125 /* Notation of ligkern specs:
1126  * char1 char2 =: char3 => replace char1 char2 with char3
1127  * and more generally:
1128  * char1 char2 ligop char3 => char1 char2 ligop char3
1129  * char1 {} char2 => delete char1 char2 kern
1130  * char1 <> char2 => kern char1 the same as char2
1131  * || = char => char is right boundary char
1132  *
1133  * Notes.
1134  * - cork.enc contains specs `char @{@} char' instead of `char {} char'
1135  * - The ligkern specs use `||' for both lboundarychar and
1136  * rboundarychar. The context must make clear which one is intended.
1137  * I store them in separate adobechar structs.
1138  */
1139 
1140 /* These are the eight ligature ops, in pl terms and in METAFONT terms.
1141  */
1142 const char *plligops[] = {
1143  "LIG", "/LIG", "/LIG>", "LIG/", "LIG/>", "/LIG/", "/LIG/>",
1144  "/LIG/>>", 0
1145 };
1146 const char *encligops[] = {
1147  "=:", "|=:", "|=:>", "=:|", "=:|>", "|=:|", "|=:|>", "|=:|>>", 0
1148 };
1149 
1150 /* Make the kerning for character s1 equivalent to that for s2
1151  * but don't replace existing kerns.
1152  * It doesn't matter whether or not s2 is encoded.
1153  * In the pl file, the kerning info of both s1 and s2 will be written
1154  * out in full.
1155  */
1156 static void
1157 copykerns(char *s1, char *s2)
1158 {
1159  int i, found, delta2, found1, found2;
1160  struct adobeinfo *ai, *ai1, *ai2;
1161  struct kern *nk, *nk1, *nk2;
1162 
1163  if (!strcmp (s1, s2))
1164  return;
1165 
1166  /* kerns with s1 and s2 on the left */
1167  if (!strcmp (boundaryname, s1))
1168  ai1 = lbound;
1169  else
1170  ai1 = findadobe (s1);
1171  if (!strcmp (boundaryname, s2))
1172  ai2 = lbound;
1173  else
1174  ai2 = findadobe (s2);
1175  if (ai1 && ai2 && ai2->kerns) {
1176  nk2 = ai2->kerns;
1177  while (nk2) {
1178  found = 0;
1179  nk1 = ai1->kerns;
1180  while (nk1) {
1181  if (!strcmp (nk1->succ, nk2->succ)) {
1182  found = 1;
1183  break;
1184  }
1185  nk1 = nk1->next;
1186  }
1187  if (!found) {
1188  nk1 = newkern ();
1189  nk1->succ = nk2->succ;
1190  nk1->delta = nk2->delta;
1191  nk1->next = ai1->kerns;
1192  ai1->kerns = nk1;
1193  }
1194  nk2 = nk2->next;
1195  }
1196  }
1197 
1198  /* kerns with s1 and s2 on the right. */
1199  if (!strcmp (boundaryname, s1) && boundglyph)
1200  s1 = boundglyph;
1201  if (!strcmp (boundaryname, s2) && boundglyph)
1202  s2 = boundglyph;
1203  /* a name '||' for s1/s2 is untouched */
1204  if (!strcmp (s1, s2))
1205  return;
1206  delta2 = 0; /* silence 'might be used uninitialized' warning */
1207  for (i = 0; i < nglyphs; i++) {
1208  ai = adobechars[i];
1209  found1 = 0;
1210  found2 = 0;
1211  nk = ai->kerns;
1212  while (nk) {
1213  if (!strcmp (nk->succ, s2)) {
1214  found2 = 1;
1215  delta2 = nk->delta;
1216  }
1217  if (!strcmp (nk->succ, s1))
1218  found1 = 1;
1219  nk = nk->next;
1220  }
1221  if (found2 && !found1) {
1222  nk1 = newkern ();
1223  nk1->next = ai->kerns;
1224  ai->kerns = nk1;
1225  nk1->succ = newstring (s1);
1226  /* can't copy s1, which is just a stack variable */
1227  nk1->delta = delta2;
1228  }
1229  }
1230 }
1231 
1232 /* remove kern between ai->adobechar and s2, where s2 != "*"
1233  */
1234 static void
1235 adobermkern(struct adobeinfo *ai, char *s2)
1236 {
1237  struct kern *k, *kprev;
1238  char *s2a;
1239  int first;
1240  if (!ai->kerns)
1241  return;
1242  k = ai->kerns;
1243  if (!strcmp (s2, boundaryname) && boundglyph)
1244  s2a = boundglyph;
1245  else
1246  s2a = s2;
1247  kprev = k; /* silence 'might be used uninitialized' warning */
1248  first = 1;
1249  while (k) {
1250  if (!strcmp (s2a, k->succ) || !strcmp (s2, k->succ)) {
1251  if (first)
1252  ai->kerns = k->next;
1253  else
1254  kprev->next = k->next;
1255  return;
1256  }
1257  first = 0;
1258  kprev = k;
1259  k = k->next;
1260  }
1261 }
1262 
1263 /* remove kerns between s1 and s2 (wildcards allowed) */
1264 static void
1265 rmkern(char *s1, char *s2)
1266 {
1267  int i;
1268  struct adobeinfo *ai;
1269 
1270  if (!strcmp (s1, "*")) {
1271  for (i = 0; i < nglyphs; i++) {
1272  ai = adobechars[i];
1273  adobermkern (ai, s2);
1274  }
1275  adobermkern (lbound, s2);
1276  } else if (!strcmp (s2, "*")) {
1277  if (!strcmp (s1, boundaryname))
1278  ai = lbound;
1279  else
1280  ai = findadobe (s1);
1281  if (ai)
1282  ai->kerns = NULL;
1283  } else { /* remove single pair */
1284  if (!strcmp (s1, boundaryname))
1285  ai = lbound;
1286  else
1287  ai = findadobe (s1);
1288  if (!ai)
1289  return;
1290  adobermkern (ai, s2);
1291  }
1292 }
1293 
1294 /* With default ligkern option, need to know whether
1295  * the enc file contains ligkern specs
1296  */
1298 
1299 /* zero-th iteration: look out for rboundarychar spec.
1300  * first iteration: look out for everything else.
1301  */
1303 
1304 /* set_rboundarychar is to be called after the ligkern specs have been
1305  * scanned for a rboundarychar spec but before we know whether it
1306  * will actually be used.
1307  */
1308 static void
1310 {
1311  int i;
1312  if (bch == -1) {
1313  /* find empty slot; skip 0, just to be safe */
1314  for (i = 1; i < 256; i++)
1315  if (!strcmp (outencoding->vec[i], ".notdef")) {
1316  rboundarychar = i;
1317  tfmptrs[i] = rbound;
1318  rbound->tfmnum = i;
1320  return;
1321  }
1322  error ("No tfm slot available for boundarychar");
1323  } else {
1324  rboundarychar = bch;
1325  if (tfmptrs[rboundarychar]) {
1328  nglyphsb = nglyphs; /* no extra slot in adobechars needed */
1329  } else {
1330  tfmptrs[bch] = rbound;
1331  rbound->tfmnum = bch;
1333  }
1334  return;
1335  }
1336 }
1337 
1338 /* Reads a ligkern line, which may contain several ligkern specs.
1339  * lig_it = 0: only process rboundarychar spec
1340  * lig_it != 0: process all other ligkern specs
1341  * lig_it = 2: post-letterspacing; only `{}' specs are allowed.
1342  */
1343 static void
1344 checkligkern(char *s, int isencfile)
1345 {
1346  char *mlist[5]; /* tokens constituting a ligkern spec */
1347  int n, i, bch;
1348  struct adobeinfo *ai;
1349 
1350  if (s[0] == '%')
1351  s++; /* skip optional leading `%' */
1352  /* Note. '%' is necessary for ligkern comments in an encoding file
1353  * and optional otherwise.
1354  */
1355  while (*s && *s <= ' ')
1356  s++; /* skip to first token */
1357  if (!s[0])
1358  return; /* empty line; done */
1359  if (isencfile && strncmp (s, "LIGKERN", 7)) /* not a ligkern line */
1360  return;
1361  if (!strncmp (s, "LIGKERN", 7))
1362  s += 7; /* skip beyond `LIGKERN' */
1363  sawligkern = 1;
1364  while (*s && *s <= ' ')
1365  s++;
1366  param = s;
1367  while (*param) {
1368  /* collect next ligkern spec */
1369  for (n = 0; n < 5;) {
1370  /* collect next token for ligkern spec */
1371  if (*param == 0)
1372  break; /* ligkern spec complete */
1373  mlist[n] = paramstring ();
1374  if (strcmp (mlist[n], ";") == 0)
1375  break; /* ligkern spec complete */
1376  n++;
1377  }
1378 
1379  /* handle ligkern spec */
1380  if (n > 4)
1381  error ("! too many parameters in lig kern data");
1382  if (n < 3)
1383  error ("! not enough parameters in lig kern data");
1384  if (n == 3 && strcmp (mlist[1], "{}") == 0) {
1385  if (!lig_it)
1386  continue;
1387  if (lig_it == 2 && strcmp (mlist[0], "*") != 0) {
1388  ai = findadobe (mlist[0]);
1389  if (ai) ai->nonstd_lk = 1;
1390  }
1391  rmkern (mlist[0], mlist[2]);
1392  } else if (n == 3 && strcmp (mlist[1], "<>") == 0) {
1393  if (!lig_it)
1394  continue;
1395  if (lig_it == 2)
1396  error ("!Post-letterspacing <> kern spec not allowed");
1397  copykerns (mlist[0], mlist[2]);
1398  } else if (n == 3 && strcmp (mlist[0], boundaryname) == 0 &&
1399  strcmp (mlist[1], "=") == 0) {
1400  /* setting of rboundarychar; only during 0-th iteration */
1401  if (lig_it)
1402  continue;
1403  if (lig_it == 2)
1404  error ("!Post-letterspacing boundarychar spec not allowed");
1405  if (rboundarychar != -1)
1406  error ("! multiple boundary character commands?");
1407  if (sscanf (mlist[2], "%d", &bch) == 1) {
1408  /* number for rboundarychar */
1409  if (bch < 0 || bch > 255)
1410  error ("! boundary character number must be 0..255");
1411  else
1412  set_rboundarychar (bch);
1413  } else { /* named rboundarychar */
1414  for (bch = 0; bch < 256; bch++)
1415  if (!strcmp (outencoding->vec[bch], mlist[2]))
1416  break;
1417  if (bch<256) boundglyph = newstring(mlist[2]);
1418  else {
1419  if (strcmp ("cwm", mlist[2])) error
1420  ("unencoded boundarychar; will use empty slot instead");
1421  bch = -1;
1423  }
1424  set_rboundarychar (bch);
1425  }
1426  } else if (n == 4) { /* ligature: char succ lig_op result */
1427  int op = -1;
1428 
1429  if (!lig_it)
1430  continue;
1431  if (lig_it == 2)
1432  error ("!Post-letterspacing lig spec not allowed");
1433  for (i = 0; encligops[i]; i++)
1434  if (strcmp (mlist[2], encligops[i]) == 0) {
1435  op = i;
1436  break;
1437  }
1438  if (op < 0)
1439  error ("! bad ligature op specified");
1440  if (!strcmp (mlist[0], boundaryname))
1441  ai = lbound;
1442  else
1443  ai = findadobe (mlist[0]);
1444  if (ai) {
1445  struct lig *lig;
1446 
1447  if (findadobe (mlist[1])) /* remove coincident kerns */
1448  rmkern (mlist[0], mlist[1]);
1449  if (strcmp (mlist[3], boundaryname) == 0)
1450  error ("! you can't lig to the boundary character!");
1451  for (lig = ai->ligs; lig; lig = lig->next)
1452  if (strcmp (lig->succ, mlist[1]) == 0)
1453  break; /* we'll re-use this structure */
1454  if (lig == 0) {
1455  lig = newlig ();
1456  lig->succ = newstring (mlist[1]);
1457  lig->next = ai->ligs;
1458  ai->ligs = lig;
1459  }
1460  lig->sub = newstring (mlist[3]);
1461  lig->op = op;
1462  if (strcmp (mlist[1], boundaryname) == 0) {
1463  lig->boundright = 1;
1464  if (strcmp (mlist[0], boundaryname) == 0)
1465  error ("! you can't lig boundarychar boundarychar!");
1466  } else
1467  lig->boundright = 0;
1468  }
1469  } else
1470  error ("! bad form in LIGKERN command");
1471  }
1472 }
1473 
1474 static void
1476 {
1477  int i,j;
1478  struct kern *k;
1479  struct adobeinfo *ai;
1480  int *haskern; /* which glyphs are rhs of a kerning pair? */
1481 
1482  haskern = (int *) malloc (nglyphs * sizeof (int));
1483  for (i=0;i<nglyphs;i++) {
1484  for (j=0;j<nglyphs;j++) haskern[j] = 0;
1485  ai = adobechars[i];
1486  for (k=ai->kerns;k;k=k->next) {
1487  j = findindex (k->succ);
1488  if (j>0 && j<nglyphs) {
1489  /* kern with rbound is NOT modified */
1490  k->delta += lspace;
1491  haskern[j] = 1;
1492  }
1493  }
1494  for (j=0;j<nglyphs;j++) if (!haskern[j]) {
1495  k = newkern();
1496  k->succ = adobechars[j]->adobename;
1497  k->delta = lspace;
1498  k->next = ai->kerns;
1499  ai->kerns = k;
1500  }
1501  }
1502  free (haskern);
1503  fontspace += 2 * lspace;
1504 }
1505 
1506 static void
1508 {
1509  int i;
1510  char *p;
1511  struct adobeinfo *ai;
1512 
1513  /* with positive letterspacing, remove native ligs unless keepligs
1514  */
1515  if (lspace>0 && !keepligs)
1516  for (i=0;i<nglyphs;i++) adobechars[i]->ligs = NULL;
1517 
1518  /* Boundarychars make things a lot messier than they would be
1519  * otherwise. A rather long summary:
1520  * When typesetting, TeX sandwiches words between a left
1521  * boundarychar and a right boundarychar.
1522  * It seems sensible to translate space kerns into boundarychar
1523  * kerns although afm2tfm doesn't do this.
1524  * Below, we read ligkern info twice: the first time to read
1525  * a right boundarychar spec, if any, the second time to read everything
1526  * else. The global loop variable lig_it is consulted by checkligkern.
1527  * more about boundarychar/boundaryname:
1528  * rboundarychar is the index of right boundarychar in the tfm;
1529  * initialized as -1
1530  * The left boundarychar doesn't need a proper tfm index
1531  */
1532  if (lspace>0 && !strcmp (ligoption, "0")) ligoption = "1";
1533  if (!strcmp (ligoption, "0"))
1534  return;
1535  if (!strcmp (ligoption, "1") && encfilename && lspace<=0) {
1536  sawligkern = 0;
1537  /* ligkern specs in comments in encoding file? */
1538  encfilename =
1539  openin (encfilename, kpse_enc_format, ".enc");
1540  for (lig_it = 0; lig_it < 2; lig_it++) {
1541  while (texlive_getline ()) {
1542  /* search for (ligkern) comment in line */
1543  for (p = buffer; *p; p++)
1544  if (*p == '%') {
1545  checkligkern (p, 1); /* 2nd param 1: reading .enc file */
1546  break;
1547  }
1548  }
1549  if (!sawligkern)
1550  break; /* read default lig file instead */
1551  if (!lig_it) {
1552  if (rboundarychar == -1)
1553  set_rboundarychar (-1);
1554  rewind (infile);
1555  }
1556  }
1557  fclose (infile);
1558  if (sawligkern)
1559  return;
1560  else {
1561  ligfilenames->n = 1;
1562  ligfilenames->names = malloc (sizeof (char *));
1563  ligfilenames->names[0] = "default.lig";
1564  }
1565  } else if (!strcmp (ligoption, "1")) { /* lspace>0 or no encfile */
1566  ligfilenames->n = 1;
1567  ligfilenames->names = malloc (sizeof (char *));
1568  if (lspace<=0) ligfilenames->names[0] = "default.lig";
1569  else ligfilenames->names[0] = "defpre.lig";
1570  }
1571 
1572  /* process ligfilenames struct */
1573  for (lig_it = 0; lig_it < 2; lig_it++) {
1574  for (i = 0; i < ligfilenames->n; i++) {
1576  kpse_lig_format, ".lig");
1577  while (texlive_getline ())
1578  checkligkern (buffer, 0); /* 2nd param 0: lig file */
1579  fclose (infile);
1580  }
1581  if (!lig_it && (rboundarychar == -1))
1582  set_rboundarychar (-1);
1583  }
1584 
1585  /* optimization: identify glyphs which now have ligs or kerns.
1586  * Boundarychars: rboundarychar won't get a label in the ligtable,
1587  * and lboundarychar will be done separately anyhow.
1588  */
1589  for (i=0;i<nglyphs;i++) {
1590  ai = adobechars[i];
1591  ai->nonstd_lk = (ai->ligs!=NULL || ai->kerns!=NULL);
1592  }
1593 
1594  if (!lspace) return;
1595 
1596  letterspace();
1597 
1598  /* process post-letterspace ligfiles */
1599  if (!strcmp (Ligoption, "1")) {
1600  Ligfilenames->n = 1;
1601  Ligfilenames->names = malloc (sizeof (char *));
1602  Ligfilenames->names[0] = "defpost.lig";
1603  }
1604  lig_it = 2;
1605  for (i = 0; i < Ligfilenames->n; i++) {
1607  kpse_lig_format, ".lig");
1608  while (texlive_getline ())
1609  checkligkern (buffer, 0); /* 2nd param 0: lig file */
1610  fclose (infile);
1611  }
1612 }
1613 
1614 static void
1616 {
1617  /* afm2tfm values for fstretch, fshrink, fextra: 200, 100, 111
1618  * fontinst values: 0.6 * space, 0.24 * space, ?
1619  * cmr10 values: 0.5 * space, .33 * space, .33 * space
1620  */
1621  if (!fixedpitch) {
1622  if (fstretch==0) fstretch = fontspace / 2;
1623  if (fshrink==0) fshrink = fontspace / 3;
1624  if (fextra==0) fextra = fontspace / 3;
1625  }
1626 }
1627 
1628 /*********************************************************
1629  * debug output of adobeinfo structs */
1630 
1631 #ifdef AFMDEBUG
1632 FILE *dmp;
1633 char *dmpname = "afm2pl.dmp";
1634 
1635 static void
1636 dumpai(struct adobeinfo *ai)
1637 {
1638  struct lig *lg;
1639  struct kern *kr;
1640  putc ('\n', dmp);
1641  fprintf (dmp, "adobename %s\n",
1642  ai->adobename ? ai->adobename : "undefined");
1643  fprintf (dmp, "adobenum %d\n", ai->adobenum);
1644  fprintf (dmp, "tfmnum %d\n", ai->tfmnum);
1645  fprintf (dmp, "width %d\n", ai->width);
1646  fprintf (dmp, "bbox %d %d %d %d\n", ai->llx, ai->lly, ai->urx,
1647  ai->ury);
1648  fprintf (dmp, "nonstd_lk %d\n", ai->nonstd_lk);
1649  if (!ai->ligs)
1650  fputs ("no ligs\n", dmp);
1651  else
1652  for (lg = ai->ligs; lg; lg = lg->next)
1653  fprintf (dmp, "lig %s %d %s%s\n",
1654  lg->succ, lg->op, lg->sub,
1655  lg->boundright ? " boundarychar" : "");
1656  if (!ai->kerns)
1657  fputs ("no kerns\n", dmp);
1658  else
1659  for (kr = ai->kerns; kr; kr = kr->next)
1660  fprintf (dmp, "kern %s %d\n", kr->succ, kr->delta);
1661 }
1662 
1663 static void
1664 writedump(void)
1665 {
1666  int i;
1667  dmp = fopen (dmpname, "w");
1668  if (!dmp)
1669  error ("Cant open dump file");
1670  if (lbound) {
1671  fputs ("\nleft boundarychar\n", dmp);
1672  dumpai (lbound);
1673  }
1674  if (rbound) {
1675  fputs ("\nright boundarychar\n", dmp);
1676  dumpai (rbound);
1677  }
1678  for (i = 0; i < nglyphs; i++)
1679  if (adobechars[i]) dumpai (adobechars[i]);
1680  else fprintf (dmp, "\nNo char at slot %d\n", i);
1681 
1682  fputs ("\nBy tfmptrs:\n", dmp);
1683  for (i = 0; i < 256; i++)
1684  if (tfmptrs[i]) dumpai (tfmptrs[i]);
1685  else fprintf (dmp, "\nNo char at slot %d\n", i);
1686  fclose (dmp);
1687 }
1688 #endif
1689 
1690 /*******************************************************************
1691  * the PL file. */
1692 
1693 #define plout(s) fprintf(outfile, s)
1694 int level; /* depth of parenthesis nesting in PL output file */
1695 
1696 /* indent */
1697 static void
1699 {
1700  register int l = level;
1701  while (l--)
1702  plout (" ");
1703 }
1704 
1705 /* newline plus indent */
1706 static void
1708 {
1709  plout ("\n");
1710  pllevout ();
1711 }
1712 
1713 #define ploutln(str) {fprintf(outfile,"%s\n",str);pllevout();}
1714 #define ploutln2(f,s) {fprintf(outfile,f,s);pllevnlout();}
1715 #define ploutln3(f,a,b) {fprintf(outfile,f,a,b);pllevnlout();}
1716 #define ploutln4(f,a,b,c) {fprintf(outfile,f,a,b,c);pllevnlout();}
1717 
1718 /* left bracket */
1719 static void
1720 plleft(void)
1721 {
1722  level++;
1723  plout ("(");
1724 }
1725 
1726 /* right bracket */
1727 static void
1728 plright(void)
1729 {
1730  level--;
1731  ploutln (")");
1732 }
1733 
1734 /* return string representation for .pl file of tfmptrs[c]
1735  * don't forget that TeX doesn't use glyph names.
1736  * only, if c happens to be a printable ascii char
1737  * then we gratefully use that fact if we are allowed to.
1738  * If the encoding moves the printable ascii range around then
1739  * forceoctal would be a good idea.
1740  */
1741 char plcharbuf[6];
1742 static char *
1743 plchar(int c)
1744 {
1745  if (forceoctal == 0 && ISALNUM (c))
1746  (void) sprintf (plcharbuf, "C %c",
1747 #ifndef VMCMS
1748  c);
1749 #else
1750  ascii2ebcdic[c]);
1751 #endif
1752  else
1753  (void) sprintf (plcharbuf, "O %o", (unsigned) c);
1754  return (char *) plcharbuf;
1755 }
1756 
1757 /* comment string with official glyph name if useful,
1758  * null string otherwise
1759  */
1760 char plnamebuf[100];
1761 static char *
1762 plname(int c)
1763 {
1764  if (!forceoctal && ISALNUM (c)) {
1765  plnamebuf[0] = 0;
1766  } else if (c >= 0 && c < 256) {
1767  sprintf (plnamebuf, " (comment %s)", tfmptrs[c]->adobename);
1768  }
1769  return (char *) plnamebuf;
1770 }
1771 
1772 
1773 /* obuffer: originally unmodified copy of input buffer,
1774  * now recycled as output buffer
1775  */
1776 static void
1777 writepl(void)
1778 {
1779  register int i, j, k;
1780  int bc, ec;
1781  register struct adobeinfo *ai;
1782  register struct lig *nlig;
1783  register struct kern *nkern;
1784  struct adobeinfo *asucc, *asub;
1785  int ht, dt;
1786  char labeled;
1787  const char *pp;
1788 
1789  outname = openout (outname, based_on, ".pl");
1790 
1791  /* header */
1792  {
1793  char *outbase = newstring (xbasename (outname));
1794  pp = find_suffix (outbase);
1795  if (pp)
1796  outbase[pp - outbase - 1] = 0;
1797  (void) sprintf (obuffer, "%s%s%s", outbase,
1798  (efactor == 1.0 ? "" : "-E"),
1799  (slant == 0.0 ? "" : "-S"));
1800  free (outbase);
1801  }
1802  if (strlen (obuffer) > 19) { /* too long, will retain first 9 and last 10 */
1803  register char *p, *q;
1804  for (p = &obuffer[9], q = &obuffer[strlen (obuffer) - 10];
1805  p < &obuffer[19]; p++, q++)
1806  *p = *q;
1807  obuffer[19] = 0;
1808  }
1809 
1810  /* global parameters */
1811  ploutln2 ("(FAMILY %s)", obuffer);
1812  {
1813  char tbuf[41];
1814  char *tbp;
1815 
1816  strncpy (tbuf, outencoding->name, 40);
1817  tbuf[40] = 0;
1818 
1819  if (strlen (tbuf) > 39) {
1820  error ("Coding scheme too long; shortening to 39 characters.");
1821  tbuf[39] = 0;
1822  }
1823  tbp = tbuf;
1824  while (*tbp) { *tbp = toupper ((unsigned char)*tbp); tbp++; }
1825  ploutln2 ("(CODINGSCHEME %s)", tbuf);
1826  }
1827  ploutln ("(DESIGNSIZE R 10.0)");
1828  ploutln ("(DESIGNUNITS R 1000)");
1829  ploutln ("(COMMENT DESIGNSIZE (1 em) IS IN POINTS)");
1830  ploutln
1831  ("(COMMENT OTHER DIMENSIONS ARE MULTIPLES OF DESIGNSIZE/1000)");
1832  /* Let pltotf compute the checksum. */
1833  /* ploutln2("(CHECKSUM O %lo)",cksum ^ 0xffffffff) ; */
1834  if (rboundarychar >= 0)
1835  ploutln2 ("(BOUNDARYCHAR O %lo)", (unsigned long) rboundarychar);
1836  plleft ();
1837  ploutln ("FONTDIMEN");
1838  ploutln2 ("(SLANT R %f)", newslant);
1839  ploutln2 ("(SPACE D %d)", fontspace);
1840  ploutln2 ("(STRETCH D %d)", fstretch);
1841  ploutln2 ("(SHRINK D %d)", fshrink);
1842  ploutln2 ("(XHEIGHT D %d)", xheight);
1843  ploutln2 ("(QUAD D %d)", fquad);
1844  if (!afm2tfm_compat) ploutln2 ("(EXTRASPACE D %d)", fextra);
1845  plright ();
1846 
1847  /* beginning and end of char array */
1848  for (i = 0; i < 256 && tfmptrs[i] == NULL; i++);
1849  bc = i;
1850  for (i = 255; i >= 0 && tfmptrs[i] == NULL; i--);
1851  ec = i;
1852 
1853  /* ligkern table */
1854  plleft ();
1855  ploutln ("LIGTABLE");
1856 
1857  /* (left) boundarychar ligskerns */
1858  ai = lbound;
1859  labeled = 0;
1860  for (nlig = ai->ligs; nlig; nlig = nlig->next)
1861  if (0 != (asucc = findtfm (nlig->succ)))
1862  if (0 != (asub = findtfm (nlig->sub))) {
1863  if (!labeled) {
1864  ploutln ("(LABEL BOUNDARYCHAR)");
1865  labeled = 1;
1866  }
1867  /* handle all encodings of asucc */
1868  for (k = asucc->tfmnum; k >= 0; k = tfmnext[k])
1869  ploutln4 ("(%s %s O %o)", plligops[nlig->op],
1870  plchar (k), (unsigned) asub->tfmnum);
1871  }
1872  for (nkern = ai->kerns; nkern; nkern = nkern->next)
1873  if (0 != (asucc = findtfm (nkern->succ))) {
1874  if (!labeled) {
1875  ploutln ("(LABEL BOUNDARYCHAR)");
1876  labeled = 1;
1877  }
1878  /* handle all encodings of asucc */
1879  for (k = asucc->tfmnum; k >= 0; k = tfmnext[k]) {
1880  ploutln4 ("(KRN %s R %d)%s", plchar (k),
1881  nkern->delta, plname (k));
1882  }
1883  }
1884  if (labeled)
1885  ploutln ("(STOP)");
1886 
1887  /* other ligs and kerns */
1888 
1889 
1890  for (i = bc; i <= ec; i++)
1891  if ((ai = tfmptrs[i]) && ai->tfmnum == i && ai->nonstd_lk) {
1892  /* slot i is filled, points to a not-previously-encoded
1893  * character, and has ligs and kerns other than
1894  * standard letterspacing kerns. Do right boundarychar
1895  * only if it is a real glyph.
1896  */
1897  if (!strcmp (ai->adobename, "||"))
1898  continue;
1899  labeled = 0;
1900  /* do ligatures for ai = tfmptrs[i] */
1901  for (nlig = ai->ligs; nlig; nlig = nlig->next)
1902  if (0 != (asucc = findtfm (nlig->succ)))
1903  if (0 != (asub = findtfm (nlig->sub))) {
1904  /* we found a lig which really belongs in the tfm */
1905  if (!labeled) {
1906  /* also take care of all other slots for this char */
1907  for (j = i; j >= 0; j = tfmnext[j]) {
1908  ploutln3 ("(LABEL %s)%s", plchar (j), plname (j));
1909  }
1910  labeled = 1;
1911  }
1912  for (k = asucc->tfmnum; k >= 0; k = tfmnext[k]) {
1913  ploutln4 ("(%s %s O %o)", plligops[nlig->op],
1914  plchar (k), (unsigned) asub->tfmnum);
1915  }
1916  }
1917  /* do kerns for ai = tfmptrs[i] */
1918  for (nkern = ai->kerns; nkern; nkern = nkern->next)
1919  if (0 != (asucc = findtfm (nkern->succ))) {
1920  if (!labeled) {
1921  for (j = i; j >= 0; j = tfmnext[j]) {
1922  ploutln3 ("(LABEL %s)%s", plchar (j), plname (j));
1923  }
1924  labeled = 1;
1925  }
1926  dt = nkern->delta;
1927  for (k = asucc->tfmnum; k >= 0; k = tfmnext[k]) {
1928  ploutln4 ("(KRN %s R %d)%s", plchar (k), dt, plname (k));
1929  }
1930  }
1931  if (labeled)
1932  ploutln ("(STOP)");
1933  }
1934 
1935  if (lspace) {
1936  for (i = bc; i <= ec; i++)
1937  if ((ai = tfmptrs[i]) && !ai->nonstd_lk) {
1938  /* do all 'standard' glyphs together.
1939  * no need to check for ligatures.
1940  * we do check for kerns, though:
1941  * if there are none, then apparently all space kerns
1942  * have been tossed out, and there is nothing to do.
1943  * Either way, we break out of the loop after doing the
1944  * first glyph with `standard' ligkerns.
1945  */
1946  if (!strcmp(ai->adobename,"||")) continue;
1947  if (!ai->kerns) break;
1948  for (j = i; j <= ec; j++) if (tfmptrs[j] && !tfmptrs[j]->nonstd_lk)
1949  ploutln3 ("(LABEL %s)%s", plchar (j), plname (j));
1950  for (nkern = ai->kerns; nkern; nkern = nkern->next)
1951  if (0 != (asucc = findtfm (nkern->succ))) {
1952  dt = nkern->delta;
1953  for (k = asucc->tfmnum; k >= 0; k = tfmnext[k])
1954  ploutln4 ("(KRN %s R %d)%s", plchar (k), dt, plname (k));
1955  }
1956  ploutln ("(STOP)");
1957  break;
1958  }
1959  }
1960 
1961  plright ();
1962 
1963  /* done with ligkerns; now char metrics */
1964  for (i = bc; i <= ec; i++)
1965  if (0 != (ai = tfmptrs[i])) {
1966  if (!strcmp (ai->adobename, "||"))
1967  continue;
1968  plleft ();
1969  fprintf (outfile, "CHARACTER %s", plchar (i));
1970  if (*plcharbuf == 'C') {
1971  ploutln ("");
1972  } else
1973  ploutln2 (" (comment %s)", ai->adobename);
1974  ploutln2 ("(CHARWD R %d)", ai->width);
1975  if (0 != (ht = ai->ury))
1976  ploutln2 ("(CHARHT R %d)", ht);
1977  if (ai->lly)
1978  ploutln2 ("(CHARDP R %d)", -ai->lly);
1979  if (ai->urx > ai->width)
1980  ploutln2 ("(CHARIC R %d)", ai->urx - ai->width);
1981  plright ();
1982  }
1983  if (level)
1984  error ("! I forgot to match the parentheses");
1985  fclose (outfile);
1986 }
1987 
1988 /*******************************************************************
1989  * (version and) usage
1990  */
1991 static void
1993 {
1994  fputs ("afm2pl(k) 0.7.1\n", f);
1995 #ifdef KPATHSEA
1996  fprintf (f, "%s\n", kpathsea_version_string);
1997 #endif
1998  fputs ("Copyright (C) 2002, 2005, 2009 Siep Kroonenberg.\n\
1999 This program is derived from afm2tfm, (C) 2002 Radical Eye Software.\n\
2000 There is NO warranty. You may redistribute this software\n\
2001 under the terms of the GNU General Public License.\n\
2002 For more information about these matters, see the files\n\
2003 named COPYING and afm2pl.c.\n", f);
2004 }
2005 
2006 #define USAGE "\
2007 Convert an Adobe font metric file to a TeX font property list.\n\
2008 \n\
2009 -p ENCFILE Read/download ENCFILE for the PostScript encoding\n\
2010 -o Use octal for all character codes in the pl file\n\
2011 -e REAL Widen (extend) characters by a factor of REAL\n\
2012 -s REAL Oblique (slant) characters by REAL, generally <<1\n\
2013 -m INTEGER Letterspace by INTEGER/1000 em\n\
2014 -V Verbose output; i.e. report on missing glyphs\n\
2015 --help Print this message and exit.\n\
2016 --version Print version number and exit.\n\n\
2017 See the man page for full documentation.\n\n\
2018 "
2019 
2020 static void
2022 {
2023  fputs ("Usage: afm2pl [OPTIONS]... FILE[.afm] [FILE[.pl]]\n", f);
2024  fputs (USAGE, f);
2025  fputc ('\n', f);
2026  fputs ("Email bug reports to ntg-afm2pl@ntg.nl\n", f);
2027 }
2028 
2029 /**************************************************************
2030  * parse commandline
2031  */
2032 
2033 /* decode comma-separated list of non-negative integers.
2034  * initialize everything to -1 i.e. undefined
2035 */
2036 static int
2037 getnums(char *st, int *nums, int num)
2038 {
2039  char *p; /* pointer into st */
2040  int curnum, curindex, ndigits;
2041  /* curnum: number to be parsed
2042  curindex: index for nums array
2043  ndigits: n. of digits found for curnum
2044  */
2045  for (curindex=0;curindex<num;curindex++) {
2046  nums[curindex] = -1;
2047  }
2048  for (curnum=0,curindex=0,ndigits=0,p=st;;p++) {
2049  if (*p==',' || *p==0) {
2050  /* done with this number */
2051  if (ndigits>0) /* we found some digits */
2052  nums[curindex] = curnum;
2053  curnum = 0;
2054  curindex++;
2055  ndigits = 0;
2056  if (curindex>=num || !*p) break;
2057  } else if (*p>='0' && *p<='9') {
2058  curnum = 10*curnum + (*p-'0');
2059  ndigits++;
2060  } else {
2061  error ("! Illegal -f parameter");
2062  }
2063  }
2064  if (!*p) return 1; /* end of string reached: no problems */
2065  else return 0;
2066 }
2067 
2068 /* split string on commas into strings; disregard empty strings */
2069 static struct nstrings *
2070 getoutnames(const char *st, struct nstrings *onames)
2071 {
2072  char *argcopy;
2073  unsigned i;
2074  int j, inpart;
2075  argcopy = (char *) malloc (strlen (st) + 1);
2076  strcpy (argcopy, st);
2077  inpart = 0; /* cursor not inside a constituing substring */
2078  for (i = 0, onames->n = 0; i < strlen (st); i++) {
2079  if (argcopy[i] == ',') {
2080  argcopy[i] = 0;
2081  inpart = 0;
2082  } else if (!inpart) {
2083  inpart = 1;
2084  onames->n++;
2085  }
2086  /* !=',', inpart: do nothing */
2087  }
2088  onames->names = (const char **) malloc (onames->n * sizeof (char *));
2089  inpart = 0;
2090  for (i = 0, j = 0; i < strlen (st); i++) {
2091  if (argcopy[i] == 0)
2092  inpart = 0;
2093  else if (!inpart) {
2094  onames->names[j++] = argcopy + i;
2095  inpart = 1;
2096  }
2097  }
2098  return onames;
2099 }
2100 
2101 /* call this when an option requires an argument */
2102 #define CHECKARG3 if (argc < 3) { afm2pl_usage(stderr); exit(1); }
2103 
2104 static void
2105 readargs(int argc, char **argv)
2106 {
2107  register int i;
2108  int fdims[5];
2109 
2110  /* skip argv[0] and look at the rest. */
2111  argv++;
2112  argc--;
2113 
2114  if (argc <= 0 || !strcmp (argv[0], "--help") ||
2115  !strcmp (argv[0], "-help") || !strcmp (argv[0], "-h")) {
2116  afm2pl_usage (stdout);
2117  exit (0);
2118  }
2119 
2120  if (!strcmp (argv[0], "--version") ||
2121  !strcmp (argv[0], "-version") || !strcmp (argv[0], "-v")) {
2122  version (stdout);
2123  exit (0);
2124  }
2125 
2126  /* allocate structs for ligkern filenames */
2127  ligfilenames = (struct nstrings *) mymalloc
2128  ((unsigned long) sizeof (struct nstrings));
2129  Ligfilenames = (struct nstrings *) mymalloc
2130  ((unsigned long) sizeof (struct nstrings));
2131 
2132  /* looping: advance argv and decrement argc to match unprocessed
2133  * command-line arguments.
2134  * After the options, we need at least an afm filename,
2135  * which will be handled AFTER this loop.
2136  */
2137 
2138  while (argc > 0 && *argv[0] == '-') {
2139  i = argv[0][1];
2140  /* I don't understand what this is about.
2141  * The comment below suggests that it is VM/CMS-specific
2142  * so I comment it out for other OS-es. [SK]
2143  */
2144 #ifdef VMCMS
2145  if (i == '/')
2146  i = argv[0][2] - 32; /* /a ==> A for VMS */
2147 #endif
2148  switch (i) {
2149  case 'e':
2150  efactor = 1.0;
2151  CHECKARG3
2152  if (sscanf (argv[1], "%f", &efactor) == 0 || efactor < 0.01)
2153  error ("! Bad extension factor");
2154  efactorparam = argv[1];
2155  argv += 2;
2156  argc -= 2;
2157  break;
2158  case 's':
2159  CHECKARG3 if (sscanf (argv[1], "%f", &slant) == 0)
2160  error ("! Bad slant parameter");
2161  slantparam = argv[1];
2162  argv += 2;
2163  argc -= 2;
2164  break;
2165  case 'm':
2166  CHECKARG3 if (sscanf (argv[1], "%d", &lspace) == 0)
2167  error ("! Bad letterspacing parameter");
2168  lspaceparam = argv[1];
2169  if (lspace > 0)
2170  keepligs = 0;
2171  argv += 2;
2172  argc -= 2;
2173  break;
2174  case 'p':
2175  CHECKARG3 encfilename = argv[1];
2176  argv += 2;
2177  argc -= 2;
2178  break;
2179  case 'f':
2180  CHECKARG3
2181  if (!strcmp (argv[1], "afm2tfm")) {
2182  afm2tfm_compat = 1;
2183  } else if (!strcmp (argv[1], "afm2tfm")) {
2184  afm2tfm_compat = 1;
2185  } else {
2186  if (!getnums (argv[1], fdims, 5))
2187  error ("!Parsing error in argument of -f");
2188  fstretch = fdims[0]; fshrink = fdims[1]; fextra = fdims[2];
2189  fquad = fdims[3]; fontspace = fdims[4];
2190  }
2191  argv += 2;
2192  argc -= 2;
2193  break;
2194  case 'l':
2195  CHECKARG3 ligoption = argv[1];
2196  if (strcmp (ligoption, "0") && strcmp (ligoption, "1")) {
2197  getoutnames (ligoption, ligfilenames);
2198  }
2199  argv += 2;
2200  argc -= 2;
2201  break;
2202  case 'L':
2203  CHECKARG3 Ligoption = argv[1];
2204  if (strcmp (Ligoption, "0") && strcmp (Ligoption, "1")) {
2205  getoutnames (Ligoption, Ligfilenames);
2206  }
2207  argv += 2;
2208  argc -= 2;
2209  break;
2210  case 'o':
2211  forceoctal = 1;
2212  argv += 1;
2213  argc -= 1;
2214  break;
2215  case 'k':
2216  keepligs = 1;
2217  argv += 1;
2218  argc -= 1;
2219  break;
2220  case 'n':
2221  no_prefix = 1;
2222  argv += 1;
2223  argc -= 1;
2224  break;
2225  case 'V':
2226  verbose = 1;
2227  argv += 1;
2228  argc -= 1;
2229  break;
2230  default:
2231  (void) fprintf (stderr,
2232  "Unknown option %s %s will be ignored.\n",
2233  argv[0], argv[1]);
2234  argv += 2;
2235  argc -= 2;
2236  }
2237  }
2238 
2239  /* end of loop. Remainder: name of afm file and possibly pl file */
2240  afmname = argv[0];
2241 
2242  if ((argc < 1) || (argc > 2)) {
2243  error ("! need one or two non-option arguments");
2244  afm2pl_usage (stderr);
2245  }
2246 
2247  if (argc == 1) {
2248  outname = afmname;
2249  based_on = 1;
2250  } else {
2251  outname = argv[1];
2252  based_on = 0;
2253  }
2254 }
2255 
2256 /* This routine prints out the line that needs to be added to psfonts.map.
2257  */
2258 static void
2259 conspsfonts(void)
2260 {
2261  char *p;
2262  const char *q;
2263 
2264  /* TeX fontname is file basename without path or extension */
2265  p = newstring (xbasename (outname));
2266  q = find_suffix (p);
2267  if (q)
2268  p[q - p - 1] = 0;
2269  openout (p, 0, ".map");
2270  (void) fprintf (outfile, "%s %s", p, fontname);
2271  free (p);
2272  if (slantparam || efactorparam || encfilename) {
2273  (void) fprintf (outfile, " \"");
2274  if (slantparam)
2275  (void) fprintf (outfile, " %s SlantFont", slantparam);
2276  if (efactorparam)
2277  (void) fprintf (outfile, " %s ExtendFont", efactorparam);
2278  if (encfilename)
2279  (void) fprintf (outfile, " %s ReEncodeFont", outencoding->name);
2280  (void) fprintf (outfile, " \"");
2281  if (encfilename) {
2282  const char *base = xbasename (encfilename);
2283  (void) fprintf (outfile, " <%s", base);
2284  }
2285  }
2288  if (q)
2289  p[q - p - 1] = 0;
2290  (void) fprintf (outfile, " <%s.pfb", p);
2291  free (p);
2292  (void) fprintf (outfile, "\n");
2293  fclose (outfile);
2294 }
2295 
2296 /********************************************************
2297  * main program
2298  */
2299 
2300 #ifndef VMS
2301 int
2302 #endif
2303 main(int argc, char **argv)
2304 {
2305 
2306 #ifdef KPATHSEA
2307  kpse_set_program_name (argv[0], "afm2pl");
2308 
2309  if (argc == 1) {
2310  fputs ("afm2pl: Need at least one file argument.\n", stderr);
2311  fputs ("Try `afm2pl --help' for more information.\n", stderr);
2312  exit (1);
2313  }
2314  if (argc == 2) {
2315  if (strcmp (argv[1], "--help") == 0) {
2316  afm2pl_usage (stdout);
2317  exit (0);
2318  } else if (strcmp (argv[1], "--version") == 0) {
2319  version (stdout);
2320  exit (0);
2321  }
2322  }
2323 #endif /* KPATHSEA */
2324  readargs (argc, argv);
2325  readadobe ();
2326  changeadobe ();
2327  readencoding ();
2328  extraligkerninfo (); /* loop over lig files and lines in lig files */
2329  spaceparms ();
2330 #ifdef AFMDEBUG
2331  writedump ();
2332 #endif
2333  writepl ();
2334  conspsfonts ();
2335  return -missingchars;
2336 }
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
double __cdecl tan(double _X)
#define ploutln(str)
Definition: afm2pl.c:1713
const char * ligfilename
Definition: afm2pl.c:199
char plnamebuf[100]
Definition: afm2pl.c:1760
float newslant
Definition: afm2pl.c:210
static struct kern * newkern(void)
Definition: afm2pl.c:670
static void pllevout(void)
Definition: afm2pl.c:1698
static void handlechar(void)
Definition: afm2pl.c:700
int fixedpitch
Definition: afm2pl.c:211
#define EncodingScheme
Definition: afm2pl.c:548
int tfmnext[256]
Definition: afm2pl.c:205
int verbose
Definition: afm2pl.c:238
static void plright(void)
Definition: afm2pl.c:1728
const char * interesting[]
Definition: afm2pl.c:538
int lig_it
Definition: afm2pl.c:1302
const char * boundaryname
Definition: afm2pl.c:228
struct adobeinfo * rbound
Definition: afm2pl.c:229
const char * fontname
Definition: afm2pl.c:186
struct nstrings * ligfilenames
Definition: afm2pl.c:197
int missingchars
Definition: afm2pl.c:237
static struct adobeinfo * findadobe(const char *p)
Definition: afm2pl.c:305
#define FontName
Definition: afm2pl.c:542
struct adobeinfo * tfmptrs[256]
Definition: afm2pl.c:203
float italicangle
Definition: afm2pl.c:209
int charwidth
Definition: afm2pl.c:219
const char * afmname
Definition: afm2pl.c:195
char * slantparam
Definition: afm2pl.c:223
int fextra
Definition: afm2pl.c:217
int fquad
Definition: afm2pl.c:218
static void readadobe(void)
Definition: afm2pl.c:766
int xheight
Definition: afm2pl.c:213
static struct adobeinfo * newchar(void)
Definition: afm2pl.c:648
const char * plligops[]
Definition: afm2pl.c:1142
#define ploutln3(f, a, b)
Definition: afm2pl.c:1715
float slant
Definition: afm2pl.c:221
char boolean
Definition: afm2pl.c:121
struct encoding * outencoding
Definition: afm2pl.c:189
static void letterspace(void)
Definition: afm2pl.c:1475
int integer
Definition: afm2pl.c:117
static void handlekern(void)
Definition: afm2pl.c:740
struct encoding * afmencoding
Definition: afm2pl.c:188
FILE * infile
Definition: afm2pl.c:194
int based_on
Definition: afm2pl.c:192
static void copykerns(char *s1, char *s2)
Definition: afm2pl.c:1157
#define ItalicAngle
Definition: afm2pl.c:543
static void changeadobe(void)
Definition: afm2pl.c:835
static const char * find_suffix(const char *name)
Definition: afm2pl.c:390
const char * outname
Definition: afm2pl.c:195
static void error(const char *s)
Definition: afm2pl.c:245
int fshrink
Definition: afm2pl.c:216
int rboundarychar
Definition: afm2pl.c:227
static void spaceparms(void)
Definition: afm2pl.c:1615
#define USAGE
Definition: afm2pl.c:2006
static void expect(const char *s)
Definition: afm2pl.c:636
static const char * xbasename(const char *name)
Definition: afm2pl.c:410
#define XHeight
Definition: afm2pl.c:545
static void plleft(void)
Definition: afm2pl.c:1720
#define NONE
Definition: afm2pl.c:551
int nglyphsb
Definition: afm2pl.c:208
#define StartCharMetrics
Definition: afm2pl.c:549
static char * paramstring(void)
Definition: afm2pl.c:595
static void extraligkerninfo(void)
Definition: afm2pl.c:1507
static void checkligkern(char *s, int isencfile)
Definition: afm2pl.c:1344
static void adobermkern(struct adobeinfo *ai, char *s2)
Definition: afm2pl.c:1235
static struct lig * newlig(void)
Definition: afm2pl.c:682
static void afm2pl_usage(FILE *f)
Definition: afm2pl.c:2021
int iglyph
Definition: afm2pl.c:208
int lspace
Definition: afm2pl.c:222
float efactor
Definition: afm2pl.c:221
static void version(FILE *f)
Definition: afm2pl.c:1992
int nglyphs
Definition: afm2pl.c:208
int fstretch
Definition: afm2pl.c:215
#define IsFixedPitch
Definition: afm2pl.c:544
int sawligkern
Definition: afm2pl.c:1297
static char * plname(int c)
Definition: afm2pl.c:1762
char * lspaceparam
Definition: afm2pl.c:223
static void pllevnlout(void)
Definition: afm2pl.c:1707
const char * encligops[]
Definition: afm2pl.c:1146
#define KPX
Definition: afm2pl.c:547
#define ISALNUM(c)
Definition: afm2pl.c:427
static char * plchar(int c)
Definition: afm2pl.c:1743
char * boundglyph
Definition: afm2pl.c:230
const char * Ligoption
Definition: afm2pl.c:191
int afm2tfm_compat
Definition: afm2pl.c:212
static char * gettoken(void)
Definition: afm2pl.c:962
q
Definition: afm2pl.c:2287
static struct adobeinfo * findname(struct adobeinfo **achars, int n, const char *p)
Definition: afm2pl.c:291
struct adobeinfo * lbound
Definition: afm2pl.c:229
static const char * openout(const char *fname, int based_on, const char *outext)
Definition: afm2pl.c:499
static const char * openin(const char *fname, kpse_file_format_type format, const char *ext)
Definition: afm2pl.c:445
const char * ligoption
Definition: afm2pl.c:190
char * param
Definition: afm2pl.c:184
static float paramfloat(void)
Definition: afm2pl.c:624
#define plout(s)
Definition: afm2pl.c:1693
static int transform(int x, int y)
Definition: afm2pl.c:330
static char * concat(const char *s1, const char *s2)
Definition: afm2pl.c:377
static void rmkern(char *s1, char *s2)
Definition: afm2pl.c:1265
#define CHECKARG3
static int texlive_getline(void)
Definition: afm2pl.c:339
short Boolean
Definition: afm2pl.c:128
struct adobeinfo ** adobechars
Definition: afm2pl.c:201
static int interest(char *s)
Definition: afm2pl.c:553
static void readencoding(void)
Definition: afm2pl.c:1016
char obuffer[256]
Definition: afm2pl.c:183
#define ploutln2(f, s)
Definition: afm2pl.c:1714
p
Definition: afm2pl.c:2286
#define C
Definition: afm2pl.c:546
#define buflen
Definition: afm2pl.c:181
char plcharbuf[6]
Definition: afm2pl.c:1741
int fontspace
Definition: afm2pl.c:214
int forceoctal
Definition: afm2pl.c:224
FILE * outfile
Definition: afm2pl.c:194
char * efactorparam
Definition: afm2pl.c:223
int level
Definition: afm2pl.c:1694
struct nstrings * Ligfilenames
Definition: afm2pl.c:198
char smbuffer[100]
Definition: afm2pl.c:954
static struct adobeinfo * findtfm(const char *p)
Definition: afm2pl.c:312
static char * mymalloc(unsigned long len)
Definition: afm2pl.c:264
char buffer[256]
Definition: afm2pl.c:182
#define ploutln4(f, a, b, c)
Definition: afm2pl.c:1716
static void writepl(void)
Definition: afm2pl.c:1777
static int paramnum(void)
Definition: afm2pl.c:612
int keepligs
Definition: afm2pl.c:225
kpse_file_format_type
Definition: afm2pl.c:371
@ kpse_lig_format
Definition: afm2pl.c:372
@ kpse_enc_format
Definition: afm2pl.c:372
@ kpse_afm_format
Definition: afm2pl.c:372
static int findindex(const char *p)
Definition: afm2pl.c:319
const char * encfilename
Definition: afm2pl.c:196
static char * newstring(const char *s)
Definition: afm2pl.c:282
static char * paramnewstring(void)
Definition: afm2pl.c:575
static void set_rboundarychar(int bch)
Definition: afm2pl.c:1309
#define CharWidth
Definition: afm2pl.c:550
int no_prefix
Definition: afm2pl.c:193
int nl
Definition: afm2tfm.c:885
int nk
Definition: afm2tfm.c:885
static void conspsfonts(void)
Definition: afm2tfm.c:2100
#define sc
Definition: aptex-macros.h:57
#define name
#define n
Definition: t4ht.c:1290
#define free(a)
Definition: decNumber.cpp:310
#define strrchr
Definition: detex.c:67
#define fopen
Definition: xxstdio.h:21
char * strncpy()
int strcmp()
Definition: coll.cpp:143
int sscanf()
int printf()
char * strcpy()
static void
Definition: fpif.c:118
mpz_t * f
Definition: gen-fib.c:34
mpz_t pp
Definition: gen-psqr.c:108
#define s
Definition: afcover.h:80
__gmp_expr< mpf_t, __gmp_unary_expr< __gmp_expr< mpf_t, U >, __gmp_ceil_function > > ceil(const __gmp_expr< mpf_t, U > &expr)
Definition: gmpxx.h:3340
#define c(n)
Definition: gpos-common.c:150
#define bc
Definition: gsftopk.c:501
int base
Definition: gsftopk.c:1502
#define ec
Definition: gsftopk.c:502
#define putc
Definition: jbib.h:20
#define NULL
Definition: ftobjs.h:61
small capitals from c petite p scientific i
Definition: afcover.h:80
sizeof(AF_ModuleRec)
void exit()
#define EOF
Definition: afmparse.c:59
kerning y
Definition: ttdriver.c:212
static char * inname
Definition: pngtest.c:1817
int num
Definition: disdvi.c:621
#define fclose
Definition: debug.h:100
#define FATAL1(str, e1)
Definition: lib.h:63
#define getc
Definition: line.c:39
const char * kpathsea_version_string
Definition: version.c:23
int acc
Definition: exvar.h:3
#define fputs
Definition: mendex.h:67
#define fprintf
Definition: mendex.h:64
#define floor(x)
Definition: cpascal.h:52
#define malloc
Definition: alloca.c:91
int strncmp()
#define sprintf
Definition: snprintf.c:44
float x
Definition: cordic.py:15
int k
Definition: otp-parser.c:70
static int format
Definition: pbmclean.c:15
char * fname
Definition: plain2.c:121
static int32_t first
Definition: ppagelist.c:29
type_C toupper(type_C)
int ury
Definition: afm2pl.c:155
int width
Definition: afm2pl.c:153
int urx
Definition: afm2pl.c:155
int tfmnum
Definition: afm2pl.c:153
int nonstd_lk
Definition: afm2pl.c:156
const char * adobename
Definition: afm2pl.c:154
int adobenum
Definition: afm2pl.c:153
int lly
Definition: afm2pl.c:155
struct lig * ligs
Definition: afm2pl.c:157
int llx
Definition: afm2pl.c:155
struct kern * kerns
Definition: afm2pl.c:158
Definition: utils.c:300
const char * name
Definition: afm2pl.c:168
const char * vec[256]
Definition: afm2pl.c:169
Definition: afm2pl.c:145
const char * succ
Definition: afm2pl.c:147
int delta
Definition: afm2pl.c:148
struct kern * next
Definition: afm2pl.c:146
Definition: afm2pl.c:139
const char * sub
Definition: afm2pl.c:141
short boundright
Definition: afm2pl.c:142
const char * succ
Definition: afm2pl.c:141
struct lig * next
Definition: afm2pl.c:140
short op
Definition: afm2pl.c:142
Definition: devnag.c:485
int n
Definition: afm2pl.c:174
const char ** names
Definition: afm2pl.c:175
Definition: sh.h:1226
Definition: stemdb.c:56
#define FILE
Definition: t1stdio.h:34
int j
Definition: t4ht.c:1589
s1
Definition: t4ht.c:1059
while(temp)
Definition: t4ht.c:858
char * s2
Definition: t4ht.c:1062
char * ext
Definition: t4ht.c:938
*job_name strlen((char *) job_name) - 4)
found
Definition: tex4ht.c:5000
op
Definition: tex4ht.c:3129
struct _lig lig
Definition: ttf2tfm.h:48
#define argv
Definition: xmain.c:270
#define main
Definition: xmain.c:31
#define argc
Definition: xmain.c:269