summaryrefslogtreecommitdiff
path: root/Build/source/texk/xdvik/util.h
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-17 21:41:51 +0000
committerKarl Berry <karl@freefriends.org>2006-01-17 21:41:51 +0000
commit487ca4806cc046076293cf6cc5fbba0db282bac7 (patch)
tree847b412ab5158dd7bdd7ed7e5a4cc3fbca94be32 /Build/source/texk/xdvik/util.h
parenta3d3111bfe26b8e5f5bc6049dfb2a4ca2edc7881 (diff)
texk 1
git-svn-id: svn://tug.org/texlive/trunk@1485 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/xdvik/util.h')
-rw-r--r--Build/source/texk/xdvik/util.h241
1 files changed, 241 insertions, 0 deletions
diff --git a/Build/source/texk/xdvik/util.h b/Build/source/texk/xdvik/util.h
new file mode 100644
index 00000000000..473d8d1be6d
--- /dev/null
+++ b/Build/source/texk/xdvik/util.h
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2002-2004 the xdvik development team
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * PAUL VOJTA OR ANY OTHER AUTHOR OF THIS SOFTWARE BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef UTIL_H_
+#define UTIL_H_
+
+#include <stdio.h>
+#include "xdvi-config.h"
+#include "version.h"
+#include "kpathsea/c-stat.h"
+#include "kpathsea/hash.h"
+#include "kpathsea/tex-file.h"
+
+#if HAVE_POLL
+# include <poll.h>
+# define XIO_IN POLLIN
+# define XIO_OUT POLLOUT
+#else
+# if HAVE_SYS_SELECT_H
+# include <sys/select.h>
+# else
+# if HAVE_SELECT_H
+# include <select.h>
+# endif
+# endif
+# define XIO_IN 1
+# define XIO_OUT 2
+#endif
+
+#include "events.h" /* for child proc stuff */
+
+/* double linked list */
+struct dl_list {
+ void *item;
+ struct dl_list *prev;
+ struct dl_list *next;
+};
+
+struct dl_list *dl_list_head(struct dl_list *list);
+struct dl_list *dl_list_push_front(struct dl_list *list, void *item);
+struct dl_list *dl_list_insert(struct dl_list *list, void *item);
+struct dl_list *dl_list_truncate(struct dl_list *list);
+struct dl_list *dl_list_truncate_head(struct dl_list *list);
+struct dl_list *dl_list_remove(struct dl_list *list,
+ const void *elem,
+ int *count,
+ void **item,
+ Boolean (*compare_func)(const void *item1, const void *item2));
+Boolean dl_list_remove_item(struct dl_list **list);
+FILE *try_fopen(const char *fname, const char *mode);
+FILE *try_fdopen(int fd, const char *mode);
+int try_open(const char *fname, int flags);
+int try_open_mode(const char *fname, int flags, mode_t mode);
+
+extern int xdvi_temp_fd(char **tempfilename);
+
+
+typedef void (*child_exited_proc)(int status, struct xchild *this);
+
+extern void handle_child_exit(int status, struct xchild *this);
+extern char *read_child_error(int fd);
+extern Boolean fork_process(const char *file, Boolean redirect_stdout,
+ const char *dirname,
+ childProcT exit_proc, void *data,
+ char *const argv[]);
+extern void prep_fd(int fd, wide_bool noblock);
+
+struct bitmap; /* forward declaration */
+extern void alloc_bitmap(struct bitmap *);
+
+extern char *my_realpath(const char *path, char *real);
+#ifdef HAVE_REALPATH
+#include <limits.h>
+# define REALPATH realpath
+#else
+# define REALPATH my_realpath
+#endif
+
+char *expand_homedir(const char *path);
+void set_dvi_name_expand(const char *new_filename);
+void set_dvi_name(char *new_filename);
+FILE *XFOPEN(const char *path, const char *mode);
+
+
+#ifndef HAVE_MEMICMP
+extern int memicmp(const char *, const char *, size_t);
+#endif
+
+/* NOTE: all of the following are already defined by kpathsea. */
+/* extern void *xmalloc(unsigned); */
+/* extern void *xrealloc(void *, unsigned); */
+/* extern char *xstrdup(const char *); */
+/* extern char *xmemdump(const char *, size_t); */
+/* extern void xputenv(const char *, const char *); */
+
+extern char *xstrcat(char *str1, const char *str2);
+extern int xpipe(int *);
+extern void close_a_file(void);
+extern unsigned long get_bytes(FILE *, int);
+extern long get_lbytes(FILE *, int);
+
+extern void xdvi_exit(int);
+extern void do_abort(void);
+
+/* various levels of warning/error messages */
+extern void xdvi_info(const char *fmt, ...);
+extern void xdvi_warning(const char *fmt, ...);
+extern void xdvi_error(const char *fmt, ...);
+extern void xdvi_fatal(const char *fmt, ...);
+extern void xdvi_abort(const char *fmt, ...);
+
+extern Boolean pointerlocate(int *, int *);
+extern unsigned long parse_debugging_string(const char *arg);
+extern unsigned long parse_debugging_option(const char *ptr);
+
+extern int get_avg_font_width(XFontStruct *font);
+extern char **split_line(const char *line, char sep, size_t begin, size_t end, size_t *ret_items);
+extern char *find_file(const char *filename, struct stat *statbuf, kpse_file_format_type pathinfo);
+
+/*
+ hashtable wrapper functions, mostly used by dvi-draw.c to
+ map filenames to integers. This uses the hashtable implementation
+ from kpathsea, which is reasonably fast.
+*/
+
+/*
+ We use this dummy wrapper stuct, which we cast to void *, to get integer
+ values into/from the hashtable (natively, kpahtsea only supports string
+ values).
+*/
+struct str_int_hash_item {
+ int value;
+};
+
+
+typedef hash_table_type hashTableT; /* from kpathsea */
+extern Boolean find_str_int_hash(hashTableT *hashtable, const char *key, size_t *val);
+void put_str_int_hash(hashTableT *hashtable, const char *key, size_t val);
+
+Boolean copy_file(const char *from, const char *to);
+Boolean copy_fp(FILE *in, FILE *out);
+
+extern const char *get_text_encoding(void);
+extern char *iconv_convert_string(const char *from_enc, const char *to_enc, const char *str);
+
+
+/* Various error reporting macros.
+ The reasons why these are macros are:
+ - possibility to use __FILE__, __LINE__
+ - (more importantly:) gcc can't do type checking on generic vararg
+ macros, but does so for the printf() functions.
+*/
+
+/*
+ * Print an informative message to stdout,
+ * unless the resource `hush_stdout' is set.
+ */
+#define XDVI_INFO(X) do { \
+ fprintf(stdout, "%s: Info: ", globals.program_name); \
+ fflush(stdout); /* in case following goes to stderr accidentally ... */ \
+ fprintf X; \
+ fprintf(stdout, "\n"); \
+ fflush(stdout); /* to make sure it doesn't get intermingled with stderr */ \
+} while(0)
+
+
+/*
+ * Print a warning message to stderr.
+ * This can't be shut off by `hush_stdout'.
+ */
+#define XDVI_WARNING(X) do { \
+ fprintf(stderr, "%s: Warning: ", globals.program_name); \
+ fprintf X; \
+ fprintf(stderr, "\n"); \
+} while(0)
+
+/*
+ * Print an un-typed message to stderr, without starting a newline.
+ * This can't be shut off by `hush_stdout'.
+ */
+#define XDVI_MSG(X) do { \
+ fprintf(stderr, "%s: ", globals.program_name); \
+ fprintf X; \
+} while(0)
+
+
+/*
+ * Print an error message to stderr.
+ * This can't be shut off by `hush_stdout'.
+ */
+#define XDVI_ERROR(X) do { \
+ fprintf(stderr, "%s: Error: ", globals.program_name); \
+ fprintf X; \
+ fprintf(stderr, "\n"); \
+} while(0)
+
+/*
+ * Print an error message and quit. Use this only with extreme care,
+ * if recovery is really impossible!
+ */
+#define XDVI_FATAL(X) do { \
+ fprintf(stderr, "%s: Fatal error: ", globals.program_name); \
+ fprintf X; \
+ fprintf(stderr, "\n"); \
+ xdvi_exit(EXIT_FAILURE); \
+} while(0)
+
+/*
+ * Print an error message and abort. Use this instead of assertions
+ * if you want to give a more informative message.
+ */
+#define XDVI_ABORT(X) do { \
+ fprintf(stderr, "%s %s: %s:%d: Shouldn't happen: ", \
+ globals.program_name, \
+ XDVI_VERSION_INFO, \
+ __FILE__, __LINE__); \
+ fprintf X; \
+ fprintf(stderr, "\n"); \
+ do_abort(); \
+} while(0)
+
+#endif /* UTIL_H_ */