summaryrefslogtreecommitdiff
path: root/Build/source/texk/kpathsea/types.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/kpathsea/types.h')
-rw-r--r--Build/source/texk/kpathsea/types.h343
1 files changed, 343 insertions, 0 deletions
diff --git a/Build/source/texk/kpathsea/types.h b/Build/source/texk/kpathsea/types.h
new file mode 100644
index 00000000000..f62906dec0b
--- /dev/null
+++ b/Build/source/texk/kpathsea/types.h
@@ -0,0 +1,343 @@
+/* types.h: general types for kpathsea.
+
+ Copyright 1993, 1995, 1996, 2005, 2008-2014, 2016, 2019 Karl Berry.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this library; if not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef KPATHSEA_TYPES_H
+#define KPATHSEA_TYPES_H
+
+/* Our string, boolean, etc. */
+#include <kpathsea/simpletypes.h>
+
+/* Required forever for any normal build, since we will never want to
+ remove the original interface. But to check that a program
+ only uses the new-style declarations, that is, is thread-safe,
+ could be useful to undefine. */
+#define KPSE_COMPAT_API 1
+
+#include <stdio.h> /* for FILE* */
+
+/* Declare int64_t and uint64_t, and define PRId64 etc. */
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#if (!defined __cplusplus || defined __STDC_FORMAT_MACROS) && !defined PRId64
+# if SIZEOF_LONG == 8
+# define __PRI64_PREFIX "l"
+# else
+# define __PRI64_PREFIX "ll"
+# endif
+# define PRId64 __PRI64_PREFIX "d"
+# define PRIi64 __PRI64_PREFIX "i"
+# define PRIo64 __PRI64_PREFIX "o"
+# define PRIu64 __PRI64_PREFIX "u"
+# define PRIx64 __PRI64_PREFIX "x"
+# define PRIX64 __PRI64_PREFIX "X"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* function pointer prototype definitions for recorder */
+typedef void (*p_record_input) (const_string);
+typedef void (*p_record_output) (const_string);
+
+#ifdef __cplusplus
+}
+#endif
+
+/* the cache structure from elt-dirs.c */
+#include <kpathsea/str-llist.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct
+{
+ const_string key;
+ str_llist_type *value;
+} cache_entry;
+
+/* from variable.c */
+typedef struct {
+ const_string var;
+ boolean expanding;
+} expansion_type;
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#include <kpathsea/hash.h>
+#include <kpathsea/str-list.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* from old tex-file.h */
+
+/* We put the glyphs first so we don't waste space in an array in
+ tex-glyph.c. Accompany a new format here with appropriate changes in
+ tex-file.c and kpsewhich.c (the suffix variable). */
+typedef enum
+{
+ kpse_gf_format,
+ kpse_pk_format,
+ kpse_any_glyph_format, /* ``any'' meaning gf or pk */
+ kpse_tfm_format,
+ kpse_afm_format,
+ kpse_base_format,
+ kpse_bib_format,
+ kpse_bst_format,
+ kpse_cnf_format,
+ kpse_db_format,
+ kpse_fmt_format,
+ kpse_fontmap_format,
+ kpse_mem_format,
+ kpse_mf_format,
+ kpse_mfpool_format,
+ kpse_mft_format,
+ kpse_mp_format,
+ kpse_mppool_format,
+ kpse_mpsupport_format,
+ kpse_ocp_format,
+ kpse_ofm_format,
+ kpse_opl_format,
+ kpse_otp_format,
+ kpse_ovf_format,
+ kpse_ovp_format,
+ kpse_pict_format,
+ kpse_tex_format,
+ kpse_texdoc_format,
+ kpse_texpool_format,
+ kpse_texsource_format,
+ kpse_tex_ps_header_format,
+ kpse_troff_font_format,
+ kpse_type1_format,
+ kpse_vf_format,
+ kpse_dvips_config_format,
+ kpse_ist_format,
+ kpse_truetype_format,
+ kpse_type42_format,
+ kpse_web2c_format,
+ kpse_program_text_format,
+ kpse_program_binary_format,
+ kpse_miscfonts_format,
+ kpse_web_format,
+ kpse_cweb_format,
+ kpse_enc_format,
+ kpse_cmap_format,
+ kpse_sfd_format,
+ kpse_opentype_format,
+ kpse_pdftex_config_format,
+ kpse_lig_format,
+ kpse_texmfscripts_format,
+ kpse_lua_format,
+ kpse_fea_format,
+ kpse_cid_format,
+ kpse_mlbib_format,
+ kpse_mlbst_format,
+ kpse_clua_format,
+ kpse_ris_format,
+ kpse_bltxml_format,
+ kpse_last_format /* one past last index */
+} kpse_file_format_type;
+
+
+/* Perhaps we could use this for path values themselves; for now, we use
+ it only for the program_enabled_p value. */
+typedef enum
+{
+ kpse_src_implicit, /* C initialization to zero */
+ kpse_src_compile, /* configure/compile-time default */
+ kpse_src_texmf_cnf, /* texmf.cnf, the kpathsea config file */
+ kpse_src_client_cnf, /* application config file, e.g., config.ps */
+ kpse_src_env, /* environment variable */
+ kpse_src_x, /* X Window System resource */
+ kpse_src_cmdline /* command-line option */
+} kpse_src_type;
+
+
+/* For each file format, we record the following information. The main
+ thing that is not part of this structure is the environment variable
+ lists. They are used directly in tex-file.c. We could incorporate
+ them here, but it would complicate the code a bit. We could also do
+ it via variable expansion, but not now, maybe not ever:
+ ${PKFONTS-${TEXFONTS-/usr/local/lib/texmf/fonts//}}. */
+
+typedef struct
+{
+ const_string type; /* Human-readable description. */
+ string path; /* The search path to use. */
+ const_string raw_path; /* Pre-$~ (but post-default) expansion. */
+ const_string path_source; /* Where the path started from. */
+ const_string override_path; /* From client environment variable. */
+ const_string client_path; /* E.g., from dvips's config.ps. */
+ const_string cnf_path; /* From texmf.cnf. */
+ const_string default_path; /* If all else fails. */
+ const_string *suffix; /* For kpse_find_file to check for/append. */
+ const_string *alt_suffix; /* More suffixes to check for. */
+ boolean suffix_search_only; /* Only search with a suffix? */
+ const_string program; /* ``mktexpk'', etc. */
+ int argc; /* Count of standard arguments. */
+ const_string *argv; /* Standard arguments to `program'. */
+ boolean program_enabled_p; /* Invoke `program'? */
+ kpse_src_type program_enable_level; /* Who said to invoke `program'. */
+ boolean binmode; /* Open files in binary mode? */
+} kpse_format_info_type;
+
+#if defined(WIN32) && !defined(__MINGW32__)
+struct passwd {
+ char *pw_name;
+ char *pw_passwd;
+ int pw_uid;
+ int pw_gid;
+ int pw_quota;
+ char *pw_gecos;
+ char *pw_dir;
+ char *pw_shell;
+};
+#endif /* WIN32 && !__MINGW32 */
+
+typedef struct kpathsea_instance *kpathsea;
+
+typedef struct kpathsea_instance {
+ /* from cnf.c */
+ p_record_input record_input; /* for --recorder */
+ p_record_output record_output; /* for --recorder */
+ hash_table_type cnf_hash; /* used by read_all_cnf */
+ boolean doing_cnf_init; /* for kpse_cnf_get */
+ /* from db.c */
+ hash_table_type db; /* The hash table for all ls-R's */
+ hash_table_type alias_db; /* The hash table for the aliases */
+ str_list_type db_dir_list; /* list of ls-R's */
+ /* from debug.c */
+ unsigned debug; /* for --kpathsea-debug */
+ /* from dir.c */
+ hash_table_type link_table; /* a hash of links-per-dir */
+ /* from elt-dir.c */
+ cache_entry *the_cache;
+ unsigned cache_length;
+ /* from fontmap.c */
+ hash_table_type map; /* the font mapping hash */
+ const_string map_path; /* path for kpse_fontmap_format */
+ /* from hash.c */
+ /* Print the hash values as integers if this is nonzero. */
+ boolean debug_hash_lookup_int;
+ /* from path-elt.c */
+ string elt; /* static buffer for return value */
+ unsigned elt_alloc;
+ const_string path; /* path we're currently working on */
+ /* from pathsearch.c */
+ boolean followup_search;
+ FILE *log_file;
+ boolean log_opened; /* Need to open the log file? */
+ /* from progname.c */
+ string invocation_name;
+ string invocation_short_name;
+ string program_name; /* pretended name */
+ int ll_verbose; /* for symlinks (conditional) */
+ /* from tex-file.c */
+ /* If non-NULL, try looking for this if can't find the real font. */
+ const_string fallback_font;
+ /* If non-NULL, default list of fallback resolutions comes from this
+ instead of the compile-time value. Set by dvipsk for the R config
+ cmd. *SIZES environment variables override/use as default. */
+ const_string fallback_resolutions_string;
+ /* If non-NULL, check these if can't find (within a few percent of) the
+ given resolution. List must end with a zero element. */
+ unsigned *fallback_resolutions;
+ kpse_format_info_type format_info[kpse_last_format];
+ /* from tex-make.c */
+ /* We never throw away stdout, since that is supposed to be the filename
+ found, if all is successful. This variable controls whether stderr
+ is thrown away. */
+ boolean make_tex_discard_errors;
+ FILE *missfont;
+ /* from variable.c */
+ expansion_type *expansions; /* sole variable of this type */
+ unsigned expansion_len ;
+ /* from xputenv.c */
+ /* These record the strings we've set and have to keep around.
+ This function can be called many times during a run, and this
+ allows us to reclaim memory we allocated. */
+ char **saved_env; /* keep track of changed items */
+ int saved_count;
+#if defined(WIN32) || defined(__CYGWIN__)
+ char **suffixlist;
+#endif /* WIN32 || __CYGWIN__ */
+
+#if defined(WIN32) && !defined(__MINGW32__)
+ char the_passwd_name[256];
+ char the_passwd_passwd[256];
+ char the_passwd_gecos[256];
+ char the_passwd_dir[256];
+ char the_passwd_shell[256];
+ struct passwd the_passwd;
+ int __system_allow_multiple_cmds;
+#endif /* WIN32 && !__MINGW32__ */
+#if defined(WIN32)
+ int Is_cp932_system;
+ int File_system_codepage, Win32_codepage;
+ int getc_len;
+ int getc_buff[4];
+ wchar_t wcbuf;
+ int st_len;
+ char st_buff[5];
+ char *st_str;
+#endif
+} kpathsea_instance;
+
+/* these come from kpathsea.c */
+extern KPSEDLL kpathsea kpathsea_new (void) ;
+extern KPSEDLL void kpathsea_finish (kpathsea kpse) ;
+
+#if defined (KPSE_COMPAT_API)
+
+#define kpse_bug_address kpathsea_bug_address
+
+extern KPSEDLL kpathsea_instance kpse_def_inst;
+extern KPSEDLL kpathsea kpse_def;
+
+#define kpathsea_debug kpse_def_inst.debug
+#define kpse_program_name kpse_def_inst.program_name
+#define kpse_record_input kpse_def_inst.record_input
+#define kpse_record_output kpse_def_inst.record_output
+#define kpse_make_tex_discard_errors kpse_def_inst.make_tex_discard_errors
+#define kpse_fallback_font kpse_def_inst.fallback_font
+#define kpse_fallback_resolutions_string kpse_def_inst.fallback_resolutions_string
+#define kpse_fallback_resolutions kpse_def_inst.fallback_resolutions
+#define kpse_format_info kpse_def_inst.format_info
+#define kpse_debug_hash_lookup_int kpse_def_inst.debug_hash_lookup_int
+
+#undef kpse_invocation_name
+#define kpse_invocation_name kpse_def_inst.invocation_name
+#undef kpse_invocation_short_name
+#define kpse_invocation_short_name kpse_def_inst.invocation_short_name
+
+#endif /* KPSE_COMPAT_API */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* not KPATHSEA_TYPES_H */