magicpoint-1.10a.tar.gz (MirPorts)
[alioth/magicpoint.git] / mgp.h
1 /*
2  * Copyright (C) 1997 and 1998 WIDE Project.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  * 3. Neither the name of the project nor the names of its contributors
13  *    may be used to endorse or promote products derived from this software
14  *    without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  */
28 /*
29  * $Id: mgp.h,v 1.134 2003/06/06 07:18:25 nishida Exp $
30  */
31
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <math.h>
35 #if TIME_WITH_SYS_TIME
36 # include <sys/time.h>
37 # include <time.h>
38 #else
39 # if HAVE_SYS_TIME_H
40 #  include <sys/time.h>
41 # else
42 #  include <time.h>
43 # endif
44 #endif
45 #ifdef HAVE_UNISTD_H
46 # include <unistd.h>
47 #endif
48 #include <string.h>
49 #include <sys/param.h>
50 #include <ctype.h>
51 #include <assert.h>
52 #include <sys/types.h>
53 #if HAVE_SYS_WAIT_H
54 # include <sys/wait.h>
55 #endif
56 #include <sys/stat.h>
57 #include <signal.h>
58 #include <errno.h>
59 #include <fcntl.h>
60 #include <X11/Xlib.h>
61 #include <X11/keysym.h>
62 #include <X11/cursorfont.h>
63 #include <X11/Xatom.h>
64 #ifdef USE_XFT2
65 #include <freetype/freetype.h>
66 #include <fontconfig/fontconfig.h>
67 #include <X11/Xft/Xft.h>
68 #ifdef HAVE_ICONV
69 #include <iconv.h>
70 #endif
71 #endif
72 #include "image/xloadimage.h"
73
74 #ifndef __P
75 # define __P(x) x
76 #endif
77
78 #if 0
79 #define USE_XDRAWSTRING_ONLY_SMALL
80 #endif
81
82 #ifdef VFLIB
83 #include "VF.h"
84 #define VFONT   "minsl"
85
86 #ifndef VFCAP
87 #define VFCAP   "/usr/local/lib/VFlib/vfontcap"
88 #endif
89
90 #endif /* end of VFLIB */
91
92 #ifdef FREETYPE
93 #include "freetype.h"
94
95 #ifndef FREETYPEFONTDIR
96 #define FREETYPEFONTDIR "/usr/local/share/fonts/ttf"
97 #endif
98 #endif /*FREETYPE*/
99
100 #ifdef HAVE_TERMIOS_H
101 #define TTY_KEYINPUT
102 #else
103 #undef  TTY_KEYINPUT
104 #endif
105
106 #define DEFAULT_FORE    "yellow"
107 #define DEFAULT_BACK    "black"
108 #define PAGELIST_FONT   "a14"
109 #define PAGELIST_KFONT  "k14"
110
111 #define DEFAULT_CHARSIZE        10      /* 10% of height */
112 #define DEFAULT_HGAP            0
113 #define DEFAULT_VGAP            15
114 #define DEFAULT_BQUALITY        100
115 #define DEFAULT_OPAQUE          100     
116
117 #define XLFD_HYPHEN     14
118 #define FONT_FORMAT     "-*-%s-*-*-%s-*-*-*-*-*-%s"
119 #define DEFAULT_X_FONT  "times-medium-r"
120 #define CUTIN_DELAY     15000
121 #define SHRINK_DELAY    00500
122 #define EXEC_DELAY  20000
123
124 #define DEFAULT_GSDEV   "pnmraw+"
125
126 #define RCFILE          ".mgprc"
127
128 #define EMBEDDIR        "EMBEDDIR/"
129 #ifndef UUDECODE
130 #define UUDECODE        "/usr/bin/uudecode"
131 #endif
132 #ifndef GUNZIP
133 #define GUNZIP          "/usr/contrib/bin/gunzip"
134 #endif
135
136 #define MAXPAGE         512
137 #define MAXLINE         256
138 #define MAXVALLEN       512
139 #define MAXDIREC        16
140 #define MAXARG          32
141 #define MAXTAB          32
142 #define MAXSTYLE        100
143 #define MAXFONTDEF      100
144
145 #define MAXBGPIXMAP     2
146
147 #define SP_NONE         0
148 #define SP_SHRINK       1
149 #define SP_LCUTIN       2
150 #define SP_RCUTIN       3
151
152 #define AL_LEFT         0
153 #define AL_CENTER       1
154 #define AL_RIGHT        2
155 #define AL_LEFTFILL0    3
156 #define AL_LEFTFILL1    4
157
158 #define DEFAULT_GRADSTART       "blue"
159 #define DEFAULT_GRADEND         "black"
160 #define DEFAULT_GRADDEPTH       8
161 #define DEFAULT_GRADCOLORS      128
162 #define DEFAULT_MGPWDIR         "/tmp"
163
164 /*      mgp command line flags  */
165 #define FL_OVER         0x0001
166 #define FL_BIMAGE       0x0002
167 #define FL_DEMO         0x0004
168 #define FL_VERBOSE      0x0008
169 #define FL_OUTLINE      0x0010
170 #define FL_NOBEEP       0x0020
171 #define FL_NOFORK       0x0080
172 #define FL_PRIVATE      0x0100
173 #define FL_NODECORATION 0x0200
174 #define FL_NOAUTORELOAD 0x0400
175 #define FL_NOVFLIB      0x0800
176 #define FL_NOFREETYPE   0x1000
177 #define FL_NOSTDIN      0x2000
178 #define FL_GLYPHEDGE    0x4000
179 #define FL_FRDCACHE             0x8000
180 #define FL_NOXFT                0x10000
181
182 /*      page attribute flags    */
183 #define PGFLAG_NODEF    0x01    /* nodefault */
184
185 #define EVENT_DEFAULT \
186         (KeyPressMask|KeyReleaseMask|ButtonPressMask|StructureNotifyMask|\
187                 ExposureMask)
188 #define EVENT_RAKUGAKI \
189         (EVENT_DEFAULT|ButtonReleaseMask|Button1MotionMask)
190
191 #include "ctlwords.h"
192
193 struct ctrl_double {
194         double ct_value;
195 };
196
197 struct ctrl_int {
198         u_int ct_value;
199 };
200
201 struct ctrl_long {
202         u_long ct_value;
203 };
204
205 struct ctrl_char {
206         char *ct_value;
207 };
208
209 struct ctrl_char2 {
210         char *ct_value1;
211         char *ct_value2;
212 };
213
214 struct ctrl_args {
215         u_int ct_argc;
216         char **ct_argv;
217         int ct_flag;
218 };
219
220 struct ctrl_image {
221         char *ct_fname;
222         u_int ct_numcolor;
223         u_int ct_ximagesize;
224         u_int ct_yimagesize;
225         u_int ct_zoomflag;
226 #define Z_XMASK         0x0f
227 #define Z_YMASK         0xf0
228 #define Z_YSHIFT        4
229 #define Z_ABSOLUTE      0x00    /* absolute value */
230 #define Z_NORMAL        0x01    /* normal zoom ratio */
231 #define Z_SCREEN        0x02    /* screen relative zoom ratio */
232 #define Z_SCREEN0       0x03    /* original screen size specified */
233 #define Z_OBEY          0x04    /* obey other axis */
234 };
235
236 /* for gradation image generation*/
237 struct g_color {
238         int r, g, b;
239         int y;
240 };
241
242 struct ctrl_grad {
243         u_int ct_numcolor;
244         int ct_direction;
245         u_int ct_width;         /* resulting image width, percentage */
246         u_int ct_height;        /* resulting image height, percentage */
247 #if 0
248         u_int ct_hquality;      /* horizontal quality factor */
249         u_int ct_vquality;      /* vertical quality factor */
250 #endif
251         u_int ct_zoomflag;      /* zoom to full screen? */
252         int ct_mode;            /* linear(0) / non-linear(1) */
253         int ct_g_colors;
254         struct g_color **colors;
255 };
256
257 struct ctrl_bar {
258         u_long ct_color;
259         u_int ct_width;
260         u_int ct_start;
261         u_int ct_length;
262 };
263
264 struct ctrl_icon {
265         char *ct_value; 
266         u_long ct_color; 
267         u_int ct_size;   
268 };  
269
270 struct ctrl_area {
271         u_int ct_xoff;
272         u_int ct_width;
273         u_int ct_yoff;
274         u_int ct_height;
275 };
276
277 struct ctrl_pcache {
278         u_int ct_cflag;
279         u_int ct_cmode;
280         u_int ct_ceffect;
281         u_int ct_cvalue;
282 };
283
284 struct ctrl {
285         u_char ct_op;
286         u_char ct_flag;
287         u_int ct_page;
288         struct ctrl *ct_next;
289         union {
290                 struct ctrl_double ctrl_double;
291                 struct ctrl_int ctrl_int;
292                 struct ctrl_long ctrl_long;
293                 struct ctrl_char ctrl_char;
294                 struct ctrl_char2 ctrl_char2;
295                 struct ctrl_image ctrl_image;
296                 struct ctrl_grad ctrl_grad;
297                 struct ctrl_bar ctrl_bar;
298                 struct ctrl_args ctrl_args;
299                 struct ctrl_icon ctrl_icon;
300                 struct ctrl_area ctrl_area;
301                 struct ctrl_pcache ctrl_pcache;
302         } ct_val;
303 };
304
305 #define ctf_value       ct_val.ctrl_double.ct_value
306 #define cti_value       ct_val.ctrl_int.ct_value
307 #define ctl_value       ct_val.ctrl_long.ct_value
308 #define ctc_value       ct_val.ctrl_char.ct_value
309 #define ctc2_value1     ct_val.ctrl_char2.ct_value1
310 #define ctc2_value2     ct_val.ctrl_char2.ct_value2
311 #define ctm_fname       ct_val.ctrl_image.ct_fname
312 #define ctm_numcolor    ct_val.ctrl_image.ct_numcolor
313 #define ctm_ximagesize  ct_val.ctrl_image.ct_ximagesize
314 #define ctm_yimagesize  ct_val.ctrl_image.ct_yimagesize
315 #define ctm_zoomflag    ct_val.ctrl_image.ct_zoomflag
316 #define ctd_colors      ct_val.ctrl_grad.colors
317 #define ctd_g_colors    ct_val.ctrl_grad.ct_g_colors
318 #define ctd_numcolor    ct_val.ctrl_grad.ct_numcolor
319 #define ctd_dir         ct_val.ctrl_grad.ct_direction
320 #define ctd_basewidth   ct_val.ctrl_grad.ct_width
321 #define ctd_baseheight  ct_val.ctrl_grad.ct_baseheight
322 #define ctd_width       ct_val.ctrl_grad.ct_width
323 #define ctd_height      ct_val.ctrl_grad.ct_height
324 #define ctd_hquality    ct_val.ctrl_grad.ct_hquality
325 #define ctd_vquality    ct_val.ctrl_grad.ct_vquality
326 #define ctd_zoomflag    ct_val.ctrl_grad.ct_zoomflag
327 #define ctd_mode        ct_val.ctrl_grad.ct_mode
328 #define ctb_color       ct_val.ctrl_bar.ct_color
329 #define ctb_width       ct_val.ctrl_bar.ct_width
330 #define ctb_start       ct_val.ctrl_bar.ct_start
331 #define ctb_length      ct_val.ctrl_bar.ct_length
332 #define cta_argc        ct_val.ctrl_args.ct_argc
333 #define cta_argv        ct_val.ctrl_args.ct_argv
334 #define cta_flag        ct_val.ctrl_args.ct_flag
335 #define ctic_value      ct_val.ctrl_icon.ct_value
336 #define ctic_color      ct_val.ctrl_icon.ct_color
337 #define ctic_size       ct_val.ctrl_icon.ct_size
338 #define ctar_xoff       ct_val.ctrl_area.ct_xoff
339 #define ctar_width      ct_val.ctrl_area.ct_width
340 #define ctar_yoff       ct_val.ctrl_area.ct_yoff
341 #define ctar_height     ct_val.ctrl_area.ct_height
342 #define ctch_flag       ct_val.ctrl_pcache.ct_cflag
343 #define ctch_mode       ct_val.ctrl_pcache.ct_cmode
344 #define ctch_effect     ct_val.ctrl_pcache.ct_ceffect
345 #define ctch_value      ct_val.ctrl_pcache.ct_cvalue
346
347 struct ctl_words {
348         u_char ctl_type;
349         char ctl_vtype;
350 #define T_STR   'c'
351 #define T_STR2  'C'
352 #define T_INT   'i'
353 #define T_LONG  'l'
354 #define T_DOUBLE 'f'
355 #define T_SP    'x'
356 #define T_VOID  '-'
357         char *ctl_string;
358         int ctl_strlen;
359 };
360
361 extern const struct ctl_words ctl_words[];
362
363 struct page_attribute {
364         u_int pg_flag;
365         u_int pg_linenum;
366         u_int pg_b_numcolor;    /* background gradation number of colors */
367         u_int pg_b_dir;         /* background gradation deg */
368         u_int pg_text;          /* this page is text only */
369 };
370 extern struct page_attribute page_attribute[MAXPAGE];
371
372 extern int      caching;
373 extern int      cached_page;
374 extern int      cache_hit;
375 extern int      cache_mode;
376 extern int      cache_effect;
377 extern int      cache_value;
378
379 struct render_state {
380         /* state of the parser */
381         u_int page;
382         u_int line;
383         struct ctrl *cp;
384         enum { P_NONE, P_DEFAULT, P_PAGE, P_END } phase;
385                 /*
386                  * NONE    - nothing
387                  * DEFAULT - doing default_control
388                  * PAGE    - doing page_control
389                  */
390         char *curprefix;
391         char *tabprefix;
392         u_int align;
393         u_int special;
394         u_int leftfillpos;
395
396         /*
397          * state of the renderer
398          * we don't have xpos here since that will be
399          * dynaimcally determined at CTL_LINEEND.
400          */
401         Drawable target;
402         u_int height;
403         u_int width;
404         int xprefix;
405         int tabxprefix;
406         int xoff;
407         int yoff;
408         u_int ypos;
409         int have_mark;
410         u_int mark_ypos;
411         u_int repaint;
412         int maxascent;
413         int maxdescent;
414         u_int linewidth;
415         u_int brankline;
416         u_int opaque;
417         struct ctrl *xfont;
418         struct render_object *obj, *objlast;
419 };
420
421 struct render_object {
422         struct render_object *next;
423         int x;  /* relative from left position of line */
424         int y;  /* relative from center position of line (usually negative) */
425         int ascent;     /* size above the baseline */
426         int descent;    /* size below the baseline */
427         int vertloc;    /* vertical placement control */
428 #define VL_BASE         0
429 #define VL_CENTER       1
430 #define VL_TOP          2
431 #define VL_BOTTOM       3
432         enum {
433 #ifdef VFLIB
434                 O_VFONT,
435 #endif /* VFLIB */
436 #ifdef FREETYPE
437                 O_TFONT,
438 #endif /* FREETYPE */
439                 O_XFONT,
440                 O_IMAGE,
441 #ifdef MNG
442                 O_ANIM,
443 #endif /* MNG */
444 #ifdef USE_XFT2
445                 O_XTFONT,
446 #endif /* MNG */
447                 O_ICON
448         } type;
449         u_long fore;
450         union {
451 #ifdef VFLIB
452                 struct vfont *vfc;
453 #endif /* VFLIB */
454 #ifdef FREETYPE
455                 struct tfont *tfc;
456 #endif /* FREETYPE */
457                 struct {
458                         char *xfont;
459                         u_int csize;
460                         u_int code;
461                         char *registry;
462                 } xfont;
463                 struct {
464                         Image *image;
465                         float xzoom, yzoom;
466                 } image;
467                 struct {
468                         u_int itype;
469                         u_int isize;
470                         u_int npoint;
471                         XPoint *xpoint;
472                 } icon;
473 #ifdef MNG
474                 struct {
475                         u_int width;
476                         u_int height;
477                         char *filename;
478                         void *key;
479                 } anim;
480 #endif /* MNG */
481 #ifdef USE_XFT2
482                 struct {
483                         char *data;
484                         char *fontname;
485                         char *registry;
486                         int len;
487                         int size;
488                         int charset16;
489                 } xftfont;
490 #endif
491         } data;
492 };
493
494 #ifdef VFLIB
495 struct vfont {
496         struct vfont *next;
497         struct vfont *prev;
498         struct vfont *lrunext;
499         struct vfont *lruprev;
500         u_int size;
501         u_int width;
502         u_int bwidth;
503         u_int height;
504         u_int code;
505         u_int charlen;
506         u_int xmax;
507         int ascent;
508         int descent;
509         u_int xoff;
510         char *fontname;
511         u_char *dbitmap;
512         u_int ref;
513 };
514 #endif /* VFLIB */
515
516 #ifdef FREETYPE
517 struct tfont {
518         struct tfont *next;
519         struct tfont *prev;
520         struct tfont *lrunext;
521         struct tfont *lruprev;
522         u_int size;             /* char_size (as specified by %size) */
523         u_int width;            /* bitmap width */
524         u_int bwidth;           /* bitmap width, byte boundary */
525         u_int height;           /* bitmap height */
526         u_int code;
527         u_int charlen;          /* origin x axis advance width */
528         u_int xmax;                     /* right edge of bbox */
529         int ascent;             /* (top of bitmap) - (origin y axis) */
530         int descent;            /* (origin y axis) - (bottom of bitmap) */
531         int xoff;               /* (left of bitmap) - (origin x axis) */
532         char *fontname;
533         u_char *dbitmap;
534         u_int ref;
535         int regid;              /* registry ID */
536 };
537 #endif /* FREETYPE */
538
539 struct alloc_color {
540         int     num;
541         long    *colors;
542 };
543
544 struct bgpixmap {
545         struct ctrl *ctl;
546         Pixmap  pixmap;
547         Image *image;
548         XImageInfo *ximageinfo;
549 };
550
551 /*
552  * The following variables are defined in global.c, and therefore
553  * they are available in both "mgp" and "mgp2ps" binary.
554  */
555 #if 0
556 extern char *page_data[MAXPAGE][MAXLINE];
557 #endif
558 extern struct ctrl *page_control[MAXPAGE][MAXLINE];
559 extern struct ctrl *default_control[MAXLINE];
560 extern struct ctrl *tab_control[MAXTAB+MAXSTYLE];
561 extern struct ctrl *init_control[MAXLINE];
562 extern struct ctrl *fontdef_control[MAXFONTDEF];
563
564 extern u_int mgp_flag;
565 extern int verbose;
566 extern u_int maxpage;
567 extern u_int cur_page;
568 extern char *mgp_fname;
569
570 extern u_int parse_error;
571 extern u_int parse_debug;
572
573 extern Display *display;
574 extern Window window;
575 extern int screen;
576 extern int window_width;
577 extern int window_height;
578 extern Pixmap pixmap;
579 extern Pixmap cachewin;
580 extern Pixmap cachetmp;
581 extern struct bgpixmap bgpixmap[MAXBGPIXMAP];
582 extern Colormap colormap;
583 extern struct alloc_color image_clr;
584 extern struct alloc_color back_clr;
585 extern struct alloc_color font_clr;
586
587 extern u_int char_size[2];
588 extern u_int horiz_gap[2];
589 extern u_int vert_gap[2];
590 extern u_int depth;
591 extern Visual *visual;
592 extern u_long fore_color[2];
593 extern u_long back_color[2];
594 extern u_long ctrl_color[2];
595 extern u_int b_quality[2];
596 extern u_int quality_flag;
597
598 extern char mgp_charset[256];
599
600 #define VERT_GAP(s)             ((s) * vert_gap[caching] / 100)
601 #define HORIZ_GAP(s)            ((s) * horiz_gap[caching] / 100)
602 #define VERT_STEP(s)            ((s) + VERT_GAP(s))
603 #define HORIZ_STEP(s, x)        ((x) + HORIZ_GAP(s))
604
605 /*
606  * The following variable are defined in x11.c.  Therefore, these are
607  * accessible only in "mgp" binary, not in "mgp2ps".
608  * We should separate header files.
609  * (or, if mgp.c and print.c get merged the problem will vanish)
610  */
611 /* covered by gcconf */
612 extern GC gcfore;
613 extern GC gcpen;
614 extern GC gcred;
615 extern GC gcgreen;
616 extern GC gcyellow;
617
618 /* not covered by gcconf */
619 extern GC gc_pl;
620 extern GC gc_plrev;
621 extern GC gc_pta;
622 extern GC gc_ptk;
623
624 extern GC gc_cache;
625
626 extern long xeventmask;
627
628 /*
629  * The following variable are defined in mgp.c.  Therefore, these are
630  * accessible only in "mgp" binary, not in "mgp2ps".
631  * We should separate header files.
632  * (or, if mgp.c and print.c get merged the problem will vanish)
633  */
634 extern Window plwin[MAXPAGE];
635 extern Pixmap maskpix;
636 extern XFontStruct *plfs;
637 extern XFontStruct *plkfs;
638 extern XFontStruct *plsfs;
639 extern u_int pg_mode;
640 extern time_t t_start;
641 extern u_int t_fin;
642 extern u_int tbar_mode;
643 extern u_long pl_fh, pl_fw;
644 extern u_long depth_mask;
645 #ifdef VFLIB
646 extern char *vfcap_name;
647 #endif
648 #ifdef FREETYPE
649 extern char *freetypefontdir;
650 extern char *freetypefont0;     /* font name to be used as a last resort */
651 extern char *freetypemfont0;    /* font name to be used as a last resort */
652 extern int unicode_map[65536];
653 #endif
654 extern int latin_unicode_map[3][256];
655 #ifdef TTY_KEYINPUT
656 extern volatile int ttykey_enable;
657 #endif
658 extern char *back_clname;
659 extern char *gsdevice;
660 extern char *htmlimage;
661
662 extern char *mgpwdir;
663 extern char mgpwdirname[];
664
665 /* mgp.c */
666 extern pid_t checkchild __P((void *));
667 extern Window checkchildwin __P((void *));
668 extern void regchild __P((pid_t, void *, Window, int));
669 extern void purgechild __P((int));
670 extern void remapchild __P((void));
671 extern void cleanup __P((int));
672 #ifdef TTY_KEYINPUT
673 extern void try_enable_ttykey __P((void));
674 #endif
675
676 /*draw.c*/
677 extern void state_goto __P((struct render_state *, u_int, int));
678 extern void state_init __P((struct render_state *));
679 extern void state_newpage __P((struct render_state *));
680 extern void state_next __P((struct render_state *));
681 extern void draw_page __P((struct render_state *, struct ctrl *));
682 extern Bool draw_one __P((struct render_state *, XEvent *));
683 extern void timebar __P((struct render_state *));
684 extern void draw_reinit __P((struct render_state *));
685 extern int get_regid __P((char *));
686
687 /*parse.c*/
688 extern void load_file __P((char *));
689 extern void cleanup_file __P(());
690 extern int ctlcmp __P((struct ctrl *, struct ctrl *));
691 extern FILE *fsearchopen __P((char *, char *, char **));
692 extern int chkfile __P((char *));
693 extern struct ctrl *ctllastitem __P((struct ctrl *));
694 extern void ctlappend __P((struct ctrl *, struct ctrl *));
695 extern void ctlinsert __P((struct ctrl **, struct ctrl *));
696 extern struct ctrl *ctlalloc1 __P((u_int));
697 extern void ctlfree __P((struct ctrl *));
698 extern struct ctrl *ctlcopy __P((struct ctrl *));
699 extern struct ctrl *ctlcopy1 __P((struct ctrl *));
700 extern void debug0 __P((struct ctrl *));
701 extern void debug1 __P((struct ctrl *));
702
703 /*plist.c*/
704 extern void pl_on __P((struct render_state *));
705 extern void pl_off __P((struct render_state *));
706 extern void pl_pdraw __P((struct render_state *, int, GC));
707 extern void pl_title __P((u_int));
708 extern char *page_title __P((int));
709 extern void pg_on __P((void));
710 extern void pg_clean __P((void));
711 extern void pg_draw __P((struct render_state *));
712 extern void pg_off __P((void));
713
714 /*font.c*/
715 extern struct vfont *vfc_get __P((u_int, u_int, u_int, int));
716 extern void vfc_setfont __P((char *));
717 extern XImage *vfc_image __P((struct vfont *, long, long, XImage *, u_int, u_int));
718
719 /*x11.c or x11dummy.c*/
720 extern int window_x;
721 extern int window_y;
722 extern void init_win1 __P((char *));
723 extern void init_win2 __P((void));
724 extern void init_win3 __P((void));
725 extern void finish_win __P((void));
726 extern int get_color __P((char *, u_long *));
727 extern struct g_color *name2gcolor __P((char *));
728 extern void regist_alloc_colors __P((struct alloc_color *, u_long *, int));
729 extern void free_alloc_colors __P((struct alloc_color *));
730
731 /* background.c */
732 extern double cdist __P((int, int, int, int, int, int));
733 extern double lcdist __P((int, int, int, int, int, int, double, double));
734 extern byte *draw_gradation __P((int, int, struct ctrl_grad *));
735 extern Image *make_XImage __P((byte *, unsigned int, unsigned int));
736
737 /* postscript.c */
738 extern int ps_boundingbox __P((char *, int *, int *, int *, int *));
739 extern void image_zoomratio __P((struct render_state *, float *, float *, int, int, int));
740
741 /* tfont.c */
742 extern int tfc_setsize __P((u_int));
743 extern struct tfont *tfc_get __P((u_int, u_int, int, char *, int));
744 extern void tfc_setfont __P((char *, int, char *));
745 extern XImage *tfc_image __P((struct tfont *, long, long, XImage *, int, int));
746
747 /* embed.c */
748 extern char *embed_fname __P((char *));
749 extern void embed_file __P((FILE *, struct ctrl *, int *));
750 extern void cleandir __P((void));
751
752 /* missing/ *.c */
753 #ifndef HAVE_STRDUP
754 extern char *strdup __P((const char *));
755 #endif
756 #ifndef HAVE_STRSEP
757 extern char *strsep __P((char **, const char *));
758 #endif
759 #ifndef HAVE_USLEEP
760 extern void usleep __P((u_int));
761 #endif
762
763 #ifdef FREETYPE
764 #define RASTERLIB
765 #endif
766 #ifdef VFLIB
767 #define RASTERLIB
768 #endif
769
770 #if 1
771 #define DITHERED_BGRAD
772 #define COLOR_BUGFIX
773 #endif
774