/* Copyright (c) 2004-2005, Dirk Krause All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above opyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the Dirk Krause nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #define DKFIGEPS_C 1 #include "dkfig.h" $(trace-include) #define drd(v,o,w) dkfig_tool2_drd(v,o,w) typedef struct { char *name; char *filename; char *version; char *revision; } pattern_data; #define OI_FLAG_FONT_RE_ENCODING 0x0001 #define OI_FLAG_DOCUMENT_SETUP 0x0002 #define OI_FLAG_ALIGNED_TEXT 0x0004 #define HAVE_COLOR 0x0001 #define HAVE_LINEWIDTH 0x0002 #define HAVE_LINECAP 0x0004 #define HAVE_LINEJOIN 0x0008 #define HAVE_DASH 0x0010 #define HAVE_PSFONT 0x0020 /* {{{ file names for re-encoding procedures /Times-Roman /IsoLatin1-Times-Roman FontReEncode */ static char new_fre_proc_file[] = { "f2vfre2.ps" }; static char old_fre_proc_file[] = { "f2vfre1.ps" }; static char f2v_aligned_text_procset[] = { "f2vtal.ps" }; /* }}} */ /* {{{ kw keywords for EPS output */ typedef char *PCHAR; static char *kw[] = { /* 0 */ "\r\n", /* 1 */ " ", /* 2 */ "%!PS-Adobe-", /* 3 */ ".0 EPSF-", /* 4 */ ".0", /* 5 */ "%%BoundingBox:", /* 6 */ "%%Title: ", /* 7 */ "%%Creator: fig2vect, see http://fig2vect.sourceforge.net", /* 8 */ "%%Pages: 1", /* 9 */ "%%PageOrder: Ascend", /* 10 */ "%%EndComments", /* 11 */ "%%DocumentData: Clean7Bit", /* 12 */ "%%DocumentNeededFonts: ", /* 13 */ "%%DocumentNeededResources: ", /* 14 */ "font ", /* 15 */ "%%+ ", /* 16 */ "%%BeginProlog", /* 17 */ "%%EndProlog", /* 18 */ "%%BeginProcSet: ", /* 19 */ "%%EndProcSet", /* 20 */ "%%BeginResource: ", /* 21 */ "%%EndResource", /* 22 */ "fig2vect-fre", /* 23 */ "1.0", /* 24 */ "1", /* 25 */ "2.0", /* 26 */ "2", /* 27 */ "%%BeginSetup", /* 28 */ "%%EndSetup", /* 29 */ "/", /* 30 */ "DocFont", /* 31 */ "def", /* 32 */ "FontReEncode", /* 33 */ "%%Page: 1 1", /* 34 */ "%%Trailer", /* 35 */ "%%EOF", /* 36 */ "showpage", /* 37 */ "%", /* 38 */ "setrgbcolor", /* 39 */ "setlinewidth", /* 40 */ "setlinecap", /* 41 */ "setlinejoin", /* 42 */ "fill", /* 43 */ "stroke", /* 44 */ "gsave", /* 45 */ "grestore", /* 46 */ "newpath", /* 47 */ "closepath", /* 48 */ "moveto", /* 49 */ "lineto", /* 50 */ "-90", /* 51 */ "0", /* 52 */ "90", /* 53 */ "180", /* 54 */ "270", /* 55 */ "arc", /* 56 */ "curveto", /* 57 */ "translate", /* 58 */ "scale", /* 59 */ "rotate", /* 60 */ "setdash", /* 61 */ "[", /* 62 */ "]", /* 63 */ "clip", /* 64 */ "findfont", /* 65 */ "scalefont", /* 66 */ "setfont", /* 67 */ "f2vtal", /* 68 */ "show", /* 69 */ "TextAlignedRight", /* 70 */ "TextAlignedCentered", /* 71 */ "(", /* 72 */ ")", /* 73 */ "\\", /* 74 */ "matrix currentmatrix", /* 75 */ "setmatrix", /* 76 */ "f2vpat", /* 77 */ "imgstr", /* 78 */ "string", /* 79 */ "image", /* 80 */ "colorimage", /* 81 */ "{", /* 82 */ "}", /* 83 */ "currentfile", /* 84 */ "readhexstring", /* 85 */ "readstring", /* 86 */ "pop", /* 87 */ "/ASCII85Decode filter", /* 88 */ "/FlateDecode filter", /* 89 */ "/RunLengthDecode filter", /* 90 */ "false", /* 91 */ "-", /* 92 */ "inputf", /* 93 */ "true", /* 94 */ "A", /* 95 */ "B", /* 96 */ "C", /* 97 */ "eps", /* 98 */ "dict", /* 99 */ "begin", /* 100 */ "end", /* 101 */ "1 vmreclaim", /* 102 */ "currentdict", /* 103 */ "undef", /* 104 */ "%%BeginDocument: ", /* 105 */ "%%EndDocument", /* 106 */ "%", /* 107 */ "\\begin{picture}", /* 108 */ "(0,0)", /* 109 */ "\\end{picture}%", /* 110 */ "% ----- Change the file name in the next line -----", /* 111 */ "\\includegraphics{", /* 112 */ "inputfile", /* 113 */ "\\setlength{\\unitlength}{1bp}%", /* 114 */ ",", /* 115 */ "\\put", /* 116 */ "\\makebox", /* 117 */ "\\smash", /* 118 */ "\\rotatebox", /* 119 */ "b", /* 120 */ "rb", /* 121 */ "lb", /* 122 */ "\\color[rgb]", /* 123 */ "\\mbox", /* 124 */ "\\setlength{", /* 125 */ "\\paperwidth", /* 126 */ "\\paperheight", /* 127 */ "bp", /* 128 */ "\n", /* 129 */ "\\usepackage{graphicx}", /* 130 */ "\\usepackage{color}", /* 131 */ "\\usepackage{ifpdf}", /* 132 */ "\\begin{document}%", /* 133 */ "\\end{document}", /* 134 */ "\\pagestyle{empty}", /* 135 */ "\\setlength{\\voffset}{-1in}", /* 136 */ "\\setlength{\\topmargin}{0mm}", /* 137 */ "\\setlength{\\headheight}{0mm}", /* 138 */ "\\setlength{\\headsep}{0mm}", /* 139 */ "\\setlength{\\topskip}{0mm}", /* 140 */ "\\setlength{\\hoffset}{-1in}", /* 141 */ "\\setlength{\\oddsidemargin}{0mm}", /* 142 */ "\\setlength{\\evensidemargin}{0mm}", /* 143 */ "\\setlength{\\marginparwidth}{0mm}", /* 144 */ "\\setlength{\\marginparsep}{0mm}", /* 145 */ "\\setlength{\\textwidth}{\\paperwidth}", /* 146 */ "\\setlength{\\textheight}{\\paperheight}", /* 147 */ "\\setlength{\\parskip}{0mm}", /* 148 */ "\\setlength{\\parindent}{0mm}", /* 149 */ "\\ifpdf", /* 150 */ "\\setlength{\\pdfpagewidth}{\\paperwidth}", /* 151 */ "\\setlength{\\pdfpageheight}{\\paperheight}", /* 152 */ "\\fi", /* 153 */ "<<", /* 154 */ ">>", /* 155 */ "setpagedevice", /* 156 */ "/PageSize", }; static size_t nkw = sizeof(kw)/sizeof(PCHAR); /* }}} */ static char str_open_rb[] = { "rb" }; static char str_open_read[] = { "r" }; static char apv[] = { "1.0" }; static char apr[] = { "1" }; static pattern_data pd[] = { { (char *)"ThirtyLeft", (char *)"f2vpat00.ps", apv, apr }, { (char *)"ThirtyRight", (char *)"f2vpat01.ps", apv, apr }, { (char *)"ThirtyHatch", (char *)"f2vpat02.ps", apv, apr }, { (char *)"FourtyFiveLeft", (char *)"f2vpat03.ps", apv, apr }, { (char *)"FourtyFiveRight", (char *)"f2vpat04.ps", apv, apr }, { (char *)"FourtyFiveHatch", (char *)"f2vpat05.ps", apv, apr }, { (char *)"HorizontalBricks", (char *)"f2vpat06.ps", apv, apr }, { (char *)"VerticalBricks", (char *)"f2vpat07.ps", apv, apr }, { (char *)"HorizontalLines", (char *)"f2vpat08.ps", apv, apr }, { (char *)"VerticalLines", (char *)"f2vpat09.ps", apv, apr }, { (char *)"CrossHatch", (char *)"f2vpat10.ps", apv, apr }, { (char *)"HorizontalShinglesLeft", (char *)"f2vpat11.ps", apv, apr }, { (char *)"HorizontalShinglesRight", (char *)"f2vpat12.ps", apv, apr }, { (char *)"VerticalShinglesLeft", (char *)"f2vpat13.ps", apv, apr }, { (char *)"VerticalShinglesRight", (char *)"f2vpat14.ps", apv, apr }, { (char *)"FishScales", (char *)"f2vpat15.ps", apv, apr }, { (char *)"SmallFishScales", (char *)"f2vpat16.ps", apv, apr }, { (char *)"Circles", (char *)"f2vpat17.ps", apv, apr }, { (char *)"Hexagons", (char *)"f2vpat18.ps", apv, apr }, { (char *)"Octagons", (char *)"f2vpat19.ps", apv, apr }, { (char *)"HorizontalTireTreads", (char *)"f2vpat20.ps", apv, apr }, { (char *)"VerticalTireTreads", (char *)"f2vpat21.ps", apv, apr } }; /* {{{ null_oi: initialize dkfig_eps_output_instruction */ static void null_oi DK_P1(dkfig_eps_output_instruction *,oi) { oi->c = NULL; oi->d = NULL; oi->s = NULL; oi->dro = NULL; oi->fl = NULL; oi->fli = NULL; oi->iw = NULL; oi->iwi = NULL; oi->fdvi = NULL; oi->fps = NULL; oi->fnused = NULL; oi->xfactor = 0.06; oi->yfactor = 0.06; oi->xshift = 0.0; oi->yshift = 0.0; oi->xleft = oi->xright = oi->ybottom = oi->ytop = 0.0; oi->flags = 0; oi->o = NULL; oi->me = 0; oi->have = HAVE_DASH; oi->lw = 0.0; oi->lc = 0; oi->lj = 0; oi->a = NULL; oi->ls = 0; oi->sv = 0.0; oi->psfont = 0; oi->psfsize = 0.0; oi->numimw = 0UL; oi->allimw = 0; oi->spcpass = 0; oi->errprinted = 0; oi->skip_images = 0; } /* }}} */ /* {{{ stream_putl: put unsigned long to stream */ static void stream_putul DK_P2(dk_stream_t *,s, unsigned long, ul) { char buffer[64]; #if DK_HAVE_SNPRINTF || HAVE_SNPRINTF snprintf(buffer, sizeof(buffer), "%lu", ul); buffer[sizeof(buffer)-1] = '\0'; #else sprintf(buffer, "%lu", ul); #endif dkstream_puts(s, buffer); } /* }}} */ /* {{{ stream_putdouble: put double to stream */ static void stream_putdouble DK_P4(dk_stream_t *,s, double,d, dk_fig_conversion *,c, int,w) { char buffer[64]; double x; /* x = dkma_double_restrict_digits(d, 7); */ x = drd(d,c,w); #if DK_HAVE_SNPRINTF snprintf(buffer, sizeof(buffer), "%lg", x); buffer[sizeof(buffer)-1] = '\0'; #else sprintf(buffer, "%lg", x); #endif dkstream_puts(s, buffer); } /* }}} */ /* {{{ kw_out Write keyword to output stream. */ static void kw_out DK_P2(dk_stream_t *,s, size_t,i) { if(s && (i < nkw)) { dkstream_puts(s, kw[i]); } } /* }}} */ /* {{{ correct_color_for_palette */ static void correct_color_for_palette DK_P2(double *,d, int *,i) { double x; x = 256.0 * (*d); x = floor(x); *i = (int)dkma_double_to_l(x); if(*i > 255) { *i = 255; } *d = x / 256.0; } /* }}} */ /* {{{ dkfig_eps_correct_for_palette Correct color cell for palette */ void dkfig_eps_correct_for_palette DK_P1(dk_fig_dcc *,dcc) { correct_color_for_palette(&(dcc->red), &(dcc->ired)); correct_color_for_palette(&(dcc->green), &(dcc->igreen)); correct_color_for_palette(&(dcc->blue), &(dcc->iblue)); } /* }}} */ /* {{{ double_nearly_equal Check whether or not two double values are nearly equal. */ static int double_nearly_equal DK_P2(double,d1,double,d2) { int back = 0; int me = 0; double diff; diff = fabs(dkma_sub_double_ok(d1,d2,&me)); if(!me) { if(diff < DKFIG_EPSILON) { back = 1; } } return back; } /* }}} */ /* {{{ ps_my_font_name: print name of re-encoded font */ static void ps_my_font_name DK_P2(\ dkfig_eps_output_instruction *,oi, unsigned,i\ ) { kw_out(oi->s, 30); dkfig_tool_num_as_string(oi->s, i, 2); } /* }}} */ /* {{{ set_psfont: set font, scale... */ static void set_psfont DK_P3(\ dkfig_eps_output_instruction *,oi,\ unsigned,fontno, double,sz\ ) { int must_set = 1; if((oi->have) & HAVE_PSFONT) { if(oi->psfont == fontno) { if(double_nearly_equal(oi->psfsize, sz)) { must_set = 0; } } } if(must_set) { kw_out(oi->s, 29); ps_my_font_name(oi, fontno); kw_out(oi->s, 1); kw_out(oi->s, 64); kw_out(oi->s, 1); stream_putdouble( oi->s, dkma_mul_double_ok(sz, (oi->c)->fsf, &(oi->me)), oi->c, 1 ); kw_out(oi->s, 1); kw_out(oi->s, 65); kw_out(oi->s, 1); kw_out(oi->s, 66); kw_out(oi->s, 0); } } /* }}} */ /* {{{ set_dash: set dash pattern */ static void set_dash DK_P3(\ dkfig_eps_output_instruction *,oi,\ int,ls, double,sv\ ) { int must_set = 1; int xls; double dist, dashgap; dist = 0.9 * sv; dashgap = 0.1; if((oi->have) & HAVE_LINEWIDTH) { if(dashgap > (0.1 * oi->lw)) { dashgap = 0.1 * oi->lw; } } if(((oi->c)->opt1) & DKFIG_OPT_DP_DOT_LW) { dashgap = oi->lw; } xls = ls; if(xls == -1) { xls = 0; } if((oi->have) & HAVE_DASH) { if(oi->ls == xls) { if(xls == 0) { must_set = 0; } else { if(double_nearly_equal(oi->sv, sv)) { must_set = 0; } } } } if(must_set) { switch(xls) { case 1: { kw_out(oi->s, 61); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 62); kw_out(oi->s, 1); stream_putdouble(oi->s, 0.0, oi->c, 1); } break; case 2: { kw_out(oi->s, 61); stream_putdouble(oi->s, dashgap, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 62); kw_out(oi->s, 1); stream_putdouble(oi->s, 0.0, oi->c, 1); } break; case 3: { kw_out(oi->s, 61); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dashgap, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 62); kw_out(oi->s, 1); stream_putdouble(oi->s, 0.0, oi->c, 1); } break; case 4: { kw_out(oi->s, 61); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dashgap, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dashgap, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 62); kw_out(oi->s, 1); stream_putdouble(oi->s, 0.0, oi->c, 1); } break; case 5: { kw_out(oi->s, 61); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dashgap, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dashgap, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dashgap, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dist, oi->c, 1); kw_out(oi->s, 62); kw_out(oi->s, 1); stream_putdouble(oi->s, 0.0, oi->c, 1); } break; default: { kw_out(oi->s, 61); kw_out(oi->s, 62); kw_out(oi->s, 1); kw_out(oi->s, 51); } break; } kw_out(oi->s, 1); kw_out(oi->s, 60); kw_out(oi->s, 0); oi->have |= HAVE_DASH; oi->ls = xls; oi->sv = sv; if(oi->ls == -1) { oi->ls = 0; } } } /* }}} */ /* {{{ set_linecap */ static void set_linecap DK_P2(\ dkfig_eps_output_instruction *,oi, int,lc\ ) { int must_set = 1; if((oi->have) & HAVE_LINECAP) { if(oi->lc == lc) { must_set = 0; } } if(must_set) { stream_putul(oi->s, (unsigned long)lc); kw_out(oi->s, 1); kw_out(oi->s, 40); kw_out(oi->s, 0); oi->have |= HAVE_LINECAP; oi->lc = lc; } } /* }}} */ /* {{{ set_linejoin */ static void set_linejoin DK_P2(\ dkfig_eps_output_instruction *,oi, int,lj\ ) { int must_set = 1; if((oi->have) & HAVE_LINEJOIN) { if(oi->lj == lj) { must_set = 0; } } if(must_set) { stream_putul(oi->s, (unsigned long)lj); kw_out(oi->s, 1); kw_out(oi->s, 41); kw_out(oi->s, 0); oi->have |= HAVE_LINEJOIN; oi->lj = lj; } } /* }}} */ /* {{{ set_linewidth */ static void set_linewidth DK_P2(\ dkfig_eps_output_instruction *,oi, double,lw\ ) { int must_set = 1; if((oi->have) & HAVE_LINEWIDTH) { if(double_nearly_equal(oi->lw, lw)) { must_set = 0; } } if(must_set) { stream_putdouble(oi->s, lw, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 39); kw_out(oi->s, 0); oi->have |= HAVE_LINEWIDTH; oi->lw = lw; } } /* }}} */ /* {{{ set_color */ static void set_color DK_P2(\ dkfig_eps_output_instruction *,oi, dk_fig_dcc *,dcc\ ) { int must_set = 1; if((oi->have) & HAVE_COLOR) { if(double_nearly_equal((oi->dcc).red, dcc->red)) { if(double_nearly_equal((oi->dcc).green, dcc->green)) { if(double_nearly_equal((oi->dcc).blue, dcc->blue)) { must_set = 0; } } } } if(must_set) { (oi->dcc).red = dcc->red; (oi->dcc).green = dcc->green; (oi->dcc).blue = dcc->blue; oi->have |= HAVE_COLOR; stream_putdouble(oi->s, dcc->red, oi->c, 0); kw_out(oi->s, 1); stream_putdouble(oi->s, dcc->green, oi->c, 0); kw_out(oi->s, 1); stream_putdouble(oi->s, dcc->blue, oi->c, 0); kw_out(oi->s, 1); kw_out(oi->s, 38); kw_out(oi->s, 0); } } /* }}} */ /* {{{ ccdy: Convert double y coordinate */ static double ccdy DK_P2(\ dkfig_eps_output_instruction *,oi, double,y\ ) { double back; back = dkma_add_double_ok( dkma_mul_double_ok(oi->yfactor, y, &(oi->me)), oi->yshift, &(oi->me) ); return back; } /* }}} */ /* {{{ ccdx */ static double ccdx DK_P2(\ dkfig_eps_output_instruction *,oi, double,x\ ) { double back; back = dkma_add_double_ok( dkma_mul_double_ok(oi->xfactor, x, &(oi->me)), oi->xshift, &(oi->me) ); return back; } /* }}} */ /* {{{ ccdd: convert double distance */ static double ccdd DK_P2(\ dkfig_eps_output_instruction *,oi, double,d\ ) { double back; back = dkma_mul_double_ok(oi->xfactor, d, &(oi->me)); return back; } /* }}} */ /* {{{ cclx: convert long x coordinate */ static double cclx DK_P2(\ dkfig_eps_output_instruction *,oi, long,x\ ) { double back; back = ccdx(oi, dkma_l_to_double(x)); return back; } /* }}} */ /* {{{ ccly */ static double ccly DK_P2(\ dkfig_eps_output_instruction *,oi, long,y\ ) { double back; back = ccdy(oi, dkma_l_to_double(y)); return back; } /* }}} */ /* {{{ xout: print double x coordinate */ static void xout DK_P3(\ dkfig_eps_output_instruction *,oi, double,x, int,w\ ) { stream_putdouble(oi->s, ccdx(oi,x), oi->c, w); } /* }}} */ /* {{{ get_object_linewidth: get linewidth for object */ static double get_object_linewidth DK_P2(\ dkfig_eps_output_instruction *,oi, int,ispat\ ) { double back = 0.0; back = dkma_mul_double_ok( dkma_l_to_double(((oi->o)->fpd).lt), 0.9, &(oi->me) ); if(ispat) { if(!(((oi->o)->fpd).lt)) { back = 0.9; } back = 0.9; } if(((oi->c)->opt1) & DKFIG_OPT_ENLIGHTEN_LOOK) { back = 0.5 * back; } return back; } /* }}} */ /* {{{ yout: print y coordinate */ static void yout DK_P3(\ dkfig_eps_output_instruction *,oi, double,y, int,w\ ) { stream_putdouble(oi->s, ccdy(oi,y), oi->c, w); } /* }}} */ /* {{{ dpointout: print point coordinates */ static void dpointout DK_P4(\ dkfig_eps_output_instruction *,oi,\ double,x, double,y, int,w\ ) { xout(oi, x, w); kw_out(oi->s, 1); yout(oi, y, w); kw_out(oi->s, 1); } /* }}} */ /* {{{ ncdpointout: print point coordinates without conversion */ static void ncdpointout DK_P4(\ dkfig_eps_output_instruction *,oi,\ double,x, double,y, int,w\ ) { stream_putdouble(oi->s, x, oi->c, w); kw_out(oi->s, 1); stream_putdouble(oi->s, y, oi->c, w); kw_out(oi->s, 1); } /* }}} */ /* {{{ lpointout: print long point coordinates */ static void lpointout DK_P4(\ dkfig_eps_output_instruction *,oi,\ long,x, long,y, int,w\ ) { dpointout(oi, dkma_l_to_double(x), dkma_l_to_double(y), w); } /* }}} */ /* {{{ register_pattern: mark pattern as used */ static void register_pattern DK_P2(int *,pu, dk_fig_object *,o) { int i; $? "+ register_pattern" i = (o->fpd).af; if(i > 40) { if(i < 63) { pu[i - 41] = 1; } } $? "- register_pattern" } /* }}} */ /* {{{ handle_special_comments */ static void handle_special_comments DK_P2(\ dkfig_eps_output_instruction *,oi, dk_fig_object *,o\ ) { int i; if((o->osc) && (o->osci)) { dk_fig_opt *speccom; $? ". processing special comments for object" dksto_it_reset(o->osci); while((speccom = (dk_fig_opt *)dksto_it_next(o->osci)) != NULL) { $? ". speccom = \"%s\"", speccom->name i = dkfig_opt_process_special_comment( oi->c, speccom->name, kw[97], 0 ); if((oi->spcpass) == 0) { dkfig_tool2_report_special_comment(oi->c, speccom, i); } } } } /* }}} */ /* {{{ gather_information_and_run_latex Gather information (which fonts are used...) and run LaTeX/TeX and dvips if required. */ static int gather_information_and_run_latex DK_P1(\ dkfig_eps_output_instruction *,oi\ ) { int back = 1; int oldback; int must_run_latex = 0; dk_fig_object *o; dk_fig_text *t; unsigned long backupopt1, backupopt2; dk_fig_polyline *p; $? "+ gather_..." dksto_it_reset(oi->fli); while((o = (dk_fig_object *)dksto_it_next(oi->fli)) != NULL) { /* DK_MEMCPY(&backupc,oi->c,sizeof(dk_fig_conversion)) ; */ backupopt1 = (oi->c)->opt1; backupopt2 = (oi->c)->opt2; if((oi->c)->app) { dkapp_set_source_lineno((oi->c)->app, o->lineno); } handle_special_comments(oi,o); switch(o->objtype) { case DK_FIG_OBJ_TEXT: { $? ". text object" t = (dk_fig_text *)(o->data); if(t) { if(t->font_handling) { switch((t->font_handling)->handling) { case 2: case 3: case 4: case 5: { $? ". special text" must_run_latex = 1; } break; default: { $? ". non-special text" if(((t->font_handling)->fontno) >= 0) { if(((t->font_handling)->fontno) < 35) { (oi->fnused)[(t->font_handling)->fontno] = 1; $? ". marking font %d as used", (int)((t->font_handling)->fontno) } } if((o->subtype) > 0) { $? ". aligned text" oi->flags |= OI_FLAG_ALIGNED_TEXT; } if((o->fpd).st > 0) { $? ". aligned text (2)" oi->flags |= OI_FLAG_ALIGNED_TEXT; } } break; } } } } break; case DK_FIG_OBJ_ARC: { register_pattern(oi->patused, o); } break; case DK_FIG_OBJ_ELLIPSE: { register_pattern(oi->patused, o); } break; case DK_FIG_OBJ_POLYLINE: { register_pattern(oi->patused, o); if(o->subtype == 5) { $? "included image" if(!(oi->skip_images)) { /* get information for included image */ $? ". Processing included image..." p = (dk_fig_polyline *)(o->data); dkfig_tool2_msg3(oi->c, DK_LOG_LEVEL_PROGRESS, 62, 63, p->imagename); if(!dkfig_eps_attach_image_info(oi,o)) { back = 0; $? "! dkfig_eps_attach_image_info failed" } else { $? ". dkfig_eps_attach_image_info ok" $? ". PROGRESS: Image processing finished" dkfig_tool2_msg1(oi->c, DK_LOG_LEVEL_PROGRESS, 64); if(o->drve) { dkfig_eps_image_info *ii; long width, height; $? ". o->drve ok" ii = (dkfig_eps_image_info *)(o->drve); if(p->flipped) { $? ". flip" if(((oi->c)->opt2) & DKFIG_OPT_FLIP_DIAGONAL) { ii->fl = 2; $? ". diagonal" } else { ii->fl = 1; $? ". horizontal" } } else { ii->fl = 0; $? ". no flip" } if(ii->type > 0) { $? ". ii->type > 0" width = ii->width; height = ii->height; $? ". ii->fl = %d", ii->fl if(!(oi->iw)) { $? ". need new oi->iw" oi->iw = dkfig_tool2_image_width_storage(); } if(oi->iw) { $? ". oi->iw ok" if(!(oi->iwi)) { $? ". need new oi->iwi" oi->iwi = dksto_it_open(oi->iw); } if(oi->iwi) { int sep = 0; $? ". oi->iwi ok" if(((oi->c)->opt1) & DKFIG_OPT_SEPARATED_RGB) { sep = 1; if(!dkfig_ei_check_separated_strings(ii->width, ii->height)) { sep = 0; } if(!(ii->colored)) { sep = 0; } } if(!dkfig_tool2_add_image_width( oi->iw, oi->iwi, width, height, ii->colored, sep, ii->fl )) { back = 0; $? "! failed to add image info" $? "! Memory" if((oi->c)->app) { dkapp_err_memory((oi->c)->app, sizeof(dk_storage_node_t), 1); } } } else { $? "! no oi->iwi" back = 0; $? "! Memory" if((oi->c)->app) { dkapp_err_memory((oi->c)->app, sizeof(dk_storage_iterator_t), 1); } } } else { $? "! no oi->iw" back = 0; $? "! Memory" if((oi->c)->app) { dkapp_err_memory((oi->c)->app, sizeof(dk_storage_t), 1); } } } else { if(ii->type == 0) { $? ". EPS image" /* nothing to do for EPS image */ } } } else { $? "! o->drve NULL" back = 0; } } } } } break; case DK_FIG_OBJ_SPLINE: { register_pattern(oi->patused, o); } break; } dkapp_set_source_lineno((oi->c)->app, 0UL); /* DK_MEMCPY(oi->c,&backupc,sizeof(dk_fig_conversion)) ; */ (oi->c)->opt2 = backupopt2; (oi->c)->opt1 = backupopt1; } oi->spcpass += 1; if((oi->iw) && (oi->iwi)) { dkfig_bitmap_width *bmw; oi->numimw = 0UL; dksto_it_reset(oi->iwi); while((bmw = (dkfig_bitmap_width *)dksto_it_next(oi->iwi)) != NULL) { bmw->number = oi->numimw; oi->numimw += 1UL; } oi->allimw = dkfig_dt_needed_alpha(oi->numimw); } if(must_run_latex) { oldback = back; back = 0; /* ## auf 1 setzen fuer pstex ## */ if(dkfig_dt_run_tex(oi->c, oi->d, oi->fli)) { if((oi->c)->app) { oi->fdvi = dkapp_fopen((oi->c)->app, (oi->c)->dvin, str_open_rb); } else { oi->fdvi = dksf_fopen((oi->c)->dvin, str_open_rb); } if((oi->c)->app) { oi->fps = dkapp_fopen((oi->c)->app, (oi->c)->psn, str_open_read); } else { oi->fps = dksf_fopen((oi->c)->psn, str_open_read); } if((oi->fdvi) && (oi->fps)) { back = 1; } else { back = 1; /* silently ignore LaTeX text */ } } else { $? "! dkfig_dt_run_tex() failed" } if(!oldback) { back = 0; } } $? "- gather_... %d", back return back; } /* }}} */ /* {{{ establish_coord_transformation Find factors and shiftings for coord transformations. */ static int establish_coord_transformation DK_P1(\ dkfig_eps_output_instruction *,oi\ ) { int back = 1; int math_error = 0; double xmin = 0.0, xmax = 0.0, ymin = 0.0, ymax = 0.0; double cxmin = 0.0, cxmax = 0.0, cymin = 0.0, cymax = 0.0; $? "+ establish_coord_transformation" xmin = dkfig_tool_bb_get_xmin(&(oi->d->dbb)); xmax = dkfig_tool_bb_get_xmax(&(oi->d->dbb)); ymin = dkfig_tool_bb_get_ymin(&(oi->d->dbb)); ymax = dkfig_tool_bb_get_ymax(&(oi->d->dbb)); oi->xfactor = dkma_div_double_ok( 72.0, (oi->d)->fres, &math_error); oi->yfactor = dkma_div_double_ok( 72.0, (oi->d)->fres, &math_error); if(dkfig_tool_invert_y(oi->d)) { oi->yfactor = 0.0 - oi->yfactor; } xmin = dkma_mul_double_ok(xmin, oi->xfactor, &math_error); xmax = dkma_mul_double_ok(xmax, oi->xfactor, &math_error); ymin = dkma_mul_double_ok(ymin, oi->yfactor, &math_error); ymax = dkma_mul_double_ok(ymax, oi->yfactor, &math_error); if(xmax < xmin) { cxmin = xmin; xmin = xmax; xmax = cxmin; } if(ymax < ymin) { cxmin = ymin; ymin = ymax; ymax = cxmin; } cxmin = floor(xmin); cxmax = ceil(xmax); cymin = floor(ymin); cymax = ceil(ymax); oi->xleft = 0.0; oi->ybottom = 0.0; oi->xright = dkma_sub_double_ok(cxmax, cxmin, &math_error); oi->ytop = dkma_sub_double_ok(cymax, cymin, &math_error); oi->xshift = 0.5 * dkma_sub_double_ok( oi->xright, dkma_sub_double_ok(cxmax, cxmin, &math_error), &math_error ); oi->yshift = 0.5 * dkma_sub_double_ok( oi->ytop, dkma_sub_double_ok(cymax, cymin, &math_error), &math_error ); oi->xshift = dkma_sub_double_ok(oi->xshift, cxmin, &math_error); oi->yshift = dkma_sub_double_ok(oi->yshift, cymin, &math_error); if(math_error) { back = 0; } $? ". bounding box %lg %lg %lg %lg", oi->xleft, oi->xright, oi->ybottom, oi->ytop $? "- establish_coord_transformation %d", back return back; } /* }}} */ /* {{{ preparation_pass Do all the preparations necessary before starting output. */ static int preparation_pass DK_P1(dkfig_eps_output_instruction *,oi) { int back = 0; dk_fig_object *o; int error_code = 0; /* 0=internal setup error, 1=handled */ $? "+ preparation_pass" if(oi->c) { if((oi->c)->ostrm) { oi->s = (oi->c)->ostrm; o = (oi->c)->drwng; if(o) { oi->dro = o; oi->d = (dk_fig_drawing *)(o->data); if(oi->d) { error_code = 1; oi->fl = dkfig_flat_list(oi->c, (oi->c)->drwng); if(oi->fl) { oi->fli = dksto_it_open(oi->fl); if(oi->fli) { back = gather_information_and_run_latex(oi); if(back) { back = establish_coord_transformation(oi); if(!back) { $? "! Math error" dkfig_tool2_eps_error_message(oi, 13); } } } else { if((oi->c)->app) { dkapp_err_memory((oi->c)->app, sizeof(dk_storage_iterator_t), 1); } } } else { if((oi->c)->app) { dkapp_err_memory((oi->c)->app, sizeof(dk_storage_t), 1); } } } } } } if(!back) { if(!error_code) { $? "! Internal setup error" dkfig_tool2_eps_error_message(oi, 44); } } $? "- preparation_pass %d", back return back; } /* }}} */ /* {{{ ps_header_string: print %!PS-Adobe... */ static void ps_header_string DK_P1(dkfig_eps_output_instruction *,oi) { char buffer[16]; if((oi->c)->psl > 3) { (oi->c)->psl = 3; } if((oi->c)->psl < 1) { (oi->c)->psl = 1; } #if DK_HAVE_SNPRINTF snprintf(buffer, sizeof(buffer), "%u", (oi->c)->psl); buffer[sizeof(buffer)-1] = '\0'; #else sprintf(buffer, "%u", (oi->c)->psl); #endif kw_out(oi->s, 2); dkstream_puts(oi->s, buffer); if((oi->c)->bdnum == DKFIG_DRIVER_EPS) { kw_out(oi->s, 3); dkstream_puts(oi->s, buffer); } kw_out(oi->s, 4); kw_out(oi->s, 0); } /* }}} */ /* {{{ setup_ps_fonts Write instructions to re-encode the used fonts. */ static void setup_ps_fonts DK_P1(dkfig_eps_output_instruction *, oi) { unsigned i; for(i = 0; i < 35; i++) { if((oi->fnused)[i]) { kw_out(oi->s, 29); dkstream_puts(oi->s, dkfont_get_ps_name(i)); kw_out(oi->s, 1); kw_out(oi->s, 29); ps_my_font_name(oi, i); kw_out(oi->s, 1); kw_out(oi->s, 32); kw_out(oi->s, 0); } } } /* }}} */ /* {{{ ps_bounding_box */ static void ps_bounding_box DK_P1(dkfig_eps_output_instruction *, oi) { char buffer[256]; #if DK_HAVE_SNPRINTF snprintf(buffer, sizeof(buffer), "%ld %ld %ld %ld", #else sprintf(buffer, "%ld %ld %ld %ld", #endif dkma_double_to_l(oi->xleft), dkma_double_to_l(oi->ybottom), dkma_double_to_l(oi->xright), dkma_double_to_l(oi->ytop) ); buffer[sizeof(buffer)-1] = '\0'; kw_out(oi->s, 5); kw_out(oi->s, 1); dkstream_puts(oi->s, buffer); kw_out(oi->s, 0); } /* }}} */ /* {{{ is_literal: check whether or not to encode octal */ static int is_literal DK_P1(char,c) { int back = 0; if((c >= 'A') && (c <= 'Z')) { back = 1; } else { if((c >= 'a') && (c <= 'z')) { back = 1; } else { if((c >= '0') && (c <= '9')) { back = 1; } else { switch(c) { case ' ': { back = 1; } break; } } } } return back; } /* }}} */ /* {{{ ps_encode_utf8: write PS string for UTF-8 encoded input string */ static void ps_encode_utf8 DK_P3(dk_stream_t *,s, dk_fig_conversion *,c, char *,str) { dk_udword ucb; unsigned char uc; char chr, buffer[128]; int cc, i; size_t max, used, avail, step, curpos; cc = 1; max = strlen(str); used = 0; avail = max; curpos = 0; $!trace-code if(dktrace_file()) { $!trace-code char *xptr; $!trace-code xptr = str; $!trace-code while(*xptr) { $!trace-code fprintf(dktrace_file(), "Byte %02x\n", (unsigned)(*xptr)); $!trace-code xptr++; $!trace-code } $!trace-code } kw_out(s, 71); while(cc) { cc = 0; if(avail > 0) { step = 0; cc = dkenc_utf82uc(&ucb, (unsigned char *)(&(str[used])), avail, &step); if(cc) { used = used + step; if(avail > step) { avail = avail - step; } else { avail = 0; } if(ucb < 256UL) { uc = (unsigned char)ucb; chr = (char)uc; i = (int)chr; $? ". BYTE %02lx", (((unsigned)uc) & 0xff) if(curpos > 250) { kw_out(s, 73); kw_out(s, 0); curpos = 0; } if(is_literal(chr)) { buffer[0] = chr; buffer[1] = '\0'; } else { if(i < 0) { i = i + 256; } if(i > 255) { i = 255; } #if DK_HAVE_SNPRINTF snprintf(buffer, sizeof(buffer), "\\%03o", i); buffer[sizeof(buffer)-1] = '\0'; #else sprintf(buffer, "\\%03o", i); #endif } dkstream_puts(s, buffer); curpos += strlen(buffer); } else { $? "! Character out of range" /* ERROR: Character out of range */ if(c->app) { dkfig_tool2_msg1(c, DK_LOG_LEVEL_ERROR, 119); dkfig_tool2_msg1(c, DK_LOG_LEVEL_INFO, 120); } } } } } kw_out(s, 72); } /* }}} */ /* {{{ ps_encode_string: write PS string */ static void ps_encode_string DK_P2(dk_stream_t *,s, char *,str) { char *ptr; char buffer[128]; size_t curpos; int i; ptr = str; curpos = 1; kw_out(s, 71); while(*ptr) { if(curpos > 250) { kw_out(s, 73); kw_out(s, 0); curpos = 0; } if(is_literal(*ptr)) { buffer[0] = *ptr; buffer[1] = '\0'; } else { i = *ptr; if(i < 0) { i = 256 + i; } if(i < 0) { i = 0; } if(i > 255) { i = 255; } #if DK_HAVE_SNPRINTF snprintf(buffer, sizeof(buffer), "\\%03o", i); buffer[sizeof(buffer)-1] = '\0'; #else sprintf(buffer, "\\%03o", i); #endif } dkstream_puts(s, buffer); curpos += strlen(buffer); ptr++; } kw_out(s, 72); } /* }}} */ /* {{{ print_text_object */ static int print_text_object DK_P1(dkfig_eps_output_instruction *,oi) { int back = 1; dk_fig_dcc dcc; dk_fig_text *t; int th; dk_fig_fonth_t *fhptr = NULL; $? "+ print_text_object" dkfig_tool_fill_dcc(oi->d, &dcc, ((oi->o)->fpd).pc); dkfig_eps_correct_for_palette(&dcc); set_color(oi, &dcc); t = (dk_fig_text *)((oi->o)->data); if(t) { th = (((t->font_flags) & 2) ? ((oi->c)->special_text) : ((oi->c)->normal_text)); fhptr = t->font_handling; if(fhptr) { switch(fhptr->handling) { case 2: case 3: case 4: case 5: { $? ". handling by TeX/LaTeX" if(!(((oi->c)->opt2) & DKFIG_OPT_SKIP_ALL_TEXTS)) { oi->have &= (~(HAVE_PSFONT)); if(!((oi->errprinted) & 1)) { dkfig_tool2_eps_error_message(oi, 85); if(!(((oi->c)->opt1) & DKFIG_OPT_REPORT_MULTIPLE)) { oi->errprinted |= 1; } } } } break; default: { int rotation; $? ". normal text" rotation = 0; set_psfont(oi, (unsigned)(fhptr->fontno), fhptr->fontsize); if(fabs(t->angle) > DKFIG_EPSILON) { double dv; kw_out(oi->s, 44); kw_out(oi->s, 0); lpointout(oi, t->x, t->y, 1); kw_out(oi->s, 57); kw_out(oi->s, 1); dv = (180.0 * t->angle) / M_PI; dkstream_puts_double( oi->s, drd(dv, oi->c, 1) ); kw_out(oi->s, 1); kw_out(oi->s, 59); kw_out(oi->s, 0); /* lpointout(oi, 0.0, 0.0); */ dkstream_puts_double(oi->s, 0.0); kw_out(oi->s, 1); dkstream_puts_double(oi->s, 0.0); kw_out(oi->s, 1); kw_out(oi->s, 48); kw_out(oi->s, 0); if(((oi->c)->opt2) & DKFIG_OPT_UTF_8) { ps_encode_utf8(oi->s, oi->c, t->text); } else { ps_encode_string(oi->s, t->text); } kw_out(oi->s, 1); switch((oi->o)->subtype) { case 1: { kw_out(oi->s, 70); } break; case 2: { kw_out(oi->s, 69); } break; default: { kw_out(oi->s, 68); } break; } kw_out(oi->s, 0); kw_out(oi->s, 45); kw_out(oi->s, 0); } else { kw_out(oi->s, 46); kw_out(oi->s, 0); lpointout(oi, t->x, t->y, 1); kw_out(oi->s, 48); kw_out(oi->s, 0); if(((oi->c)->opt2) & DKFIG_OPT_UTF_8) { ps_encode_utf8(oi->s, oi->c, t->text); } else { ps_encode_string(oi->s, t->text); } kw_out(oi->s, 1); switch((oi->o)->subtype) { case 1: { kw_out(oi->s, 70); } break; case 2: { kw_out(oi->s, 69); } break; default: { kw_out(oi->s, 68); } break; } kw_out(oi->s, 0); } } break; } } } $? "- print_text_object %d", back return back; } /* }}} */ /* {{{ ctm change Check whether or not the current object changes the current transformation matrix. */ static int ctm_change DK_P1(dkfig_eps_output_instruction *,oi) { int back = 0; switch((oi->o)->objtype) { case DK_FIG_OBJ_ELLIPSE: { switch((oi->o)->subtype) { case 3: case 4: back = 0; break; default: { dk_fig_ellipse *e; back = 1; e = (dk_fig_ellipse *)((oi->o)->data); if(e) { if(e->radiusx == e->radiusy) { back = 0; } } } break; } } break; } return back; } /* }}} */ /* {{{ path_ellipse */ static void path_ellipse DK_P1(dkfig_eps_output_instruction *,oi) { dk_fig_ellipse *e; e = (dk_fig_ellipse *)((oi->o)->data); if(e) { if(ctm_change(oi)) { lpointout(oi, e->centerx, e->centery, 1); kw_out(oi->s, 57); kw_out(oi->s, 0); if(fabs(e->angle) > DKFIG_EPSILON) { stream_putdouble( oi->s, drd( dkma_div_double_ok( dkma_mul_double_ok(180.0, e->angle, &(oi->me)), M_PI, &(oi->me) ), oi->c, 1 ), oi->c, 1 ); kw_out(oi->s, 1); kw_out(oi->s, 59); kw_out(oi->s, 0); } stream_putdouble(oi->s, 1.0, oi->c, 1); kw_out(oi->s, 1); stream_putdouble( oi->s, dkma_div_double_ok( dkma_l_to_double(e->radiusy), dkma_l_to_double(e->radiusx), &(oi->me) ), oi->c, 1 ); kw_out(oi->s, 1); kw_out(oi->s, 58); kw_out(oi->s, 0); stream_putdouble(oi->s, 0.0, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, 0.0, oi->c, 1); kw_out(oi->s, 1); stream_putdouble( oi->s, ccdd(oi, dkma_l_to_double(e->radiusx)), oi->c, 1 ); kw_out(oi->s, 1); stream_putdouble(oi->s, 0.0, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, 360.0, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 55); kw_out(oi->s, 0); } else { lpointout( oi, dkma_add_long_ok( e->centerx, e->radiusx, &(oi->me)), e->centery, 1 ); kw_out(oi->s, 48); kw_out(oi->s, 0); lpointout(oi, e->centerx, e->centery, 1); stream_putdouble( oi->s, ccdd(oi, dkma_l_to_double(e->radiusx)), oi->c, 1 ); kw_out(oi->s, 1); stream_putdouble(oi->s, 0.0, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, 360.0, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 55); kw_out(oi->s, 0); } } } /* }}} */ /* {{{ path_polyline */ static void path_polyline DK_P1(dkfig_eps_output_instruction *,oi) { dk_fig_polyline *p; long *xptr, *yptr; size_t i; dk_fig_bb bbdest; double x1, x2, y1, y2, radius, deltax, deltay; p = (dk_fig_polyline *)((oi->o)->data); if(p) { switch(((oi->o)->fpd).st) { case 2: case 4: case 5: { /* box, arc box or image box */ dkfig_tool_bb_reset(&bbdest); xptr = p->xvalues; yptr = p->yvalues; for(i = 0; i < p->npoints; i++) { dkfig_tool_bb_add_x(&bbdest, cclx(oi, *xptr)); dkfig_tool_bb_add_y(&bbdest, ccly(oi, *yptr)); xptr++; yptr++; } if(((oi->o)->fpd).st == 4) { /* arc box */ deltax = dkma_sub_double_ok(bbdest.xmax, bbdest.xmin, &(oi->me)); deltay = dkma_sub_double_ok(bbdest.ymax, bbdest.ymin, &(oi->me)); radius = 0.9 * dkma_l_to_double(p->radius); if(radius > (0.5 * deltax)) { radius = 0.5 * deltax; } if(radius > (0.5 * deltay)) { radius = 0.5 * deltay; } x1 = bbdest.xmin + radius; x2 = bbdest.xmax - radius; y1 = bbdest.ymin + radius; y2 = bbdest.ymax - radius; ncdpointout(oi, x2, bbdest.ymin, 1); kw_out(oi->s, 48); kw_out(oi->s, 0); ncdpointout(oi, x2, y1, 1); stream_putdouble(oi->s, radius, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 50); kw_out(oi->s, 1); kw_out(oi->s, 51); kw_out(oi->s, 1); kw_out(oi->s, 55); kw_out(oi->s, 0); ncdpointout(oi, bbdest.xmax, y2, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); ncdpointout(oi, x2, y2, 1); stream_putdouble(oi->s, radius, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 51); kw_out(oi->s, 1); kw_out(oi->s, 52); kw_out(oi->s, 1); kw_out(oi->s, 55); kw_out(oi->s, 0); ncdpointout(oi, x1, bbdest.ymax, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); ncdpointout(oi, x1, y2, 1); stream_putdouble(oi->s, radius, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 52); kw_out(oi->s, 1); kw_out(oi->s, 53); kw_out(oi->s, 1); kw_out(oi->s, 55); kw_out(oi->s, 0); ncdpointout(oi, bbdest.xmin, y1, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); ncdpointout(oi, x1, y1, 1); stream_putdouble(oi->s, radius, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 53); kw_out(oi->s, 1); kw_out(oi->s, 54); kw_out(oi->s, 1); kw_out(oi->s, 55); kw_out(oi->s, 0); } else { /* non-arc box */ ncdpointout(oi, bbdest.xmin, bbdest.ymin, 1); kw_out(oi->s, 48); kw_out(oi->s, 0); ncdpointout(oi, bbdest.xmax, bbdest.ymin, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); ncdpointout(oi, bbdest.xmax, bbdest.ymax, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); ncdpointout(oi, bbdest.xmin, bbdest.ymax, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); } } break; default: { /* real polyline or polygon */ xptr = p->xvalues; yptr = p->yvalues; if((!(((oi->o)->fpd).cl)) && (((oi->o)->fpd).ar & 2)) { /* backward arrowhead */ dpointout(oi, (p->pa).x, (p->pa).y, 2); } else { /* no backward arrowhead */ lpointout(oi, *xptr, *yptr, 1); } kw_out(oi->s, 1); kw_out(oi->s, 48); kw_out(oi->s, 0); xptr++; yptr++; for(i = 1; i < p->npoints; i++) { if(i == (p->npoints - 1)) { if(((oi->o)->fpd).cl) { lpointout(oi, *xptr, *yptr, 1); } else { if(((oi->o)->fpd).ar & 1) { dpointout(oi, (p->pe).x, (p->pe).y, 2); } else { lpointout(oi, *xptr, *yptr, 1); } } } else { lpointout(oi, *xptr, *yptr, 1); } kw_out(oi->s, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); xptr++; yptr++; } } break; } } } /* }}} */ /* {{{ write_eps_procedure Write one procedure to fill binary data into a string. Used for included bitmaps. */ static void write_eps_read_procedure DK_P4(\ dkfig_eps_output_instruction *,oi,\ dkfig_eps_image_info *,ii,\ dkfig_bitmap_width *,wi,\ int, number\ ) { kw_out(oi->s, 81); kw_out(oi->s, 1); if((oi->c)->psl > 1) { kw_out(oi->s, 92); } else { kw_out(oi->s, 83); } kw_out(oi->s, 1); kw_out(oi->s, 77); switch(number) { case 1: { kw_out(oi->s, 94); } break; case 2: { kw_out(oi->s, 95); } break; case 3: { kw_out(oi->s, 96); } break; } dkfig_tool_num_as_string(oi->s, wi->number, oi->allimw); kw_out(oi->s, 1); if((oi->c)->psl > 1) { kw_out(oi->s, 85); } else { kw_out(oi->s, 84); } kw_out(oi->s, 1); kw_out(oi->s, 86); kw_out(oi->s, 1); kw_out(oi->s, 82); kw_out(oi->s, 0); } /* }}} */ /* {{{ my_chomp: Remove trailing whitespaces */ static void my_chomp DK_P1(char *,s) { char *ptr, *xptr; xptr = NULL; ptr = s; while(*ptr) { switch(*ptr) { case ' ': case '\t': case '\r': case '\n': { if(!xptr) { xptr = ptr; } } break; default: { xptr = NULL; } break; } ptr++; } if(xptr) { *xptr = '\0'; } } /* }}} */ /* {{{ bin_pass_through Pass-through a PS file containing binary data. */ static void bin_pass_through DK_P2(\ dkfig_eps_output_instruction *,oi, FILE *,fipo\ ) { char inbuffer[512]; size_t sz; int cc; cc = 1; while(cc) { sz = fread(inbuffer,1,512,fipo); if(sz) { if(dkstream_write(oi->s, inbuffer, sz) != sz) { cc = 0; } } else { cc = 0; } } } /* }}} */ /* {{{ file_pass_through: Pass-through ASCII PS file */ static void file_pass_through DK_P2(\ dkfig_eps_output_instruction *,oi, FILE *,fipo\ ) { char inbuffer[256], *ptr; while(fgets(inbuffer, sizeof(inbuffer), fipo)) { ptr = dkstr_start(inbuffer, NULL); if(ptr) { my_chomp(inbuffer); dkstream_puts(oi->s, inbuffer); } kw_out(oi->s, 0); } } /* }}} */ /* {{{ insert_image */ static int insert_image DK_P1(dkfig_eps_output_instruction *,oi) { int back = 0; dk_fig_polyline *p; dk_fig_bb bbdest; long *xptr, *yptr; double lw, h, w, deltax, deltay, sf, q1, q2; double xa, ya, xb, yb; double a, b, c, d, e, f; dkfig_eps_image_info *ii; dkfig_bitmap_width *wi; FILE *fipo = NULL; size_t i; $? "+ insert_image" lw = h = w = deltax = deltay = sf = 0.0; xa = xb = ya = yb = 0.0; a = b = c = d = e = f = 0.0; wi = NULL; p = (dk_fig_polyline *)((oi->o)->data); ii = (dkfig_eps_image_info *)((oi->o)->drve); if((p) && (ii)) { if((oi->iw) && (oi->iwi)) { int sep = 0; if(((oi->c)->opt1) & DKFIG_OPT_SEPARATED_RGB) { sep = 1; if(!dkfig_ei_check_separated_strings(ii->width, ii->height)) { sep = 0; } if(ii->type == 0) { sep = 0; } if(!(ii->colored)) { sep = 0; } } wi = dkfig_tool2_find_entry_for_width( oi->iwi, ii->width, ii->height, ii->colored, sep, ii->fl ); } if((wi) || (ii->type == 0)) { $? ". width entry found or not needed" /* get polygon box */ dkfig_tool_bb_reset(&bbdest); xptr = p->xvalues; yptr = p->yvalues; for(i = 0; i < p->npoints; i++) { dkfig_tool_bb_add_x(&bbdest, cclx(oi, *xptr)); dkfig_tool_bb_add_y(&bbdest, ccly(oi, *yptr)); xptr++; yptr++; } if(((oi->o)->fpd).pc != (oi->d)->transparent) { if(!(((oi->c)->opt1) & DKFIG_OPT_REMOVE_BITMAP_BORDER)) { lw = get_object_linewidth(oi, 0); } } /* get polygon width and height */ deltax = dkma_sub_double_ok( dkma_sub_double_ok(bbdest.xmax, bbdest.xmin, &(oi->me)), lw, &(oi->me) ); deltay = dkma_sub_double_ok( dkma_sub_double_ok(bbdest.ymax, bbdest.ymin, &(oi->me)), lw, &(oi->me) ); /* get image width and height */ w = dkma_l_to_double(ii->width); h = dkma_l_to_double(ii->height); if(ii->fl == 2) { $? ". diagonal flip" w = dkma_l_to_double(ii->height); h = dkma_l_to_double(ii->width); } if(((oi->c)->opt1) & DKFIG_OPT_KEEP_BITMAP_WH_RATIO) { /* compare image aspect ration against polygon aspect ratio */ q1 = dkma_div_double_ok(h, w, &(oi->me)); q2 = dkma_div_double_ok(deltay, deltax, &(oi->me)); if(q1 > q2) { /* image is "too high" */ sf = dkma_div_double_ok(deltay, h, &(oi->me)); ya = dkma_add_double_ok( bbdest.ymin, (0.5 * lw), &(oi->me)); yb = dkma_sub_double_ok( bbdest.ymax, (0.5 * lw), &(oi->me)); q1 = 0.5 * dkma_add_double_ok(bbdest.xmin, bbdest.xmax, &(oi->me)); q2 = 0.5 * dkma_mul_double_ok(w, sf, &(oi->me)); xa = dkma_sub_double_ok(q1, q2, &(oi->me)); xb = dkma_add_double_ok(q1, q2, &(oi->me)); } else { /* image is "too wide" */ sf = dkma_div_double_ok(deltax, w, &(oi->me)); xa = dkma_add_double_ok(bbdest.xmin, (0.5 * lw), &(oi->me)); xb = dkma_sub_double_ok(bbdest.xmax, (0.5 * lw), &(oi->me)); q1 = 0.5 * dkma_add_double_ok(bbdest.ymin, bbdest.ymax, &(oi->me)); q2 = 0.5 * dkma_mul_double_ok(h, sf, &(oi->me)); ya = dkma_sub_double_ok(q1, q2, &(oi->me)); yb = dkma_add_double_ok(q1, q2, &(oi->me)); } } else { xa = dkma_add_double_ok(bbdest.xmin, (0.5 * lw), &(oi->me)); xb = dkma_sub_double_ok(bbdest.xmax, (0.5 * lw), &(oi->me)); ya = dkma_add_double_ok(bbdest.ymin, (0.5 * lw), &(oi->me)); yb = dkma_sub_double_ok(bbdest.ymax, (0.5 * lw), &(oi->me)); } /* calculate ITM */ a = dkma_sub_double_ok(xb, xa, &(oi->me)); d = dkma_sub_double_ok(ya, yb, &(oi->me)); e = xa; f = yb; /* write image */ $? ". attempting to open \"%s\"", TR_STR(ii->filename) if((oi->c)->app) { fipo = dkapp_fopen((oi->c)->app, ii->filename, str_open_rb); } else { fipo = dksf_fopen(ii->filename, str_open_rb); } if(fipo) { $? ". data file opened successfully" switch(ii->type) { case 1: case 2: case 3: { back = 1; /* w h 8 [a b c d e f] procedure image */ if((oi->c)->psl > 1) { kw_out(oi->s, 29); kw_out(oi->s, 92); kw_out(oi->s, 1); kw_out(oi->s, 83); kw_out(oi->s, 1); kw_out(oi->s, 87); kw_out(oi->s, 1); if((oi->c)->psl > 2) { kw_out(oi->s, 88); kw_out(oi->s, 1); } else { if(((oi->c)->opt1) & DKFIG_OPT_ALLOW_PSRL) { kw_out(oi->s, 89); kw_out(oi->s, 1); } } kw_out(oi->s, 31); kw_out(oi->s, 0); } kw_out(oi->s, 44); kw_out(oi->s, 0); stream_putdouble(oi->s, xa, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, yb, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 57); kw_out(oi->s, 1); stream_putdouble(oi->s, a, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, (0.0 - d), oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 58); kw_out(oi->s, 0); stream_putul(oi->s, ((ii->fl == 2) ? ii->height : ii->width)); kw_out(oi->s, 1); stream_putul(oi->s, ((ii->fl == 2) ? ii->width : ii->height)); kw_out(oi->s, 1); stream_putul(oi->s, 8L); kw_out(oi->s, 1); kw_out(oi->s, 61); kw_out(oi->s, 1); /* stream_putdouble(oi->s, a, oi->c, 1); kw_out(oi->s, 1); */ stream_putul(oi->s, ((ii->fl == 2) ? ii->height : ii->width)); kw_out(oi->s, 1); stream_putdouble(oi->s, b, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, c, oi->c, 1); kw_out(oi->s, 1); /* stream_putdouble(oi->s, d); kw_out(oi->s, 1); */ kw_out(oi->s, 91); stream_putul(oi->s, ((ii->fl == 2) ? ii->width : ii->height)); kw_out(oi->s, 1); /* stream_putdouble(oi->s, e); kw_out(oi->s, 1); */ stream_putul(oi->s, 0L); kw_out(oi->s, 1); stream_putul(oi->s, 0L); kw_out(oi->s, 1); /* stream_putdouble(oi->s, f); kw_out(oi->s, 1); */ kw_out(oi->s, 62); kw_out(oi->s, 0); if(((oi->c)->psl > 1) && (ii->colored)) { $? ". color image" if(wi->seprgb) { write_eps_read_procedure(oi, ii, wi, 1); write_eps_read_procedure(oi, ii, wi, 2); write_eps_read_procedure(oi, ii, wi, 3); kw_out(oi->s, 93); kw_out(oi->s, 1); } else { write_eps_read_procedure(oi, ii, wi, 0); kw_out(oi->s, 90); kw_out(oi->s, 1); } stream_putul(oi->s, 3L); kw_out(oi->s, 1); kw_out(oi->s, 80); kw_out(oi->s, 0); } else { $? ". grayscaled image" write_eps_read_procedure(oi, ii, wi, 0); kw_out(oi->s, 79); kw_out(oi->s, 0); } file_pass_through(oi, fipo); kw_out(oi->s, 45); kw_out(oi->s, 0); } break; case 0: { double xt, yt, sfx, sfy; /* gsave clip translate scale */ $? ". handling eps" back = 1; /* gsave */ kw_out(oi->s, 44); kw_out(oi->s, 0); /* newpath / + clip */ kw_out(oi->s, 46); kw_out(oi->s, 0); stream_putdouble(oi->s, xa, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ya, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 48); kw_out(oi->s, 0); stream_putdouble(oi->s, xb, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ya, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); stream_putdouble(oi->s, xb, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, yb, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); stream_putdouble(oi->s, xa, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, yb, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); kw_out(oi->s, 47); kw_out(oi->s, 1); kw_out(oi->s, 63); kw_out(oi->s, 0); /* - clip */ switch(ii->fl) { case 2: { /* diagonal flip */ if(((oi->c)->opt1) & DKFIG_OPT_KEEP_BITMAP_WH_RATIO) { sfy = sf; sfx = 0.0 - sf; } else { sfx = 0.0 - dkma_div_double_ok( dkma_sub_double_ok(xb, xa, &(oi->me)), dkma_l_to_double(ii->height), &(oi->me) ); sfy = dkma_div_double_ok( dkma_sub_double_ok(yb, ya, &(oi->me)), dkma_l_to_double(ii->width), &(oi->me) ); } #if USE_WRONG_COORDINATE_CALCULATION xt = dkma_sub_double_ok( xb, dkma_mul_double_ok(sfx, dkma_l_to_double(ii->ymin), &(oi->me)), &(oi->me) ); yt = dkma_add_double_ok( yb, dkma_mul_double_ok(sfy, dkma_l_to_double(ii->xmin), &(oi->me)), &(oi->me) ); #endif xt = dkma_sub_double_ok( dkma_div_double_ok(yb, sfx, &(oi->me)), dkma_l_to_double(ii->xmin), &(oi->me) ); yt = dkma_sub_double_ok( dkma_div_double_ok((0.0 - xb), sfy, &(oi->me)), dkma_l_to_double(ii->ymin), &(oi->me) ); dkstream_puts_ul(oi->s, 90UL); kw_out(oi->s, 1); kw_out(oi->s, 59); kw_out(oi->s, 0); dkstream_puts_double(oi->s, drd(sfx, oi->c, 2)); kw_out(oi->s, 1); dkstream_puts_double(oi->s, drd(sfy, oi->c, 2)); kw_out(oi->s, 1); kw_out(oi->s, 58); kw_out(oi->s, 0); dkstream_puts_double(oi->s, drd(xt, oi->c, 2)); kw_out(oi->s, 1); dkstream_puts_double(oi->s, drd(yt, oi->c, 2)); kw_out(oi->s, 1); kw_out(oi->s, 57); kw_out(oi->s, 0); } break; case 1: { /* horizontal flip */ if(((oi->c)->opt1) & DKFIG_OPT_KEEP_BITMAP_WH_RATIO) { xt = dkma_add_double_ok( xa, dkma_mul_double_ok( dkma_l_to_double(ii->xmin + ii->width), sf, &(oi->me) ), &(oi->me) ); yt = dkma_sub_double_ok( ya, dkma_mul_double_ok( dkma_l_to_double(ii->ymin) ,sf, &(oi->me) ), &(oi->me) ); } else { sfx = dkma_div_double_ok( dkma_sub_double_ok(xb, xa, &(oi->me)), dkma_l_to_double(ii->width), &(oi->me) ); sfy = dkma_div_double_ok( dkma_mul_double_ok(yb, ya, &(oi->me)), dkma_l_to_double(ii->height), &(oi->me) ); xt = dkma_add_double_ok( xa, dkma_mul_double_ok( dkma_l_to_double(ii->xmin + ii->width), sfx, &(oi->me) ), &(oi->me) ); yt = dkma_sub_double_ok( ya, dkma_mul_double_ok( dkma_l_to_double(ii->ymin), sfy, &(oi->me) ), &(oi->me) ); } stream_putdouble(oi->s, xt, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, yt, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 57); kw_out(oi->s, 0); if(((oi->c)->opt1) & DKFIG_OPT_KEEP_BITMAP_WH_RATIO) { stream_putdouble(oi->s, (0.0 - sf), oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, sf, oi->c, 1); } else { stream_putdouble(oi->s, (0.0 - sfx), oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, sfy, oi->c, 1); } kw_out(oi->s, 1); kw_out(oi->s, 58); kw_out(oi->s, 0); } break; default: { /* 0 = no flip */ if(((oi->c)->opt1) & DKFIG_OPT_KEEP_BITMAP_WH_RATIO) { xt = dkma_sub_double_ok( xa, dkma_mul_double_ok( dkma_l_to_double(ii->xmin), sf, &(oi->me) ), &(oi->me) ); yt = dkma_sub_double_ok( ya, dkma_mul_double_ok( dkma_l_to_double(ii->ymin) ,sf, &(oi->me) ), &(oi->me) ); } else { sfx = dkma_div_double_ok( dkma_sub_double_ok(xb, xa, &(oi->me)), dkma_l_to_double(ii->width), &(oi->me) ); sfy = dkma_div_double_ok( dkma_mul_double_ok(yb, ya, &(oi->me)), dkma_l_to_double(ii->height), &(oi->me) ); xt = dkma_sub_double_ok( xa, dkma_mul_double_ok( dkma_l_to_double(ii->xmin), sfx, &(oi->me) ), &(oi->me) ); yt = dkma_sub_double_ok( ya, dkma_mul_double_ok( dkma_l_to_double(ii->ymin), sfy, &(oi->me) ), &(oi->me) ); } stream_putdouble(oi->s, xt, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, yt, oi->c, 1); kw_out(oi->s, 1); kw_out(oi->s, 57); kw_out(oi->s, 0); if(((oi->c)->opt1) & DKFIG_OPT_KEEP_BITMAP_WH_RATIO) { stream_putdouble(oi->s, sf, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, sf, oi->c, 1); } else { stream_putdouble(oi->s, sfx, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, sfy, oi->c, 1); } kw_out(oi->s, 1); kw_out(oi->s, 58); kw_out(oi->s, 0); } break; } /* image */ if((oi->c)->dscl) { /* %%BeginDocument: */ kw_out(oi->s, 104); dkstream_puts( oi->s, dksf_get_last_filename(p->imagename) ); kw_out(oi->s, 0); } /* pass-through */ if(ii->binary) { bin_pass_through(oi, fipo); } else { file_pass_through(oi, fipo); } if((oi->c)->dscl) { /* %%EndDocument */ kw_out(oi->s, 105); kw_out(oi->s, 0); } /* grestore */ kw_out(oi->s, 45); kw_out(oi->s, 0); $? ". handling finished" } break; } fclose(fipo); fipo = NULL; } else { $? "! failed to open data file" } } else { $? "! width information not found" } } $? "- insert_image %d", back return back; } /* }}} */ /* {{{ path_arc */ static void path_arc DK_P1(dkfig_eps_output_instruction *,oi) { dk_fig_arc *a; double radius, ahl, xm, ym, x1, y1, astart, aend; $? "+ path_arc" a = (dk_fig_arc *)((oi->o)->data); if(a) { $? ". arc data ok" radius = ccdd(oi, (a->calc).ra); if(((oi->o)->fpd).cl) { $? ". pie wedge" dpointout(oi, (a->calc).xm, (a->calc).ym, 1); kw_out(oi->s, 48); kw_out(oi->s, 0); dpointout(oi, (a->calc).xm, (a->calc).ym, 1); stream_putdouble(oi->s, radius, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dkma_div_double_ok( dkma_mul_double_ok(180.0, (a->calc).astart, &(oi->me)), M_PI, &(oi->me) ), oi->c, 1 ); kw_out(oi->s, 1); stream_putdouble(oi->s, dkma_div_double_ok( dkma_mul_double_ok(180.0, dkma_add_double_ok( (a->calc).astart, ((a->calc).alength), &(oi->me) ), &(oi->me)), M_PI, &(oi->me) ), oi->c, 1 ); kw_out(oi->s, 1); kw_out(oi->s, 55); kw_out(oi->s, 0); } else { $? ". open arc" ahl = 0.0; if((((oi->o)->fpd).ar) & 1) { $? ". forward arrow %lf", a->rba ahl = a->rba; } if((((oi->o)->fpd).ar) & 2) { $? ". backward arrow %lf", a->lba ahl = dkma_add_double_ok(ahl, a->lba, &(oi->me)); } $? ". arrow length=%lg ahl=%lg", (a->calc).alength, ahl if(ahl <= (a->calc).alength) { astart = (a->calc).astart; if((((oi->o)->fpd).ar) & 2) { astart = dkma_add_double_ok(astart, a->lba, &(oi->me)); } aend = dkma_add_double_ok((a->calc).astart, (a->calc).alength, &(oi->me)); if((((oi->o)->fpd).ar) & 1) { aend = dkma_sub_double_ok(aend, fabs(a->rba), &(oi->me)); } xm = ccdx(oi, (a->calc).xm); ym = ccdy(oi, (a->calc).ym); x1 = dkma_add_double_ok( xm, (radius*cos(astart)), &(oi->me) ); y1 = dkma_add_double_ok( ym, (radius*sin(astart)), &(oi->me) ); ncdpointout(oi, x1, y1, 2); kw_out(oi->s, 48); kw_out(oi->s, 0); ncdpointout(oi, xm, ym, 1); stream_putdouble(oi->s, radius, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, dkma_div_double_ok( dkma_mul_double_ok(180.0, astart, &(oi->me)), M_PI, &(oi->me) ), oi->c, 1 ); kw_out(oi->s, 1); stream_putdouble(oi->s, dkma_div_double_ok( dkma_mul_double_ok(180.0, aend, &(oi->me)), M_PI, &(oi->me) ), oi->c, 2 ); kw_out(oi->s, 1); kw_out(oi->s, 55); kw_out(oi->s, 0); } else { $? "! arrowheads to long in summary" } } } $? "- path_arc" } /* }}} */ /* {{{ path_spline */ static void path_spline DK_P1(dkfig_eps_output_instruction *,oi) { dk_fig_spline *s; dk_fig_bezier_point *bpptr; size_t nsegs, li, ri, maxli; s = (dk_fig_spline *)((oi->o)->data); if(s) { bpptr = s->bpoints; nsegs = s->nbpoints - 1; if(((oi->o)->fpd).cl) { nsegs = s->nbpoints; } if((!(((oi->o)->fpd).cl)) && (((oi->o)->fpd).ar & 2)) { dpointout(oi, (s->pa).value.x, (s->pa).value.y, 2); kw_out(oi->s, 48); kw_out(oi->s, 0); dpointout(oi, (s->pa).rcontrol.x, (s->pa).rcontrol.y, 2); dpointout(oi, (s->pa2).lcontrol.x, (s->pa2).lcontrol.y, 2); dpointout(oi, (s->pa2).value.x, (s->pa2).value.y, 2); kw_out(oi->s, 56); kw_out(oi->s, 0); li = s->normals; } else { dpointout(oi, bpptr[0].value.x, bpptr[0].value.y, 2); kw_out(oi->s, 48); kw_out(oi->s, 0); li = 0; } if((s->normale > 0) || (((oi->o)->fpd).cl) || (!((((oi->o)->fpd).ar) & 1))) { maxli = s->nbpoints - 2; if(((oi->o)->fpd).cl) { maxli = s->nbpoints - 1; } if((!(((oi->o)->fpd).cl)) && (((oi->o)->fpd).ar & 1)) { maxli = s->normale - 1; } while(li <= maxli) { ri = li + 1; if(ri >= s->nbpoints) { ri = 0; } dpointout(oi, bpptr[li].rcontrol.x, bpptr[li].rcontrol.y, 2); dpointout(oi, bpptr[ri].lcontrol.x, bpptr[ri].lcontrol.y, 2); dpointout(oi, bpptr[ri].value.x, bpptr[ri].value.y, 2); kw_out(oi->s, 56); kw_out(oi->s, 0); li++; } } if((!(((oi->o)->fpd).cl)) && (((oi->o)->fpd).ar & 1)) { dpointout(oi, (s->pe2).rcontrol.x, (s->pe2).rcontrol.y, 2); dpointout(oi, (s->pe).lcontrol.x, (s->pe).lcontrol.y, 2); dpointout(oi, (s->pe).value.x, (s->pe).value.y, 2); kw_out(oi->s, 56); kw_out(oi->s, 0); } } } /* }}} */ /* {{{ write_path */ static void write_path DK_P1(dkfig_eps_output_instruction *,oi) { kw_out(oi->s, 46); kw_out(oi->s, 0); switch((oi->o)->objtype) { case DK_FIG_OBJ_ELLIPSE: { path_ellipse(oi); } break; case DK_FIG_OBJ_POLYLINE: { path_polyline(oi); } break; case DK_FIG_OBJ_SPLINE: { path_spline(oi); } break; case DK_FIG_OBJ_ARC: { path_arc(oi); } break; } if(((oi->o)->fpd).cl) { kw_out(oi->s, 47); kw_out(oi->s, 0); } } /* }}} */ /* {{{ arrowhead_path */ static void arrowhead_path DK_P1(dkfig_eps_output_instruction *,oi) { kw_out(oi->s, 46); kw_out(oi->s, 0); dpointout(oi, ((oi->a)->p1).x, ((oi->a)->p1).y, 1); kw_out(oi->s, 48); kw_out(oi->s, 0); dpointout(oi, ((oi->a)->p2).x, ((oi->a)->p2).y, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); dpointout(oi, ((oi->a)->p3).x, ((oi->a)->p3).y, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); if((oi->a)->type > 1) { dpointout(oi, ((oi->a)->p4).x, ((oi->a)->p4).y, 1); kw_out(oi->s, 49); kw_out(oi->s, 0); } if((oi->a)->type > 0) { kw_out(oi->s, 47); kw_out(oi->s, 0); } } /* }}} */ /* {{{ arrowhead_print */ static void arrowhead_print DK_P2(dkfig_eps_output_instruction *,oi, dk_fig_dcc *,dcc) { set_dash(oi, 0, 0.0); set_linecap(oi, 0); set_linejoin(oi, (oi->c)->ahlj); switch((oi->a)->type) { case 0: { arrowhead_path(oi); kw_out(oi->s, 43); kw_out(oi->s, 0); } break; default: { if((oi->a)->style == 0) { dk_fig_dcc xdcc; xdcc.red = 1.0; xdcc.green = 1.0; xdcc.blue = 1.0; set_color(oi, &xdcc); } arrowhead_path(oi); kw_out(oi->s, 42); kw_out(oi->s, 0); if((oi->a)->style == 0) { set_color(oi, dcc); } arrowhead_path(oi); kw_out(oi->s, 43); kw_out(oi->s, 0); } break; } } /* }}} */ /* {{{ write_pattern */ static void write_pattern DK_P1(dkfig_eps_output_instruction *,oi) { double patrp; dk_fig_bb obb; $? "+ write_pattern" if((oi->c)->patrp) { patrp = 0.9 * dkma_l_to_double((oi->c)->patrp); } else { patrp = 3.6; } patrp = fabs(patrp); dkfig_tool_bb_reset(&obb); dkfig_tool_bb_add_x(&obb, ccdx(oi, ((oi->o)->dbb).xmin)); dkfig_tool_bb_add_x(&obb, ccdx(oi, ((oi->o)->dbb).xmax)); dkfig_tool_bb_add_y(&obb, ccdy(oi, ((oi->o)->dbb).ymin)); dkfig_tool_bb_add_y(&obb, ccdy(oi, ((oi->o)->dbb).ymax)); switch((((oi->o)->fpd).af) - 41) { case 0: { /* ThirtyLeft */ double yat0, ystart, ynew, sf30; sf30 = 1.0 / sqrt(3.0); patrp = dkma_div_double_ok(patrp,cos(M_PI / 6.0),&(oi->me)); patrp = drd(patrp, oi->c, 1); ystart = dkma_sub_double_ok( obb.ymin, (sf30 * dkma_sub_double_ok(obb.xmax,obb.xmin,&(oi->me))), &(oi->me) ); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { yat0 = dkma_add_double_ok( obb.ymin, (sf30 * obb.xmin), &(oi->me) ); ynew = floor(dkma_div_double_ok(yat0,patrp,&(oi->me))); ynew = dkma_mul_double_ok(patrp,ynew,&(oi->me)); ynew = dkma_sub_double_ok(yat0, ynew, &(oi->me)); ystart = dkma_sub_double_ok(ystart, ynew, &(oi->me)); } stream_putdouble(oi->s, obb.xmin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[0].name); kw_out(oi->s, 0); } break; case 1: { /* ThirtyRight */ double yat0, ystart, ynew, sf30; $? ". patrp = %lg", patrp sf30 = 1.0 / sqrt(3.0); patrp = dkma_div_double_ok(patrp,cos(M_PI / 6.0),&(oi->me)); patrp = drd(patrp, oi->c, 1); $? ". patrp = %lg", patrp ystart = dkma_sub_double_ok( obb.ymin, (sf30 * dkma_sub_double_ok(obb.xmax,obb.xmin,&(oi->me))), &(oi->me) ); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { yat0 = dkma_sub_double_ok(ystart,(sf30 * obb.xmin),&(oi->me)); ynew = floor(dkma_div_double_ok(yat0,patrp,&(oi->me))); ynew = dkma_mul_double_ok(patrp,ynew,&(oi->me)); ynew = dkma_sub_double_ok(yat0, ynew, &(oi->me)); ystart = dkma_sub_double_ok(ystart, ynew, &(oi->me)); } stream_putdouble(oi->s, obb.xmin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[1].name); kw_out(oi->s, 0); } break; case 2: { /* ThirtyHatch */ double yat0, ystart, ynew, sf30; sf30 = 1.0 / sqrt(3.0); patrp = dkma_div_double_ok(patrp,cos(M_PI / 6.0), &(oi->me)); patrp = drd(patrp, oi->c, 1); ystart = dkma_sub_double_ok(obb.ymin,(sf30 * (obb.xmax - obb.xmin)),&(oi->me)); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { yat0 = dkma_add_double_ok(obb.ymin,(sf30 * obb.xmin),&(oi->me)); ynew = floor(dkma_div_double_ok(yat0,patrp,&(oi->me))); ynew = dkma_mul_double_ok(patrp,ynew, &(oi->me)); ynew = dkma_sub_double_ok(yat0, ynew, &(oi->me)); ystart = dkma_sub_double_ok(ystart, ynew, &(oi->me)); } stream_putdouble(oi->s, obb.xmin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 0); ystart = dkma_sub_double_ok(obb.ymin,(sf30 * (obb.xmax - obb.xmin)),&(oi->me)); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { yat0 = dkma_sub_double_ok(ystart,(sf30 * obb.xmin),&(oi->me)); ynew = floor(dkma_div_double_ok(yat0,patrp,&(oi->me))); ynew = dkma_mul_double_ok(patrp,ynew, &(oi->me)); ynew = dkma_sub_double_ok(yat0, ynew, &(oi->me)); ystart = dkma_sub_double_ok(ystart, ynew, &(oi->me)); } stream_putdouble(oi->s, obb.xmin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[2].name); kw_out(oi->s, 0); } break; case 3: { /* FourtyFiveLeft */ double yat0, ystart, ynew; patrp = dkma_mul_double_ok(patrp,sqrt(2.0),&(oi->me)); patrp = drd(patrp, oi->c, 1); ystart = dkma_sub_double_ok( obb.ymin, dkma_sub_double_ok(obb.xmax,obb.xmin,&(oi->me)), &(oi->me) ); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { yat0 = dkma_add_double_ok(obb.ymin,obb.xmin, &(oi->me)); ynew = floor(dkma_div_double_ok(yat0,patrp,&(oi->me))); ynew = dkma_mul_double_ok(patrp, ynew, &(oi->me)); ynew = dkma_sub_double_ok(yat0, ynew, &(oi->me)); ystart = dkma_sub_double_ok(ystart, ynew, &(oi->me)); } stream_putdouble(oi->s, obb.xmin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[3].name); kw_out(oi->s, 0); } break; case 4: { /* FourtyFiveRight */ double yat0, ystart, ynew; $? ". patrp = %lg", patrp patrp = dkma_mul_double_ok(patrp, sqrt(2.0), &(oi->me)); patrp = drd(patrp, oi->c, 1); $? ". patrp = %lg", patrp ystart = dkma_sub_double_ok( obb.ymin, dkma_sub_double_ok(obb.xmax,obb.xmin,&(oi->me)), &(oi->me) ); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { yat0 = dkma_sub_double_ok(ystart, obb.xmin, &(oi->me)); ynew = floor(dkma_div_double_ok(yat0,patrp,&(oi->me))); ynew = dkma_mul_double_ok(patrp, ynew, &(oi->me)); ynew = dkma_sub_double_ok(yat0, ynew, &(oi->me)); ystart = dkma_sub_double_ok(ystart, ynew, &(oi->me)); } stream_putdouble(oi->s, obb.xmin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[4].name); kw_out(oi->s, 0); } break; case 5: { /* FourtyFiveHatch */ double yat0, ystart, ynew; $? ". patrp = %lg", patrp patrp = dkma_mul_double_ok(patrp, sqrt(2.0), &(oi->me)); patrp = drd(patrp, oi->c, 1); $? ". patrp = %lg", patrp ystart = dkma_sub_double_ok( obb.ymin, dkma_sub_double_ok(obb.xmax,obb.xmin,&(oi->me)), &(oi->me) ); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { yat0 = dkma_sub_double_ok(ystart, obb.xmin, &(oi->me)); ynew = floor(dkma_div_double_ok(yat0,patrp,&(oi->me))); ynew = dkma_mul_double_ok(patrp, ynew, &(oi->me)); ynew = dkma_sub_double_ok(yat0, ynew, &(oi->me)); ystart = dkma_sub_double_ok(ystart, ynew, &(oi->me)); } stream_putdouble(oi->s, obb.xmin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 0); ystart = dkma_sub_double_ok( obb.ymin, dkma_sub_double_ok(obb.xmax,obb.xmin,&(oi->me)), &(oi->me) ); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { yat0 = dkma_add_double_ok(obb.ymin,obb.xmin, &(oi->me)); ynew = floor(dkma_div_double_ok(yat0,patrp,&(oi->me))); ynew = dkma_mul_double_ok(patrp, ynew, &(oi->me)); ynew = dkma_sub_double_ok(yat0, ynew, &(oi->me)); ystart = dkma_sub_double_ok(ystart, ynew, &(oi->me)); } stream_putdouble(oi->s, obb.xmin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[5].name); kw_out(oi->s, 0); } break; case 6: { /* HorizontalBricks */ double ystart, xstart, pr2; patrp = dkma_mul_double_ok(2.0,patrp, &(oi->me)); ystart = obb.ymin; xstart = obb.xmin; if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { pr2 = dkma_mul_double_ok(2.0,patrp, &(oi->me)); ystart = floor(dkma_div_double_ok(ystart,pr2,&(oi->me))); ystart = dkma_mul_double_ok(ystart,pr2,&(oi->me)); xstart = floor(dkma_div_double_ok(xstart,pr2,&(oi->me))); xstart = dkma_mul_double_ok(xstart,pr2, &(oi->me)); } stream_putdouble(oi->s, xstart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[6].name); kw_out(oi->s, 0); } break; case 7: { /* VerticalBricks */ double xstart, ystart, pr2; patrp = dkma_mul_double_ok(2.0,patrp, &(oi->me)); xstart = obb.xmin; ystart = obb.ymin; if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { pr2 = dkma_mul_double_ok(2.0,patrp, &(oi->me)); xstart = floor(dkma_div_double_ok(xstart,pr2,&(oi->me))); xstart = dkma_mul_double_ok(xstart,pr2,&(oi->me)); ystart = floor(dkma_div_double_ok(ystart,pr2,&(oi->me))); ystart = dkma_mul_double_ok(ystart,pr2,&(oi->me)); } stream_putdouble(oi->s, xstart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[7].name); kw_out(oi->s, 0); } break; case 8: { /* HorizontalLines */ double ystart; ystart = obb.ymin; if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { ystart = floor(dkma_div_double_ok(ystart,patrp,&(oi->me))); ystart = dkma_mul_double_ok(ystart,patrp,&(oi->me)); } stream_putdouble(oi->s, obb.xmin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[8].name); kw_out(oi->s, 0); } break; case 9: { /* VerticalLines */ double xstart; xstart = obb.xmin; if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { xstart = floor(dkma_div_double_ok(xstart,patrp,&(oi->me))); xstart = dkma_mul_double_ok(xstart,patrp,&(oi->me)); } stream_putdouble(oi->s, xstart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 2); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[9].name); kw_out(oi->s, 0); } break; case 10: { /* Crosshatch */ double ystart, xstart; ystart = obb.ymin; if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { ystart = floor(dkma_div_double_ok(ystart,patrp,&(oi->me))); ystart = dkma_mul_double_ok(ystart,patrp,&(oi->me)); } stream_putdouble(oi->s, obb.xmin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 0); xstart = obb.xmin; if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { xstart = floor(dkma_div_double_ok(xstart,patrp,&(oi->me))); xstart = dkma_mul_double_ok(xstart,patrp,&(oi->me)); } stream_putdouble(oi->s, xstart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymin, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[10].name); kw_out(oi->s, 0); } break; case 11: { /* ShinglesRight */ double ystart, xstart, pr2; patrp = dkma_mul_double_ok(2.0,patrp, &(oi->me)); ystart = obb.ymin; xstart = obb.xmin; if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { pr2 = dkma_mul_double_ok(4.0,patrp, &(oi->me)); ystart = floor(dkma_div_double_ok(ystart,pr2,&(oi->me))); ystart = dkma_mul_double_ok(ystart,pr2,&(oi->me)); pr2 = dkma_mul_double_ok(2.0,patrp, &(oi->me)); xstart = floor(dkma_div_double_ok(xstart,pr2,&(oi->me))); xstart = dkma_mul_double_ok(xstart,pr2, &(oi->me)); } stream_putdouble(oi->s, xstart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[11].name); kw_out(oi->s, 0); } break; case 12: { /* ShinglesLeft */ double ystart, xstart, pr2; patrp = dkma_mul_double_ok(2.0,patrp, &(oi->me)); ystart = obb.ymin; xstart = obb.xmin; if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { pr2 = dkma_mul_double_ok(4.0,patrp, &(oi->me)); ystart = floor(dkma_div_double_ok(ystart,pr2,&(oi->me))); ystart = dkma_mul_double_ok(ystart,pr2,&(oi->me)); pr2 = dkma_mul_double_ok(2.0,patrp, &(oi->me)); xstart = floor(dkma_div_double_ok(xstart,pr2,&(oi->me))); xstart = dkma_mul_double_ok(xstart,pr2, &(oi->me)); } stream_putdouble(oi->s, xstart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[12].name); kw_out(oi->s, 0); } break; case 13: { /* Vshingles1 */ double ystart, xstart, pr2; patrp = dkma_mul_double_ok(2.0,patrp, &(oi->me)); ystart = obb.ymin; xstart = obb.xmin; if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { pr2 = dkma_mul_double_ok(2.0,patrp, &(oi->me)); ystart = floor(dkma_div_double_ok(ystart,pr2,&(oi->me))); ystart = dkma_mul_double_ok(ystart,pr2,&(oi->me)); pr2 = dkma_mul_double_ok(4.0,patrp, &(oi->me)); xstart = floor(dkma_div_double_ok(xstart,pr2,&(oi->me))); xstart = dkma_mul_double_ok(xstart,pr2, &(oi->me)); } stream_putdouble(oi->s, xstart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[13].name); kw_out(oi->s, 0); } break; case 14: { /* Vshingles2 */ double ystart, xstart, pr2; patrp = dkma_mul_double_ok(2.0,patrp, &(oi->me)); ystart = obb.ymin; xstart = obb.xmin; if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { pr2 = dkma_mul_double_ok(2.0,patrp, &(oi->me)); ystart = floor(dkma_div_double_ok(ystart,pr2,&(oi->me))); ystart = dkma_mul_double_ok(ystart,pr2,&(oi->me)); pr2 = dkma_mul_double_ok(4.0,patrp, &(oi->me)); xstart = floor(dkma_div_double_ok(xstart,pr2,&(oi->me))); xstart = dkma_mul_double_ok(xstart,pr2, &(oi->me)); } stream_putdouble(oi->s, xstart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[14].name); kw_out(oi->s, 0); } break; case 15: { /* FishScales */ double alpha, deltax, deltay, xstart, ystart; alpha = 1.881618; patrp = dkma_mul_double_ok(2.5,patrp, &(oi->me)); deltax = patrp * sin(0.5*alpha); deltax = dkma_mul_double_ok(2.0,deltax,&(oi->me)); deltay = patrp * (1.0 - cos(0.5*alpha)); alpha = dkma_mul_double_ok( 90.0, dkma_div_double_ok(alpha, M_PI, &(oi->me)), &(oi->me) ); alpha = drd(alpha, oi->c, 2); xstart = dkma_sub_double_ok( obb.xmin, dkma_mul_double_ok(1.5,deltax,&(oi->me)), &(oi->me) ); ystart = dkma_sub_double_ok(obb.ymin, deltay, &(oi->me)); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { xstart = floor(dkma_div_double_ok(xstart,deltax,&(oi->me))); xstart = dkma_mul_double_ok(xstart,deltax,&(oi->me)); ystart = floor( dkma_div_double_ok( xstart, dkma_mul_double_ok(deltay,2.0,&(oi->me)), &(oi->me) ) ); ystart = dkma_mul_double_ok( ystart,dkma_mul_double_ok(2.0,deltay,&(oi->me)),&(oi->me) ); } stream_putdouble(oi->s, xstart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, deltax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, deltay, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); stream_putdouble( oi->s, dkma_sub_double_ok(270.0, alpha, &(oi->me)), oi->c, 1 ); kw_out(oi->s, 1); stream_putdouble( oi->s, dkma_add_double_ok(270.0, alpha, &(oi->me)), oi->c, 1 ); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[15].name); kw_out(oi->s, 0); } break; case 16: { /* SmallFishScales */ double alpha, deltax, deltay, xstart, ystart; alpha = M_PI; deltax = patrp * sin(0.5*alpha); deltax = dkma_mul_double_ok(2.0,deltax,&(oi->me)); deltay = patrp * (1.0 - cos(0.5*alpha)); alpha = dkma_mul_double_ok( 90.0, dkma_div_double_ok(alpha, M_PI, &(oi->me)), &(oi->me) ); alpha = drd(alpha, oi->c, 2); xstart = dkma_sub_double_ok( obb.xmin, dkma_mul_double_ok(1.5,deltax,&(oi->me)), &(oi->me) ); ystart = dkma_sub_double_ok(obb.ymin, deltay, &(oi->me)); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { xstart = floor(dkma_div_double_ok(xstart,deltax,&(oi->me))); xstart = dkma_mul_double_ok(xstart,deltax,&(oi->me)); ystart = floor( dkma_div_double_ok( xstart, dkma_mul_double_ok(deltay,2.0,&(oi->me)), &(oi->me) ) ); ystart = dkma_mul_double_ok( ystart,dkma_mul_double_ok(2.0,deltay,&(oi->me)),&(oi->me) ); } stream_putdouble(oi->s, xstart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, ystart, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, deltax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, deltay, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); stream_putdouble( oi->s, dkma_sub_double_ok(270.0, alpha, &(oi->me)), oi->c, 1 ); kw_out(oi->s, 1); stream_putdouble( oi->s, dkma_add_double_ok(270.0, alpha, &(oi->me)), oi->c, 1 ); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[16].name); kw_out(oi->s, 0); } break; case 17: { /* Circles */ double deltax, startx, starty; patrp = dkma_mul_double_ok(2.0, patrp, &(oi->me)); deltax = dkma_mul_double_ok(2.0, patrp, &(oi->me)); startx = dkma_sub_double_ok(obb.xmin, deltax, &(oi->me)); starty = dkma_sub_double_ok(obb.ymin, deltax, &(oi->me)); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { startx = floor(dkma_div_double_ok(startx,deltax,&(oi->me))); startx = dkma_mul_double_ok(startx,deltax,&(oi->me)); starty = floor(dkma_div_double_ok(starty,deltax,&(oi->me))); starty = dkma_mul_double_ok(starty,deltax,&(oi->me)); } stream_putdouble(oi->s, startx, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, starty, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, patrp, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[17].name); kw_out(oi->s, 0); } break; case 18: { /* Hexagons */ double r, deltax, deltay, startx, starty; r = dkma_mul_double_ok(patrp, 2.0, &(oi->me)); /* deltay = dkma_mul_double_ok(2.0, r, &(oi->me)) / sqrt(3.0); */ deltay = dkma_mul_double_ok(2.0, r, &(oi->me)); deltay = deltay * sqrt(3.0/4.0); deltax = dkma_mul_double_ok(3.0, r, &(oi->me)); startx = dkma_sub_double_ok(obb.xmin, deltax, &(oi->me)); starty = dkma_sub_double_ok(obb.ymin, deltay, &(oi->me)); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { startx = floor(dkma_div_double_ok(startx,deltax,&(oi->me))); startx = dkma_mul_double_ok(startx,deltax,&(oi->me)); starty = floor(dkma_div_double_ok(starty,deltay,&(oi->me))); starty = dkma_mul_double_ok(starty,deltay,&(oi->me)); } stream_putdouble(oi->s, startx, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, starty, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, deltax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, deltay, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[18].name); kw_out(oi->s, 0); } break; case 19: { /* Octagons */ double deltax, corner, startx, starty; deltax = dkma_mul_double_ok(patrp, 2.0, &(oi->me)); corner = deltax / (2.0+sqrt(2.0)); startx = dkma_sub_double_ok(obb.xmin, deltax, &(oi->me)); starty = dkma_sub_double_ok(obb.ymin, deltax, &(oi->me)); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { startx = floor(dkma_div_double_ok(startx,deltax,&(oi->me))); startx = dkma_mul_double_ok(startx,deltax,&(oi->me)); starty = floor(dkma_div_double_ok(starty,deltax,&(oi->me))); starty = dkma_mul_double_ok(starty,deltax,&(oi->me)); } stream_putdouble(oi->s, startx, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, starty, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, deltax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, corner, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[19].name); kw_out(oi->s, 0); } break; case 20: { /* HorizontalTires */ double deltax, startx, starty; deltax = dkma_mul_double_ok(patrp, 2.0, &(oi->me)); startx = dkma_sub_double_ok(obb.xmin, deltax, &(oi->me)); starty = dkma_sub_double_ok(obb.ymin, deltax, &(oi->me)); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { startx = floor(dkma_div_double_ok(startx,deltax,&(oi->me))); startx = dkma_mul_double_ok(startx,deltax,&(oi->me)); starty = floor(dkma_div_double_ok(starty,deltax,&(oi->me))); starty = dkma_mul_double_ok(starty,deltax,&(oi->me)); } stream_putdouble(oi->s, startx, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, starty, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, deltax, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[20].name); kw_out(oi->s, 0); } break; case 21: { /* VerticalTires */ double deltax, startx, starty; deltax = dkma_mul_double_ok(patrp, 2.0, &(oi->me)); startx = dkma_sub_double_ok(obb.xmin, deltax, &(oi->me)); starty = dkma_sub_double_ok(obb.ymin, deltax, &(oi->me)); if(((oi->c)->opt1) & DKFIG_OPT_FILL_CONTIGOUS) { startx = floor(dkma_div_double_ok(startx,deltax,&(oi->me))); startx = dkma_mul_double_ok(startx,deltax,&(oi->me)); starty = floor(dkma_div_double_ok(starty,deltax,&(oi->me))); starty = dkma_mul_double_ok(starty,deltax,&(oi->me)); } stream_putdouble(oi->s, startx, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.xmax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, starty, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, obb.ymax, oi->c, 1); kw_out(oi->s, 1); stream_putdouble(oi->s, deltax, oi->c, 1); kw_out(oi->s, 1); dkstream_puts(oi->s, pd[21].name); kw_out(oi->s, 0); } break; } $? "- write_pattern" } /* }}} */ /* {{{ print_path_object */ static int print_path_object DK_P1(dkfig_eps_output_instruction *,oi) { int back = 1; int must_draw; dk_fig_dcc dcc; double lw; $? "+ print_path_object" if(((oi->o)->fpd).cl) { if(dkfig_tool_must_fill(((oi->o)->fpd).af, (oi->c)->opt1) || dkfig_tool_must_pattern(((oi->o)->fpd).af, (oi->c)->opt1)) { must_draw = 1; if((oi->o)->objtype == DK_FIG_OBJ_POLYLINE) { if((oi->o)->subtype == 5) { if(!(((oi->c)->opt1) & DKFIG_OPT_FILL_BITMAP_AREA)) { must_draw = 0; } } } if(must_draw) { if(((oi->o)->fpd).fc != (oi->d)->transparent) { $? ". color fill" dkfig_tool_fill_dcc(oi->d, &dcc, ((oi->o)->fpd).fc); dkfig_tool_correct_dcc(&dcc, ((oi->o)->fpd).fc, ((oi->o)->fpd).af); dkfig_eps_correct_for_palette(&dcc); set_color(oi, &dcc); set_linecap(oi, ((oi->o)->fpd).cs); set_linejoin(oi, ((oi->o)->fpd).js); if(ctm_change(oi)) { kw_out(oi->s, 74); kw_out(oi->s, 0); } write_path(oi); kw_out(oi->s, 42); kw_out(oi->s, 0); if(ctm_change(oi)) { kw_out(oi->s, 75); kw_out(oi->s, 0); } } if(dkfig_tool_must_pattern(((oi->o)->fpd).af, (oi->c)->opt1)) { if(((oi->o)->fpd).pc != (oi->d)->transparent) { $? ". pattern fill" dkfig_tool_fill_dcc(oi->d, &dcc, ((oi->o)->fpd).pc); dkfig_eps_correct_for_palette(&dcc); set_color(oi, &dcc); lw = get_object_linewidth(oi, 1); set_linewidth(oi, lw); set_linecap(oi, ((oi->o)->fpd).cs); set_linejoin(oi, ((oi->o)->fpd).js); kw_out(oi->s, 44); kw_out(oi->s, 0); if(ctm_change(oi)) { kw_out(oi->s, 74); kw_out(oi->s, 0); } write_path(oi); kw_out(oi->s, 63); kw_out(oi->s, 0); if(ctm_change(oi)) { kw_out(oi->s, 75); kw_out(oi->s, 0); } write_pattern(oi); kw_out(oi->s, 45); kw_out(oi->s, 0); } } } } /* image in the image box */ if((oi->o)->objtype == DK_FIG_OBJ_POLYLINE) { if((oi->o)->subtype == 5) { $? ". must insert image" if((oi->o)->drve) { $? ". have image data" if(!insert_image(oi)) { back = 0; } } else { $? "! no image data" } } } } must_draw = 1; if((oi->o)->objtype == DK_FIG_OBJ_POLYLINE) { if((oi->o)->subtype == 5) { if(((oi->c)->opt1) & DKFIG_OPT_REMOVE_BITMAP_BORDER) { must_draw = 0; } } } if(((oi->c)->opt1) & DKFIG_OPT_REMOVE_THIN_BORDERS) { if(((oi->o)->fpd).lt == 0L) { if(((oi->o)->fpd).cl) { if(dkfig_tool_must_fill(((oi->o)->fpd).af, (oi->c)->opt1)) { must_draw = 0; $? ". no draw (filled, border 0)" } if(dkfig_tool_must_pattern(((oi->o)->fpd).af, (oi->c)->opt1)) { must_draw = 0; $? ". no draw (patterned, border 0)" } if((oi->o)->objtype == DK_FIG_OBJ_POLYLINE) { if((oi->o)->subtype == 5) { must_draw = 0; } } } } } if(((oi->o)->fpd).pc == (oi->d)->transparent) { must_draw = 0; $? ". no draw (transparent)" } if(((oi->c)->opt1) & DKFIG_OPT_REMOVE_BG_RECTANGLE) { int wbgr = 0; if(((oi->c)->opt2) & DKFIG_OPT_WHITE_BGRECT) { wbgr = 1; } if(dkfig_tool2_obj_is_bg_rect(oi->o, wbgr)) { must_draw = 0; } } if(must_draw) { $? ". stroke" dkfig_tool_fill_dcc(oi->d, &dcc, ((oi->o)->fpd).pc); dkfig_eps_correct_for_palette(&dcc); set_color(oi, &dcc); lw = get_object_linewidth(oi, 0); set_linewidth(oi, lw); set_dash(oi, ((oi->o)->fpd).ls, ((oi->o)->fpd).sv); set_linecap(oi, ((oi->o)->fpd).cs); set_linejoin(oi, ((oi->o)->fpd).js); if(ctm_change(oi)) { kw_out(oi->s, 74); kw_out(oi->s, 0); } write_path(oi); kw_out(oi->s, 43); kw_out(oi->s, 0); if(ctm_change(oi)) { kw_out(oi->s, 75); kw_out(oi->s, 0); } if((((oi->o)->fpd).ar) & 1) { oi->a = &(((oi->o)->fpd).ahf); arrowhead_print(oi, &dcc); } if((((oi->o)->fpd).ar) & 2) { oi->a = &(((oi->o)->fpd).ahb); arrowhead_print(oi, &dcc); } oi->a = NULL; } $? "- print_path_object %d", back return back; } /* }}} */ /* {{{ process_object */ static int process_object DK_P1(dkfig_eps_output_instruction *,oi) { int back = 0; $? "+ process_object" switch((oi->o)->objtype) { case DK_FIG_OBJ_TEXT: { back = print_text_object(oi); } break; case DK_FIG_OBJ_ELLIPSE: case DK_FIG_OBJ_POLYLINE: case DK_FIG_OBJ_SPLINE: case DK_FIG_OBJ_ARC: { back = print_path_object(oi); } break; default: { $? "! unknown object" } break; } $? "- process_object %d", back return back; } /* }}} */ /* {{{ undef_string */ static void undef_string DK_P3(\ dkfig_eps_output_instruction *,oi,\ dkfig_bitmap_width *,bmw,\ int,nr\ ) { kw_out(oi->s, 102); kw_out(oi->s, 1); kw_out(oi->s, 29); kw_out(oi->s, 77); switch(nr) { case 1: { kw_out(oi->s, 94); } break; case 2: { kw_out(oi->s, 95); } break; case 3: { kw_out(oi->s, 96); } break; } dkfig_tool_num_as_string(oi->s, bmw->number, oi->allimw); kw_out(oi->s, 1); kw_out(oi->s, 103); kw_out(oi->s, 0); } /* }}} */ /* {{{ contents_pass */ static int contents_pass DK_P1(dkfig_eps_output_instruction *,oi) { int back = 1, need_filter = 0, dictused = 0; dk_fig_object *o; dkfig_bitmap_width *bmw; /* dk_fig_conversion backupc; */ unsigned long backupopt1, backupopt2; $? "+ contents_pass" if((oi->iw) && (oi->iwi)) { if(oi->numimw) { if(((oi->c)->opt1) & DKFIG_OPT_BITMAP_DICTIONARY) { unsigned long dictlgt; dictused = 1; dictlgt = dkma_add_ulong_ok( 1UL, dkma_mul_ulong_ok( 3UL, oi->numimw, &(oi->me) ), &(oi->me) ); stream_putul(oi->s, dictlgt); kw_out(oi->s, 1); kw_out(oi->s, 98); kw_out(oi->s, 1); kw_out(oi->s, 99); kw_out(oi->s, 0); } } dksto_it_reset(oi->iwi); while((bmw = (dkfig_bitmap_width *)dksto_it_next(oi->iwi)) != NULL) { need_filter = 1; $? ". bmw->width = %lu bmw->height = %lu", (unsigned long)(bmw->width), (unsigned long)(bmw->height) if((bmw->seprgb) && (bmw->colored) && ((oi->c)->psl > 1)) { kw_out(oi->s, 29); kw_out(oi->s, 77); kw_out(oi->s, 94); dkfig_tool_num_as_string(oi->s, bmw->number, oi->allimw); kw_out(oi->s, 1); stream_putul( oi->s, dkma_mul_ulong_ok( (unsigned long)(bmw->width), (unsigned long)(bmw->height), &(oi->me) ) ); kw_out(oi->s, 1); kw_out(oi->s, 78); kw_out(oi->s, 1); kw_out(oi->s, 31); kw_out(oi->s, 0); kw_out(oi->s, 29); kw_out(oi->s, 77); kw_out(oi->s, 95); dkfig_tool_num_as_string(oi->s, bmw->number, oi->allimw); kw_out(oi->s, 1); stream_putul( oi->s, dkma_mul_ulong_ok( (unsigned long)(bmw->width), (unsigned long)(bmw->height), &(oi->me) ) ); kw_out(oi->s, 1); kw_out(oi->s, 78); kw_out(oi->s, 1); kw_out(oi->s, 31); kw_out(oi->s, 0); kw_out(oi->s, 29); kw_out(oi->s, 77); kw_out(oi->s, 96); dkfig_tool_num_as_string(oi->s, bmw->number, oi->allimw); kw_out(oi->s, 1); stream_putul( oi->s, dkma_mul_ulong_ok( (unsigned long)(bmw->width), (unsigned long)(bmw->height), &(oi->me) ) ); kw_out(oi->s, 1); kw_out(oi->s, 78); kw_out(oi->s, 1); kw_out(oi->s, 31); kw_out(oi->s, 0); } else { kw_out(oi->s, 29); kw_out(oi->s, 77); dkfig_tool_num_as_string(oi->s, bmw->number, oi->allimw); kw_out(oi->s, 1); stream_putul( oi->s, dkma_mul_ulong_ok( (unsigned long)(bmw->width), ((bmw->colored) ? 3UL : 1UL), &(oi->me) ) ); kw_out(oi->s, 1); kw_out(oi->s, 78); kw_out(oi->s, 1); kw_out(oi->s, 31); kw_out(oi->s, 0); } } } dksto_it_reset(oi->fli); while((o = (dk_fig_object *)dksto_it_next(oi->fli)) != NULL) { if((oi->c)->app) { dkapp_set_source_lineno((oi->c)->app, o->lineno); } oi->o = o; oi->me = 0; /* DK_MEMCPY(&backupc,oi->c,sizeof(dk_fig_conversion)) ; */ backupopt1 = (oi->c)->opt1; backupopt2 = (oi->c)->opt2; handle_special_comments(oi,o); if(((oi->c)->opt1) & DKFIG_OPT_VERBOSE_OUTPUT) { kw_out(oi->s, 37); kw_out(oi->s, 1); stream_putul(oi->s, o->lineno); kw_out(oi->s, 0); } if(!process_object(oi)) { back = 0; } if(oi->me) { back = 0; $? "! Math error in object" dkfig_tool2_eps_error_message(oi, 13); } /* DK_MEMCPY(oi->c,&backupc,sizeof(dk_fig_conversion)) ; */ (oi->c)->opt2 = backupopt2; (oi->c)->opt1 = backupopt1; oi->o = NULL; if((oi->c)->app) { dkapp_set_source_lineno((oi->c)->app, 0UL); } } oi->spcpass += 1; if((oi->iw) && (oi->iwi)) { if(oi->numimw) { if(((oi->c)->opt1) & DKFIG_OPT_BITMAP_DICTIONARY) { kw_out(oi->s, 100); kw_out(oi->s, 0); } } } if((oi->c)->psl > 1) { if(!dictused) { if((oi->iw) && (oi->iwi)) { dksto_it_reset(oi->iwi); while((bmw = (dkfig_bitmap_width *)dksto_it_next(oi->iwi)) != NULL) { if((bmw->seprgb) && (bmw->colored) && ((oi->c)->psl > 1)) { undef_string(oi, bmw, 1); undef_string(oi, bmw, 2); undef_string(oi, bmw, 3); } else { undef_string(oi, bmw, 0); } } } } if(((oi->c)->opt1) & DKFIG_OPT_GARBAGE_COLLECTION) { kw_out(oi->s, 101); kw_out(oi->s, 0); } } $? "- contents_pass %d", back return back; } /* }}} */ /* {{{ write_procset */ static int write_procset DK_P5(dkfig_eps_output_instruction *,oi,\ char *,pname, char *,v1, char *,v2, char *,fn) { int back = 0; char buffer[256]; char *filename; FILE *fipo; if((oi->c)->dscl) { if((oi->c)->dscl > DKFIG_DSC_OLD) { kw_out(oi->s, 20); dkstream_puts(oi->s, pname); kw_out(oi->s, 1); dkstream_puts(oi->s, v1); } else { kw_out(oi->s, 18); dkstream_puts(oi->s, pname); kw_out(oi->s, 1); dkstream_puts(oi->s, v2); } kw_out(oi->s, 1); dkstream_puts(oi->s, v2); kw_out(oi->s, 0); } filename = NULL; if((oi->c)->app) { filename = dkapp_find_file_dup((oi->c)->app, fn); } if(filename) { if((oi->c)->app) { fipo = dkapp_fopen((oi->c)->app, filename, str_open_read); } else { fipo = dksf_fopen(filename, str_open_read); } if(fipo) { back = 1; /* success */ while(fgets(buffer, sizeof(buffer), fipo)) { dkstr_chomp(buffer, NULL); dkstream_puts(oi->s, buffer); kw_out(oi->s, 0); } fclose(fipo); fipo = NULL; } else { $? "! Failed to open file %s", TR_STR(filename) if((oi->c)->app) { dkapp_err_fopenr((oi->c)->app, filename); } } dk_delete(filename); filename = NULL; } else { $? "! File not found %s", TR_STR(fn) if((oi->c)->app) { dkapp_err_no_such_file((oi->c)->app, fn); } } if((oi->c)->dscl) { if((oi->c)->dscl > DKFIG_DSC_OLD) { kw_out(oi->s, 21); } else { kw_out(oi->s, 19); } kw_out(oi->s, 0); } return back; } /* }}} */ /* {{{ print_ps_font_re_encoding */ static int print_ps_font_re_encoding DK_P1(dkfig_eps_output_instruction *,oi) { int back = 1; int i, nr; /* procset for font re-encoding */ if((oi->flags & OI_FLAG_FONT_RE_ENCODING) || (DKFIG_ALWAYS_RE_ENCODE)) { i = write_procset( oi, kw[22], ((((oi->c)->psl) > 1) ? kw[25] : kw[23] ), ((((oi->c)->psl) > 1) ? kw[26] : kw[24] ), ((((oi->c)->psl) > 1) ? new_fre_proc_file : old_fre_proc_file) ); if(!i) { back = 0; } } /* procset for aligned text */ if((oi->flags) & OI_FLAG_ALIGNED_TEXT) { i = write_procset( oi, kw[67], kw[23], kw[24], f2v_aligned_text_procset ); if(!i) { back = 0; } } /* procsets for patterns */ for(nr = 0; nr < DKFIG_NUMBER_OF_PATTERNS; nr++) { if((oi->patused)[nr]) { i = write_procset( oi, pd[nr].filename, pd[nr].version, pd[nr].revision, pd[nr].filename ); if(!i) { back = 0; } } } return back; } /* }}} */ /* {{{ check_list_of_needed_fonts */ static void check_list_of_needed_fonts DK_P1(dkfig_eps_output_instruction *,oi) { int i; for(i = 0; i < 35; i++) { if((oi->fnused)[i]) { oi->flags |= OI_FLAG_FONT_RE_ENCODING; } } } /* }}} */ /* {{{ print_list_of_needed_fonts */ static void print_list_of_needed_fonts DK_P1(dkfig_eps_output_instruction *,oi) { int isfirst = 1, i; for(i = 0; i < 35; i++) { if((oi->fnused)[i]) { oi->flags |= OI_FLAG_FONT_RE_ENCODING; oi->flags |= OI_FLAG_DOCUMENT_SETUP; if(isfirst) { if((oi->c)->dscl > DKFIG_DSC_OLD) { kw_out(oi->s, 13); kw_out(oi->s, 14); } else { kw_out(oi->s, 12); } } else { kw_out(oi->s, 15); if((oi->c)->dscl > DKFIG_DSC_OLD) { kw_out(oi->s, 14); } } dkstream_puts(oi->s, dkfont_get_ps_name(i)); kw_out(oi->s, 0); isfirst = 0; } } } /* }}} */ /* {{{ filename_without_suffix Print filename without the suffix to the stream. */ static void filename_without_suffix DK_P2(dk_stream_t *,s, char *,fn) { char *p1, *p2; if(fn) { p1 = fn; p2 = NULL; while(*p1) { if(*p1 == '.') { if(p2) { dkstream_write(s, p2++, 1); while((*p2) && (*p2 != '.')) { dkstream_write(s, p2++, 1); } } p2 = p1; } else { if(!p2) { dkstream_write(s, p1, 1); } } p1++; } } else { kw_out(s, 112); } } /* }}} */ static void my_preamble_additions DK_P1(dkfig_eps_output_instruction *,oi) { size_t start, end, i; start = 134; end = 152; kw_out(oi->s, 129); kw_out(oi->s, 128); kw_out(oi->s, 130); kw_out(oi->s, 128); kw_out(oi->s, 131); kw_out(oi->s, 128); kw_out(oi->s, 124); kw_out(oi->s, 125); kw_out(oi->s, 82); kw_out(oi->s, 81); dkstream_puts_ul( oi->s, dkma_double_to_ul_ok( dkma_sub_double_ok(oi->xright, oi->xleft, &(oi->me)), &(oi->me) ) ); kw_out(oi->s, 127); kw_out(oi->s, 82); kw_out(oi->s, 128); kw_out(oi->s, 124); kw_out(oi->s, 126); kw_out(oi->s, 82); kw_out(oi->s, 81); dkstream_puts_ul( oi->s, dkma_double_to_ul_ok( dkma_sub_double_ok(oi->ytop, oi->ybottom, &(oi->me)), &(oi->me) ) ); kw_out(oi->s, 127); kw_out(oi->s, 82); kw_out(oi->s, 128); for(i = start; i <= end; i++) { kw_out(oi->s, i); kw_out(oi->s, 128); } kw_out(oi->s, 132); kw_out(oi->s, 128); } /* {{{ first_picture Write TeX output to stream */ static int first_picture DK_P1(dkfig_eps_output_instruction *,oi) { int back = 1; char *fn = NULL; /* file name for includegraphics */ char *xn = NULL; if(((oi->c)->opt2) & DKFIG_OPT_FULL_TEX_FILE) { if(!dkfig_dt_tex_preamble(oi->c, oi->s)) { back = 0; } my_preamble_additions(oi); } $? "+ first_picture" kw_out(oi->s, 107); kw_out(oi->s, 108); kw_out(oi->s, 128); if((oi->c)->ifn2) { $? ". have input file name" fn = (oi->c)->ifn2; } if(fn) { $? ". any file name" #if DK_HAVE_FEATURE_BACKSLASH xn = dkstr_rchr(fn, '\\'); #else xn = dkstr_rchr(fn, '/'); #endif } if(xn) { $? ". last path compound was found" fn = xn; fn++; } if(!fn) { kw_out(oi->s, 110); kw_out(oi->s, 128); } kw_out(oi->s, 111); if((oi->c)->incg) { dkstream_puts(oi->s, (oi->c)->incg); } else { filename_without_suffix(oi->s, fn); } kw_out(oi->s, 82); kw_out(oi->s, 128); kw_out(oi->s, 109); kw_out(oi->s, 128); $? "- first_picture %d", back return back; } /* }}} */ /* {{{ picture_settings Font definitions and commands for the second picture in the TeX output. */ static int picture_settings DK_P1(dkfig_eps_output_instruction *,oi) { int back = 1; $? "+ picture_settings" /* ##### */ $? "- picture_settings %d", back return back; } /* }}} */ /* {{{ process_tex_text Process one text object. (TeX output driver) */ static int process_tex_text DK_P1(dkfig_eps_output_instruction *,oi) { int back = 0; dk_fig_text *t; int did_rotate; double dv; dk_fig_dcc dcc; int th; char *ptr; $? "+ process_tex_text" t = (dk_fig_text *)((oi->o)->data); if(t) { if(t->font_handling) { back = 1; switch((t->font_handling)->handling) { case 2: case 3: case 4: case 5: { $? ". TeX handling" th = (((t->font_flags) & 2) ? ((oi->c)->special_text) : ((oi->c)->normal_text)); did_rotate = 0; dkfig_tool_fill_dcc(oi->d, &dcc, ((oi->o)->fpd).pc); kw_out(oi->s, 115); kw_out(oi->s, 71); /* placement */ dkstream_puts_double(oi->s, drd(ccdx(oi, t->x), oi->c, 1)); kw_out(oi->s, 114); dkstream_puts_double(oi->s, drd(ccdy(oi, t->y), oi->c, 1)); kw_out(oi->s, 72); kw_out(oi->s, 81); if(fabs(t->angle) > DKFIG_EPSILON) { did_rotate = 1; kw_out(oi->s, 118); kw_out(oi->s, 81); /* rotation in degree */ dv = (180.0 * t->angle) / M_PI; dv = drd(dv, oi->c, 1); dkstream_puts_double(oi->s, dv); kw_out(oi->s, 82); kw_out(oi->s, 81); } kw_out(oi->s, 116); /* makebox */ kw_out(oi->s, 108); /* (0,0) */ kw_out(oi->s, 61); /* [ */ /* alignment */ switch(((oi->o)->fpd).st) { case 1: { /* top -> b */ kw_out(oi->s, 119); } break; case 2: { /* ulft -> rb */ kw_out(oi->s, 120); } break; default: { /* urt -> lb */ kw_out(oi->s, 121); } break; } kw_out(oi->s, 62); /* ] */ kw_out(oi->s, 81); /* { */ kw_out(oi->s, 117); /* smash */ kw_out(oi->s, 81); /* { */ if(th & DKFIG_TH_MBOX) { kw_out(oi->s, 123); kw_out(oi->s, 81); } if((t->font_handling)->handling != 2) { dkfig_dt_write_fontname(oi->s, oi->d, t->font_handling); kw_out(oi->s, 81); kw_out(oi->s, 82); } kw_out(oi->s, 122); kw_out(oi->s, 81); /* color */ dv = dcc.red; dv = drd(dv, oi->c, 0); dkstream_puts_double(oi->s, dv); kw_out(oi->s, 114); dv = dcc.green; dv = drd(dv, oi->c, 0); dkstream_puts_double(oi->s, dv); kw_out(oi->s, 114); dv = dcc.blue; dv = drd(dv, oi->c, 0); dkstream_puts_double(oi->s, dv); kw_out(oi->s, 82); /* contents */ if((t->font_flags) & 2) { /* special text, leave as is */ dkstream_puts(oi->s, t->text); } else { /* non-special text, translate umlauts,... */ if(((oi->c)->opt2) & DKFIG_OPT_UTF_8) { /* UTF-8 encoded */ dkfig_tool2_utf8_to_latex(oi->s, oi->c, t->text); } else { ptr = t->text; while(*ptr) { dkstream_puts(oi->s, dk_l2l_encoding(*ptr)); ptr++; } } } if(th & DKFIG_TH_MBOX) { kw_out(oi->s, 82); } kw_out(oi->s, 82); /* } from: smash{ */ kw_out(oi->s, 82); /* } from: makebox(0,0)[]{ */ if(did_rotate) { kw_out(oi->s, 82); /* } from: rotatebox{}{ */ } kw_out(oi->s, 82); kw_out(oi->s, 128); } break; } } } $? "- process_tex_text %d", back return back; } /* }}} */ /* {{{ second_picture Print the second picture environment in the TeX output. */ static int second_picture DK_P1(dkfig_eps_output_instruction *,oi) { int back = 1; dk_fig_object *o; unsigned long backupopt1, backupopt2; $? "+ second_picture" if(!dkfig_dt_font_redef(oi->c, oi->s, 0)) { back = 0; } kw_out(oi->s, 113); kw_out(oi->s, 128); kw_out(oi->s, 107); kw_out(oi->s, 71); dkstream_puts_long(oi->s, dkma_double_to_l(oi->xright)); kw_out(oi->s, 114); dkstream_puts_long(oi->s, dkma_double_to_l(oi->ytop)); kw_out(oi->s, 72); kw_out(oi->s, 128); if((oi->fl) && (oi->fli)) { dksto_it_reset(oi->fli); while((o = (dk_fig_object *)dksto_it_next(oi->fli)) != NULL) { oi->o = o; oi->me = 0; if((oi->c)->app) { dkapp_set_source_lineno((oi->c)->app, o->lineno); } backupopt1 = (oi->c)->opt1; backupopt2 = (oi->c)->opt2; if(o->objtype == DK_FIG_OBJ_TEXT) { if(!process_tex_text(oi)) { back = 0; } } (oi->c)->opt2 = backupopt2; (oi->c)->opt1 = backupopt1; if((oi->c)->app) { dkapp_set_source_lineno((oi->c)->app, 0UL); } if(oi->me) { /* math error */ back = 0; dkfig_tool2_eps_error_message(oi, 13); } } } kw_out(oi->s, 109); kw_out(oi->s, 128); if(((oi->c)->opt2) & DKFIG_OPT_FULL_TEX_FILE) { kw_out(oi->s, 133); kw_out(oi->s, 128); } $? "- second_picture %d", back return back; } /* }}} */ /* {{{ output_tex The TeX output driver function */ static int output_tex DK_P1(dkfig_eps_output_instruction *,oi) { int back = 0; $? "+ output_tex" if(first_picture(oi)) { if(picture_settings(oi)) { if(second_picture(oi)) { back = 1; } } } $? "- output_tex %d", back return back; } /* }}} */ /* {{{ output_pass Write EPS output to stream. */ static int output_pass DK_P1(dkfig_eps_output_instruction *,oi) { int back = 0; char buffer[256]; $? "+ output_pass" /* %!PS-Adobe... */ ps_header_string(oi); /* BoundingBox */ ps_bounding_box(oi); if((oi->c)->dscl) { /* Title ... */ kw_out(oi->s, 7); kw_out(oi->s, 0); if((oi->c)->ifn2) { kw_out(oi->s, 6); dkstream_puts(oi->s, (oi->c)->ifn2); kw_out(oi->s, 0); } kw_out(oi->s, 8); kw_out(oi->s, 0); kw_out(oi->s, 9); kw_out(oi->s, 0); kw_out(oi->s, 11); kw_out(oi->s, 0); print_list_of_needed_fonts(oi); kw_out(oi->s, 10); kw_out(oi->s, 0); kw_out(oi->s, 16); kw_out(oi->s, 0); } else { check_list_of_needed_fonts(oi); } back = print_ps_font_re_encoding(oi); if(((oi->c)->dscl >= 2) && (((oi->c)->opt2) & DKFIG_OPT_SETPAGEDEVICE)) { oi->flags |= OI_FLAG_DOCUMENT_SETUP; } if((oi->c)->dscl) { kw_out(oi->s, 17); kw_out(oi->s, 0); if(oi->flags & OI_FLAG_DOCUMENT_SETUP) { kw_out(oi->s, 27); kw_out(oi->s, 0); if(((oi->c)->dscl >= 2) && (((oi->c)->opt2) & DKFIG_OPT_SETPAGEDEVICE)) { if(((oi->c)->bdnum) == DKFIG_DRIVER_EPS) { dkfig_tool2_msg1(oi->c, DK_LOG_LEVEL_WARNING, 114); } else { kw_out(oi->s, 153); kw_out(oi->s, 1); kw_out(oi->s, 156); kw_out(oi->s, 1); sprintf( buffer, "%ld %ld", dkma_double_to_l(oi->xright), dkma_double_to_l(oi->ytop) ); kw_out(oi->s, 61); dkstream_puts(oi->s, buffer); kw_out(oi->s, 62); kw_out(oi->s, 1); kw_out(oi->s, 154); kw_out(oi->s, 1); kw_out(oi->s, 155); kw_out(oi->s, 0); } } } } setup_ps_fonts(oi); if((oi->c)->dscl) { if(oi->flags & OI_FLAG_DOCUMENT_SETUP) { kw_out(oi->s, 28); kw_out(oi->s,0); } kw_out(oi->s, 33); kw_out(oi->s, 0); } if(back) { back = contents_pass(oi); } else { contents_pass(oi); } if(((oi->c)->opt1) & DKFIG_OPT_USE_PS_SHOWPAGE) { if(((oi->c)->bdnum) == DKFIG_DRIVER_EPS) { dkfig_tool2_msg1(oi->c, DK_LOG_LEVEL_WARNING, 115); } else { kw_out(oi->s, 36); kw_out(oi->s, 0); } } if((oi->c)->dscl) { /* Trailer, EOF*/ kw_out(oi->s, 34); kw_out(oi->s, 0); kw_out(oi->s, 35); kw_out(oi->s, 0); } $? "- output_pass %d", back return back; } /* }}} */ /* {{{ cleanup_pass Cleanup after doing output. Close temporary files, release memory... */ static void cleanup_pass DK_P1(dkfig_eps_output_instruction *,oi) { dk_fig_object *o; dkfig_bitmap_width *bmw; $? "+ cleanup_pass" if((oi->fli) && (oi->fl)) { dksto_it_reset(oi->fli); while((o = (dk_fig_object *)dksto_it_next(oi->fli)) != NULL) { switch(o->objtype) { case DK_FIG_OBJ_POLYLINE: { switch(o->subtype) { case 5: { if(o->drve) { dkfig_eps_image_info_delete( (dkfig_eps_image_info *)(o->drve) ); o->drve = NULL; } } break; } } break; } } dksto_it_close(oi->fli); } if(oi->fl) { dksto_close(oi->fl); } oi->fli = NULL; oi->fl = NULL; if((oi->iwi) && (oi->iw)) { dksto_it_reset(oi->iwi); while((bmw = (dkfig_bitmap_width *)dksto_it_next(oi->iwi)) != NULL) { $? ". destroying bitmap width %ld info", bmw->width dk_delete(bmw); } dksto_it_close(oi->iwi); } if(oi->iw) { dksto_close(oi->iw); } oi->iw = NULL; oi->iwi = NULL; if(oi->fdvi) { fclose(oi->fdvi); oi->fdvi = NULL; } if(oi->fps) { fclose(oi->fps); oi->fps = NULL; } if(!(((oi->c)->opt1) & DKFIG_OPT_KEEP_TEX_FILES)) { dkfig_tool_delete_tex_files(oi->c); } $? "- cleanup_pass" } /* }}} */ /* {{{ dkfig_output_eps The driver function invoked from the dkfigco module. */ int dkfig_output_eps DK_P1(dk_fig_conversion *,c) { int back = 0; int fnused[35], patused[DKFIG_NUMBER_OF_PATTERNS], i; dkfig_eps_output_instruction oi; $? "+ dkfig_output_eps" null_oi(&oi); oi.c = c; oi.fnused = fnused; /* no fonts used yet */ for(i = 0; i < 35; i++) { fnused[i] = 0; } oi.patused = patused; /* no patterns used so far */ for(i = 0; i < DKFIG_NUMBER_OF_PATTERNS; i++) { patused[i] = 0; } oi.skip_images = 0; /* Progress: Gathering information */ dkfig_tool2_msg1(c, DK_LOG_LEVEL_PROGRESS, 121); if(preparation_pass(&oi)) { dkfig_tool2_report_unused_options(c); /* Progress: starting output */ if(c->msg1) { dkfig_tool2_msg3(c, DK_LOG_LEVEL_PROGRESS, 20, 21, ((c->ofn2) ? (c->ofn2) : ((c->msg1)[122]))); } back = output_pass(&oi); /* Progress: output finished */ dkfig_tool2_msg1(c, DK_LOG_LEVEL_PROGRESS, 22); } cleanup_pass(&oi); $? "- dkfig_output_eps %d", back return back; } /* }}} */ /* {{{ dkfig_output_ps Create PS file. */ int dkfig_output_ps DK_P1(dk_fig_conversion *,c) { int back = 0; $? "+ dkfig_output_ps" back = dkfig_output_eps(c); $? "- dkfig_output_ps" return back; } /* }}} */ /* {{{ dkfig_output_tex The driver function invoked from the dkfigco module. */ int dkfig_output_tex DK_P1(dk_fig_conversion *,c) { int back = 0; int fnused[35], patused[DKFIG_NUMBER_OF_PATTERNS], i; dkfig_eps_output_instruction oi; unsigned long backupopt2; $? "+ dkfig_output_tex" null_oi(&oi); /* c->opt2 |= DKFIG_OPT_CRNL; */ backupopt2 = c->opt2; c->opt2 |= DKFIG_OPT_TEX_DRIVER; oi.c = c; oi.fnused = fnused; /* no fonts used yet */ for(i = 0; i < 35; i++) { fnused[i] = 0; } oi.patused = patused; /* no patterns used so far */ for(i = 0; i < DKFIG_NUMBER_OF_PATTERNS; i++) { patused[i] = 0; } oi.skip_images = 1; if(preparation_pass(&oi)) { dkfig_tool2_report_unused_options(c); back = output_tex(&oi); } cleanup_pass(&oi); c->opt2 = backupopt2; $? "- dkfig_output_tex %d", back return back; } /* }}} */ /* {{{ dkfig_output_bb The driver function invoked from the dkfigco module. */ int dkfig_output_bb DK_P1(dk_fig_conversion *,c) { int back = 0; int fnused[35], patused[DKFIG_NUMBER_OF_PATTERNS], i; dkfig_eps_output_instruction oi; $? "+ dkfig_output_bb" null_oi(&oi); /* c->opt2 |= DKFIG_OPT_CRNL; */ oi.c = c; oi.fnused = fnused; /* no fonts used yet */ for(i = 0; i < 35; i++) { fnused[i] = 0; } oi.patused = patused; /* no patterns used so far */ oi.skip_images = 1; for(i = 0; i < DKFIG_NUMBER_OF_PATTERNS; i++) { patused[i] = 0; } if(preparation_pass(&oi)) { dkfig_tool2_report_unused_options(c); ps_bounding_box(&oi); back = 1; } cleanup_pass(&oi); $? "- dkfig_output_bb %d", back return back; } /* }}} */ /* {{{ SCCS ID */ #ifndef LINT static char sccs_id[] = { "@(#)dkfigeps.ctr 1.81 05/29/07\t(krause) - fig2vect" }; #endif /* }}} */