(file) Return to gsint.h CVS log (file) (dir) Up to [RizwankCVS] / testProject / source / src

  1 rizwank 1.1 /*
  2              * Internal header file.
  3              * Copyright (c) 1995-2000 Markku Rossi.
  4              *
  5              * Author: Markku Rossi <mtr@iki.fi>
  6              */
  7             
  8             /*
  9              * This file is part of GNU enscript.
 10              *
 11              * This program is free software; you can redistribute it and/or modify
 12              * it under the terms of the GNU General Public License as published by
 13              * the Free Software Foundation; either version 2, or (at your option)
 14              * any later version.
 15              *
 16              * This program is distributed in the hope that it will be useful,
 17              * but WITHOUT ANY WARRANTY; without even the implied warranty of
 18              * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 19              * GNU General Public License for more details.
 20              *
 21              * You should have received a copy of the GNU General Public License
 22 rizwank 1.1  * along with this program; see the file COPYING.  If not, write to
 23              * the Free Software Foundation, 59 Temple Place - Suite 330,
 24              * Boston, MA 02111-1307, USA.
 25              */
 26             
 27             #ifndef GSINT_H
 28             #define GSINT_H
 29             
 30             /*
 31              * Config stuffs.
 32              */
 33             
 34             #ifdef HAVE_CONFIG_H
 35             #include <config.h>
 36             #endif
 37             
 38             #include <stdio.h>
 39             
 40             #include <sys/types.h>
 41             #include <sys/stat.h>
 42             
 43 rizwank 1.1 #ifndef ___P
 44             #if PROTOTYPES
 45             #define ___P(protos) protos
 46             #else /* no PROTOTYPES */
 47             #define ___P(protos) ()
 48             #endif /* no PROTOTYPES */
 49             #endif
 50             
 51             #if STDC_HEADERS
 52             
 53             #include <stdlib.h>
 54             #include <string.h>
 55             
 56             #else /* no STDC_HEADERS */
 57             
 58             #if HAVE_STDLIB_H
 59             #include <stdlib.h>
 60             #endif
 61             
 62             #if HAVE_STRING_H
 63             #include <string.h>
 64 rizwank 1.1 #endif
 65             
 66             #ifndef HAVE_STRCHR
 67             #define strchr index
 68             #define strrchr rindex
 69             #endif
 70             char *strchr ();
 71             char *strrchr ();
 72             
 73             #ifndef HAVE_STRERROR
 74             extern char *strerror ___P ((int));
 75             #endif
 76             
 77             #ifndef HAVE_MEMMOVE
 78             extern void *memmove ___P ((void *, void *, size_t));
 79             #endif
 80             
 81             #ifndef HAVE_MEMCPY
 82             extern void *memcpy ___P ((void *, void *, size_t));
 83             #endif
 84             
 85 rizwank 1.1 #endif /* no STDC_HEADERS */
 86             
 87             #if HAVE_UNISTD_H
 88             #include <unistd.h>
 89             #endif
 90             
 91             #if HAVE_MATH_H
 92             #include <math.h>
 93             #else
 94             extern double atan2 ___P ((double, double));
 95             #endif
 96             
 97             #include <errno.h>
 98             #include <time.h>
 99             #include <assert.h>
100             #include <ctype.h>
101             
102             #if HAVE_PWD_H
103             #include <pwd.h>
104             #else
105             #include "dummypwd.h"
106 rizwank 1.1 #endif
107             
108             #if ENABLE_NLS
109             #include <libintl.h>
110             #define _(String) gettext (String)
111             #else
112             #define _(String) String
113             #endif
114             
115             #if HAVE_LC_MESSAGES
116             #include <locale.h>
117             #endif
118             
119             #ifndef HAVE_GETCWD
120             #if HAVE_GETWD
121             #define getcwd(buf, len) getwd(buf)
122             #endif /* HAVE_GETWD */
123             #endif /* not HAVE_GETCWD */
124             
125             #include "afm.h"
126             #include "strhash.h"
127 rizwank 1.1 #include "xalloc.h"
128             
129             /*
130              * Types and definitions.
131              */
132             
133             #define MATCH(a, b) (strcmp (a, b) == 0)
134             
135             #define ISNUMBERDIGIT(ch) \
136               (('0' <= (ch) && (ch) <= '9') || (ch) == '.' || (ch) == '-' || (ch) == '+')
137             
138             /* Return the width of the character <ch> */
139             #define CHAR_WIDTH(ch) (font_widths[(unsigned char) (ch)])
140             
141             /* Current point y movement from line to line. */
142             #define LINESKIP (Fpt.h + baselineskip)
143             
144             
145             /* Constants for output files. */
146             #define OUTPUT_FILE_NONE   NULL
147             #define OUTPUT_FILE_STDOUT ((char *) 1)
148 rizwank 1.1 
149             /* Underlay styles. */
150             #define UL_STYLE_OUTLINE 	0
151             #define UL_STYLE_FILLED		1
152             
153             struct media_entry_st
154             {
155               struct media_entry_st *next;
156               char *name;
157               int w;
158               int h;
159               int llx;
160               int lly;
161               int urx;
162               int ury;
163             };
164             
165             typedef struct media_entry_st MediaEntry;
166             
167             typedef enum
168             {
169 rizwank 1.1   HDR_NONE,
170               HDR_SIMPLE,
171               HDR_FANCY
172             } HeaderType;
173             
174             
175             typedef enum
176             {
177               ENC_ISO_8859_1,
178               ENC_ISO_8859_2,
179               ENC_ISO_8859_3,
180               ENC_ISO_8859_4,
181               ENC_ISO_8859_5,
182               ENC_ISO_8859_7,
183               ENC_ISO_8859_9,
184               ENC_ISO_8859_10,
185               ENC_ASCII,
186               ENC_ASCII_FISE,
187               ENC_ASCII_DKNO,
188               ENC_IBMPC,
189               ENC_MAC,
190 rizwank 1.1   ENC_VMS,
191               ENC_HP8,
192               ENC_KOI8,
193               ENC_PS
194             } InputEncoding;
195             
196             struct encoding_registry_st
197             {
198               char *names[3];
199               InputEncoding encoding;
200               int nl;
201               int bs;
202             };
203             
204             typedef struct encoding_registry_st EncodingRegistry;
205             
206             typedef enum
207             {
208               LABEL_SHORT,
209               LABEL_LONG
210             } PageLabelFormat;
211 rizwank 1.1 
212             typedef enum
213             {
214               MWLS_NONE	= 0,
215               MWLS_PLUS	= 1,
216               MWLS_BOX	= 2,
217               MWLS_ARROW	= 3
218             } MarkWrappedLinesStyle;
219             
220             typedef enum
221             {
222               NPF_SPACE,
223               NPF_QUESTIONMARK,
224               NPF_CARET,
225               NPF_OCTAL
226             } NonPrintableFormat;
227             
228             typedef enum
229             {
230               FORMFEED_COLUMN,
231               FORMFEED_PAGE,
232 rizwank 1.1   FORMFEED_HCOLUMN
233             } FormFeedType;
234             
235             typedef enum
236             {
237               LE_TRUNCATE,
238               LE_CHAR_WRAP,
239               LE_WORD_WRAP
240             } LineEndType;
241             
242             struct buffer_st
243             {
244               char *data;
245               size_t allocated;
246               size_t len;
247             };
248             
249             typedef struct buffer_st Buffer;
250             
251             struct file_lookup_ctx_st
252             {
253 rizwank 1.1   /* The name of the file to lookup. */
254               char *name;
255             
256               /* The suffix of the file.  This string is appended to <name>. */
257               char *suffix;
258             
259               /* Buffer to which the name of the file is constructed.  If the
260                  file_lookup() returns 1, the name of the file is here.  The
261                  caller of the file_lookup() must allocate this buffer. */
262               Buffer *fullname;
263             };
264             
265             typedef struct file_lookup_ctx_st FileLookupCtx;
266             
267             typedef int (*PathWalkProc) ___P ((char *path, void *context));
268             
269             
270             struct input_stream_st
271             {
272               int is_pipe;			/* Is <fp> opened to pipe? */
273               FILE *fp;
274 rizwank 1.1   unsigned char buf[4096];
275               unsigned int data_in_buf;
276               unsigned int bufpos;
277               unsigned int nreads;
278               unsigned char *unget_ch;
279               unsigned int unget_pos;
280               unsigned int unget_alloc;
281             };
282             
283             typedef struct input_stream_st InputStream;
284             
285             
286             struct page_range_st
287             {
288               struct page_range_st *next;
289               int odd;
290               int even;
291               unsigned int start;
292               unsigned int end;
293             };
294             
295 rizwank 1.1 typedef struct page_range_st PageRange;
296             
297             struct font_point_st
298             {
299               double w;			/* width */
300               double h;			/* height */
301             };
302             
303             typedef struct font_point_st FontPoint;
304             
305             struct color_st
306             {
307               float r;
308               float g;
309               float b;
310             };
311             
312             typedef struct color_st Color;
313             
314             struct cached_font_info_st
315             {
316 rizwank 1.1   double font_widths[256];
317               char font_ctype[256];
318               AFMBoolean font_is_fixed;
319               AFMNumber font_bbox_lly;
320             };
321             
322             typedef struct cached_font_info_st CachedFontInfo;
323             
324             
325             /*
326              * Global variables.
327              */
328             
329             extern char *program;
330             extern FILE *ofp;
331             extern char *version_string;
332             extern char *ps_version_string;
333             extern char *date_string;
334             extern struct tm run_tm;
335             extern struct tm mod_tm;
336             extern struct passwd *passwd;
337 rizwank 1.1 extern char *libpath;
338             extern char *afm_path;
339             extern MediaEntry *media_names;
340             extern MediaEntry *media;
341             extern char *no_job_header_switch;
342             extern char *output_first_line;
343             extern char *queue_param;
344             extern char *spooler_command;
345             extern int nl;
346             extern int bs;
347             extern unsigned int current_pagenum;
348             extern unsigned int input_filenum;
349             extern unsigned int current_file_linenum;
350             extern char *fname;
351             
352             /* Statistics. */
353             extern int total_pages;
354             extern int num_truncated_lines;
355             extern int num_missing_chars;
356             extern int missing_chars[];
357             extern int num_non_printable_chars;
358 rizwank 1.1 extern int non_printable_chars[];
359             
360             /* Dimensions that are used during PostScript generation. */
361             extern int d_page_w;
362             extern int d_page_h;
363             extern int d_header_w;
364             extern int d_header_h;
365             extern int d_footer_h;
366             extern int d_output_w;
367             extern int d_output_h;
368             extern int d_output_x_margin;
369             extern int d_output_y_margin;
370             extern unsigned int nup_xpad;
371             extern unsigned int nup_ypad;
372             
373             /* Document needed resources. */
374             extern StringHashPtr res_fonts;
375             
376             /* Fonts to download. */
377             extern StringHashPtr download_fonts;
378             
379 rizwank 1.1 /* Additional key-value pairs, passed to the generated PostScript code. */
380             extern StringHashPtr pagedevice;
381             extern StringHashPtr statusdict;
382             
383             /* User defined strings. */
384             extern StringHashPtr user_strings;
385             
386             /* Cache for AFM files. */
387             extern StringHashPtr afm_cache;
388             extern StringHashPtr afm_info_cache;
389             
390             /* AFM library handle. */
391             extern AFMHandle afm;
392             
393             /* Fonts. */
394             extern char *HFname;
395             extern FontPoint HFpt;
396             extern char *Fname;
397             extern FontPoint Fpt;
398             extern FontPoint default_Fpt;
399             extern char *default_Fname;
400 rizwank 1.1 extern InputEncoding default_Fencoding;
401             
402             extern double font_widths[];
403             extern char font_ctype[];
404             extern int font_is_fixed;
405             extern double font_bbox_lly;
406             
407             /* Known input encodings. */
408             extern EncodingRegistry encodings[];
409             
410             /* Options. */
411             
412             extern char *printer;
413             extern int verbose;
414             extern int num_copies;
415             extern char *title;
416             extern int num_columns;
417             extern LineEndType line_end;
418             extern int quiet;
419             extern int landscape;
420             extern HeaderType header;
421 rizwank 1.1 extern char *fancy_header_name;
422             extern char *fancy_header_default;
423             extern double line_indent;
424             extern char *page_header;
425             extern char *page_footer;
426             extern char *output_file;
427             extern unsigned int lines_per_page;
428             extern InputEncoding encoding;
429             extern char *media_name;
430             extern char *encoding_name;
431             extern int special_escapes;
432             extern int escape_char;
433             extern int default_escape_char;
434             extern int tabsize;
435             extern double baselineskip;
436             extern FontPoint ul_ptsize;
437             extern double ul_gray;
438             extern char *ul_font;
439             extern char *underlay;
440             extern char *ul_position;
441             extern double ul_x;
442 rizwank 1.1 extern double ul_y;
443             extern double ul_angle;
444             extern unsigned int ul_style;
445             extern char *ul_style_str;
446             extern int ul_position_p;
447             extern int ul_angle_p;
448             extern PageLabelFormat page_label;
449             extern char *page_label_format;
450             extern int pass_through;
451             extern int line_numbers;
452             extern unsigned int start_line_number;
453             extern int interpret_formfeed;
454             extern NonPrintableFormat non_printable_format;
455             extern MarkWrappedLinesStyle mark_wrapped_lines_style;
456             extern char *mark_wrapped_lines_style_name;
457             extern char *npf_name;
458             extern int clean_7bit;
459             extern int append_ctrl_D;
460             extern unsigned int highlight_bars;
461             extern double highlight_bar_gray;
462             extern int page_prefeed;
463 rizwank 1.1 extern PageRange *page_ranges;
464             extern int borders;
465             extern double line_highlight_gray;
466             extern double bggray;
467             extern int accept_composites;
468             extern FormFeedType formfeed_type;
469             extern char *input_filter_stdin;
470             extern int toc;
471             extern FILE *toc_fp;
472             extern char *toc_fmt_string;
473             extern unsigned int file_align;
474             extern int slicing;
475             extern unsigned int slice;
476             
477             extern char *states_binary;
478             extern int states_color;
479             extern char *states_config_file;
480             extern char *states_highlight_style;
481             extern char *states_path;
482             
483             extern unsigned int nup;
484 rizwank 1.1 extern unsigned int nup_rows;
485             extern unsigned int nup_columns;
486             extern int nup_landscape;
487             extern unsigned int nup_width;
488             extern unsigned int nup_height;
489             extern double nup_scale;
490             extern int nup_columnwise;
491             extern char *output_language;
492             extern int output_language_pass_through;
493             extern int generate_PageSize;
494             extern double horizontal_column_height;
495             extern unsigned int pslevel;
496             extern int rotate_even_pages;
497             extern int swap_even_page_margins;
498             extern int continuous_page_numbers;
499             
500             
501             /*
502              * Prototypes for global functions.
503              */
504             
505 rizwank 1.1 /* Print message if <verbose> is >= <verbose_level>. */
506             #define MESSAGE(verbose_level, body)		\
507               do {						\
508                 if (!quiet && verbose >= (verbose_level))	\
509                   fprintf body;				\
510               } while (0)
511             
512             /* Report continuable error. */
513             #define ERROR(body)			\
514               do {					\
515                 fprintf (stderr, "%s: ", program);	\
516                 fprintf body;			\
517                 fprintf (stderr, "\n");		\
518                 fflush (stderr);			\
519               } while (0)
520             
521             /* Report fatal error and exit with status 1.  Function never returns. */
522             #define FATAL(body)			\
523               do {					\
524                 fprintf (stderr, "%s: ", program);	\
525                 fprintf body;			\
526 rizwank 1.1     fprintf (stderr, "\n");		\
527                 fflush (stderr);			\
528                 exit (1);				\
529               } while (0)
530             
531             /*
532              * Read config file <path, name>.  Returns bool.  If function fails, error
533              * is found from errno.
534              */
535             int read_config ___P ((char *path, char *name));
536             
537             /* Print PostScript header to our output stream. */
538             void dump_ps_header ___P ((void));
539             
540             /* Print PostScript trailer to our output stream. */
541             void dump_ps_trailer ___P ((void));
542             
543             /*
544              * Open InputStream to <fp> or <fname>.  If <input_filter> is given
545              * it is used to pre-filter the incoming data stream.  Function returns
546              * 1 if stream could be opened or 0 otherwise.
547 rizwank 1.1  */
548             int is_open ___P ((InputStream *is, FILE *fp, char *fname,
549             		   char *input_filter));
550             
551             /* Close InputStream <is>. */
552             void is_close ___P ((InputStream *is));
553             
554             /*
555              * Read next character from the InputStream <is>.  Returns EOF if
556              * EOF was reached.
557              */
558             int is_getc ___P ((InputStream *is));
559             
560             /*
561              * Put character <ch> back to the InputStream <is>.  Function returns EOF
562              * if character couldn't be unget.
563              */
564             int is_ungetc ___P ((int ch, InputStream *is));
565             
566             
567             void buffer_init ___P ((Buffer *buffer));
568 rizwank 1.1 
569             void buffer_uninit ___P ((Buffer *buffer));
570             
571             Buffer *buffer_alloc ();
572             
573             void buffer_free ___P ((Buffer *buffer));
574             
575             void buffer_append ___P ((Buffer *buffer, const char *data));
576             
577             void buffer_append_len ___P ((Buffer *buffer, const char *data, size_t len));
578             
579             char *buffer_copy ___P ((Buffer *buffer));
580             
581             void buffer_clear ___P ((Buffer *buffer));
582             
583             char *buffer_ptr ___P ((Buffer *buffer));
584             
585             size_t buffer_len ___P ((Buffer *buffer));
586             
587             
588             /*
589 rizwank 1.1  * Process single input file <fp>.  File's name is given in <fname> and
590              * it is used to print headers.  The argument <is_toc> specifies whether
591              * the file is a table of contents file or not.
592              */
593             void process_file ___P ((char *fname, InputStream *fp, int is_toc));
594             
595             /* Add a new media to the list of known media. */
596             void add_media ___P ((char *name, int w, int h, int llx, int lly, int urx,
597             		      int ury));
598             
599             /* Print a listing of missing characters. */
600             void do_list_missing_characters ___P ((int *array));
601             
602             /*
603              * Check if file <name, suffix> exists.  Returns bool.  If function fails
604              * error can be found from errno.
605              */
606             int file_existsp ___P ((char *name, char *suffix));
607             
608             /*
609              * Paste file <name, suffix> to output stream.  Returns bool. If
610 rizwank 1.1  * function fails, error can be found from errno.
611              */
612             int paste_file ___P ((char *name, char *suffix));
613             
614             /*
615              * Do tilde substitution for filename <fname>.  The function returns a
616              * xmalloc()ated result that must be freed by the caller.
617              */
618             char *tilde_subst ___P ((char *fname));
619             
620             /*
621              * Parse one float dimension from string <string>.  If <units> is true,
622              * then number can be followed by an optional unit specifier.  If
623              * <horizontal> is true, then dimension is horizontal, otherwise it
624              * is vertical.
625              */
626             double parse_float ___P ((char *string, int units, int horizontal));
627             
628             /*
629              * Parse font spec <spec> and return font's name, size, and encoding
630              * in variables <name_return>, <size_return>, and <encoding_return>.
631 rizwank 1.1  * Returns 1 if <spec> was a valid font spec or 0 otherwise.  Returned
632              * name <name_return> is allocated with xcalloc() and must be freed by
633              * caller.
634              */
635             int parse_font_spec ___P ((char *spec, char **name_return,
636             			   FontPoint *size_return,
637             			   InputEncoding *encoding_return));
638             
639             /*
640              * Read body font's character widths and character codes from AFM files.
641              */
642             void read_font_info ___P ((void));
643             
644             /*
645              * Try to download font <name>.
646              */
647             void download_font ___P ((char *name));
648             
649             /*
650              * Escape all PostScript string's special characters from string <string>.
651              * Returns a xmalloc()ated result.
652 rizwank 1.1  */
653             char *escape_string ___P ((char *string));
654             
655             /*
656              * Expand user escapes from string <string>.  Returns a xmalloc()ated
657              * result.
658              */
659             char *format_user_string ___P ((char *context_name, char *string));
660             
661             /*
662              * Parses key-value pair <kv> and inserts/deletes key from <set>.
663              */
664             void parse_key_value_pair ___P ((StringHashPtr set, char *kv));
665             
666             /*
667              * Count how many non-empty items there are in the key-value set <set>.
668              */
669             int count_key_value_set ___P ((StringHashPtr set));
670             
671             /*
672              * Walk through path <path> and call <proc> once for each of its
673 rizwank 1.1  * components.  Function returns 0 if all components were accessed.
674              * Callback <proc> can interrupt walking by returning a non zero
675              * return value.  In that case value is returned as the return value
676              * of the pathwalk().
677              */
678             int pathwalk ___P ((char *path, PathWalkProc proc, void *context));
679             
680             /* Lookup file from path.  <context> must point to FileLookupCtx. */
681             int file_lookup ___P ((char *path, void *context));
682             
683             
684             /*
685              * Portable printer interface.
686              */
687             
688             /*
689              * Open and initialize printer <cmd>, <options>, <queue_param> and
690              * <printer_name>.  Function returns a FILE pointer to which enscript
691              * can generate its PostScript output or NULL if printer
692              * initialization failed.  Command can store its context information
693              * to variable <context_return> wich is passed as an argument to the
694 rizwank 1.1  * printer_close() function.
695              */
696             FILE *printer_open ___P ((char *cmd, char *options, char *queue_param,
697             			  char *printer_name, void **context_return));
698             
699             /*
700              * Flush all pending output to printer <context> and close it.
701              */
702             void printer_close ___P ((void *context));
703             
704             #endif /* not GSINT_H */

Rizwan Kassim
Powered by
ViewCVS 0.9.2