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)  

hb-font.cc
Go to the documentation of this file.
1 /*
2  * Copyright © 2009 Red Hat, Inc.
3  * Copyright © 2012 Google, Inc.
4  *
5  * This is part of HarfBuzz, a text shaping library.
6  *
7  * Permission is hereby granted, without written agreement and without
8  * license or royalty fees, to use, copy, modify, and distribute this
9  * software and its documentation for any purpose, provided that the
10  * above copyright notice and the following two paragraphs appear in
11  * all copies of this software.
12  *
13  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
14  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
15  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
16  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
17  * DAMAGE.
18  *
19  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
20  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
22  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
23  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24  *
25  * Red Hat Author(s): Behdad Esfahbod
26  * Google Author(s): Behdad Esfahbod
27  */
28 
29 #include "hb.hh"
30 
31 #include "hb-font.hh"
32 #include "hb-machinery.hh"
33 
34 #include "hb-ot.h"
35 
36 #include "hb-ot-var-avar-table.hh"
37 #include "hb-ot-var-fvar-table.hh"
38 
39 
40 /**
41  * SECTION:hb-font
42  * @title: hb-font
43  * @short_description: Font objects
44  * @include: hb.h
45  *
46  * Functions for working with font objects.
47  *
48  * A font object represents a font face at a specific size and with
49  * certain other parameters (pixels-per-em, points-per-em, variation
50  * settings) specified. Font objects are created from font face
51  * objects, and are used as input to hb_shape(), among other things.
52  *
53  * Client programs can optionally pass in their own functions that
54  * implement the basic, lower-level queries of font objects. This set
55  * of font functions is defined by the virtual methods in
56  * #hb_font_funcs_t.
57  *
58  * HarfBuzz provides a built-in set of lightweight default
59  * functions for each method in #hb_font_funcs_t.
60  **/
61 
62 
63 /*
64  * hb_font_funcs_t
65  */
66 
67 static hb_bool_t
69  void *font_data HB_UNUSED,
71  void *user_data HB_UNUSED)
72 {
73  memset (extents, 0, sizeof (*extents));
74  return false;
75 }
76 
77 static hb_bool_t
79  void *font_data HB_UNUSED,
81  void *user_data HB_UNUSED)
82 {
83  hb_bool_t ret = font->parent->get_font_h_extents (extents);
84  if (ret) {
85  extents->ascender = font->parent_scale_y_distance (extents->ascender);
86  extents->descender = font->parent_scale_y_distance (extents->descender);
87  extents->line_gap = font->parent_scale_y_distance (extents->line_gap);
88  }
89  return ret;
90 }
91 
92 static hb_bool_t
94  void *font_data HB_UNUSED,
96  void *user_data HB_UNUSED)
97 {
98  memset (extents, 0, sizeof (*extents));
99  return false;
100 }
101 
102 static hb_bool_t
104  void *font_data HB_UNUSED,
106  void *user_data HB_UNUSED)
107 {
108  hb_bool_t ret = font->parent->get_font_v_extents (extents);
109  if (ret) {
110  extents->ascender = font->parent_scale_x_distance (extents->ascender);
111  extents->descender = font->parent_scale_x_distance (extents->descender);
112  extents->line_gap = font->parent_scale_x_distance (extents->line_gap);
113  }
114  return ret;
115 }
116 
117 static hb_bool_t
119  void *font_data HB_UNUSED,
122  void *user_data HB_UNUSED)
123 {
124  *glyph = 0;
125  return false;
126 }
127 
128 static hb_bool_t
130  void *font_data HB_UNUSED,
133  void *user_data HB_UNUSED)
134 {
135  if (font->has_nominal_glyphs_func_set ())
136  {
137  return font->get_nominal_glyphs (1, &unicode, 0, glyph, 0);
138  }
139  return font->parent->get_nominal_glyph (unicode, glyph);
140 }
141 
142 #define hb_font_get_nominal_glyphs_nil hb_font_get_nominal_glyphs_default
143 
144 static unsigned int
146  void *font_data HB_UNUSED,
147  unsigned int count,
148  const hb_codepoint_t *first_unicode,
149  unsigned int unicode_stride,
150  hb_codepoint_t *first_glyph,
151  unsigned int glyph_stride,
152  void *user_data HB_UNUSED)
153 {
154  if (font->has_nominal_glyph_func_set ())
155  {
156  for (unsigned int i = 0; i < count; i++)
157  {
158  if (!font->get_nominal_glyph (*first_unicode, first_glyph))
159  return i;
160 
161  first_unicode = &StructAtOffsetUnaligned<hb_codepoint_t> (first_unicode, unicode_stride);
162  first_glyph = &StructAtOffsetUnaligned<hb_codepoint_t> (first_glyph, glyph_stride);
163  }
164  return count;
165  }
166 
167  return font->parent->get_nominal_glyphs (count,
168  first_unicode, unicode_stride,
169  first_glyph, glyph_stride);
170 }
171 
172 static hb_bool_t
174  void *font_data HB_UNUSED,
176  hb_codepoint_t variation_selector HB_UNUSED,
178  void *user_data HB_UNUSED)
179 {
180  *glyph = 0;
181  return false;
182 }
183 
184 static hb_bool_t
186  void *font_data HB_UNUSED,
188  hb_codepoint_t variation_selector,
190  void *user_data HB_UNUSED)
191 {
192  return font->parent->get_variation_glyph (unicode, variation_selector, glyph);
193 }
194 
195 
196 static hb_position_t
198  void *font_data HB_UNUSED,
200  void *user_data HB_UNUSED)
201 {
202  return font->x_scale;
203 }
204 
205 static hb_position_t
207  void *font_data HB_UNUSED,
209  void *user_data HB_UNUSED)
210 {
211  if (font->has_glyph_h_advances_func_set ())
212  {
214  font->get_glyph_h_advances (1, &glyph, 0, &ret, 0);
215  return ret;
216  }
217  return font->parent_scale_x_distance (font->parent->get_glyph_h_advance (glyph));
218 }
219 
220 static hb_position_t
222  void *font_data HB_UNUSED,
224  void *user_data HB_UNUSED)
225 {
226  /* TODO use font_extents.ascender+descender */
227  return font->y_scale;
228 }
229 
230 static hb_position_t
232  void *font_data HB_UNUSED,
234  void *user_data HB_UNUSED)
235 {
236  if (font->has_glyph_v_advances_func_set ())
237  {
239  font->get_glyph_v_advances (1, &glyph, 0, &ret, 0);
240  return ret;
241  }
242  return font->parent_scale_y_distance (font->parent->get_glyph_v_advance (glyph));
243 }
244 
245 #define hb_font_get_glyph_h_advances_nil hb_font_get_glyph_h_advances_default
246 
247 static void
249  void* font_data HB_UNUSED,
250  unsigned int count,
251  const hb_codepoint_t *first_glyph,
252  unsigned int glyph_stride,
253  hb_position_t *first_advance,
254  unsigned int advance_stride,
255  void *user_data HB_UNUSED)
256 {
257  if (font->has_glyph_h_advance_func_set ())
258  {
259  for (unsigned int i = 0; i < count; i++)
260  {
261  *first_advance = font->get_glyph_h_advance (*first_glyph);
262  first_glyph = &StructAtOffsetUnaligned<hb_codepoint_t> (first_glyph, glyph_stride);
263  first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
264  }
265  return;
266  }
267 
268  font->parent->get_glyph_h_advances (count,
269  first_glyph, glyph_stride,
270  first_advance, advance_stride);
271  for (unsigned int i = 0; i < count; i++)
272  {
273  *first_advance = font->parent_scale_x_distance (*first_advance);
274  first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
275  }
276 }
277 
278 #define hb_font_get_glyph_v_advances_nil hb_font_get_glyph_v_advances_default
279 static void
281  void* font_data HB_UNUSED,
282  unsigned int count,
283  const hb_codepoint_t *first_glyph,
284  unsigned int glyph_stride,
285  hb_position_t *first_advance,
286  unsigned int advance_stride,
287  void *user_data HB_UNUSED)
288 {
289  if (font->has_glyph_v_advance_func_set ())
290  {
291  for (unsigned int i = 0; i < count; i++)
292  {
293  *first_advance = font->get_glyph_v_advance (*first_glyph);
294  first_glyph = &StructAtOffsetUnaligned<hb_codepoint_t> (first_glyph, glyph_stride);
295  first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
296  }
297  return;
298  }
299 
300  font->parent->get_glyph_v_advances (count,
301  first_glyph, glyph_stride,
302  first_advance, advance_stride);
303  for (unsigned int i = 0; i < count; i++)
304  {
305  *first_advance = font->parent_scale_y_distance (*first_advance);
306  first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
307  }
308 }
309 
310 static hb_bool_t
312  void *font_data HB_UNUSED,
314  hb_position_t *x,
315  hb_position_t *y,
316  void *user_data HB_UNUSED)
317 {
318  *x = *y = 0;
319  return true;
320 }
321 
322 static hb_bool_t
324  void *font_data HB_UNUSED,
326  hb_position_t *x,
327  hb_position_t *y,
328  void *user_data HB_UNUSED)
329 {
330  hb_bool_t ret = font->parent->get_glyph_h_origin (glyph, x, y);
331  if (ret)
332  font->parent_scale_position (x, y);
333  return ret;
334 }
335 
336 static hb_bool_t
338  void *font_data HB_UNUSED,
340  hb_position_t *x,
341  hb_position_t *y,
342  void *user_data HB_UNUSED)
343 {
344  *x = *y = 0;
345  return false;
346 }
347 
348 static hb_bool_t
350  void *font_data HB_UNUSED,
352  hb_position_t *x,
353  hb_position_t *y,
354  void *user_data HB_UNUSED)
355 {
356  hb_bool_t ret = font->parent->get_glyph_v_origin (glyph, x, y);
357  if (ret)
358  font->parent_scale_position (x, y);
359  return ret;
360 }
361 
362 static hb_position_t
364  void *font_data HB_UNUSED,
367  void *user_data HB_UNUSED)
368 {
369  return 0;
370 }
371 
372 static hb_position_t
374  void *font_data HB_UNUSED,
377  void *user_data HB_UNUSED)
378 {
379  return font->parent_scale_x_distance (font->parent->get_glyph_h_kerning (left_glyph, right_glyph));
380 }
381 
382 #ifndef HB_DISABLE_DEPRECATED
383 static hb_position_t
385  void *font_data HB_UNUSED,
386  hb_codepoint_t top_glyph HB_UNUSED,
387  hb_codepoint_t bottom_glyph HB_UNUSED,
388  void *user_data HB_UNUSED)
389 {
390  return 0;
391 }
392 
393 static hb_position_t
395  void *font_data HB_UNUSED,
396  hb_codepoint_t top_glyph,
397  hb_codepoint_t bottom_glyph,
398  void *user_data HB_UNUSED)
399 {
400  return font->parent_scale_y_distance (font->parent->get_glyph_v_kerning (top_glyph, bottom_glyph));
401 }
402 #endif
403 
404 static hb_bool_t
406  void *font_data HB_UNUSED,
409  void *user_data HB_UNUSED)
410 {
411  memset (extents, 0, sizeof (*extents));
412  return false;
413 }
414 
415 static hb_bool_t
417  void *font_data HB_UNUSED,
420  void *user_data HB_UNUSED)
421 {
422  hb_bool_t ret = font->parent->get_glyph_extents (glyph, extents);
423  if (ret) {
424  font->parent_scale_position (&extents->x_bearing, &extents->y_bearing);
425  font->parent_scale_distance (&extents->width, &extents->height);
426  }
427  return ret;
428 }
429 
430 static hb_bool_t
432  void *font_data HB_UNUSED,
434  unsigned int point_index HB_UNUSED,
435  hb_position_t *x,
436  hb_position_t *y,
437  void *user_data HB_UNUSED)
438 {
439  *x = *y = 0;
440  return false;
441 }
442 
443 static hb_bool_t
445  void *font_data HB_UNUSED,
447  unsigned int point_index,
448  hb_position_t *x,
449  hb_position_t *y,
450  void *user_data HB_UNUSED)
451 {
452  hb_bool_t ret = font->parent->get_glyph_contour_point (glyph, point_index, x, y);
453  if (ret)
454  font->parent_scale_position (x, y);
455  return ret;
456 }
457 
458 static hb_bool_t
460  void *font_data HB_UNUSED,
462  char *name,
463  unsigned int size,
464  void *user_data HB_UNUSED)
465 {
466  if (size) *name = '\0';
467  return false;
468 }
469 
470 static hb_bool_t
472  void *font_data HB_UNUSED,
474  char *name,
475  unsigned int size,
476  void *user_data HB_UNUSED)
477 {
478  return font->parent->get_glyph_name (glyph, name, size);
479 }
480 
481 static hb_bool_t
483  void *font_data HB_UNUSED,
484  const char *name HB_UNUSED,
485  int len HB_UNUSED, /* -1 means nul-terminated */
487  void *user_data HB_UNUSED)
488 {
489  *glyph = 0;
490  return false;
491 }
492 
493 static hb_bool_t
495  void *font_data HB_UNUSED,
496  const char *name,
497  int len, /* -1 means nul-terminated */
499  void *user_data HB_UNUSED)
500 {
501  return font->parent->get_glyph_from_name (name, len, glyph);
502 }
503 
505 {
507 
508  {
509 #define HB_FONT_FUNC_IMPLEMENT(name) nullptr,
511 #undef HB_FONT_FUNC_IMPLEMENT
512  },
513  {
514 #define HB_FONT_FUNC_IMPLEMENT(name) nullptr,
516 #undef HB_FONT_FUNC_IMPLEMENT
517  },
518  {
519  {
520 #define HB_FONT_FUNC_IMPLEMENT(name) hb_font_get_##name##_nil,
522 #undef HB_FONT_FUNC_IMPLEMENT
523  }
524  }
525 };
526 
529 
530  {
531 #define HB_FONT_FUNC_IMPLEMENT(name) nullptr,
533 #undef HB_FONT_FUNC_IMPLEMENT
534  },
535  {
536 #define HB_FONT_FUNC_IMPLEMENT(name) nullptr,
538 #undef HB_FONT_FUNC_IMPLEMENT
539  },
540  {
541  {
542 #define HB_FONT_FUNC_IMPLEMENT(name) hb_font_get_##name##_default,
544 #undef HB_FONT_FUNC_IMPLEMENT
545  }
546  }
547 };
548 
549 
550 /**
551  * hb_font_funcs_create: (Xconstructor)
552  *
553  * Creates a new #hb_font_funcs_t structure of font functions.
554  *
555  * Return value: (transfer full): The font-functions structure
556  *
557  * Since: 0.9.2
558  **/
561 {
562  hb_font_funcs_t *ffuncs;
563 
564  if (!(ffuncs = hb_object_create<hb_font_funcs_t> ()))
565  return hb_font_funcs_get_empty ();
566 
567  ffuncs->get = _hb_font_funcs_default.get;
568 
569  return ffuncs;
570 }
571 
572 /**
573  * hb_font_funcs_get_empty:
574  *
575  * Fetches an empty font-functions structure.
576  *
577  * Return value: (transfer full): The font-functions structure
578  *
579  * Since: 0.9.2
580  **/
583 {
584  return const_cast<hb_font_funcs_t *> (&_hb_font_funcs_default);
585 }
586 
587 /**
588  * hb_font_funcs_reference: (skip)
589  * @ffuncs: The font-functions structure
590  *
591  * Increases the reference count on a font-functions structure.
592  *
593  * Return value: The font-functions structure
594  *
595  * Since: 0.9.2
596  **/
599 {
600  return hb_object_reference (ffuncs);
601 }
602 
603 /**
604  * hb_font_funcs_destroy: (skip)
605  * @ffuncs: The font-functions structure
606  *
607  * Decreases the reference count on a font-functions structure. When
608  * the reference count reaches zero, the font-functions structure is
609  * destroyed, freeing all memory.
610  *
611  * Since: 0.9.2
612  **/
613 void
615 {
616  if (!hb_object_destroy (ffuncs)) return;
617 
618 #define HB_FONT_FUNC_IMPLEMENT(name) if (ffuncs->destroy.name) \
619  ffuncs->destroy.name (ffuncs->user_data.name);
621 #undef HB_FONT_FUNC_IMPLEMENT
622 
623  free (ffuncs);
624 }
625 
626 /**
627  * hb_font_funcs_set_user_data: (skip)
628  * @ffuncs: The font-functions structure
629  * @key: The user-data key to set
630  * @data: A pointer to the user data set
631  * @destroy: (optional): A callback to call when @data is not needed anymore
632  * @replace: Whether to replace an existing data with the same key
633  *
634  * Attaches a user-data key/data pair to the specified font-functions structure.
635  *
636  * Return value: %true if success, %false otherwise
637  *
638  * Since: 0.9.2
639  **/
640 hb_bool_t
643  void * data,
644  hb_destroy_func_t destroy /* May be NULL. */,
646 {
647  return hb_object_set_user_data (ffuncs, key, data, destroy, replace);
648 }
649 
650 /**
651  * hb_font_funcs_get_user_data: (skip)
652  * @ffuncs: The font-functions structure
653  * @key: The user-data key to query
654  *
655  * Fetches the user data associated with the specified key,
656  * attached to the specified font-functions structure.
657  *
658  * Return value: (transfer none): A pointer to the user data
659  *
660  * Since: 0.9.2
661  **/
662 void *
665 {
666  return hb_object_get_user_data (ffuncs, key);
667 }
668 
669 
670 /**
671  * hb_font_funcs_make_immutable:
672  * @ffuncs: The font-functions structure
673  *
674  * Makes a font-functions structure immutable.
675  *
676  * Since: 0.9.2
677  **/
678 void
680 {
681  if (hb_object_is_immutable (ffuncs))
682  return;
683 
684  hb_object_make_immutable (ffuncs);
685 }
686 
687 /**
688  * hb_font_funcs_is_immutable:
689  * @ffuncs: The font-functions structure
690  *
691  * Tests whether a font-functions structure is immutable.
692  *
693  * Return value: %true if @ffuncs is immutable, false otherwise
694  *
695  * Since: 0.9.2
696  **/
697 hb_bool_t
699 {
700  return hb_object_is_immutable (ffuncs);
701 }
702 
703 
704 #define HB_FONT_FUNC_IMPLEMENT(name) \
705  \
706 void \
707 hb_font_funcs_set_##name##_func (hb_font_funcs_t *ffuncs, \
708  hb_font_get_##name##_func_t func, \
709  void *user_data, \
710  hb_destroy_func_t destroy) \
711 { \
712  if (hb_object_is_immutable (ffuncs)) \
713  { \
714  if (destroy) \
715  destroy (user_data); \
716  return; \
717  } \
718  \
719  if (ffuncs->destroy.name) \
720  ffuncs->destroy.name (ffuncs->user_data.name); \
721  \
722  if (func) { \
723  ffuncs->get.f.name = func; \
724  ffuncs->user_data.name = user_data; \
725  ffuncs->destroy.name = destroy; \
726  } else { \
727  ffuncs->get.f.name = hb_font_get_##name##_default; \
728  ffuncs->user_data.name = nullptr; \
729  ffuncs->destroy.name = nullptr; \
730  } \
731 }
732 
734 #undef HB_FONT_FUNC_IMPLEMENT
735 
736 bool
737 hb_font_t::has_func_set (unsigned int i)
738 {
739  return this->klass->get.array[i] != _hb_font_funcs_default.get.array[i];
740 }
741 
742 bool
743 hb_font_t::has_func (unsigned int i)
744 {
745  return has_func_set (i) ||
747 }
748 
749 /* Public getters */
750 
751 /**
752  * hb_font_get_h_extents:
753  * @font: #hb_font_t to work upon
754  * @extents: (out): The font extents retrieved
755  *
756  * Fetches the extents for a specified font, in horizontal
757  * text segments.
758  *
759  * Return value: %true if data found, false otherwise
760  *
761  * Since: 1.1.3
762  **/
763 hb_bool_t
766 {
767  return font->get_font_h_extents (extents);
768 }
769 
770 /**
771  * hb_font_get_v_extents:
772  * @font: #hb_font_t to work upon
773  * @extents: (out): The font extents retrieved
774  *
775  * Fetches the extents for a specified font, in vertical
776  * text segments.
777  *
778  * Return value: %true if data found, false otherwise
779  *
780  * Since: 1.1.3
781  **/
782 hb_bool_t
785 {
786  return font->get_font_v_extents (extents);
787 }
788 
789 /**
790  * hb_font_get_glyph:
791  * @font: #hb_font_t to work upon
792  * @unicode: The Unicode code point to query
793  * @variation_selector: (optional): A variation-selector code point
794  * @glyph: (out): The glyph ID retrieved
795  *
796  * Fetches the glyph ID for a Unicode code point in the specified
797  * font, with an optional variation selector.
798  *
799  * If @variation_selector is 0, calls hb_font_get_nominal_glyph();
800  * otherwise calls hb_font_get_variation_glyph().
801  *
802  * Return value: %true if data found, false otherwise
803  *
804  * Since: 0.9.2
805  **/
806 hb_bool_t
809  hb_codepoint_t variation_selector,
811 {
812  if (unlikely (variation_selector))
813  return font->get_variation_glyph (unicode, variation_selector, glyph);
814  return font->get_nominal_glyph (unicode, glyph);
815 }
816 
817 /**
818  * hb_font_get_nominal_glyph:
819  * @font: #hb_font_t to work upon
820  * @unicode: The Unicode code point to query
821  * @glyph: (out): The glyph ID retrieved
822  *
823  * Fetches the nominal glyph ID for a Unicode code point in the
824  * specified font.
825  *
826  * This version of the function should not be used to fetch glyph IDs
827  * for code points modified by variation selectors. For variation-selector
828  * support, user hb_font_get_variation_glyph() or use hb_font_get_glyph().
829  *
830  * Return value: %true if data found, false otherwise
831  *
832  * Since: 1.2.3
833  **/
834 hb_bool_t
838 {
839  return font->get_nominal_glyph (unicode, glyph);
840 }
841 
842 /**
843  * hb_font_get_nominal_glyphs:
844  * @font: a font.
845  *
846  *
847  *
848  * Return value:
849  *
850  * Since: 2.6.3
851  **/
852 unsigned int
854  unsigned int count,
855  const hb_codepoint_t *first_unicode,
856  unsigned int unicode_stride,
857  hb_codepoint_t *first_glyph,
858  unsigned int glyph_stride)
859 {
860  return font->get_nominal_glyphs (count,
861  first_unicode, unicode_stride,
862  first_glyph, glyph_stride);
863 }
864 
865 /**
866  * hb_font_get_variation_glyph:
867  * @font: #hb_font_t to work upon
868  * @unicode: The Unicode code point to query
869  * @variation_selector: The variation-selector code point to query
870  * @glyph: (out): The glyph ID retrieved
871  *
872  * Fetches the glyph ID for a Unicode code point when followed by
873  * by the specified variation-selector code point, in the specified
874  * font.
875  *
876  * Return value: %true if data found, false otherwise
877  *
878  * Since: 1.2.3
879  **/
880 hb_bool_t
883  hb_codepoint_t variation_selector,
885 {
886  return font->get_variation_glyph (unicode, variation_selector, glyph);
887 }
888 
889 /**
890  * hb_font_get_glyph_h_advance:
891  * @font: #hb_font_t to work upon
892  * @glyph: The glyph ID to query
893  *
894  * Fetches the advance for a glyph ID in the specified font,
895  * for horizontal text segments.
896  *
897  * Return value: The advance of @glyph within @font
898  *
899  * Since: 0.9.2
900  **/
904 {
905  return font->get_glyph_h_advance (glyph);
906 }
907 
908 /**
909  * hb_font_get_glyph_v_advance:
910  * @font: #hb_font_t to work upon
911  * @glyph: The glyph ID to query
912  *
913  * Fetches the advance for a glyph ID in the specified font,
914  * for vertical text segments.
915  *
916  * Return value: The advance of @glyph within @font
917  *
918  * Since: 0.9.2
919  **/
923 {
924  return font->get_glyph_v_advance (glyph);
925 }
926 
927 /**
928  * hb_font_get_glyph_h_advances:
929  * @font: #hb_font_t to work upon
930  * @count: The number of glyph IDs in the sequence queried
931  * @first_glyph: The first glyph ID to query
932  * @glyph_stride: The stride between successive glyph IDs
933  * @first_advance: (out): The first advance retrieved
934  * @advance_stride: (out): The stride between successive advances
935  *
936  * Fetches the advances for a sequence of glyph IDs in the specified
937  * font, for horizontal text segments.
938  *
939  * Since: 1.8.6
940  **/
941 void
943  unsigned int count,
944  const hb_codepoint_t *first_glyph,
945  unsigned glyph_stride,
946  hb_position_t *first_advance,
947  unsigned advance_stride)
948 {
949  font->get_glyph_h_advances (count, first_glyph, glyph_stride, first_advance, advance_stride);
950 }
951 /**
952  * hb_font_get_glyph_v_advances:
953  * @font: #hb_font_t to work upon
954  * @count: The number of glyph IDs in the sequence queried
955  * @first_glyph: The first glyph ID to query
956  * @glyph_stride: The stride between successive glyph IDs
957  * @first_advance: (out): The first advance retrieved
958  * @advance_stride: (out): The stride between successive advances
959  *
960  * Fetches the advances for a sequence of glyph IDs in the specified
961  * font, for vertical text segments.
962  *
963  * Since: 1.8.6
964  **/
965 void
967  unsigned int count,
968  const hb_codepoint_t *first_glyph,
969  unsigned glyph_stride,
970  hb_position_t *first_advance,
971  unsigned advance_stride)
972 {
973  font->get_glyph_v_advances (count, first_glyph, glyph_stride, first_advance, advance_stride);
974 }
975 
976 /**
977  * hb_font_get_glyph_h_origin:
978  * @font: #hb_font_t to work upon
979  * @glyph: The glyph ID to query
980  * @x: (out): The X coordinate of the origin
981  * @y: (out): The Y coordinate of the origin
982  *
983  * Fetches the (X,Y) coordinates of the origin for a glyph ID
984  * in the specified font, for horizontal text segments.
985  *
986  * Return value: %true if data found, false otherwise
987  *
988  * Since: 0.9.2
989  **/
990 hb_bool_t
993  hb_position_t *x,
994  hb_position_t *y)
995 {
996  return font->get_glyph_h_origin (glyph, x, y);
997 }
998 
999 /**
1000  * hb_font_get_glyph_v_origin:
1001  * @font: #hb_font_t to work upon
1002  * @glyph: The glyph ID to query
1003  * @x: (out): The X coordinate of the origin
1004  * @y: (out): The Y coordinate of the origin
1005  *
1006  * Fetches the (X,Y) coordinates of the origin for a glyph ID
1007  * in the specified font, for vertical text segments.
1008  *
1009  * Return value: %true if data found, false otherwise
1010  *
1011  * Since: 0.9.2
1012  **/
1013 hb_bool_t
1016  hb_position_t *x,
1017  hb_position_t *y)
1018 {
1019  return font->get_glyph_v_origin (glyph, x, y);
1020 }
1021 
1022 /**
1023  * hb_font_get_glyph_h_kerning:
1024  * @font: #hb_font_t to work upon
1025  * @left_glyph: The glyph ID of the left glyph in the glyph pair
1026  * @right_glyph: The glyph ID of the right glyph in the glyph pair
1027  *
1028  * Fetches the kerning-adjustment value for a glyph-pair in
1029  * the specified font, in horizontal text segments.
1030  *
1031  * <note>It handles legacy kerning only (as returned by the corresponding
1032  * #hb_font_funcs_t function).</note>
1033  *
1034  * Return value: The kerning adjustment value
1035  *
1036  * Since: 0.9.2
1037  **/
1042 {
1043  return font->get_glyph_h_kerning (left_glyph, right_glyph);
1044 }
1045 
1046 #ifndef HB_DISABLE_DEPRECATED
1047 /**
1048  * hb_font_get_glyph_v_kerning:
1049  * @font: #hb_font_t to work upon
1050  * @top_glyph: The glyph ID of the top glyph in the glyph pair
1051  * @bottom_glyph: The glyph ID of the bottom glyph in the glyph pair
1052  *
1053  * Fetches the kerning-adjustment value for a glyph-pair in
1054  * the specified font, in vertical text segments.
1055  *
1056  * <note>It handles legacy kerning only (as returned by the corresponding
1057  * #hb_font_funcs_t function).</note>
1058  *
1059  * Return value: The kerning adjustment value
1060  *
1061  * Since: 0.9.2
1062  * Deprecated: 2.0.0
1063  **/
1066  hb_codepoint_t top_glyph,
1067  hb_codepoint_t bottom_glyph)
1068 {
1069  return font->get_glyph_v_kerning (top_glyph, bottom_glyph);
1070 }
1071 #endif
1072 
1073 /**
1074  * hb_font_get_glyph_extents:
1075  * @font: #hb_font_t to work upon
1076  * @glyph: The glyph ID to query
1077  * @extents: (out): The #hb_glyph_extents_t retrieved
1078  *
1079  * Fetches the #hb_glyph_extents_t data for a glyph ID
1080  * in the specified font.
1081  *
1082  * Return value: %true if data found, false otherwise
1083  *
1084  * Since: 0.9.2
1085  **/
1086 hb_bool_t
1090 {
1091  return font->get_glyph_extents (glyph, extents);
1092 }
1093 
1094 /**
1095  * hb_font_get_glyph_contour_point:
1096  * @font: #hb_font_t to work upon
1097  * @glyph: The glyph ID to query
1098  * @point_index: The contour-point index to query
1099  * @x: (out): The X value retrieved for the contour point
1100  * @y: (out): The Y value retrieved for the contour point
1101  *
1102  * Fetches the (x,y) coordinates of a specified contour-point index
1103  * in the specified glyph, within the specified font.
1104  *
1105  * Return value: %true if data found, false otherwise
1106  *
1107  * Since: 0.9.2
1108  **/
1109 hb_bool_t
1112  unsigned int point_index,
1113  hb_position_t *x,
1114  hb_position_t *y)
1115 {
1116  return font->get_glyph_contour_point (glyph, point_index, x, y);
1117 }
1118 
1119 /**
1120  * hb_font_get_glyph_name:
1121  * @font: #hb_font_t to work upon
1122  * @glyph: The glyph ID to query
1123  * @name: (out) (array length=size): Name string retrieved for the glyph ID
1124  * @size: Length of the glyph-name string retrieved
1125  *
1126  * Fetches the glyph-name string for a glyph ID in the specified @font.
1127  *
1128  * Return value: %true if data found, zero otherwise
1129  *
1130  * Since: 0.9.2
1131  **/
1132 hb_bool_t
1135  char *name,
1136  unsigned int size)
1137 {
1138  return font->get_glyph_name (glyph, name, size);
1139 }
1140 
1141 /**
1142  * hb_font_get_glyph_from_name:
1143  * @font: #hb_font_t to work upon
1144  * @name: (array length=len): The name string to query
1145  * @len: The length of the name queried
1146  * @glyph: (out): The glyph ID retrieved
1147  *
1148  * Fetches the glyph ID that corresponds to a name string in the specified @font.
1149  *
1150  * <note>Note: @len == -1 means the name string is null-terminated.</note>
1151  *
1152  * Return value: %true if data found, false otherwise
1153  *
1154  * Since: 0.9.2
1155  **/
1156 hb_bool_t
1158  const char *name,
1159  int len, /* -1 means nul-terminated */
1161 {
1162  return font->get_glyph_from_name (name, len, glyph);
1163 }
1164 
1165 
1166 /* A bit higher-level, and with fallback */
1167 
1168 /**
1169  * hb_font_get_extents_for_direction:
1170  * @font: #hb_font_t to work upon
1171  * @direction: The direction of the text segment
1172  * @extents: (out): The #hb_glyph_extents_t retrieved
1173  *
1174  * Fetches the extents for a font in a text segment of the
1175  * specified direction.
1176  *
1177  * Calls the appropriate direction-specific variant (horizontal
1178  * or vertical) depending on the value of @direction.
1179  *
1180  * Since: 1.1.3
1181  **/
1182 void
1186 {
1187  return font->get_extents_for_direction (direction, extents);
1188 }
1189 /**
1190  * hb_font_get_glyph_advance_for_direction:
1191  * @font: #hb_font_t to work upon
1192  * @glyph: The glyph ID to query
1193  * @direction: The direction of the text segment
1194  * @x: (out): The horizontal advance retrieved
1195  * @y: (out): The vertical advance retrieved
1196  *
1197  * Fetches the advance for a glyph ID from the specified font,
1198  * in a text segment of the specified direction.
1199  *
1200  * Calls the appropriate direction-specific variant (horizontal
1201  * or vertical) depending on the value of @direction.
1202  *
1203  * Since: 0.9.2
1204  **/
1205 void
1209  hb_position_t *x,
1210  hb_position_t *y)
1211 {
1212  return font->get_glyph_advance_for_direction (glyph, direction, x, y);
1213 }
1214 /**
1215  * hb_font_get_glyph_advances_for_direction:
1216  * @font: #hb_font_t to work upon
1217  * @direction: The direction of the text segment
1218  * @count: The number of glyph IDs in the sequence queried
1219  * @first_glyph: The first glyph ID to query
1220  * @glyph_stride: The stride between successive glyph IDs
1221  * @first_advance: (out): The first advance retrieved
1222  * @advance_stride: (out): The stride between successive advances
1223  *
1224  * Fetches the advances for a sequence of glyph IDs in the specified
1225  * font, in a text segment of the specified direction.
1226  *
1227  * Calls the appropriate direction-specific variant (horizontal
1228  * or vertical) depending on the value of @direction.
1229  *
1230  * Since: 1.8.6
1231  **/
1232 HB_EXTERN void
1235  unsigned int count,
1236  const hb_codepoint_t *first_glyph,
1237  unsigned glyph_stride,
1238  hb_position_t *first_advance,
1239  unsigned advance_stride)
1240 {
1241  font->get_glyph_advances_for_direction (direction, count, first_glyph, glyph_stride, first_advance, advance_stride);
1242 }
1243 
1244 /**
1245  * hb_font_get_glyph_origin_for_direction:
1246  * @font: #hb_font_t to work upon
1247  * @glyph: The glyph ID to query
1248  * @direction: The direction of the text segment
1249  * @x: (out): The X coordinate retrieved for the origin
1250  * @y: (out): The Y coordinate retrieved for the origin
1251  *
1252  * Fetches the (X,Y) coordinates of the origin for a glyph in
1253  * the specified font.
1254  *
1255  * Calls the appropriate direction-specific variant (horizontal
1256  * or vertical) depending on the value of @direction.
1257  *
1258  * Since: 0.9.2
1259  **/
1260 void
1264  hb_position_t *x,
1265  hb_position_t *y)
1266 {
1267  return font->get_glyph_origin_for_direction (glyph, direction, x, y);
1268 }
1269 
1270 /**
1271  * hb_font_add_glyph_origin_for_direction:
1272  * @font: #hb_font_t to work upon
1273  * @glyph: The glyph ID to query
1274  * @direction: The direction of the text segment
1275  * @x: (inout): Input = The original X coordinate
1276  * Output = The X coordinate plus the X-coordinate of the origin
1277  * @y: (inout): Input = The original Y coordinate
1278  * Output = The Y coordinate plus the Y-coordinate of the origin
1279  *
1280  * Adds the origin coordinates to an (X,Y) point coordinate, in
1281  * the specified glyph ID in the specified font.
1282  *
1283  * Calls the appropriate direction-specific variant (horizontal
1284  * or vertical) depending on the value of @direction.
1285  *
1286  * Since: 0.9.2
1287  **/
1288 void
1292  hb_position_t *x,
1293  hb_position_t *y)
1294 {
1295  return font->add_glyph_origin_for_direction (glyph, direction, x, y);
1296 }
1297 
1298 /**
1299  * hb_font_subtract_glyph_origin_for_direction:
1300  * @font: #hb_font_t to work upon
1301  * @glyph: The glyph ID to query
1302  * @direction: The direction of the text segment
1303  * @x: (inout): Input = The original X coordinate
1304  * Output = The X coordinate minus the X-coordinate of the origin
1305  * @y: (inout): Input = The original Y coordinate
1306  * Output = The Y coordinate minus the Y-coordinate of the origin
1307  *
1308  * Subtracts the origin coordinates from an (X,Y) point coordinate,
1309  * in the specified glyph ID in the specified font.
1310  *
1311  * Calls the appropriate direction-specific variant (horizontal
1312  * or vertical) depending on the value of @direction.
1313  *
1314  * Since: 0.9.2
1315  **/
1316 void
1320  hb_position_t *x,
1321  hb_position_t *y)
1322 {
1323  return font->subtract_glyph_origin_for_direction (glyph, direction, x, y);
1324 }
1325 
1326 /**
1327  * hb_font_get_glyph_kerning_for_direction:
1328  * @font: #hb_font_t to work upon
1329  * @first_glyph: The glyph ID of the first glyph in the glyph pair to query
1330  * @second_glyph: The glyph ID of the second glyph in the glyph pair to query
1331  * @direction: The direction of the text segment
1332  * @x: (out): The horizontal kerning-adjustment value retrieved
1333  * @y: (out): The vertical kerning-adjustment value retrieved
1334  *
1335  * Fetches the kerning-adjustment value for a glyph-pair in the specified font.
1336  *
1337  * Calls the appropriate direction-specific variant (horizontal
1338  * or vertical) depending on the value of @direction.
1339  *
1340  * Since: 0.9.2
1341  **/
1342 void
1344  hb_codepoint_t first_glyph,
1345  hb_codepoint_t second_glyph,
1347  hb_position_t *x,
1348  hb_position_t *y)
1349 {
1350  return font->get_glyph_kerning_for_direction (first_glyph, second_glyph, direction, x, y);
1351 }
1352 
1353 /**
1354  * hb_font_get_glyph_extents_for_origin:
1355  * @font: #hb_font_t to work upon
1356  * @glyph: The glyph ID to query
1357  * @direction: The direction of the text segment
1358  * @extents: (out): The #hb_glyph_extents_t retrieved
1359  *
1360  * Fetches the #hb_glyph_extents_t data for a glyph ID
1361  * in the specified font, with respect to the origin in
1362  * a text segment in the specified direction.
1363  *
1364  * Calls the appropriate direction-specific variant (horizontal
1365  * or vertical) depending on the value of @direction.
1366  *
1367  * Return value: %true if data found, false otherwise
1368  *
1369  * Since: 0.9.2
1370  **/
1371 hb_bool_t
1376 {
1377  return font->get_glyph_extents_for_origin (glyph, direction, extents);
1378 }
1379 
1380 /**
1381  * hb_font_get_glyph_contour_point_for_origin:
1382  * @font: #hb_font_t to work upon
1383  * @glyph: The glyph ID to query
1384  * @point_index: The contour-point index to query
1385  * @direction: The direction of the text segment
1386  * @x: (out): The X value retrieved for the contour point
1387  * @y: (out): The Y value retrieved for the contour point
1388  *
1389  * Fetches the (X,Y) coordinates of a specified contour-point index
1390  * in the specified glyph ID in the specified font, with respect
1391  * to the origin in a text segment in the specified direction.
1392  *
1393  * Calls the appropriate direction-specific variant (horizontal
1394  * or vertical) depending on the value of @direction.
1395  *
1396  * Return value: %true if data found, false otherwise
1397  *
1398  * Since: 0.9.2
1399  **/
1400 hb_bool_t
1403  unsigned int point_index,
1405  hb_position_t *x,
1406  hb_position_t *y)
1407 {
1408  return font->get_glyph_contour_point_for_origin (glyph, point_index, direction, x, y);
1409 }
1410 
1411 /**
1412  * hb_font_glyph_to_string:
1413  * @font: #hb_font_t to work upon
1414  * @glyph: The glyph ID to query
1415  * @s: (out) (array length=size): The string containing the glyph name
1416  * @size: Length of string @s
1417  *
1418  * Fetches the name of the specified glyph ID in @font and returns
1419  * it in string @s.
1420  *
1421  * If the glyph ID has no name in @font, a string of the form `gidDDD` is
1422  * generated, with `DDD` being the glyph ID.
1423  *
1424  * Since: 0.9.2
1425  **/
1426 void
1429  char *s,
1430  unsigned int size)
1431 {
1432  font->glyph_to_string (glyph, s, size);
1433 }
1434 
1435 /**
1436  * hb_font_glyph_from_string:
1437  * @font: #hb_font_t to work upon
1438  * @s: (array length=len) (element-type uint8_t): string to query
1439  * @len: The length of the string @s
1440  * @glyph: (out): The glyph ID corresponding to the string requested
1441  *
1442  * Fetches the glyph ID from @font that matches the specified string.
1443  * Strings of the format `gidDDD` or `uniUUUU` are parsed automatically.
1444  *
1445  * <note>Note: @len == -1 means the string is null-terminated.</note>
1446  *
1447  * Return value: %true if data found, false otherwise
1448  *
1449  * Since: 0.9.2
1450  **/
1451 hb_bool_t
1453  const char *s,
1454  int len,
1456 {
1457  return font->glyph_from_string (s, len, glyph);
1458 }
1459 
1460 
1461 /*
1462  * hb_font_t
1463  */
1464 
1466 {
1468 
1469  nullptr, /* parent */
1470  const_cast<hb_face_t *> (&_hb_Null_hb_face_t),
1471 
1472  1000, /* x_scale */
1473  1000, /* y_scale */
1474  1<<16, /* x_mult */
1475  1<<16, /* y_mult */
1476 
1477  0, /* x_ppem */
1478  0, /* y_ppem */
1479  0, /* ptem */
1480 
1481  0, /* num_coords */
1482  nullptr, /* coords */
1483  nullptr, /* design_coords */
1484 
1485  const_cast<hb_font_funcs_t *> (&_hb_Null_hb_font_funcs_t),
1486 
1487  /* Zero for the rest is fine. */
1488 };
1489 
1490 
1491 static hb_font_t *
1493 {
1494  hb_font_t *font;
1495 
1496  if (unlikely (!face))
1497  face = hb_face_get_empty ();
1498  if (!(font = hb_object_create<hb_font_t> ()))
1499  return hb_font_get_empty ();
1500 
1502  font->parent = hb_font_get_empty ();
1503  font->face = hb_face_reference (face);
1504  font->klass = hb_font_funcs_get_empty ();
1505  font->data.init0 (font);
1506  font->x_scale = font->y_scale = hb_face_get_upem (face);
1507  font->x_mult = font->y_mult = 1 << 16;
1508 
1509  return font;
1510 }
1511 
1512 /**
1513  * hb_font_create: (Xconstructor)
1514  * @face: a face.
1515  *
1516  * Constructs a new font object from the specified face.
1517  *
1518  * Return value: (transfer full): The new font object
1519  *
1520  * Since: 0.9.2
1521  **/
1522 hb_font_t *
1524 {
1526 
1527 #ifndef HB_NO_OT_FONT
1528  /* Install our in-house, very lightweight, funcs. */
1530 #endif
1531 
1532  return font;
1533 }
1534 
1535 static void
1537  int *coords, /* 2.14 normalized */
1538  float *design_coords,
1539  unsigned int coords_length)
1540 {
1541  free (font->coords);
1542  free (font->design_coords);
1543 
1544  font->coords = coords;
1545  font->design_coords = design_coords;
1546  font->num_coords = coords_length;
1547 }
1548 
1549 /**
1550  * hb_font_create_sub_font:
1551  * @parent: The parent font object
1552  *
1553  * Constructs a sub-font font object from the specified @parent font,
1554  * replicating the parent's properties.
1555  *
1556  * Return value: (transfer full): The new sub-font font object
1557  *
1558  * Since: 0.9.2
1559  **/
1560 hb_font_t *
1562 {
1563  if (unlikely (!parent))
1565 
1566  hb_font_t *font = _hb_font_create (parent->face);
1567 
1569  return font;
1570 
1571  font->parent = hb_font_reference (parent);
1572 
1573  font->x_scale = parent->x_scale;
1574  font->y_scale = parent->y_scale;
1575  font->mults_changed ();
1576  font->x_ppem = parent->x_ppem;
1577  font->y_ppem = parent->y_ppem;
1578  font->ptem = parent->ptem;
1579 
1580  unsigned int num_coords = parent->num_coords;
1581  if (num_coords)
1582  {
1583  int *coords = (int *) calloc (num_coords, sizeof (parent->coords[0]));
1584  float *design_coords = (float *) calloc (num_coords, sizeof (parent->design_coords[0]));
1585  if (likely (coords && design_coords))
1586  {
1587  memcpy (coords, parent->coords, num_coords * sizeof (parent->coords[0]));
1588  memcpy (design_coords, parent->design_coords, num_coords * sizeof (parent->design_coords[0]));
1589  _hb_font_adopt_var_coords (font, coords, design_coords, num_coords);
1590  }
1591  else
1592  {
1593  free (coords);
1594  free (design_coords);
1595  }
1596  }
1597 
1598  return font;
1599 }
1600 
1601 /**
1602  * hb_font_get_empty:
1603  *
1604  * Fetches the empty font object.
1605  *
1606  * Return value: (transfer full): The empty font object
1607  *
1608  * Since: 0.9.2
1609  **/
1610 hb_font_t *
1612 {
1613  return const_cast<hb_font_t *> (&Null (hb_font_t));
1614 }
1615 
1616 /**
1617  * hb_font_reference: (skip)
1618  * @font: #hb_font_t to work upon
1619  *
1620  * Increases the reference count on the given font object.
1621  *
1622  * Return value: (transfer full): The @font object
1623  *
1624  * Since: 0.9.2
1625  **/
1626 hb_font_t *
1628 {
1629  return hb_object_reference (font);
1630 }
1631 
1632 /**
1633  * hb_font_destroy: (skip)
1634  * @font: #hb_font_t to work upon
1635  *
1636  * Decreases the reference count on the given font object. When the
1637  * reference count reaches zero, the font is destroyed,
1638  * freeing all memory.
1639  *
1640  * Since: 0.9.2
1641  **/
1642 void
1644 {
1645  if (!hb_object_destroy (font)) return;
1646 
1647  font->data.fini ();
1648 
1649  if (font->destroy)
1650  font->destroy (font->user_data);
1651 
1652  hb_font_destroy (font->parent);
1653  hb_face_destroy (font->face);
1654  hb_font_funcs_destroy (font->klass);
1655 
1656  free (font->coords);
1657  free (font->design_coords);
1658 
1659  free (font);
1660 }
1661 
1662 /**
1663  * hb_font_set_user_data: (skip)
1664  * @font: #hb_font_t to work upon
1665  * @key: The user-data key
1666  * @data: A pointer to the user data
1667  * @destroy: (optional): A callback to call when @data is not needed anymore
1668  * @replace: Whether to replace an existing data with the same key
1669  *
1670  * Attaches a user-data key/data pair to the specified font object.
1671  *
1672  * Return value:
1673  *
1674  * Since: 0.9.2
1675  **/
1676 hb_bool_t
1679  void * data,
1680  hb_destroy_func_t destroy /* May be NULL. */,
1682 {
1683  return hb_object_set_user_data (font, key, data, destroy, replace);
1684 }
1685 
1686 /**
1687  * hb_font_get_user_data: (skip)
1688  * @font: #hb_font_t to work upon
1689  * @key: The user-data key to query
1690  *
1691  * Fetches the user-data object associated with the specified key,
1692  * attached to the specified font object.
1693  *
1694  * Return value: (transfer none): Pointer to the user data
1695  *
1696  * Since: 0.9.2
1697  **/
1698 void *
1701 {
1702  return hb_object_get_user_data (font, key);
1703 }
1704 
1705 /**
1706  * hb_font_make_immutable:
1707  * @font: #hb_font_t to work upon
1708  *
1709  * Makes @font immutable.
1710  *
1711  * Since: 0.9.2
1712  **/
1713 void
1715 {
1717  return;
1718 
1719  if (font->parent)
1720  hb_font_make_immutable (font->parent);
1721 
1723 }
1724 
1725 /**
1726  * hb_font_is_immutable:
1727  * @font: #hb_font_t to work upon
1728  *
1729  * Tests whether a font object is immutable.
1730  *
1731  * Return value: %true if @font is immutable, false otherwise
1732  *
1733  * Since: 0.9.2
1734  **/
1735 hb_bool_t
1737 {
1738  return hb_object_is_immutable (font);
1739 }
1740 
1741 /**
1742  * hb_font_set_parent:
1743  * @font: #hb_font_t to work upon
1744  * @parent: The parent font object to assign
1745  *
1746  * Sets the parent font of @font.
1747  *
1748  * Since: 1.0.5
1749  **/
1750 void
1752  hb_font_t *parent)
1753 {
1755  return;
1756 
1757  if (!parent)
1759 
1760  hb_font_t *old = font->parent;
1761 
1762  font->parent = hb_font_reference (parent);
1763 
1764  hb_font_destroy (old);
1765 }
1766 
1767 /**
1768  * hb_font_get_parent:
1769  * @font: #hb_font_t to work upon
1770  *
1771  * Fetches the parent font of @font.
1772  *
1773  * Return value: (transfer none): The parent font object
1774  *
1775  * Since: 0.9.2
1776  **/
1777 hb_font_t *
1779 {
1780  return font->parent;
1781 }
1782 
1783 /**
1784  * hb_font_set_face:
1785  * @font: #hb_font_t to work upon
1786  * @face: The #hb_face_t to assign
1787  *
1788  * Sets @face as the font-face value of @font.
1789  *
1790  * Since: 1.4.3
1791  **/
1792 void
1794  hb_face_t *face)
1795 {
1797  return;
1798 
1799  if (unlikely (!face))
1800  face = hb_face_get_empty ();
1801 
1802  hb_face_t *old = font->face;
1803 
1805  font->face = hb_face_reference (face);
1806  font->mults_changed ();
1807 
1808  hb_face_destroy (old);
1809 }
1810 
1811 /**
1812  * hb_font_get_face:
1813  * @font: #hb_font_t to work upon
1814  *
1815  * Fetches the face associated with the specified font object.
1816  *
1817  * Return value: (transfer none): The #hb_face_t value
1818  *
1819  * Since: 0.9.2
1820  **/
1821 hb_face_t *
1823 {
1824  return font->face;
1825 }
1826 
1827 
1828 /**
1829  * hb_font_set_funcs:
1830  * @font: #hb_font_t to work upon
1831  * @klass: (closure font_data) (destroy destroy) (scope notified):
1832  * @font_data: Data to attach to @font
1833  * @destroy: (optional): The function to call when @font_data is not needed anymore
1834  *
1835  * Replaces the font-functions structure attached to a font, updating
1836  * the font's user-data with @font-data and the @destroy callback.
1837  *
1838  * Since: 0.9.2
1839  **/
1840 void
1842  hb_font_funcs_t *klass,
1843  void *font_data,
1844  hb_destroy_func_t destroy /* May be NULL. */)
1845 {
1847  {
1848  if (destroy)
1849  destroy (font_data);
1850  return;
1851  }
1852 
1853  if (font->destroy)
1854  font->destroy (font->user_data);
1855 
1856  if (!klass)
1857  klass = hb_font_funcs_get_empty ();
1858 
1859  hb_font_funcs_reference (klass);
1860  hb_font_funcs_destroy (font->klass);
1861  font->klass = klass;
1862  font->user_data = font_data;
1863  font->destroy = destroy;
1864 }
1865 
1866 /**
1867  * hb_font_set_funcs_data:
1868  * @font: #hb_font_t to work upon
1869  * @font_data: (destroy destroy) (scope notified): Data to attach to @font
1870  * @destroy: (optional): The function to call when @font_data is not needed anymore
1871  *
1872  * Replaces the user data attached to a font, updating the font's
1873  * @destroy callback.
1874  *
1875  * Since: 0.9.2
1876  **/
1877 void
1879  void *font_data,
1880  hb_destroy_func_t destroy /* May be NULL. */)
1881 {
1882  /* Destroy user_data? */
1884  {
1885  if (destroy)
1886  destroy (font_data);
1887  return;
1888  }
1889 
1890  if (font->destroy)
1891  font->destroy (font->user_data);
1892 
1893  font->user_data = font_data;
1894  font->destroy = destroy;
1895 }
1896 
1897 
1898 /**
1899  * hb_font_set_scale:
1900  * @font: #hb_font_t to work upon
1901  * @x_scale: Horizontal scale value to assign
1902  * @y_scale: Vertical scale value to assign
1903  *
1904  * Sets the horizontal and vertical scale of a font.
1905  *
1906  * Since: 0.9.2
1907  **/
1908 void
1910  int x_scale,
1911  int y_scale)
1912 {
1914  return;
1915 
1916  font->x_scale = x_scale;
1917  font->y_scale = y_scale;
1918  font->mults_changed ();
1919 }
1920 
1921 /**
1922  * hb_font_get_scale:
1923  * @font: #hb_font_t to work upon
1924  * @x_scale: (out): Horizontal scale value
1925  * @y_scale: (out): Vertical scale value
1926  *
1927  * Fetches the horizontal and vertical scale of a font.
1928  *
1929  * Since: 0.9.2
1930  **/
1931 void
1933  int *x_scale,
1934  int *y_scale)
1935 {
1936  if (x_scale) *x_scale = font->x_scale;
1937  if (y_scale) *y_scale = font->y_scale;
1938 }
1939 
1940 /**
1941  * hb_font_set_ppem:
1942  * @font: #hb_font_t to work upon
1943  * @x_ppem: Horizontal ppem value to assign
1944  * @y_ppem: Vertical ppem value to assign
1945  *
1946  * Sets the horizontal and vertical pixels-per-em (ppem) of a font.
1947  *
1948  * Since: 0.9.2
1949  **/
1950 void
1952  unsigned int x_ppem,
1953  unsigned int y_ppem)
1954 {
1956  return;
1957 
1958  font->x_ppem = x_ppem;
1959  font->y_ppem = y_ppem;
1960 }
1961 
1962 /**
1963  * hb_font_get_ppem:
1964  * @font: #hb_font_t to work upon
1965  * @x_ppem: (out): Horizontal ppem value
1966  * @y_ppem: (out): Vertical ppem value
1967  *
1968  * Fetches the horizontal and vertical points-per-em (ppem) of a font.
1969  *
1970  * Since: 0.9.2
1971  **/
1972 void
1974  unsigned int *x_ppem,
1975  unsigned int *y_ppem)
1976 {
1977  if (x_ppem) *x_ppem = font->x_ppem;
1978  if (y_ppem) *y_ppem = font->y_ppem;
1979 }
1980 
1981 /**
1982  * hb_font_set_ptem:
1983  * @font: #hb_font_t to work upon
1984  * @ptem: font size in points.
1985  *
1986  * Sets the "point size" of a font. Set to zero to unset.
1987  * Used in CoreText to implement optical sizing.
1988  *
1989  * <note>Note: There are 72 points in an inch.</note>
1990  *
1991  * Since: 1.6.0
1992  **/
1993 void
1995  float ptem)
1996 {
1998  return;
1999 
2000  font->ptem = ptem;
2001 }
2002 
2003 /**
2004  * hb_font_get_ptem:
2005  * @font: #hb_font_t to work upon
2006  *
2007  * Fetches the "point size" of a font. Used in CoreText to
2008  * implement optical sizing.
2009  *
2010  * Return value: Point size. A value of zero means "not set."
2011  *
2012  * Since: 0.9.2
2013  **/
2014 float
2016 {
2017  return font->ptem;
2018 }
2019 
2020 #ifndef HB_NO_VAR
2021 /*
2022  * Variations
2023  */
2024 
2025 /**
2026  * hb_font_set_variations:
2027  * @font: #hb_font_t to work upon
2028  * @variations: (array length=variations_length): Array of variation settings to apply
2029  * @variations_length: Number of variations to apply
2030  *
2031  * Applies a list of font-variation settings to a font.
2032  *
2033  * Since: 1.4.2
2034  */
2035 void
2037  const hb_variation_t *variations,
2038  unsigned int variations_length)
2039 {
2041  return;
2042 
2043  if (!variations_length)
2044  {
2046  return;
2047  }
2048 
2049  unsigned int coords_length = hb_ot_var_get_axis_count (font->face);
2050 
2051  int *normalized = coords_length ? (int *) calloc (coords_length, sizeof (int)) : nullptr;
2052  float *design_coords = coords_length ? (float *) calloc (coords_length, sizeof (float)) : nullptr;
2053 
2054  if (unlikely (coords_length && !(normalized && design_coords)))
2055  {
2056  free (normalized);
2057  free (design_coords);
2058  return;
2059  }
2060 
2061  const OT::fvar &fvar = *font->face->table.fvar;
2062  for (unsigned int i = 0; i < variations_length; i++)
2063  {
2065  if (hb_ot_var_find_axis_info (font->face, variations[i].tag, &info) &&
2066  info.axis_index < coords_length)
2067  {
2068  float v = variations[i].value;
2069  design_coords[info.axis_index] = v;
2070  normalized[info.axis_index] = fvar.normalize_axis_value (info.axis_index, v);
2071  }
2072  }
2073  font->face->table.avar->map_coords (normalized, coords_length);
2074 
2075  _hb_font_adopt_var_coords (font, normalized, design_coords, coords_length);
2076 }
2077 
2078 /**
2079  * hb_font_set_var_coords_design:
2080  * @font: #hb_font_t to work upon
2081  * @coords: (array length=coords_length): Array of variation coordinates to apply
2082  * @coords_length: Number of coordinates to apply
2083  *
2084  * Applies a list of variation coordinates (in design-space units)
2085  * to a font.
2086  *
2087  * Since: 1.4.2
2088  */
2089 void
2091  const float *coords,
2092  unsigned int coords_length)
2093 {
2095  return;
2096 
2097  int *normalized = coords_length ? (int *) calloc (coords_length, sizeof (int)) : nullptr;
2098  float *design_coords = coords_length ? (float *) calloc (coords_length, sizeof (float)) : nullptr;
2099 
2100  if (unlikely (coords_length && !(normalized && design_coords)))
2101  {
2102  free (normalized);
2103  free (design_coords);
2104  return;
2105  }
2106 
2107  if (coords_length)
2108  memcpy (design_coords, coords, coords_length * sizeof (font->design_coords[0]));
2109 
2110  hb_ot_var_normalize_coords (font->face, coords_length, coords, normalized);
2111  _hb_font_adopt_var_coords (font, normalized, design_coords, coords_length);
2112 }
2113 
2114 /**
2115  * hb_font_set_var_named_instance:
2116  * @font: a font.
2117  * @instance_index: named instance index.
2118  *
2119  * Sets design coords of a font from a named instance index.
2120  *
2121  * Since: 2.6.0
2122  */
2123 void
2125  unsigned instance_index)
2126 {
2128  return;
2129 
2130  unsigned int coords_length = hb_ot_var_named_instance_get_design_coords (font->face, instance_index, nullptr, nullptr);
2131 
2132  float *coords = coords_length ? (float *) calloc (coords_length, sizeof (float)) : nullptr;
2133  if (unlikely (coords_length && !coords))
2134  return;
2135 
2136  hb_ot_var_named_instance_get_design_coords (font->face, instance_index, &coords_length, coords);
2137  hb_font_set_var_coords_design (font, coords, coords_length);
2138  free (coords);
2139 }
2140 
2141 /**
2142  * hb_font_set_var_coords_normalized:
2143  * @font: #hb_font_t to work upon
2144  * @coords: (array length=coords_length): Array of variation coordinates to apply
2145  * @coords_length: Number of coordinates to apply
2146  *
2147  * Applies a list of variation coordinates (in normalized units)
2148  * to a font.
2149  *
2150  * <note>Note: Coordinates should be normalized to 2.14.</note>
2151  *
2152  * Since: 1.4.2
2153  */
2154 void
2156  const int *coords, /* 2.14 normalized */
2157  unsigned int coords_length)
2158 {
2160  return;
2161 
2162  int *copy = coords_length ? (int *) calloc (coords_length, sizeof (coords[0])) : nullptr;
2163  int *unmapped = coords_length ? (int *) calloc (coords_length, sizeof (coords[0])) : nullptr;
2164  float *design_coords = coords_length ? (float *) calloc (coords_length, sizeof (design_coords[0])) : nullptr;
2165 
2166  if (unlikely (coords_length && !(copy && unmapped && design_coords)))
2167  {
2168  free (copy);
2169  free (unmapped);
2170  free (design_coords);
2171  return;
2172  }
2173 
2174  if (coords_length)
2175  {
2176  memcpy (copy, coords, coords_length * sizeof (coords[0]));
2177  memcpy (unmapped, coords, coords_length * sizeof (coords[0]));
2178  }
2179 
2180  /* Best effort design coords simulation */
2181  font->face->table.avar->unmap_coords (unmapped, coords_length);
2182  for (unsigned int i = 0; i < coords_length; ++i)
2183  design_coords[i] = font->face->table.fvar->unnormalize_axis_value (i, unmapped[i]);
2184  free (unmapped);
2185 
2186  _hb_font_adopt_var_coords (font, copy, design_coords, coords_length);
2187 }
2188 
2189 /**
2190  * hb_font_get_var_coords_normalized:
2191  * @font: #hb_font_t to work upon
2192  * @length: Number of coordinates retrieved
2193  *
2194  * Fetches the list of normalized variation coordinates currently
2195  * set on a font.
2196  *
2197  * Return value is valid as long as variation coordinates of the font
2198  * are not modified.
2199  *
2200  * Since: 1.4.2
2201  */
2202 const int *
2204  unsigned int *length)
2205 {
2206  if (length)
2207  *length = font->num_coords;
2208 
2209  return font->coords;
2210 }
2211 
2212 #ifdef HB_EXPERIMENTAL_API
2213 /**
2214  * hb_font_get_var_coords_design:
2215  *
2216  * Return value is valid as long as variation coordinates of the font
2217  * are not modified.
2218  *
2219  * Since: EXPERIMENTAL
2220  */
2221 const float *
2222 hb_font_get_var_coords_design (hb_font_t *font,
2223  unsigned int *length)
2224 {
2225  if (length)
2226  *length = font->num_coords;
2227 
2228  return font->design_coords;
2229 }
2230 #endif
2231 #endif
2232 
2233 #ifndef HB_DISABLE_DEPRECATED
2234 /*
2235  * Deprecated get_glyph_func():
2236  */
2237 
2239 {
2240  void *user_data;
2242  unsigned int ref_count;
2243 };
2244 
2245 template <typename FuncType>
2246 struct hb_trampoline_t
2247 {
2248  hb_trampoline_closure_t closure; /* Must be first. */
2249  FuncType func;
2250 };
2251 
2252 template <typename FuncType>
2255  void *user_data,
2256  hb_destroy_func_t destroy)
2257 {
2258  typedef hb_trampoline_t<FuncType> trampoline_t;
2259 
2260  trampoline_t *trampoline = (trampoline_t *) calloc (1, sizeof (trampoline_t));
2261 
2262  if (unlikely (!trampoline))
2263  return nullptr;
2264 
2265  trampoline->closure.user_data = user_data;
2266  trampoline->closure.destroy = destroy;
2267  trampoline->closure.ref_count = 1;
2268  trampoline->func = func;
2269 
2270  return trampoline;
2271 }
2272 
2273 static void
2275 {
2276  closure->ref_count++;
2277 }
2278 
2279 static void
2280 trampoline_destroy (void *user_data)
2281 {
2283 
2284  if (--closure->ref_count)
2285  return;
2286 
2287  if (closure->destroy)
2288  closure->destroy (closure->user_data);
2289  free (closure);
2290 }
2291 
2293 
2294 static hb_bool_t
2296  void *font_data,
2299  void *user_data)
2300 {
2302  return trampoline->func (font, font_data, unicode, 0, glyph, trampoline->closure.user_data);
2303 }
2304 
2305 static hb_bool_t
2307  void *font_data,
2309  hb_codepoint_t variation_selector,
2311  void *user_data)
2312 {
2314  return trampoline->func (font, font_data, unicode, variation_selector, glyph, trampoline->closure.user_data);
2315 }
2316 
2317 /**
2318  * hb_font_funcs_set_glyph_func:
2319  * @ffuncs: The font-functions structure
2320  * @func: (closure user_data) (destroy destroy) (scope notified): callback function
2321  * @user_data: data to pass to @func
2322  * @destroy: (optional): function to call when @user_data is not needed anymore
2323  *
2324  * Deprecated. Use hb_font_funcs_set_nominal_glyph_func() and
2325  * hb_font_funcs_set_variation_glyph_func() instead.
2326  *
2327  * Since: 0.9.2
2328  * Deprecated: 1.2.3
2329  **/
2330 void
2333  void *user_data,
2334  hb_destroy_func_t destroy /* May be NULL. */)
2335 {
2336  if (hb_object_is_immutable (ffuncs))
2337  {
2338  if (destroy)
2339  destroy (user_data);
2340  return;
2341  }
2342 
2343  hb_font_get_glyph_trampoline_t *trampoline;
2344 
2345  trampoline = trampoline_create (func, user_data, destroy);
2346  if (unlikely (!trampoline))
2347  {
2348  if (destroy)
2349  destroy (user_data);
2350  return;
2351  }
2352 
2355  trampoline,
2357 
2358  trampoline_reference (&trampoline->closure);
2361  trampoline,
2363 }
2364 #endif
return _Result< 0 ? -1 :_Result;} #line 1069 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vsnwprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsnwprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1091 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vsnwprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format, va_list _ArgList) { return _vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);} #line 1108 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnwprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format, va_list _Args);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnwprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format, va_list _ArgList) { return _vsnwprintf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1133 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_c_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1163 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_c(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1179 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);} #line 1196 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl __vswprintf_l(wchar_t *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vswprintf_l(_Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1212 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf(wchar_t *const _Buffer, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_l(_Buffer,(size_t) -1, _Format,((void *) 0), _ArgList);} #line 1227 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswprintf(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1243 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1264 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1281 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 1283 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_p_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf_p((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1312 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswprintf_p(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, va_list _ArgList) { return _vswprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1328 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf_l(wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1347 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf(wchar_t const *const _Format, va_list _ArgList) { return _vscwprintf_l(_Format,((void *) 0), _ArgList);} #line 1361 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf_p_l(wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vswprintf_p((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1380 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vscwprintf_p(wchar_t const *const _Format, va_list _ArgList) { return _vscwprintf_p_l(_Format,((void *) 0), _ArgList);} #line 1394 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl __swprintf_l(wchar_t *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__vswprintf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1414 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1435 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf(wchar_t *const _Buffer, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__vswprintf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1454 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl swprintf(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1474 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "__swprintf_l_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl __swprintf_l(wchar_t *_Buffer, wchar_t const *_Format, _locale_t _Locale,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vswprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl __vswprintf_l(wchar_t *_Buffer, wchar_t const *_Format, _locale_t _Locale, va_list _Args);__declspec(deprecated("This function or variable may be unsafe. Consider using " "swprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _swprintf(wchar_t *_Buffer, wchar_t const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "vswprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vswprintf(wchar_t *_Buffer, wchar_t const *_Format, va_list _Args);__inline int __cdecl _swprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1511 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl swprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1532 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 1534 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_p_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_p_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1562 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_p(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1582 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_c_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1603 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swprintf_c(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1623 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwprintf_l(wchar_t *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1646 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwprintf(wchar_t *_Buffer, size_t _BufferCount, wchar_t const *_Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1668 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwprintf_s_l(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1690 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwprintf_s(wchar_t *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1711 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf_l(wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1737 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf(wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_l(_Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1755 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf_p_l(wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_p_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1774 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _scwprintf_p(wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscwprintf_p_l(_Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1792 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #pragma warning(push) #pragma warning(disable:4141 6054) #pragma warning(pop) #line 1856 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" int __cdecl __stdio_common_vswscanf(unsigned __int64 _Options, wchar_t const *_Buffer, size_t _BufferCount, wchar_t const *_Format, _locale_t _Locale, va_list _ArgList);__inline int __cdecl _vswscanf_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options()), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1897 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswscanf(wchar_t const *_Buffer, wchar_t const *_Format, va_list _ArgList) { return _vswscanf_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 1912 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vswscanf_s_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1930 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl vswscanf_s(wchar_t const *const _Buffer, wchar_t const *const _Format, va_list _ArgList) { return _vswscanf_s_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 1947 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 1949 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnwscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnwscanf_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);} #line 1976 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _vsnwscanf_s_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vswscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format, _Locale, _ArgList);} #line 1995 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_swscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _swscanf_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2015 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "swscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl swscanf(wchar_t const *const _Buffer, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2034 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _swscanf_s_l(wchar_t const *const _Buffer, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_s_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2054 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl swscanf_s(wchar_t const *const _Buffer, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vswscanf_s_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2075 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" #line 2077 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwscanf_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2100 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snwscanf(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2122 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwscanf_s_l(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2143 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __inline int __cdecl _snwscanf_s(wchar_t const *const _Buffer, size_t const _BufferCount, wchar_t const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnwscanf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2163 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstdio.h" __pragma(pack(pop))#pragma warning(pop) #pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) typedef __int64 fpos_t;errno_t __cdecl _get_stream_buffer_pointers(FILE *_Stream, char ***_Base, char ***_Pointer, int **_Count);errno_t __cdecl clearerr_s(FILE *_Stream);errno_t __cdecl fopen_s(FILE **_Stream, char const *_FileName, char const *_Mode);size_t __cdecl fread_s(void *_Buffer, size_t _BufferSize, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);errno_t __cdecl freopen_s(FILE **_Stream, char const *_FileName, char const *_Mode, FILE *_OldStream);char *__cdecl gets_s(char *_Buffer, rsize_t _Size);errno_t __cdecl tmpfile_s(FILE **_Stream);errno_t __cdecl tmpnam_s(char *_Buffer, rsize_t _Size);#line 145 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" void __cdecl clearerr(FILE *_Stream);int __cdecl fclose(FILE *_Stream);int __cdecl _fcloseall(void);FILE *__cdecl _fdopen(int _FileHandle, char const *_Mode);int __cdecl feof(FILE *_Stream);int __cdecl ferror(FILE *_Stream);int __cdecl fflush(FILE *_Stream);int __cdecl fgetc(FILE *_Stream);int __cdecl _fgetchar(void);int __cdecl fgetpos(FILE *_Stream, fpos_t *_Position);char *__cdecl fgets(char *_Buffer, int _MaxCount, FILE *_Stream);int __cdecl _fileno(FILE *_Stream);int __cdecl _flushall(void);__declspec(deprecated("This function or variable may be unsafe. Consider using " "fopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) FILE *__cdecl fopen(char const *_FileName, char const *_Mode);int __cdecl fputc(int _Character, FILE *_Stream);int __cdecl _fputchar(int _Character);int __cdecl fputs(char const *_Buffer, FILE *_Stream);size_t __cdecl fread(void *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);__declspec(deprecated("This function or variable may be unsafe. Consider using " "freopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) FILE *__cdecl freopen(char const *_FileName, char const *_Mode, FILE *_Stream);FILE *__cdecl _fsopen(char const *_FileName, char const *_Mode, int _ShFlag);int __cdecl fsetpos(FILE *_Stream, fpos_t const *_Position);int __cdecl fseek(FILE *_Stream, long _Offset, int _Origin);int __cdecl _fseeki64(FILE *_Stream, __int64 _Offset, int _Origin);long __cdecl ftell(FILE *_Stream);__int64 __cdecl _ftelli64(FILE *_Stream);size_t __cdecl fwrite(void const *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);int __cdecl getc(FILE *_Stream);int __cdecl getchar(void);int __cdecl _getmaxstdio(void);int __cdecl _getw(FILE *_Stream);void __cdecl perror(char const *_ErrorMessage);int __cdecl _pclose(FILE *_Stream);FILE *__cdecl _popen(char const *_Command, char const *_Mode);#line 344 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl putc(int _Character, FILE *_Stream);int __cdecl putchar(int _Character);int __cdecl puts(char const *_Buffer);int __cdecl _putw(int _Word, FILE *_Stream);int __cdecl remove(char const *_FileName);int __cdecl rename(char const *_OldFileName, char const *_NewFileName);int __cdecl _unlink(char const *_FileName);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_unlink" ". See online help for details.")) int __cdecl unlink(char const *_FileName);#line 391 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" void __cdecl rewind(FILE *_Stream);int __cdecl _rmtmp(void);__declspec(deprecated("This function or variable may be unsafe. Consider using " "setvbuf" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) void __cdecl setbuf(FILE *_Stream, char *_Buffer);int __cdecl _setmaxstdio(int _Maximum);int __cdecl setvbuf(FILE *_Stream, char *_Buffer, int _Mode, size_t _Size);__declspec(allocator) char *__cdecl _tempnam(char const *_DirectoryName, char const *_FilePrefix);__declspec(deprecated("This function or variable may be unsafe. Consider using " "tmpfile_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) FILE *__cdecl tmpfile(void);__declspec(deprecated("This function or variable may be unsafe. Consider using " "tmpnam_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl tmpnam(char *_Buffer);int __cdecl ungetc(int _Character, FILE *_Stream);void __cdecl _lock_file(FILE *_Stream);void __cdecl _unlock_file(FILE *_Stream);int __cdecl _fclose_nolock(FILE *_Stream);int __cdecl _fflush_nolock(FILE *_Stream);int __cdecl _fgetc_nolock(FILE *_Stream);int __cdecl _fputc_nolock(int _Character, FILE *_Stream);size_t __cdecl _fread_nolock(void *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);size_t __cdecl _fread_nolock_s(void *_Buffer, size_t _BufferSize, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);int __cdecl _fseek_nolock(FILE *_Stream, long _Offset, int _Origin);int __cdecl _fseeki64_nolock(FILE *_Stream, __int64 _Offset, int _Origin);long __cdecl _ftell_nolock(FILE *_Stream);__int64 __cdecl _ftelli64_nolock(FILE *_Stream);size_t __cdecl _fwrite_nolock(void const *_Buffer, size_t _ElementSize, size_t _ElementCount, FILE *_Stream);int __cdecl _getc_nolock(FILE *_Stream);int __cdecl _putc_nolock(int _Character, FILE *_Stream);int __cdecl _ungetc_nolock(int _Character, FILE *_Stream);int *__cdecl __p__commode(void);#line 596 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vfprintf(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vfprintf_s(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vfprintf_p(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _ArgList);__inline int __cdecl _vfprintf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfprintf((*__local_stdio_printf_options()), _Stream, _Format, _Locale, _ArgList);} #line 648 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfprintf(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfprintf_l(_Stream, _Format,((void *) 0), _ArgList);} #line 662 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfprintf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfprintf_s((*__local_stdio_printf_options()), _Stream, _Format, _Locale, _ArgList);} #line 677 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfprintf_s(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfprintf_s_l(_Stream, _Format,((void *) 0), _ArgList);} #line 693 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 695 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfprintf_p_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfprintf_p((*__local_stdio_printf_options()), _Stream, _Format, _Locale, _ArgList);} #line 710 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfprintf_p(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfprintf_p_l(_Stream, _Format,((void *) 0), _ArgList);} #line 724 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfprintf_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);} #line 738 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vprintf(char const *const _Format, va_list _ArgList) { return _vfprintf_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);} #line 751 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_s_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfprintf_s_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);} #line 765 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vprintf_s(char const *const _Format, va_list _ArgList) { return _vfprintf_s_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);} #line 780 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 782 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_p_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfprintf_p_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);} #line 796 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vprintf_p(char const *const _Format, va_list _ArgList) { return _vfprintf_p_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);} #line 809 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fprintf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 828 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl fprintf(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 846 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl _set_printf_count_output(int _Value);int __cdecl _get_printf_count_output(void);__inline int __cdecl _fprintf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 871 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl fprintf_s(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 891 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 893 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fprintf_p_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 912 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fprintf_p(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 930 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 948 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl printf(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 965 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_s_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 983 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl printf_s(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_s_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1002 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1004 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_p_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l((__acrt_iob_func(1)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1022 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _printf_p(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfprintf_p_l((__acrt_iob_func(1)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1039 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vfscanf(unsigned __int64 _Options, FILE *_Stream, char const *_Format, _locale_t _Locale, va_list _Arglist);__inline int __cdecl _vfscanf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfscanf((*__local_stdio_scanf_options()), _Stream, _Format, _Locale, _ArgList);} #line 1070 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfscanf(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfscanf_l(_Stream, _Format,((void *) 0), _ArgList);} #line 1084 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vfscanf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vfscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Stream, _Format, _Locale, _ArgList);} #line 1101 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vfscanf_s(FILE *const _Stream, char const *const _Format, va_list _ArgList) { return _vfscanf_s_l(_Stream, _Format,((void *) 0), _ArgList);} #line 1118 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1120 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscanf_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfscanf_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);} #line 1134 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vscanf(char const *const _Format, va_list _ArgList) { return _vfscanf_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);} #line 1147 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscanf_s_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vfscanf_s_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);} #line 1161 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vscanf_s(char const *const _Format, va_list _ArgList) { return _vfscanf_s_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);} #line 1176 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1178 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_fscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _fscanf_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1197 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "fscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl fscanf(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1215 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _fscanf_s_l(FILE *const _Stream, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l(_Stream, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1234 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl fscanf_s(FILE *const _Stream, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l(_Stream, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1254 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1256 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_scanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _scanf_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1274 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "scanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl scanf(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1291 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scanf_s_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l((__acrt_iob_func(0)), _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1309 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl scanf_s(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vfscanf_s_l((__acrt_iob_func(0)), _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1328 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1330 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vsprintf(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vsprintf_s(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vsnprintf_s(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, size_t _MaxCount, char const *_Format, _locale_t _Locale, va_list _ArgList);int __cdecl __stdio_common_vsprintf_p(unsigned __int64 _Options, char *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsnprintf_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1399 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1415 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsnprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options())|(1ULL<< 1), _Buffer, _BufferCount, _Format,((void *) 0), _ArgList);return _Result< 0 ? -1 :_Result;} #line 1446 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _vsprintf_l(char *const _Buffer, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return _vsnprintf_l(_Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 1462 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "vsprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl vsprintf(char *const _Buffer, char const *const _Format, va_list _ArgList) { return _vsnprintf_l(_Buffer,(size_t) -1, _Format,((void *) 0), _ArgList);} #line 1477 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsprintf_s_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1498 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsprintf_s(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1516 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1526 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsprintf_p_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf_p((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1547 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsprintf_p(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1563 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_s_l(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsnprintf_s((*__local_stdio_printf_options()), _Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1585 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_s(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);} #line 1602 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsnprintf_s(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);} #line 1630 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1641 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1659 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf(char const *const _Format, va_list _ArgList) { return _vscprintf_l(_Format,((void *) 0), _ArgList);} #line 1672 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf_p_l(char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf_p((*__local_stdio_printf_options())|(1ULL<< 1),((void *) 0), 0, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1690 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vscprintf_p(char const *const _Format, va_list _ArgList) { return _vscprintf_p_l(_Format,((void *) 0), _ArgList);} #line 1703 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_c_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { int const _Result=__stdio_common_vsprintf((*__local_stdio_printf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);return _Result< 0 ? -1 :_Result;} #line 1723 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsnprintf_c(char *const _Buffer, size_t const _BufferCount, char const *const _Format, va_list _ArgList) { return _vsnprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);} #line 1739 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_sprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _sprintf_l(char *const _Buffer, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1761 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl sprintf(char *const _Buffer, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1782 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "sprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl sprintf(char *_Buffer, char const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "vsprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl vsprintf(char *_Buffer, char const *_Format, va_list _Args);__inline int __cdecl _sprintf_s_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1810 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl sprintf_s(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_s_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1832 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 1834 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _sprintf_p_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_p_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1862 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _sprintf_p(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsprintf_p_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1882 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snprintf_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1905 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl snprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=vsnprintf(_Buffer, _BufferCount, _Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1936 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf(_Buffer, _BufferCount, _Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1956 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl _snprintf(char *_Buffer, size_t _BufferCount, char const *_Format,...);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) int __cdecl _vsnprintf(char *_Buffer, size_t _BufferCount, char const *_Format, va_list _Args);__inline int __cdecl _snprintf_c_l(char *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 1986 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf_c(char *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_c_l(_Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2006 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf_s_l(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2028 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snprintf_s(char *const _Buffer, size_t const _BufferCount, size_t const _MaxCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2049 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2075 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_l(_Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2092 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf_p_l(char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_p_l(_Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2110 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _scprintf_p(char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vscprintf_p(_Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2127 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" int __cdecl __stdio_common_vsscanf(unsigned __int64 _Options, char const *_Buffer, size_t _BufferCount, char const *_Format, _locale_t _Locale, va_list _ArgList);__inline int __cdecl _vsscanf_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vsscanf((*__local_stdio_scanf_options()), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 2158 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl vsscanf(char const *const _Buffer, char const *const _Format, va_list _ArgList) { return _vsscanf_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 2172 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _vsscanf_s_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale, va_list _ArgList) { return __stdio_common_vsscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer,(size_t) -1, _Format, _Locale, _ArgList);} #line 2189 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(push) #pragma warning(disable:6530) __inline int __cdecl vsscanf_s(char const *const _Buffer, char const *const _Format, va_list _ArgList) { return _vsscanf_s_l(_Buffer, _Format,((void *) 0), _ArgList);} #line 2208 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(pop) #line 2219 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_sscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _sscanf_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsscanf_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2238 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "sscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl sscanf(char const *const _Buffer, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsscanf_l(_Buffer, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2256 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _sscanf_s_l(char const *const _Buffer, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=_vsscanf_s_l(_Buffer, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2275 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl sscanf_s(char const *const _Buffer, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=vsscanf_s(_Buffer, _Format, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2297 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #line 2299 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(push) #pragma warning(disable:6530) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snscanf_l(char const *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options()), _Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2326 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_snscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) __inline int __cdecl _snscanf(char const *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options()), _Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2349 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snscanf_s_l(char const *const _Buffer, size_t const _BufferCount, char const *const _Format, _locale_t const _Locale,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Locale))+((sizeof(_Locale)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format, _Locale, _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2374 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" __inline int __cdecl _snscanf_s(char const *const _Buffer, size_t const _BufferCount, char const *const _Format,...) { int _Result;va_list _ArgList;((void)(_ArgList=(va_list)(&(_Format))+((sizeof(_Format)+sizeof(int) - 1) &~(sizeof(int) - 1)))) ;_Result=__stdio_common_vsscanf((*__local_stdio_scanf_options())|(1ULL<< 0), _Buffer, _BufferCount, _Format,((void *) 0), _ArgList);((void)(_ArgList=(va_list) 0)) ;return _Result;} #line 2397 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h" #pragma warning(pop) __declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_tempnam" ". See online help for details.")) char *__cdecl tempnam(char const *_Directory, char const *_FilePrefix);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fcloseall" ". See online help for details.")) int __cdecl fcloseall(void);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fdopen" ". See online help for details.")) FILE *__cdecl fdopen(int _FileHandle, char const *_Format);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fgetchar" ". See online help for details.")) int __cdecl fgetchar(void);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fileno" ". See online help for details.")) int __cdecl fileno(FILE *_Stream);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_flushall" ". See online help for details.")) int __cdecl flushall(void);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_fputchar" ". See online help for details.")) int __cdecl fputchar(int _Ch);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_getw" ". See online help for details.")) int __cdecl getw(FILE *_Stream);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_putw" ". See online help for details.")) int __cdecl putw(int _Ch, FILE *_Stream);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_rmtmp" ". See online help for details.")) int __cdecl rmtmp(void);#line 2441 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\stdio.h"__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma once#pragma once#pragma once#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) int *__cdecl _errno(void);errno_t __cdecl _set_errno(int _Value);errno_t __cdecl _get_errno(int *_Value);unsigned long *__cdecl __doserrno(void);errno_t __cdecl _set_doserrno(unsigned long _Value);errno_t __cdecl _get_doserrno(unsigned long *_Value);__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4514 4820) __pragma(pack(push, 8)) void *__cdecl memchr(void const *_Buf, int _Val, size_t _MaxCount);int __cdecl memcmp(void const *_Buf1, void const *_Buf2, size_t _Size);void *__cdecl memcpy(void *_Dst, void const *_Src, size_t _Size);void *__cdecl memmove(void *_Dst, void const *_Src, size_t _Size);void *__cdecl memset(void *_Dst, int _Val, size_t _Size);char *__cdecl strchr(char const *_Str, int _Val);char *__cdecl strrchr(char const *_Str, int _Ch);char *__cdecl strstr(char const *_Str, char const *_SubStr);wchar_t *__cdecl wcschr(wchar_t const *_Str, wchar_t _Ch);wchar_t *__cdecl wcsrchr(wchar_t const *_Str, wchar_t _Ch);wchar_t *__cdecl wcsstr(wchar_t const *_Str, wchar_t const *_SubStr);__pragma(pack(pop))#pragma warning(pop) #pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) static __inline errno_t __cdecl memcpy_s(void *const _Destination, rsize_t const _DestinationSize, void const *const _Source, rsize_t const _SourceSize) { if(_SourceSize==0) { return 0;} { int _Expr_val=!!(_Destination !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;if(_Source==((void *) 0)||_DestinationSize< _SourceSize) { memset(_Destination, 0, _DestinationSize);{ int _Expr_val=!!(_Source !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;{ int _Expr_val=!!(_DestinationSize >=_SourceSize);if(!(_Expr_val)) {(*_errno())=34;_invalid_parameter_noinfo();return 34;} } ;return 22 ;} memcpy(_Destination, _Source, _SourceSize);return 0;} static __inline errno_t __cdecl memmove_s(void *const _Destination, rsize_t const _DestinationSize, void const *const _Source, rsize_t const _SourceSize) { if(_SourceSize==0) { return 0;} { int _Expr_val=!!(_Destination !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;{ int _Expr_val=!!(_Source !=((void *) 0));if(!(_Expr_val)) {(*_errno())=22;_invalid_parameter_noinfo();return 22;} } ;{ int _Expr_val=!!(_DestinationSize >=_SourceSize);if(!(_Expr_val)) {(*_errno())=34;_invalid_parameter_noinfo();return 34;} } ;memmove(_Destination, _Source, _SourceSize);return 0;}#pragma warning(pop) __pragma(pack(pop))#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) int __cdecl _memicmp(void const *_Buf1, void const *_Buf2, size_t _Size);int __cdecl _memicmp_l(void const *_Buf1, void const *_Buf2, size_t _Size, _locale_t _Locale);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_memccpy" ". See online help for details.")) void *__cdecl memccpy(void *_Dst, void const *_Src, int _Val, size_t _Size);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_memicmp" ". See online help for details.")) int __cdecl memicmp(void const *_Buf1, void const *_Buf2, size_t _Size);__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) errno_t __cdecl wcscat_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source);errno_t __cdecl wcscpy_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source);errno_t __cdecl wcsncat_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source, rsize_t _MaxCount);errno_t __cdecl wcsncpy_s(wchar_t *_Destination, rsize_t _SizeInWords, wchar_t const *_Source, rsize_t _MaxCount);wchar_t *__cdecl wcstok_s(wchar_t *_String, wchar_t const *_Delimiter, wchar_t **_Context);__declspec(allocator) wchar_t *__cdecl _wcsdup(wchar_t const *_String);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcscat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcscat(wchar_t *_Destination, wchar_t const *_Source);int __cdecl wcscmp(wchar_t const *_String1, wchar_t const *_String2);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcscpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcscpy(wchar_t *_Destination, wchar_t const *_Source);size_t __cdecl wcscspn(wchar_t const *_String, wchar_t const *_Control);size_t __cdecl wcslen(wchar_t const *_String);size_t __cdecl wcsnlen(wchar_t const *_Source, size_t _MaxCount);static __inline size_t __cdecl wcsnlen_s(wchar_t const *_Source, size_t _MaxCount) { return(_Source==0) ? 0 :wcsnlen(_Source, _MaxCount);}__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcsncat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcsncat(wchar_t *_Destination, wchar_t const *_Source, size_t _Count);int __cdecl wcsncmp(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcsncpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcsncpy(wchar_t *_Destination, wchar_t const *_Source, size_t _Count);wchar_t *__cdecl wcspbrk(wchar_t const *_String, wchar_t const *_Control);size_t __cdecl wcsspn(wchar_t const *_String, wchar_t const *_Control);__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcstok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl wcstok(wchar_t *_String, wchar_t const *_Delimiter, wchar_t **_Context);#line 237 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\corecrt_wstring.h" __declspec(deprecated("This function or variable may be unsafe. Consider using " "wcstok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) static __inline wchar_t *__cdecl _wcstok(wchar_t *const _String, wchar_t const *const _Delimiter) { return wcstok(_String, _Delimiter, 0);} __declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcserror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcserror(int _ErrorNumber);errno_t __cdecl _wcserror_s(wchar_t *_Buffer, size_t _SizeInWords, int _ErrorNumber);__declspec(deprecated("This function or variable may be unsafe. Consider using " "__wcserror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl __wcserror(wchar_t const *_String);errno_t __cdecl __wcserror_s(wchar_t *_Buffer, size_t _SizeInWords, wchar_t const *_ErrorMessage);int __cdecl _wcsicmp(wchar_t const *_String1, wchar_t const *_String2);int __cdecl _wcsicmp_l(wchar_t const *_String1, wchar_t const *_String2, _locale_t _Locale);int __cdecl _wcsnicmp(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);int __cdecl _wcsnicmp_l(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount, _locale_t _Locale);errno_t __cdecl _wcsnset_s(wchar_t *_Destination, size_t _SizeInWords, wchar_t _Value, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsnset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsnset(wchar_t *_String, wchar_t _Value, size_t _MaxCount);wchar_t *__cdecl _wcsrev(wchar_t *_String);errno_t __cdecl _wcsset_s(wchar_t *_Destination, size_t _SizeInWords, wchar_t _Value);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsset(wchar_t *_String, wchar_t _Value);errno_t __cdecl _wcslwr_s(wchar_t *_String, size_t _SizeInWords);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcslwr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcslwr(wchar_t *_String);errno_t __cdecl _wcslwr_s_l(wchar_t *_String, size_t _SizeInWords, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcslwr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcslwr_l(wchar_t *_String, _locale_t _Locale);errno_t __cdecl _wcsupr_s(wchar_t *_String, size_t _Size);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsupr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsupr(wchar_t *_String);errno_t __cdecl _wcsupr_s_l(wchar_t *_String, size_t _Size, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsupr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) wchar_t *__cdecl _wcsupr_l(wchar_t *_String, _locale_t _Locale);size_t __cdecl wcsxfrm(wchar_t *_Destination, wchar_t const *_Source, size_t _MaxCount);size_t __cdecl _wcsxfrm_l(wchar_t *_Destination, wchar_t const *_Source, size_t _MaxCount, _locale_t _Locale);int __cdecl wcscoll(wchar_t const *_String1, wchar_t const *_String2);int __cdecl _wcscoll_l(wchar_t const *_String1, wchar_t const *_String2, _locale_t _Locale);int __cdecl _wcsicoll(wchar_t const *_String1, wchar_t const *_String2);int __cdecl _wcsicoll_l(wchar_t const *_String1, wchar_t const *_String2, _locale_t _Locale);int __cdecl _wcsncoll(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);int __cdecl _wcsncoll_l(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount, _locale_t _Locale);int __cdecl _wcsnicoll(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);int __cdecl _wcsnicoll_l(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount, _locale_t _Locale);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsdup" ". See online help for details.")) wchar_t *__cdecl wcsdup(wchar_t const *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsicmp" ". See online help for details.")) int __cdecl wcsicmp(wchar_t const *_String1, wchar_t const *_String2);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsnicmp" ". See online help for details.")) int __cdecl wcsnicmp(wchar_t const *_String1, wchar_t const *_String2, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsnset" ". See online help for details.")) wchar_t *__cdecl wcsnset(wchar_t *_String, wchar_t _Value, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsrev" ". See online help for details.")) wchar_t *__cdecl wcsrev(wchar_t *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsset" ". See online help for details.")) wchar_t *__cdecl wcsset(wchar_t *_String, wchar_t _Value);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcslwr" ". See online help for details.")) wchar_t *__cdecl wcslwr(wchar_t *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsupr" ". See online help for details.")) wchar_t *__cdecl wcsupr(wchar_t *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_wcsicoll" ". See online help for details.")) int __cdecl wcsicoll(wchar_t const *_String1, wchar_t const *_String2);__pragma(pack(pop))#pragma warning(pop) #pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) __pragma(pack(push, 8)) errno_t __cdecl strcpy_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source);errno_t __cdecl strcat_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source);errno_t __cdecl strerror_s(char *_Buffer, size_t _SizeInBytes, int _ErrorNumber);errno_t __cdecl strncat_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source, rsize_t _MaxCount);errno_t __cdecl strncpy_s(char *_Destination, rsize_t _SizeInBytes, char const *_Source, rsize_t _MaxCount);char *__cdecl strtok_s(char *_String, char const *_Delimiter, char **_Context);void *__cdecl _memccpy(void *_Dst, void const *_Src, int _Val, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strcat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strcat(char *_Destination, char const *_Source);int __cdecl strcmp(char const *_Str1, char const *_Str2);int __cdecl _strcmpi(char const *_String1, char const *_String2);int __cdecl strcoll(char const *_String1, char const *_String2);int __cdecl _strcoll_l(char const *_String1, char const *_String2, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strcpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strcpy(char *_Destination, char const *_Source);size_t __cdecl strcspn(char const *_Str, char const *_Control);__declspec(allocator) char *__cdecl _strdup(char const *_Source);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strerror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strerror(char const *_ErrorMessage);errno_t __cdecl _strerror_s(char *_Buffer, size_t _SizeInBytes, char const *_ErrorMessage);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strerror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strerror(int _ErrorMessage);int __cdecl _stricmp(char const *_String1, char const *_String2);int __cdecl _stricoll(char const *_String1, char const *_String2);int __cdecl _stricoll_l(char const *_String1, char const *_String2, _locale_t _Locale);int __cdecl _stricmp_l(char const *_String1, char const *_String2, _locale_t _Locale);size_t __cdecl strlen(char const *_Str);errno_t __cdecl _strlwr_s(char *_String, size_t _Size);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strlwr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strlwr(char *_String);errno_t __cdecl _strlwr_s_l(char *_String, size_t _Size, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strlwr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strlwr_l(char *_String, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strncat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strncat(char *_Destination, char const *_Source, size_t _Count);int __cdecl strncmp(char const *_Str1, char const *_Str2, size_t _MaxCount);int __cdecl _strnicmp(char const *_String1, char const *_String2, size_t _MaxCount);int __cdecl _strnicmp_l(char const *_String1, char const *_String2, size_t _MaxCount, _locale_t _Locale);int __cdecl _strnicoll(char const *_String1, char const *_String2, size_t _MaxCount);int __cdecl _strnicoll_l(char const *_String1, char const *_String2, size_t _MaxCount, _locale_t _Locale);int __cdecl _strncoll(char const *_String1, char const *_String2, size_t _MaxCount);int __cdecl _strncoll_l(char const *_String1, char const *_String2, size_t _MaxCount, _locale_t _Locale);size_t __cdecl __strncnt(char const *_String, size_t _Count);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strncpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strncpy(char *_Destination, char const *_Source, size_t _Count);size_t __cdecl strnlen(char const *_String, size_t _MaxCount);static __inline size_t __cdecl strnlen_s(char const *_String, size_t _MaxCount) { return _String==0 ? 0 :strnlen(_String, _MaxCount);} errno_t __cdecl _strnset_s(char *_String, size_t _SizeInBytes, int _Value, size_t _MaxCount);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strnset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strnset(char *_Destination, int _Value, size_t _Count);char *__cdecl strpbrk(char const *_Str, char const *_Control);char *__cdecl _strrev(char *_Str);errno_t __cdecl _strset_s(char *_Destination, size_t _DestinationSize, int _Value);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strset(char *_Destination, int _Value);size_t __cdecl strspn(char const *_Str, char const *_Control);__declspec(deprecated("This function or variable may be unsafe. Consider using " "strtok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl strtok(char *_String, char const *_Delimiter);errno_t __cdecl _strupr_s(char *_String, size_t _Size);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strupr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strupr(char *_String);errno_t __cdecl _strupr_s_l(char *_String, size_t _Size, _locale_t _Locale);__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strupr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. " "See online help for details.")) char *__cdecl _strupr_l(char *_String, _locale_t _Locale);size_t __cdecl strxfrm(char *_Destination, char const *_Source, size_t _MaxCount);size_t __cdecl _strxfrm_l(char *_Destination, char const *_Source, size_t _MaxCount, _locale_t _Locale);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strdup" ". See online help for details.")) char *__cdecl strdup(char const *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strcmpi" ". See online help for details.")) int __cdecl strcmpi(char const *_String1, char const *_String2);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_stricmp" ". See online help for details.")) int __cdecl stricmp(char const *_String1, char const *_String2);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strlwr" ". See online help for details.")) char *__cdecl strlwr(char *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strnicmp" ". See online help for details.")) int __cdecl strnicmp(char const *_String1, char const *_String2, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strnset" ". See online help for details.")) char *__cdecl strnset(char *_String, int _Value, size_t _MaxCount);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strrev" ". See online help for details.")) char *__cdecl strrev(char *_String);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strset" ". See online help for details.")) char *__cdecl strset(char *_String, int _Value);__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C " "and C++ conformant name: " "_strupr" ". See online help for details.")) char *__cdecl strupr(char *_String);__pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4514 4820) __pragma(pack(push, 8)) __pragma(pack(pop))#pragma warning(pop) #pragma once#pragma warning(push)#pragma warning(disable:4324 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727) typedef unsigned short _ino_t;typedef _ino_t ino_t;#line 24 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\sys/types.h" typedef unsigned int _dev_t;typedef _dev_t dev_t;#line 36 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\sys/types.h" typedef long _off_t;typedef _off_t off_t;#line 48 "C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt\\sys/types.h"#pragma warning(pop) typedef char *sds;#pragma pack(push, 1) struct sdshdr5 { unsigned char flags;char buf[];};struct sdshdr8 { uint8_t len;uint8_t alloc;unsigned char flags;char buf[];};struct sdshdr16 { uint16_t len;uint16_t alloc;unsigned char flags;char buf[];};struct sdshdr32 { uint32_t len;uint32_t alloc;unsigned char flags;char buf[];};struct sdshdr64 { uint64_t len;uint64_t alloc;unsigned char flags;char buf[];};#pragma pack(pop) static inline size_t sdslen(const sds s) { unsigned char flags=s[-1];switch(flags &7) { case 0 :return((flags) >> 3) ;case 1 :return((struct sdshdr8 *)((s) -(sizeof(struct sdshdr8)))) ->len;case 2 :return((struct sdshdr16 *)((s) -(sizeof(struct sdshdr16)))) ->len;case 3 :return((struct sdshdr32 *)((s) -(sizeof(struct sdshdr32)))) ->len;case 4 :return((struct sdshdr64 *)((s) -(sizeof(struct sdshdr64)))) ->len;} return 0;}static inline size_t sdsavail(const sds s) { unsigned char flags=s[-1];switch(flags &7) { case 0 :{ return 0;} case 1 :{ struct sdshdr8 *sh=(void *)((s) -(sizeof(struct sdshdr8)));;return sh->alloc - sh->len;} case 2 :{ struct sdshdr16 *sh=(void *)((s) -(sizeof(struct sdshdr16)));;return sh->alloc - sh->len;} case 3 :{ struct sdshdr32 *sh=(void *)((s) -(sizeof(struct sdshdr32)));;return sh->alloc - sh->len;} case 4 :{ struct sdshdr64 *sh=(void *)((s) -(sizeof(struct sdshdr64)));;return sh->alloc - sh->len;} } return 0;}static inline void sdssetlen(sds s, size_t newlen) { unsigned char flags=s[-1];switch(flags &7) { case 0 :{ unsigned char *fp=((unsigned char *) s) - 1;*fp=0|(newlen<< 3);} break;case 1 :((struct sdshdr8 *)((s) -(sizeof(struct sdshdr8)))) ->len=(uint8_t) newlen;break;case 2 :((struct sdshdr16 *)((s) -(sizeof(struct sdshdr16)))) ->len=(uint16_t) newlen;break;case 3 :((struct sdshdr32 *)((s) -(sizeof(struct sdshdr32)))) -> len
Definition: CPAL.d:15583
#define font
Definition: aptex-macros.h:175
#define count(a)
Definition: aptex-macros.h:781
#define name
#define free(a)
Definition: decNumber.cpp:310
int v
Definition: dviconv.c:10
#define info
Definition: dviinfo.c:42
struct rect data
Definition: dvipdfm.c:64
void replace(char *, char *)
Definition: dvispc.c:2100
static void copy(GlyphCachePtr *root)
Definition: gcache.c:378
#define s
Definition: afcover.h:80
#define memcpy(d, s, n)
Definition: gsftopk.c:64
int unicode
Definition: hbf2gf.c:267
double y_scale
Definition: hbf2gf.c:275
#define likely(x)
Definition: jbig2arith.cc:115
#define unlikely(x)
Definition: jbig2arith.cc:116
small capitals from c petite p scientific i
Definition: afcover.h:80
sizeof(AF_ModuleRec)
FT_Face face
Definition: cffdrivr.c:659
FT_UInt left_glyph
Definition: ttdriver.c:203
FT_UInt FT_UInt right_glyph
Definition: ttdriver.c:204
kerning y
Definition: ttdriver.c:212
voidp calloc()
static dpx_stack coords
Definition: specials.c:313
static int ret
Definition: convert.c:72
char * closure
Definition: font.h:85
#define length(c)
Definition: ctangleboot.c:65
static luaL_Reg func[]
Definition: except.c:32
float x
Definition: cordic.py:15
static int size
Definition: ppmlabel.c:24
bstring c int memset(void *s, int c, int length)
void(* hb_destroy_func_t)(void *user_data)
Definition: hb-common.h:690
uint32_t hb_codepoint_t
Definition: hb-common.h:106
int32_t hb_position_t
Definition: hb-common.h:115
int hb_bool_t
Definition: hb-common.h:97
hb_direction_t
Definition: hb-common.h:193
#define HB_EXTERN
Definition: hb-common.h:37
hb_bool_t(* hb_font_get_glyph_func_t)(hb_font_t *font, void *font_data, hb_codepoint_t unicode, hb_codepoint_t variation_selector, hb_codepoint_t *glyph, void *user_data)
Definition: hb-deprecated.h:61
void hb_face_make_immutable(hb_face_t *face)
Definition: hb-face.cc:349
void hb_face_destroy(hb_face_t *face)
Definition: hb-face.cc:276
hb_face_t * hb_face_get_empty()
Definition: hb-face.cc:243
const hb_face_t _hb_Null_hb_face_t
Definition: hb-face.cc:83
unsigned int hb_face_get_upem(const hb_face_t *face)
Definition: hb-face.cc:484
hb_face_t * hb_face_reference(hb_face_t *face)
Definition: hb-face.cc:260
void * hb_font_funcs_get_user_data(hb_font_funcs_t *ffuncs, hb_user_data_key_t *key)
Definition: hb-font.cc:663
hb_position_t hb_font_get_glyph_v_kerning(hb_font_t *font, hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph)
Definition: hb-font.cc:1065
hb_font_t * hb_font_create(hb_face_t *face)
Definition: hb-font.cc:1523
void hb_font_get_glyph_origin_for_direction(hb_font_t *font, hb_codepoint_t glyph, hb_direction_t direction, hb_position_t *x, hb_position_t *y)
Definition: hb-font.cc:1261
void hb_font_get_extents_for_direction(hb_font_t *font, hb_direction_t direction, hb_font_extents_t *extents)
Definition: hb-font.cc:1183
hb_font_t * hb_font_reference(hb_font_t *font)
Definition: hb-font.cc:1627
void hb_font_set_var_coords_normalized(hb_font_t *font, const int *coords, unsigned int coords_length)
Definition: hb-font.cc:2155
hb_font_funcs_t * hb_font_funcs_reference(hb_font_funcs_t *ffuncs)
Definition: hb-font.cc:598
hb_position_t hb_font_get_glyph_h_advance(hb_font_t *font, hb_codepoint_t glyph)
Definition: hb-font.cc:902
hb_bool_t hb_font_get_v_extents(hb_font_t *font, hb_font_extents_t *extents)
Definition: hb-font.cc:783
void hb_font_get_glyph_v_advances(hb_font_t *font, unsigned int count, const hb_codepoint_t *first_glyph, unsigned glyph_stride, hb_position_t *first_advance, unsigned advance_stride)
Definition: hb-font.cc:966
void * hb_font_get_user_data(hb_font_t *font, hb_user_data_key_t *key)
Definition: hb-font.cc:1699
void hb_font_get_glyph_h_advances(hb_font_t *font, unsigned int count, const hb_codepoint_t *first_glyph, unsigned glyph_stride, hb_position_t *first_advance, unsigned advance_stride)
Definition: hb-font.cc:942
hb_font_t * hb_font_get_parent(hb_font_t *font)
Definition: hb-font.cc:1778
void hb_font_set_variations(hb_font_t *font, const hb_variation_t *variations, unsigned int variations_length)
Definition: hb-font.cc:2036
hb_bool_t hb_font_glyph_from_string(hb_font_t *font, const char *s, int len, hb_codepoint_t *glyph)
Definition: hb-font.cc:1452
void hb_font_glyph_to_string(hb_font_t *font, hb_codepoint_t glyph, char *s, unsigned int size)
Definition: hb-font.cc:1427
hb_font_funcs_t * hb_font_funcs_get_empty()
Definition: hb-font.cc:582
void hb_font_funcs_destroy(hb_font_funcs_t *ffuncs)
Definition: hb-font.cc:614
void hb_font_get_scale(hb_font_t *font, int *x_scale, int *y_scale)
Definition: hb-font.cc:1932
hb_bool_t hb_font_get_nominal_glyph(hb_font_t *font, hb_codepoint_t unicode, hb_codepoint_t *glyph)
Definition: hb-font.cc:835
const int * hb_font_get_var_coords_normalized(hb_font_t *font, unsigned int *length)
Definition: hb-font.cc:2203
void hb_font_set_funcs(hb_font_t *font, hb_font_funcs_t *klass, void *font_data, hb_destroy_func_t destroy)
Definition: hb-font.cc:1841
void hb_font_make_immutable(hb_font_t *font)
Definition: hb-font.cc:1714
hb_position_t hb_font_get_glyph_h_kerning(hb_font_t *font, hb_codepoint_t left_glyph, hb_codepoint_t right_glyph)
Definition: hb-font.cc:1039
hb_trampoline_t< hb_font_get_glyph_func_t > hb_font_get_glyph_trampoline_t
Definition: hb-font.cc:2292
hb_bool_t hb_font_get_glyph_v_origin(hb_font_t *font, hb_codepoint_t glyph, hb_position_t *x, hb_position_t *y)
Definition: hb-font.cc:1014
hb_font_t * hb_font_get_empty()
Definition: hb-font.cc:1611
hb_bool_t hb_font_get_glyph_name(hb_font_t *font, hb_codepoint_t glyph, char *name, unsigned int size)
Definition: hb-font.cc:1133
void hb_font_get_glyph_advance_for_direction(hb_font_t *font, hb_codepoint_t glyph, hb_direction_t direction, hb_position_t *x, hb_position_t *y)
Definition: hb-font.cc:1206
void hb_font_set_ppem(hb_font_t *font, unsigned int x_ppem, unsigned int y_ppem)
Definition: hb-font.cc:1951
void hb_font_set_parent(hb_font_t *font, hb_font_t *parent)
Definition: hb-font.cc:1751
const hb_font_t _hb_Null_hb_font_t
Definition: hb-font.cc:1465
void hb_font_funcs_set_nominal_glyph_func(hb_font_funcs_t *ffuncs, hb_font_get_nominal_glyph_func_t func, void *user_data, hb_destroy_func_t destroy)
Definition: hb-font.cc:733
void hb_font_subtract_glyph_origin_for_direction(hb_font_t *font, hb_codepoint_t glyph, hb_direction_t direction, hb_position_t *x, hb_position_t *y)
Definition: hb-font.cc:1317
void hb_font_set_scale(hb_font_t *font, int x_scale, int y_scale)
Definition: hb-font.cc:1909
hb_bool_t hb_font_get_glyph_from_name(hb_font_t *font, const char *name, int len, hb_codepoint_t *glyph)
Definition: hb-font.cc:1157
hb_bool_t hb_font_get_glyph(hb_font_t *font, hb_codepoint_t unicode, hb_codepoint_t variation_selector, hb_codepoint_t *glyph)
Definition: hb-font.cc:807
void hb_font_set_var_named_instance(hb_font_t *font, unsigned instance_index)
Definition: hb-font.cc:2124
void hb_font_add_glyph_origin_for_direction(hb_font_t *font, hb_codepoint_t glyph, hb_direction_t direction, hb_position_t *x, hb_position_t *y)
Definition: hb-font.cc:1289
unsigned int hb_font_get_nominal_glyphs(hb_font_t *font, unsigned int count, const hb_codepoint_t *first_unicode, unsigned int unicode_stride, hb_codepoint_t *first_glyph, unsigned int glyph_stride)
Definition: hb-font.cc:853
hb_font_t * hb_font_create_sub_font(hb_font_t *parent)
Definition: hb-font.cc:1561
void hb_font_set_ptem(hb_font_t *font, float ptem)
Definition: hb-font.cc:1994
void hb_font_funcs_set_variation_glyph_func(hb_font_funcs_t *ffuncs, hb_font_get_variation_glyph_func_t func, void *user_data, hb_destroy_func_t destroy)
Definition: hb-font.cc:733
hb_bool_t hb_font_funcs_is_immutable(hb_font_funcs_t *ffuncs)
Definition: hb-font.cc:698
hb_bool_t hb_font_get_glyph_extents_for_origin(hb_font_t *font, hb_codepoint_t glyph, hb_direction_t direction, hb_glyph_extents_t *extents)
Definition: hb-font.cc:1372
hb_font_funcs_t * hb_font_funcs_create()
Definition: hb-font.cc:560
void hb_font_set_var_coords_design(hb_font_t *font, const float *coords, unsigned int coords_length)
Definition: hb-font.cc:2090
void hb_font_funcs_make_immutable(hb_font_funcs_t *ffuncs)
Definition: hb-font.cc:679
hb_bool_t hb_font_get_variation_glyph(hb_font_t *font, hb_codepoint_t unicode, hb_codepoint_t variation_selector, hb_codepoint_t *glyph)
Definition: hb-font.cc:881
hb_bool_t hb_font_funcs_set_user_data(hb_font_funcs_t *ffuncs, hb_user_data_key_t *key, void *data, hb_destroy_func_t destroy, hb_bool_t replace)
Definition: hb-font.cc:641
void hb_font_get_ppem(hb_font_t *font, unsigned int *x_ppem, unsigned int *y_ppem)
Definition: hb-font.cc:1973
hb_bool_t hb_font_get_glyph_extents(hb_font_t *font, hb_codepoint_t glyph, hb_glyph_extents_t *extents)
Definition: hb-font.cc:1087
void hb_font_set_funcs_data(hb_font_t *font, void *font_data, hb_destroy_func_t destroy)
Definition: hb-font.cc:1878
void hb_font_get_glyph_kerning_for_direction(hb_font_t *font, hb_codepoint_t first_glyph, hb_codepoint_t second_glyph, hb_direction_t direction, hb_position_t *x, hb_position_t *y)
Definition: hb-font.cc:1343
hb_bool_t hb_font_get_glyph_h_origin(hb_font_t *font, hb_codepoint_t glyph, hb_position_t *x, hb_position_t *y)
Definition: hb-font.cc:991
hb_bool_t hb_font_get_glyph_contour_point(hb_font_t *font, hb_codepoint_t glyph, unsigned int point_index, hb_position_t *x, hb_position_t *y)
Definition: hb-font.cc:1110
hb_bool_t hb_font_set_user_data(hb_font_t *font, hb_user_data_key_t *key, void *data, hb_destroy_func_t destroy, hb_bool_t replace)
Definition: hb-font.cc:1677
hb_face_t * hb_font_get_face(hb_font_t *font)
Definition: hb-font.cc:1822
void hb_font_get_glyph_advances_for_direction(hb_font_t *font, hb_direction_t direction, unsigned int count, const hb_codepoint_t *first_glyph, unsigned glyph_stride, hb_position_t *first_advance, unsigned advance_stride)
Definition: hb-font.cc:1233
hb_bool_t hb_font_get_glyph_contour_point_for_origin(hb_font_t *font, hb_codepoint_t glyph, unsigned int point_index, hb_direction_t direction, hb_position_t *x, hb_position_t *y)
Definition: hb-font.cc:1401
void hb_font_destroy(hb_font_t *font)
Definition: hb-font.cc:1643
const hb_font_funcs_t _hb_Null_hb_font_funcs_t
Definition: hb-font.cc:504
hb_bool_t hb_font_is_immutable(hb_font_t *font)
Definition: hb-font.cc:1736
hb_position_t hb_font_get_glyph_v_advance(hb_font_t *font, hb_codepoint_t glyph)
Definition: hb-font.cc:921
float hb_font_get_ptem(hb_font_t *font)
Definition: hb-font.cc:2015
void hb_font_funcs_set_glyph_func(hb_font_funcs_t *ffuncs, hb_font_get_glyph_func_t func, void *user_data, hb_destroy_func_t destroy)
Definition: hb-font.cc:2331
hb_bool_t hb_font_get_h_extents(hb_font_t *font, hb_font_extents_t *extents)
Definition: hb-font.cc:764
void hb_font_set_face(hb_font_t *font, hb_face_t *face)
Definition: hb-font.cc:1793
#define HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
Definition: hb-font.hh:42
#define Null(Type)
Definition: hb-null.hh:94
#define DEFINE_NULL_INSTANCE(Type)
Definition: hb-null.hh:121
static void * hb_object_get_user_data(Type *obj, hb_user_data_key_t *key)
Definition: hb-object.hh:329
#define HB_OBJECT_HEADER_STATIC
Definition: hb-object.hh:203
static bool hb_object_destroy(Type *obj)
Definition: hb-object.hh:274
static bool hb_object_is_immutable(const Type *obj)
Definition: hb-object.hh:254
static void hb_object_make_immutable(const Type *obj)
Definition: hb-object.hh:259
static Type * hb_object_reference(Type *obj)
Definition: hb-object.hh:264
static bool hb_object_set_user_data(Type *obj, hb_user_data_key_t *key, void *data, hb_destroy_func_t destroy, hb_bool_t replace)
Definition: hb-object.hh:299
void hb_ot_font_set_funcs(hb_font_t *font)
Definition: hb-ot-font.cc:316
hb_bool_t hb_ot_var_find_axis_info(hb_face_t *face, hb_tag_t axis_tag, hb_ot_var_axis_info_t *axis_info)
Definition: hb-ot-var.cc:170
unsigned int hb_ot_var_get_axis_count(hb_face_t *face)
Definition: hb-ot-var.cc:80
unsigned int hb_ot_var_named_instance_get_design_coords(hb_face_t *face, unsigned int instance_index, unsigned int *coords_length, float *coords)
Definition: hb-ot-var.cc:252
void hb_ot_var_normalize_coords(hb_face_t *face, unsigned int coords_length, const float *design_coords, int *normalized_coords)
Definition: hb-ot-var.cc:312
#define HB_UNUSED
Definition: hb.hh:260
#define parent(a, t)
Definition: interp.c:105
static void trampoline_destroy(void *user_data)
Definition: hb-font.cc:2280
static hb_bool_t hb_font_get_glyph_contour_point_nil(hb_font_t *font, void *font_data, hb_codepoint_t glyph, unsigned int point_index, hb_position_t *x, hb_position_t *y, void *user_data)
Definition: hb-font.cc:431
static void trampoline_reference(hb_trampoline_closure_t *closure)
Definition: hb-font.cc:2274
static hb_bool_t hb_font_get_nominal_glyph_trampoline(hb_font_t *font, void *font_data, hb_codepoint_t unicode, hb_codepoint_t *glyph, void *user_data)
Definition: hb-font.cc:2295
static hb_bool_t hb_font_get_nominal_glyph_default(hb_font_t *font, void *font_data, hb_codepoint_t unicode, hb_codepoint_t *glyph, void *user_data)
Definition: hb-font.cc:129
static hb_bool_t hb_font_get_font_h_extents_default(hb_font_t *font, void *font_data, hb_font_extents_t *extents, void *user_data)
Definition: hb-font.cc:78
static hb_bool_t hb_font_get_glyph_v_origin_default(hb_font_t *font, void *font_data, hb_codepoint_t glyph, hb_position_t *x, hb_position_t *y, void *user_data)
Definition: hb-font.cc:349
static void hb_font_get_glyph_h_advances_default(hb_font_t *font, void *font_data, unsigned int count, const hb_codepoint_t *first_glyph, unsigned int glyph_stride, hb_position_t *first_advance, unsigned int advance_stride, void *user_data)
Definition: hb-font.cc:248
static hb_position_t hb_font_get_glyph_h_kerning_default(hb_font_t *font, void *font_data, hb_codepoint_t left_glyph, hb_codepoint_t right_glyph, void *user_data)
Definition: hb-font.cc:373
static hb_position_t hb_font_get_glyph_h_advance_nil(hb_font_t *font, void *font_data, hb_codepoint_t glyph, void *user_data)
Definition: hb-font.cc:197
static hb_position_t hb_font_get_glyph_h_advance_default(hb_font_t *font, void *font_data, hb_codepoint_t glyph, void *user_data)
Definition: hb-font.cc:206
static hb_bool_t hb_font_get_glyph_from_name_nil(hb_font_t *font, void *font_data, const char *name, int len, hb_codepoint_t *glyph, void *user_data)
Definition: hb-font.cc:482
static hb_bool_t hb_font_get_glyph_name_default(hb_font_t *font, void *font_data, hb_codepoint_t glyph, char *name, unsigned int size, void *user_data)
Definition: hb-font.cc:471
static hb_bool_t hb_font_get_font_v_extents_nil(hb_font_t *font, void *font_data, hb_font_extents_t *extents, void *user_data)
Definition: hb-font.cc:93
static hb_bool_t hb_font_get_variation_glyph_trampoline(hb_font_t *font, void *font_data, hb_codepoint_t unicode, hb_codepoint_t variation_selector, hb_codepoint_t *glyph, void *user_data)
Definition: hb-font.cc:2306
static hb_position_t hb_font_get_glyph_v_advance_nil(hb_font_t *font, void *font_data, hb_codepoint_t glyph, void *user_data)
Definition: hb-font.cc:221
static const hb_font_funcs_t _hb_font_funcs_default
Definition: hb-font.cc:527
static hb_bool_t hb_font_get_nominal_glyph_nil(hb_font_t *font, void *font_data, hb_codepoint_t unicode, hb_codepoint_t *glyph, void *user_data)
Definition: hb-font.cc:118
static hb_position_t hb_font_get_glyph_v_kerning_nil(hb_font_t *font, void *font_data, hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph, void *user_data)
Definition: hb-font.cc:384
static hb_trampoline_t< FuncType > * trampoline_create(FuncType func, void *user_data, hb_destroy_func_t destroy)
Definition: hb-font.cc:2254
static hb_bool_t hb_font_get_glyph_v_origin_nil(hb_font_t *font, void *font_data, hb_codepoint_t glyph, hb_position_t *x, hb_position_t *y, void *user_data)
Definition: hb-font.cc:337
static hb_bool_t hb_font_get_glyph_h_origin_nil(hb_font_t *font, void *font_data, hb_codepoint_t glyph, hb_position_t *x, hb_position_t *y, void *user_data)
Definition: hb-font.cc:311
static hb_bool_t hb_font_get_glyph_contour_point_default(hb_font_t *font, void *font_data, hb_codepoint_t glyph, unsigned int point_index, hb_position_t *x, hb_position_t *y, void *user_data)
Definition: hb-font.cc:444
static hb_position_t hb_font_get_glyph_h_kerning_nil(hb_font_t *font, void *font_data, hb_codepoint_t left_glyph, hb_codepoint_t right_glyph, void *user_data)
Definition: hb-font.cc:363
static hb_bool_t hb_font_get_variation_glyph_nil(hb_font_t *font, void *font_data, hb_codepoint_t unicode, hb_codepoint_t variation_selector, hb_codepoint_t *glyph, void *user_data)
Definition: hb-font.cc:173
static void _hb_font_adopt_var_coords(hb_font_t *font, int *coords, float *design_coords, unsigned int coords_length)
Definition: hb-font.cc:1536
static hb_bool_t hb_font_get_glyph_name_nil(hb_font_t *font, void *font_data, hb_codepoint_t glyph, char *name, unsigned int size, void *user_data)
Definition: hb-font.cc:459
static hb_position_t hb_font_get_glyph_v_kerning_default(hb_font_t *font, void *font_data, hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph, void *user_data)
Definition: hb-font.cc:394
static hb_bool_t hb_font_get_font_h_extents_nil(hb_font_t *font, void *font_data, hb_font_extents_t *extents, void *user_data)
Definition: hb-font.cc:68
static hb_bool_t hb_font_get_glyph_extents_nil(hb_font_t *font, void *font_data, hb_codepoint_t glyph, hb_glyph_extents_t *extents, void *user_data)
Definition: hb-font.cc:405
static hb_bool_t hb_font_get_variation_glyph_default(hb_font_t *font, void *font_data, hb_codepoint_t unicode, hb_codepoint_t variation_selector, hb_codepoint_t *glyph, void *user_data)
Definition: hb-font.cc:185
static unsigned int hb_font_get_nominal_glyphs_default(hb_font_t *font, void *font_data, unsigned int count, const hb_codepoint_t *first_unicode, unsigned int unicode_stride, hb_codepoint_t *first_glyph, unsigned int glyph_stride, void *user_data)
Definition: hb-font.cc:145
static hb_bool_t hb_font_get_font_v_extents_default(hb_font_t *font, void *font_data, hb_font_extents_t *extents, void *user_data)
Definition: hb-font.cc:103
static hb_bool_t hb_font_get_glyph_h_origin_default(hb_font_t *font, void *font_data, hb_codepoint_t glyph, hb_position_t *x, hb_position_t *y, void *user_data)
Definition: hb-font.cc:323
static void hb_font_get_glyph_v_advances_default(hb_font_t *font, void *font_data, unsigned int count, const hb_codepoint_t *first_glyph, unsigned int glyph_stride, hb_position_t *first_advance, unsigned int advance_stride, void *user_data)
Definition: hb-font.cc:280
static hb_bool_t hb_font_get_glyph_extents_default(hb_font_t *font, void *font_data, hb_codepoint_t glyph, hb_glyph_extents_t *extents, void *user_data)
Definition: hb-font.cc:416
static hb_position_t hb_font_get_glyph_v_advance_default(hb_font_t *font, void *font_data, hb_codepoint_t glyph, void *user_data)
Definition: hb-font.cc:231
static hb_bool_t hb_font_get_glyph_from_name_default(hb_font_t *font, void *font_data, const char *name, int len, hb_codepoint_t *glyph, void *user_data)
Definition: hb-font.cc:494
static hb_font_t * _hb_font_create(hb_face_t *face)
Definition: hb-font.cc:1492
#define direction(p, c)
Definition: sh12.c:109
int normalize_axis_value(unsigned int axis_index, float v) const
Definition: pbmfont.h:11
Definition: pbmfont.h:4
union hb_font_funcs_t::get_t get
bool has_func(unsigned int i)
Definition: hb-font.cc:743
bool has_func_set(unsigned int i)
Definition: hb-font.cc:737
hb_font_t * parent
Definition: hb-font.hh:107
hb_font_funcs_t * klass
Definition: hb-font.hh:125
hb_destroy_func_t destroy
Definition: hb-font.cc:2241
unsigned int ref_count
Definition: hb-font.cc:2242
FuncType func
Definition: hb-font.cc:2249
hb_trampoline_closure_t closure
Definition: hb-font.cc:2248
Definition: ttf.h:53
#define key
Definition: tex2xindy.c:753
void(*)() array(name)+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1]
Definition: hb-font.hh:86