#ifndef GSINT_H
#define GSINT_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifndef ___P
#if PROTOTYPES
#define ___P(protos) protos
#else
#define ___P(protos) ()
#endif
#endif
#if STDC_HEADERS
#include <stdlib.h>
#include <string.h>
#else
#if HAVE_STDLIB_H
#include <stdlib.h>
#endif
#if HAVE_STRING_H
#include <string.h>
#endif
#ifndef HAVE_STRCHR
#define strchr index
#define strrchr rindex
#endif
char *strchr ();
char *strrchr ();
#ifndef HAVE_STRERROR
extern char *strerror ___P ((int));
#endif
#ifndef HAVE_MEMMOVE
extern void *memmove ___P ((void *, void *, size_t));
#endif
#ifndef HAVE_MEMCPY
extern void *memcpy ___P ((void *, void *, size_t));
#endif
#endif
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
#if HAVE_MATH_H
#include <math.h>
#else
extern double atan2 ___P ((double, double));
#endif
#include <errno.h>
#include <time.h>
#include <assert.h>
#include <ctype.h>
#if HAVE_PWD_H
#include <pwd.h>
#else
#include "dummypwd.h"
#endif
#if ENABLE_NLS
#include <libintl.h>
#define _(String) gettext (String)
#else
#define _(String) String
#endif
#if HAVE_LC_MESSAGES
#include <locale.h>
#endif
#ifndef HAVE_GETCWD
#if HAVE_GETWD
#define getcwd(buf, len) getwd(buf)
#endif
#endif
#include "afm.h"
#include "strhash.h"
#include "xalloc.h"
#define MATCH(a, b) (strcmp (a, b) == 0)
#define ISNUMBERDIGIT(ch) \
(('0' <= (ch) && (ch) <= '9') || (ch) == '.' || (ch) == '-' || (ch) == '+')
#define CHAR_WIDTH(ch) (font_widths[(unsigned char) (ch)])
#define LINESKIP (Fpt.h + baselineskip)
#define OUTPUT_FILE_NONE NULL
#define OUTPUT_FILE_STDOUT ((char *) 1)
#define UL_STYLE_OUTLINE 0
#define UL_STYLE_FILLED 1
struct media_entry_st
{
struct media_entry_st *next;
char *name;
int w;
int h;
int llx;
int lly;
int urx;
int ury;
};
typedef struct media_entry_st MediaEntry;
typedef enum
{
HDR_NONE,
HDR_SIMPLE,
HDR_FANCY
} HeaderType;
typedef enum
{
ENC_ISO_8859_1,
ENC_ISO_8859_2,
ENC_ISO_8859_3,
ENC_ISO_8859_4,
ENC_ISO_8859_5,
ENC_ISO_8859_7,
ENC_ASCII,
ENC_ASCII_FISE,
ENC_ASCII_DKNO,
ENC_IBMPC,
ENC_MAC,
ENC_VMS,
ENC_HP8,
ENC_KOI8,
ENC_PS
} InputEncoding;
typedef enum
{
LABEL_SHORT,
LABEL_LONG
} PageLabelFormat;
typedef enum
{
MWLS_NONE = 0,
MWLS_PLUS = 1,
MWLS_BOX = 2,
MWLS_ARROW = 3
} MarkWrappedLinesStyle;
typedef enum
{
NPF_SPACE,
NPF_QUESTIONMARK,
NPF_CARET,
NPF_OCTAL
} NonPrintableFormat;
typedef enum
{
FORMFEED_COLUMN,
FORMFEED_PAGE,
FORMFEED_HCOLUMN
} FormFeedType;
typedef enum
{
LE_TRUNCATE,
LE_CHAR_WRAP,
LE_WORD_WRAP
} LineEndType;
struct file_lookup_ctx_st
{
char name[256];
char suffix[256];
char fullname[512];
};
typedef struct file_lookup_ctx_st FileLookupCtx;
typedef int (*PathWalkProc) ___P ((char *path, void *context));
struct input_stream_st
{
int is_pipe;
FILE *fp;
unsigned char buf[4096];
unsigned int data_in_buf;
unsigned int bufpos;
unsigned int nreads;
unsigned char *unget_ch;
unsigned int unget_pos;
unsigned int unget_alloc;
};
typedef struct input_stream_st InputStream;
struct page_range_st
{
struct page_range_st *next;
int odd;
int even;
unsigned int start;
unsigned int end;
};
typedef struct page_range_st PageRange;
struct font_point_st
{
double w;
double h;
};
typedef struct font_point_st FontPoint;
struct color_st
{
float r;
float g;
float b;
};
typedef struct color_st Color;
struct cached_font_info_st
{
double font_widths[256];
char font_ctype[256];
AFMBoolean font_is_fixed;
AFMNumber font_bbox_lly;
};
typedef struct cached_font_info_st CachedFontInfo;
extern char *program;
extern FILE *ofp;
extern char version_string[];
extern char ps_version_string[];
extern char date_string[];
extern struct tm run_tm;
extern struct tm mod_tm;
extern struct passwd *passwd;
extern char libpath[];
extern char *afm_path;
extern char afm_path_buffer[];
extern MediaEntry *media_names;
extern MediaEntry *media;
extern char no_job_header_switch[];
extern char output_first_line[];
extern char queue_param[];
extern char spooler_command[];
extern int nl;
extern int bs;
extern unsigned int current_pagenum;
extern unsigned int input_filenum;
extern unsigned int current_file_linenum;
extern char fname[];
extern int total_pages;
extern int num_truncated_lines;
extern int num_missing_chars;
extern int missing_chars[];
extern int num_non_printable_chars;
extern int non_printable_chars[];
extern int d_page_w;
extern int d_page_h;
extern int d_header_w;
extern int d_header_h;
extern int d_footer_h;
extern int d_output_w;
extern int d_output_h;
extern int d_output_x_margin;
extern int d_output_y_margin;
extern unsigned int nup_xpad;
extern unsigned int nup_ypad;
extern StringHashPtr res_fonts;
extern StringHashPtr download_fonts;
extern StringHashPtr pagedevice;
extern StringHashPtr statusdict;
extern StringHashPtr user_strings;
extern StringHashPtr afm_cache;
extern StringHashPtr afm_info_cache;
extern AFMHandle afm;
extern char *HFname;
extern FontPoint HFpt;
extern char *Fname;
extern FontPoint Fpt;
extern FontPoint default_Fpt;
extern char *default_Fname;
extern double font_widths[];
extern char font_ctype[];
extern int font_is_fixed;
extern double font_bbox_lly;
extern char *printer;
extern char printer_buf[];
extern int verbose;
extern int num_copies;
extern char *title;
extern int num_columns;
extern LineEndType line_end;
extern int quiet;
extern int landscape;
extern HeaderType header;
extern char *fancy_header_name;
extern char fancy_header_default[];
extern double line_indent;
extern char *page_header;
extern char *output_file;
extern unsigned int lines_per_page;
extern InputEncoding encoding;
extern char *media_name;
extern char media_name_buffer[];
extern char *encoding_name;
extern char encoding_name_buffer[];
extern int special_escapes;
extern int escape_char;
extern int default_escape_char;
extern int tabsize;
extern double baselineskip;
extern FontPoint ul_ptsize;
extern double ul_gray;
extern char *ul_font;
extern char *underlay;
extern char ul_position_buf[];
extern char *ul_position;
extern double ul_x;
extern double ul_y;
extern double ul_angle;
extern unsigned int ul_style;
extern char *ul_style_str;
extern char ul_style_str_buf[];
extern int ul_position_p;
extern int ul_angle_p;
extern PageLabelFormat page_label;
extern char *page_label_format;
extern char page_label_format_buf[];
extern int pass_through;
extern int line_numbers;
extern unsigned int start_line_number;
extern int interpret_formfeed;
extern NonPrintableFormat non_printable_format;
extern MarkWrappedLinesStyle mark_wrapped_lines_style;
extern char mark_wrapped_lines_style_name[];
extern char *npf_name;
extern char npf_name_buf[];
extern int clean_7bit;
extern int append_ctrl_D;
extern unsigned int highlight_bars;
extern double highlight_bar_gray;
extern int page_prefeed;
extern PageRange *page_ranges;
extern int borders;
extern double line_highlight_gray;
extern double bggray;
extern int accept_composites;
extern FormFeedType formfeed_type;
extern char *input_filter_stdin;
extern int toc;
extern FILE *toc_fp;
extern char *toc_fmt_string;
extern unsigned int file_align;
extern int slicing;
extern unsigned int slice;
extern char states_path[];
extern char states_color_model[];
extern char states_config_file[];
extern char states_highlight_level[];
extern unsigned int nup;
extern unsigned int nup_rows;
extern unsigned int nup_columns;
extern int nup_landscape;
extern unsigned int nup_width;
extern unsigned int nup_height;
extern double nup_scale;
extern char *output_language;
extern int output_language_pass_through;
extern int generate_PageSize;
extern double horizontal_column_height;
extern unsigned int pslevel;
extern int rotate_even_pages;
#define MESSAGE(verbose_level, body) \
do { \
if (!quiet && verbose >= (verbose_level)) \
fprintf body; \
} while (0)
#define ERROR(body) \
do { \
fprintf (stderr, "%s: ", program); \
fprintf body; \
fprintf (stderr, "\n"); \
fflush (stderr); \
} while (0)
#define FATAL(body) \
do { \
fprintf (stderr, "%s: ", program); \
fprintf body; \
fprintf (stderr, "\n"); \
fflush (stderr); \
exit (1); \
} while (0)
int read_config ___P ((char *path, char *name));
void dump_ps_header ___P ((void));
void dump_ps_trailer ___P ((void));
int is_open ___P ((InputStream *is, FILE *fp, char *fname,
char *input_filter));
void is_close ___P ((InputStream *is));
int is_getc ___P ((InputStream *is));
int is_ungetc ___P ((int ch, InputStream *is));
void process_file ___P ((char *fname, InputStream *fp));
void add_media ___P ((char *name, int w, int h, int llx, int lly, int urx,
int ury));
void do_list_missing_characters ___P ((int *array));
int file_existsp ___P ((char *name, char *suffix));
int paste_file ___P ((char *name, char *suffix));
void tilde_subst ___P ((char *from, char *to));
double parse_float ___P ((char *string, int units, int horizontal));
int parse_font_spec ___P ((char *spec, char **name_return,
FontPoint *size_return));
void read_font_info ___P ((void));
void download_font ___P ((char *name));
char *escape_string ___P ((char *string));
char *format_user_string ___P ((char *context_name, char *string));
void parse_key_value_pair ___P ((StringHashPtr set, char *kv));
int count_key_value_set ___P ((StringHashPtr set));
int pathwalk ___P ((char *path, PathWalkProc proc, void *context));
int file_lookup ___P ((char *path, void *context));
FILE *printer_open ___P ((char *cmd, char *options, char *queue_param,
char *printer_name, void **context_return));
void printer_close ___P ((void *context));
#endif