#define B2EPS_C	1
#include "bmepsi.h"

#line 3 "b2eps.ctr"




static char *kw[] = {
  /*   0 */	"\r\n",
  /*   1 */	" ",
  /*   2 */	"%!PS-Adobe",
  /*   3 */	"%%BoundingBox: ",
  /*   4 */	"EPSF",
  /*   5 */	"%%Creator: bmeps",
  /*   6 */	"%%Title: ",
  /*   7 */	"%%Pages: ",
  /*   8 */	"%%PageOrder: Ascend",
  /*   9 */	"%%DocumentData: Clean7Bit",
  /*  10 */	"%%EndComments",
  /*  11 */	"%%BeginProlog",
  /*  12 */	"%%EndProlog",
  /*  13 */	"%%BeginSetup",
  /*  14 */	"%%EndSetup",
  /*  15 */	"%%Trailer",
  /*  16 */	"%%EOF",
  /*  17 */	"unnamed",
  /*  18 */	"%%Page: ",
  /*  19 */	"showpage",
  /*  20 */	"gsave",
  /*  21 */	"grestore",
  /*  22 */	"13 dict begin",	/* see below for 13 */
  /*  23 */	"end",
  /*  24 */	"1 vmreclaim",
  /*  25 */	"translate",
  /*  26 */	"scale",
  /*  27 */	"sr",
  /*  28 */	"sg",
  /*  29 */	"sb",
  /*  30 */	"/",
  /*  31 */	"string",
  /*  32 */	"def",
  /*  33 */	"f",
  /*  34 */	"a",
  /*  35 */	"b",
  /*  36 */	"c",
  /*  37 */	"filter",
  /*  38 */	"/ASCIIHexDecode",
  /*  39 */	"/ASCII85Decode",
  /*  40 */	"currentfile",
  /*  41 */	"/LZWDecode",
  /*  42 */	"/FlateDecode",
  /*  43 */	"/RunLengthDecode",
  /*  44 */	"closefile",
  /*  45 */	"flushfile",
  /*  46 */	"currentdict",
  /*  47 */	"undef",
  /*  48 */	"{",
  /*  49 */	"}",
  /*  50 */	"exec",
  /*  51 */	"flushfile",
  /*  52 */	"/DeviceRGB",
  /*  53 */	"/DeviceGray",
  /*  54 */	"setcolorspace",
  /*  55 */	"readstring",
  /*  56 */	"pop",
  /*  57 */	"true",
  /*  58 */	"false",
  /*  59 */	"3",
  /*  60 */	"colorimage",
  /*  61 */	"image",
  /*  62 */	"sm",		/* for mask and level 1 gray */
  /*  63 */	"readhexstring",
  /*  64 */	"<<",
  /*  65 */	">>",
  /*  66 */	"/ImageType",
  /*  67 */	"/Width",
  /*  68 */	"/Height",
  /*  69 */	"/ImageMatrix",
  /*  70 */	"/MultipleDataSources",
  /*  71 */	"/DataSource",
  /*  72 */	"/BitsPerComponent",
  /*  73 */	"/Decode",
  /*  74 */	"[0 1]",
  /*  75 */	"[0 1 0 1 0 1]",
  /*  76 */	"/Interpolate",
  /*  77 */	"[",
  /*  78 */	"]",
  /*  79 */	"/DataDict",
  /*  80 */	"/MaskDict",
  /*  81 */	"/InterleaveType",
  /*  82 */	"/DCTDecode",
  /*  83 */	"rotate",
  /*  84 */	"-",
  /*  85 */	"/DeviceCMYK",
  /*  86 */	"[0 1 0 1 0 1 0 1]",
  /*  87 */	"[1 0 1 0 1 0 1 0]",
  /*  88 */	"newpath",
  /*  89 */	"moveto",
  /*  90 */	"lineto",
  /*  91 */	"closepath",
  /*  92 */	"fill",
  /*  93 */	"setgray",
  /*  94 */	"setrgbcolor",

  NULL
};
size_t lgt_kw = sizeof(kw)/sizeof(PCHAR);

/*
	3 names for files (ASCIIHex/ASCII85, LZW/flate, run-length)
	3 names for strings (R, G, B)
	3 names for procedures (R, G, B)
	1 name  for string (image mask)
	1 name  for procedure (image mask)
*/

static
void
kw_out DK_P2(BJ *,bj, size_t, n)
{
  if(n < lgt_kw) {
    dkstream_puts(bj->os, kw[n]);
  }
}


void
bmeps_eps_bb DK_P1(BJ *,bj)
{
  long fno;
  long x0, y0, x1, y1;
  int have_data = 0;
  char buffer[128];
  
  fno = bj->frame_s;
  x0 = y0 = x1 = y1 = 0UL;
  buffer[0] = 0x00;
  while(fno <= bj->frame_e) {
    
    if(dkbif_set_frame(bj->bif, fno)) {
      bmeps_tool_calculate_areas(bj);
      if(have_data) {
        if( (bj->trans).bb.x0 < x0 ) {
	  x0 = (bj->trans).bb.x0;
	}
	if( (bj->trans).bb.y0 < y0 ) {
	  y0 = (bj->trans).bb.y0;
	}
	if( (bj->trans).bb.x1 > x1 ) {
	  x1 = (bj->trans).bb.x1;
	}
	if( (bj->trans).bb.y1 > y1 ) {
	  y1 = (bj->trans).bb.y1;
	}
      } else {
        x0 = (bj->trans).bb.x0;
	x1 = (bj->trans).bb.x1;
	y0 = (bj->trans).bb.y0;
	y1 = (bj->trans).bb.y1;
        have_data = 1;
      } 
#if VEERSION_BEFORE_2006_11_04
      sprintf(buffer, "%ld %ld %ld %ld", x0, y0, x1, y1);
      dkstream_puts(bj->os, kw[3]);
      dkstream_puts(bj->os, buffer);
      dkstream_puts(bj->os, kw[0]);
#endif
    } else {
      bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 71); bj->exval = 1;
    }
    fno++;
    
  }
  
  sprintf(buffer, "%ld %ld %ld %ld", x0, y0, x1, y1);
  kw_out(bj, 3); dkstream_puts(bj->os, buffer); kw_out(bj, 0);
  
}



static
void
translate_and_scale_if_necessary DK_P6(\
  BJ *,bj, unsigned long,w, unsigned long,h,\
  unsigned long,origw, unsigned long,origh, char *,buffer\
)
{
  switch(bmeps_tool_how_to_handle_bb(bj)) {
    case 2: {	/* paper size */
      if((bj->trans).must_rotate) {
        w = origh; h = origw;
      }
      
      sprintf(buffer, "%lg %lg", (bj->trans).iu.x0, (bj->trans).iu.y0);
      dkstream_puts(bj->os, buffer);
      kw_out(bj, 1); kw_out(bj, 25); kw_out(bj, 0);
      sprintf(buffer, "%lg %lg", (bj->trans).sfx, (bj->trans).sfy);
      dkstream_puts(bj->os, buffer);
      kw_out(bj, 1); kw_out(bj, 26); kw_out(bj, 0);
    } break;
    case 1: {	/* pHY chunk */
      if((bj->trans).must_scale) {
        
        sprintf(buffer, "%lg %lg", (bj->trans).iu.x0, (bj->trans).iu,y0);
        dkstream_puts(bj->os, buffer);
        kw_out(bj, 1); kw_out(bj, 25); kw_out(bj, 0);
        sprintf(buffer, "%lg %lg", (bj->trans).sfx, (bj->trans).sfy);
        dkstream_puts(bj->os, buffer);
        kw_out(bj, 1); kw_out(bj, 26); kw_out(bj, 0);
      }
    } break;
    default: {	/* 1:1 */
    } break;
  }
}



static
void
internal_conventional DK_P1(BJ *,bj)
{
  char buffer[128], slbuffer[32];
  unsigned long origw, origh, w, h, sl, iy, j, x, y, bpc, bits;
  unsigned short bpcs;
  int me = 0, number_of_filters = 0, i = 0;
  dk_stream_t *ofs = NULL;
  dk_bitshift_t *obs = NULL;
  
  origw = w = dkbif_get_width(bj->bif);
  origh = h = dkbif_get_height(bj->bif);
  if((bj->trans).must_rotate) {
    w = origh; h = origw;
  }
  /*
  	calculations and setup
  */
  /* retrieve and correct bits per component */
  bpcs = dkbif_get_bits_per_component(bj->bif);
  bpcs = bmeps_tool_eps_output_bits(bpcs);
  bpc = (unsigned long)bpcs;
  /* no colored output for gray images */
  switch(dkbif_get_channels(bj->bif)) {
    case 1: case 2: {
      (bj->bo2)->opt &= (~(BMEPS_OPT_COLOR_OUTPUT));
      (bj->bo2)->opt &= (~(BMEPS_OPT_SEPARATED_DATA));
    } break;
  }
  /* level 1 allows 8 bits per pixel only */
  if((bj->bo2)->l == BMEPS_PS_LEVEL_1) {
    if(bpcs > 8) {
      bpcs = 8; bpc = 8UL;
    }
  }
  dkbif_set_bits_per_component(bj->bif, bpcs);
  /* calculate string size for separated data sources */
  bits = dkma_mul_ulong_ok(w, bpc, &me);
  sl = bits / 8UL;
  if(sl * 8UL < bits) sl = dkma_add_ulong_ok(sl, 1UL, &me);
  /* string length is restricted */
  if((me != 0) || (sl >= 16384UL)) {
    (bj->bo2)->opt &= (~(BMEPS_OPT_SEPARATED_DATA));
  }
  /* set up image mask and mask level */
  switch(dkbif_get_channels(bj->bif)) {
    case 2: case 4: {	/* alpha channel */
      
      if((bj->bo2)->opt & BMEPS_OPT_IMAGE_MASK) {
        dkbif_set_mask_trigger_level(bj->bif, (bj->bo2)->mtl);
      }
      if((bj->bo2)->opt & BMEPS_OPT_ALPHA_MIX) {
        
        dkbif_set_mixing(bj->bif,
	  (((bj->bo2)->opt & BMEPS_OPT_PREFER_SPEC_BG) ? 2 : 1),
	  (bj->bo2)->dbgr, (bj->bo2)->dbgg, (bj->bo2)->dbgb
	);
      }
    } break;
    default: {	/* no alpha channel */
      
      (bj->bo2)->opt &= (~(BMEPS_OPT_IMAGE_MASK));
      (bj->bo2)->opt &= (~(BMEPS_OPT_ALPHA_MIX));
      (bj->bo2)->opt &= (~(BMEPS_OPT_PREFER_SPEC_BG));
    } break;
  }
  if((bj->bo2)->opt & BMEPS_OPT_IMAGE_MASK) {
    (bj->bo2)->opt &= (~(BMEPS_OPT_SEPARATED_DATA));
  }
  /* final corrections on bo2 */
  bmeps_tool_correct_bo(bj->bo2);
  /* calculate number of file names in dictionary */
  number_of_filters = 1;
  if((bj->bo2)->enc & (BMEPS_ENCODING_FLATE)) {
    number_of_filters++;
  }
  if((bj->bo2)->enc & BMEPS_ENCODING_RUNLENGTH) {
    number_of_filters++;
  }
  /*
  	image operator (and arguments)
  */
  /* file definitions */
  kw_out(bj, 48); kw_out(bj, 0);
  kw_out(bj, 20); kw_out(bj, 0);
  translate_and_scale_if_necessary(bj, w, h, origw, origh, buffer);
  if((bj->bo2)->opt & BMEPS_OPT_DICTIONARY) {
    kw_out(bj, 22); kw_out(bj, 0);
  }
  if((bj->bo2)->l > BMEPS_PS_LEVEL_1) {	/* PS level >= 2 */
    kw_out(bj, 30); kw_out(bj, 33); kw_out(bj, 34); kw_out(bj, 1);
    kw_out(bj, 40); kw_out(bj, 1);
    if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) {
      kw_out(bj, 39);
    } else {
      kw_out(bj, 38);
    }
    kw_out(bj, 1); kw_out(bj, 37); kw_out(bj, 1); kw_out(bj, 32);
    kw_out(bj, 0);
    number_of_filters = 1;
    if((bj->bo2)->enc & (BMEPS_ENCODING_FLATE)) {
      kw_out(bj, 30); kw_out(bj, 33); kw_out(bj, 35); kw_out(bj, 1);
      kw_out(bj, 33); kw_out(bj, 34); kw_out(bj, 1);
      if((bj->bo2)->enc & BMEPS_ENCODING_FLATE) {
        kw_out(bj, 42);
      } else {
        kw_out(bj, 41);
      }
      kw_out(bj, 1); kw_out(bj, 37); kw_out(bj, 1); kw_out(bj, 32);
      kw_out(bj, 0);
      number_of_filters++;
    }
    if((bj->bo2)->enc & BMEPS_ENCODING_RUNLENGTH) {
      
      kw_out(bj, 30); kw_out(bj, 33);
      kw_out(bj, (34 + number_of_filters)); kw_out(bj, 1);
      kw_out(bj, 33); kw_out(bj, (33 + number_of_filters));
      kw_out(bj, 1); kw_out(bj, 43);
      kw_out(bj, 1); kw_out(bj, 37); kw_out(bj, 1); kw_out(bj, 32);
      kw_out(bj, 0);
      number_of_filters++;
    }
  } else {				/* PS level = 1 */
  }
  /* string and procedure definitions, only for separated sources */

  sprintf(slbuffer, "%lu", sl);
  if((bj->bo2)->l > BMEPS_PS_LEVEL_1) {
    if((bj->bo2)->opt & BMEPS_OPT_SEPARATED_DATA) {
      for(i = 0; i < 3; i++) {
        kw_out(bj, 30); kw_out(bj, 27+i); kw_out(bj, 1);
        dkstream_puts(bj->os, slbuffer); kw_out(bj, 1);
        kw_out(bj, 31); kw_out(bj, 1); kw_out(bj, 32); kw_out(bj, 0);
      }
    }
  } else {
    kw_out(bj, 30); kw_out(bj, 62); kw_out(bj, 1);
    dkstream_puts(bj->os, slbuffer); kw_out(bj, 1);
    kw_out(bj, 31); kw_out(bj, 1); kw_out(bj, 32); kw_out(bj, 0);
  }
  /* image operator */
  if((bj->bo2)->l > BMEPS_PS_LEVEL_1) {
    if((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) {
      kw_out(bj, 52);
    } else {
      kw_out(bj, 53);
    }
    kw_out(bj, 1); kw_out(bj, 54); kw_out(bj, 0);
  }
  
  sprintf(buffer, "0 %lu", h);
  dkstream_puts(bj->os, buffer); kw_out(bj, 1);
  kw_out(bj, 25); kw_out(bj, 1);
  sprintf(buffer, "%lu %lu", w, h);
  dkstream_puts(bj->os, buffer); kw_out(bj, 1);
  kw_out(bj, 26); kw_out(bj, 0);
  if((bj->bo2)->opt & BMEPS_OPT_OPERATOR_DICTIONARY) {
    if((bj->bo2)->opt & BMEPS_OPT_IMAGE_MASK) {
      kw_out(bj, 64); kw_out(bj, 0);
      kw_out(bj, 66); kw_out(bj, 1);
      dkstream_puts_ul(bj->os, 3UL); kw_out(bj, 0);
      kw_out(bj, 79); kw_out(bj, 0); kw_out(bj, 64); kw_out(bj, 0);
      /* datadict */
      kw_out(bj, 66); kw_out(bj, 1);
      dkstream_puts_ul(bj->os, 1UL); kw_out(bj, 0);
      kw_out(bj, 67); kw_out(bj, 1);
      dkstream_puts_ul(bj->os, w); kw_out(bj, 0);
      kw_out(bj, 68); kw_out(bj, 1);
      dkstream_puts_ul(bj->os, h); kw_out(bj, 0);
      kw_out(bj, 69); kw_out(bj, 1);
      sprintf(buffer, "[%lu 0 0 -%lu 0 0]", w, h);
      dkstream_puts(bj->os, buffer); kw_out(bj, 0);
      kw_out(bj, 70); kw_out(bj, 1); kw_out(bj, 58);
      kw_out(bj, 0);
      kw_out(bj, 71); kw_out(bj, 1);
      kw_out(bj, 33);
      kw_out(bj, (33 + number_of_filters));
      kw_out(bj, 0);
      kw_out(bj, 72); kw_out(bj, 1);
      dkstream_puts_ul(bj->os, (unsigned long)bpc); kw_out(bj, 0);
      kw_out(bj, 73); kw_out(bj, 1);
      kw_out(bj, (((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) ? 75 : 74));
#if VERSION_BEFORE_2006_11_03
      if((bj->bo2)->opt & BMEPS_OPT_INTERPOLATE) {
#else
      if(bmeps_tool_interpolate(bj)) {
#endif
        kw_out(bj, 76); kw_out(bj, 1); kw_out(bj, 57); kw_out(bj, 0);
      }
      kw_out(bj, 0);
      kw_out(bj, 65); kw_out(bj, 0);
      kw_out(bj, 80); kw_out(bj, 0); kw_out(bj, 64); kw_out(bj, 0);
      /* maskdict */
      kw_out(bj, 66); kw_out(bj, 1);
      dkstream_puts_ul(bj->os, 1UL); kw_out(bj, 0);
      kw_out(bj, 67); kw_out(bj, 1);
      dkstream_puts_ul(bj->os, w); kw_out(bj, 0);
      kw_out(bj, 68); kw_out(bj, 1);
      dkstream_puts_ul(bj->os, h); kw_out(bj, 0);
      kw_out(bj, 69); kw_out(bj, 1);
      dkstream_puts(bj->os, buffer); kw_out(bj, 0);
      kw_out(bj, 72); kw_out(bj, 1);
      dkstream_puts_ul(bj->os, (unsigned long)bpc); kw_out(bj, 0);
      kw_out(bj, 73); kw_out(bj, 1); kw_out(bj, 74); kw_out(bj, 0);
      kw_out(bj, 65); kw_out(bj, 0);
      kw_out(bj, 81); kw_out(bj, 1);
      dkstream_puts_ul(bj->os, 1UL); kw_out(bj, 0);
      kw_out(bj, 65); kw_out(bj, 0);
      kw_out(bj, 61); kw_out(bj, 0);
    } else {
      kw_out(bj, 64); kw_out(bj, 0);
      kw_out(bj, 66); kw_out(bj, 1); dkstream_puts_ul(bj->os, 1UL);
      kw_out(bj, 0);
      
      kw_out(bj, 67); kw_out(bj, 1); dkstream_puts_ul(bj->os, w); kw_out(bj, 1);
      kw_out(bj, 68); kw_out(bj, 1); dkstream_puts_ul(bj->os, h); kw_out(bj, 1);
      kw_out(bj, 69); kw_out(bj, 1);
      
      sprintf(buffer, "[%lu 0 0 -%lu 0 0]", w, h);
      dkstream_puts(bj->os, buffer); kw_out(bj, 0);
      if((bj->bo2)->opt & BMEPS_OPT_SEPARATED_DATA) {
        kw_out(bj, 70); kw_out(bj, 1); kw_out(bj, 57); kw_out(bj, 0);
      }
      
      kw_out(bj, 71); kw_out(bj, 1);
      if((bj->bo2)->opt & BMEPS_OPT_SEPARATED_DATA) {
        kw_out(bj, 77); kw_out(bj, 0);
	for(i = 0; i < 3; i++) {
	  kw_out(bj, 48);
	  kw_out(bj, 1);
	  kw_out(bj, 33); kw_out(bj, (33 + number_of_filters));
	  kw_out(bj, 1); kw_out(bj, (27 + i)); kw_out(bj, 1);
	  kw_out(bj, 55); kw_out(bj, 1); kw_out(bj, 56);
	  kw_out(bj, 1);
	  kw_out(bj, 49); kw_out(bj, 0);
	}
	kw_out(bj, 78);
	
      } else {
        kw_out(bj, 33); kw_out(bj, (33 + number_of_filters));
	
      } kw_out(bj, 0);
      
      kw_out(bj, 72); kw_out(bj, 1);
      dkstream_puts_ul(bj->os, (unsigned long)bpc); kw_out(bj, 0);
      
      kw_out(bj, 73); kw_out(bj, 1);
      if((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) {
        kw_out(bj, 75);
      } else {
        kw_out(bj, 74);
      } kw_out(bj, 0);
      
#if VERSION_BEFORE_2006_11_03
      if((bj->bo2)->opt & BMEPS_OPT_INTERPOLATE) {
#else
      if(bmeps_tool_interpolate(bj)) {
#endif
        kw_out(bj, 76); kw_out(bj, 1); kw_out(bj, 57); kw_out(bj, 0);
      }
      kw_out(bj, 65); kw_out(bj, 0);
      kw_out(bj, 61); kw_out(bj, 0);
    }
  } else {
    sprintf(buffer, "%lu %lu %u [%lu 0 0 -%lu 0 0]", w, h, (unsigned)bpc, w, h);
    dkstream_puts(bj->os, buffer);
    
    if((bj->bo2)->opt & BMEPS_OPT_SEPARATED_DATA) {
      
      kw_out(bj, 0);
      for(i = 0; i < 3; i++) {
        
        kw_out(bj, 48);
	kw_out(bj, 1);
	kw_out(bj, 33); kw_out(bj, (33 + number_of_filters)); kw_out(bj, 1);
	kw_out(bj, (27 + i)); kw_out(bj, 1);
	kw_out(bj, 1); kw_out(bj, 55); kw_out(bj, 1); kw_out(bj, 56);
	kw_out(bj, 1);
	kw_out(bj, 49); kw_out(bj, 0);
      }
      kw_out(bj, 57); kw_out(bj, 1);
      kw_out(bj, 59); kw_out(bj, 1);
      kw_out(bj, 60); kw_out(bj, 0);
    } else {
      
      if((bj->bo2)->l > BMEPS_PS_LEVEL_1) {	/* PS level >= 2 */
        kw_out(bj, 1);
        kw_out(bj, 33); kw_out(bj, (33 + number_of_filters));
        kw_out(bj, 1);
        if((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) {
          kw_out(bj, 58);
	  kw_out(bj, 1);
	  kw_out(bj, 59);
	  kw_out(bj, 1);
	  kw_out(bj, 60);
        } else {
	  kw_out(bj, 61);
        }
	kw_out(bj, 0);
      } else {					/* PS level = 1 */
        kw_out(bj, 0);
	kw_out(bj, 48);
	kw_out(bj, 1);
	kw_out(bj, 40);
	kw_out(bj, 1);
	kw_out(bj, 62);
	kw_out(bj, 1);
	kw_out(bj, 63);
	kw_out(bj, 1);
	kw_out(bj, 56);
	kw_out(bj, 1);
	kw_out(bj, 49);
	kw_out(bj, 0);
	kw_out(bj, 61);
	kw_out(bj, 0);
      }
    }
  }
  /*
  	cleanup
  */
  /* destroy strings */
  if(!((bj->bo2)->opt & BMEPS_OPT_DICTIONARY)) {
    if((bj->bo2)->opt & BMEPS_OPT_SEPARATED_DATA) {
      for(i = 0; i < 3; i++) {
        kw_out(bj, 46); kw_out(bj, 1);
        kw_out(bj, 30); kw_out(bj, 27+2-i); kw_out(bj, 1);
        kw_out(bj, 47); kw_out(bj, 0);
      }
    }
  }
  /* close files and destroy file definitions */
  if((bj->bo2)->l > BMEPS_PS_LEVEL_1) {	/* PS level >= 2 */
    i = number_of_filters;
    while(i > 0) {
      if(i == 1) {
        kw_out(bj, 33); kw_out(bj, (33+i)); kw_out(bj, 1);
        kw_out(bj, 51); kw_out(bj, 1);
      }
      kw_out(bj, 33); kw_out(bj, (33+i)); kw_out(bj, 1);
      kw_out(bj, 44); kw_out(bj, 0);
      i--;
    }
    if(!((bj->bo2)->opt & BMEPS_OPT_DICTIONARY)) {
      i = number_of_filters;
      while(i > 0) {
        kw_out(bj, 46); kw_out(bj, 1);
        kw_out(bj, 30); kw_out(bj, 33); kw_out(bj, (33+i));
        kw_out(bj, 1); kw_out(bj, 47); kw_out(bj, 0);
        i--;
      }
    }
  } else {				/* PS level = 1 */
  }
  if((bj->bo2)->opt & BMEPS_OPT_DICTIONARY) {
    kw_out(bj, 23);
    if((bj->bo2)->opt & BMEPS_OPT_VMRECLAIM) {
      kw_out(bj, 1); kw_out(bj, 24);
    }
    kw_out(bj, 0);
  }
  kw_out(bj, 21); kw_out(bj, 0);
  if((bj->bo2)->opt & BMEPS_OPT_SHOWPAGE) {
    kw_out(bj, 19); kw_out(bj, 0);
  }
  kw_out(bj, 49); kw_out(bj, 1); kw_out(bj, 50); kw_out(bj, 0);
  /*
  	data for image
  */
  ofs = dkof_open(bj->os, (1 + number_of_filters));
  if(ofs) {
    obs = NULL;
    dkof_set(ofs, 0, DK_OF_TYPE_BUFFERED);
    i = 1;
    if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) {
      dkof_set(ofs, 1, DK_OF_TYPE_ASCII85);
    } else {
      dkof_set(ofs, 1, DK_OF_TYPE_ASCIIHEX);
    }
    i++;
    if((bj->bo2)->enc & BMEPS_ENCODING_FLATE) {
      dkof_set(ofs, i, DK_OF_TYPE_FLATE); i++;
    } else {
    }
    if((bj->bo2)->enc & BMEPS_ENCODING_RUNLENGTH) {
      dkof_set(ofs, i, DK_OF_TYPE_PSRL); i++;
    }
    dkof_set_crnl(ofs, 1);
    if((bj->bo2)->l == BMEPS_PS_LEVEL_1) {
      dkof_set_finalizing(ofs, 0);
    }
    if(dkof_start_chunk(ofs)) {
      if((bpc != 8) || ((bj->bo2)->opt & BMEPS_OPT_IMAGE_MASK)) {
        obs = dkof_bs_open(ofs);
      }
      if((obs != NULL)
        || ((bpc == 8) && (!((bj->bo2)->opt & BMEPS_OPT_IMAGE_MASK))))
      {
        
#if INTERLEAVE_TYPE_1
        if((bj->bo2)->opt & BMEPS_OPT_IMAGE_MASK) {
	  /* mask data */
	  for(iy = 0UL; iy < h; iy++) {
	    for(j = 0UL; j < w; j++) {
	      y = iy; x = j;
	      if((bj->trans).must_rotate) { x = iy; y = w - 1UL - j; }
	      
	      if(obs) {
	        dkof_bs_put(obs, (dkbif_get_mask(bj->bif, x, y) ? 1 : 0), 1);
	      }
	    }
	    if(obs) {
	      dkof_bs_flush(obs);
	    }
	  }
	}
#endif
	if((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) {
	  if((bj->bo2)->opt & BMEPS_OPT_SEPARATED_DATA) {
	    
	    /* color data separated */
	    for(iy = 0UL; iy < h; iy++) {
	      
	      
	      for(j = 0UL; j < w; j++) {
	         y = iy; x = j;
		 if((bj->trans).must_rotate) { x = iy; y = w - 1UL - j; }
		 
		 if((bpc != 8) && (obs)) {
		   
		   dkof_bs_put(
		     obs, dkbif_get_red(bj->bif, x, y),
		     (unsigned short)bpc
		   );
		 } else {
		   
		   buffer[0] = (unsigned char)dkbif_get_red(bj->bif, x, y);
		   dkstream_write(ofs, buffer, 1);
		 }
	      }
	      if((bpc != 8) && (obs)) {
	        
	        dkof_bs_flush(obs);
	      }
	      
	      for(j = 0UL; j < w; j++) {
	         y = iy; x = j;
		 if((bj->trans).must_rotate) { x = iy; y = w - 1UL - j; }
		 
		 if((bpc != 8) && (obs)) {
		   
		   dkof_bs_put(
		     obs, dkbif_get_green(bj->bif, x, y),
		     (unsigned short)bpc
		   );
		 } else {
		   
		   buffer[0] = (unsigned char)dkbif_get_green(bj->bif, x, y);
		   dkstream_write(ofs, buffer, 1);
		 }
	      }
	      if((bpc != 8) && (obs)) {
	        
	        dkof_bs_flush(obs);
	      }
	      
	      for(j = 0UL; j < w; j++) {
	         y = iy; x = j;
		 if((bj->trans).must_rotate) { x = iy; y = w - 1UL - j; }
		 
		 if((bpc != 8) && (obs)) {
		   
		   dkof_bs_put(
		     obs, dkbif_get_blue(bj->bif, x, y),
		     (unsigned short)bpc
		   );
		 } else {
		   
		   buffer[0] = (unsigned char)dkbif_get_blue(bj->bif, x, y);
		   dkstream_write(ofs, buffer, 1);
		 }
	      }
	      if((bpc != 8) && (obs)) {
	        
	        dkof_bs_flush(obs);
	      }
	    }
	  } else {
	    /* color data per pixel, interleaved */
            for(iy = 0UL; iy < h; iy++) {
	      for(j = 0UL; j < w; j++) {
	         y = iy; x = j;
		 if((bj->trans).must_rotate) { x = iy; y = w - 1UL - j; }
		 
		 if((bpc != 8) && (obs)) {
		   if((bj->bo2)->opt & BMEPS_OPT_IMAGE_MASK) {
		     dkof_bs_put(
		       obs, dkbif_get_mask(bj->bif, x, y),
		       (unsigned short)bpc
		     );
		   }
		   dkof_bs_put(
		     obs, dkbif_get_red(bj->bif, x, y),
		     (unsigned short)bpc
		   );
		   dkof_bs_put(
		     obs, dkbif_get_green(bj->bif, x, y),
		     (unsigned short)bpc
		   );
		   dkof_bs_put(
		     obs, dkbif_get_blue(bj->bif, x, y),
		     (unsigned short)bpc
		   );
		 } else {
		   if((bj->bo2)->opt & BMEPS_OPT_IMAGE_MASK) {
		     buffer[0] = dkbif_get_mask(bj->bif, x, y);
		     buffer[1] = (unsigned char)dkbif_get_red(bj->bif, x, y);
		     buffer[2] = (unsigned char)dkbif_get_green(bj->bif, x, y);
		     buffer[3] = (unsigned char)dkbif_get_blue(bj->bif, x, y);
		     dkstream_write(ofs, buffer, 4);
		   } else {
		     buffer[0] = (unsigned char)dkbif_get_red(bj->bif, x, y);
		     buffer[1] = (unsigned char)dkbif_get_green(bj->bif, x, y);
		     buffer[2] = (unsigned char)dkbif_get_blue(bj->bif, x, y);
		     dkstream_write(ofs, buffer, 3);
		   }
		 }
	      }
	      if((bpc != 8) && (obs)) {
	        dkof_bs_flush(obs);
	      }
	    }
	  }
	} else {
	  /* gray data */
	  for(iy = 0UL; iy < h; iy++) {
	    for(j = 0UL; j < w; j++) {
	      y = iy; x = j;
	      if((bj->trans).must_rotate) { x = iy; y = w - 1UL - j; }
	      
	      if((bpc != 8) && (obs)) {
	        if((bj->bo2)->opt & BMEPS_OPT_IMAGE_MASK) {
		  dkof_bs_put(
		    obs, dkbif_get_mask(bj->bif, x, y),
		    (unsigned short)bpc
		  );
		}
		dkof_bs_put(
		  obs, dkbif_get_gray(bj->bif, x, y),
		  (unsigned short)bpc
		);
	      } else {
	        if((bj->bo2)->opt & BMEPS_OPT_IMAGE_MASK) {
		  buffer[0] = (unsigned char)dkbif_get_mask(bj->bif, x, y);
		  buffer[1] = (unsigned char)dkbif_get_gray(bj->bif, x, y);
		  dkstream_write(ofs, buffer, 2);
		} else {
		  buffer[0] = (unsigned char)dkbif_get_gray(bj->bif, x, y);
		  dkstream_write(ofs, buffer, 1);
		}
	      }
	    }
	    if((bpc != 8) && (obs)) {
	      dkof_bs_flush(obs);
	    }
	  }
	}
      } else {
	bmeps_tool_error_memory(bj); bj->exval = 1;
      }
      if(obs) { dkof_bs_close(obs); obs = NULL; }
      dkof_end_chunk(ofs);
    } else {
      bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 68); bj->exval = 1;
    }
    dkof_close(ofs); ofs = NULL;
  } else {
    bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 70); bj->exval = 1;
  }
  
}



static
void
transfer_file_contents DK_P2(BJ *,bj, dk_stream_t *,ofs)
{
  char ibuffer[512];
  char obuffer[512];
  size_t l1, l2;
  int cc = 0, write_error = 0;
  
  if(0) {	
  } else {	
    rewind(bj->inf);
    cc = 1;
    while(cc) {
      l1 = fread((void *)ibuffer, 1, 512, bj->inf);
      if(l1 > 0) {
        l2 = dkstream_write(ofs, ibuffer, l1);
	if(l2 < l1) {
	  cc = 0;
	  write_error = 1;
	  
	}
      } else {
        cc = 0;
      }
    }
  }
  if(write_error) {
    bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 53);
  }
  
}




static
void
internal_dct DK_P1(BJ *,bj)
{
#if DK_HAVE_JPEGLIB_H
  unsigned long w, h, origw, origh, bpc;
  unsigned short bpcs;
  int me = 0;
  dk_stream_t *ofs = NULL;
  char buffer[256];
  
  origw = w = dkbif_get_width(bj->bif);
  origh = h = dkbif_get_height(bj->bif);
  bpcs = dkbif_get_bits_per_component(bj->bif);
  bpc = (unsigned long)bpcs;
  kw_out(bj, 48); kw_out(bj, 0);
  kw_out(bj, 20); kw_out(bj, 0);
  switch(bmeps_tool_how_to_handle_bb(bj)) {
    case 2: {	/* paper size */
      sprintf(buffer, "%lg %lg", (bj->trans).iu.x0, (bj->trans).iu.y1);
      dkstream_puts(bj->os, buffer);
      kw_out(bj, 1); kw_out(bj, 25); kw_out(bj, 1);
      kw_out(bj, 84);
      dkstream_puts_ul(bj->os, 90UL); kw_out(bj, 1); kw_out(bj, 83);
      kw_out(bj, 1);
      sprintf(buffer, "%lg %lg", (bj->trans).sfy, (bj->trans).sfx);
      dkstream_puts(bj->os, buffer);
      kw_out(bj, 1); kw_out(bj, 26); kw_out(bj, 0);
    } break;
    case 1: {	/* resolution chunk */
      sprintf(buffer, "%lg %lg", (bj->trans).iu.x0, (bj->trans).iu.y0);
      dkstream_puts(bj->os, buffer);
      kw_out(bj, 1); kw_out(bj, 25); kw_out(bj, 0);
      sprintf(buffer, "%lg %lg", (bj->trans).sfx, (bj->trans).sfy);
      dkstream_puts(bj->os, buffer);
      kw_out(bj, 1); kw_out(bj, 26); kw_out(bj, 0);
    } break;
  }
  dkstream_puts_ul(bj->os, 0UL); kw_out(bj, 1);
  dkstream_puts_ul(bj->os, h); kw_out(bj, 1);
  kw_out(bj, 25); kw_out(bj, 0);
  dkstream_puts_ul(bj->os, w); kw_out(bj, 1);
  dkstream_puts_ul(bj->os, h); kw_out(bj, 1);
  kw_out(bj, 26); kw_out(bj, 0);
  if((bj->bo2)->opt & BMEPS_OPT_DICTIONARY) {
    kw_out(bj, 22); kw_out(bj, 0);
  }
  kw_out(bj, 30); kw_out(bj, 33); kw_out(bj, 34);
  kw_out(bj, 1); kw_out(bj, 40); kw_out(bj, 1);
  if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) {
    kw_out(bj, 39);
  } else {
    kw_out(bj, 38);
  }
  kw_out(bj, 1);  kw_out(bj, 37); kw_out(bj, 1);
  kw_out(bj, 32); kw_out(bj, 0);
  kw_out(bj, 30); kw_out(bj, 33); kw_out(bj, 35); kw_out(bj, 1);
  kw_out(bj, 33); kw_out(bj, 34); kw_out(bj, 1);
  kw_out(bj, 64); kw_out(bj, 1); kw_out(bj, 65); kw_out(bj, 1);
  kw_out(bj, 82); kw_out(bj, 1); kw_out(bj, 37); kw_out(bj, 1);
  kw_out(bj, 32); kw_out(bj, 0);
  if(((bj->bif)->d).jpg.jpgana.components > 0x01) {
    if(((bj->bif)->d).jpg.jpgana.components == 0x03) {
      kw_out(bj, 52);
    } else {
      kw_out(bj, 85);
    }
  } else {
    kw_out(bj, 53);
  }
  kw_out(bj, 1); kw_out(bj, 54); kw_out(bj, 0);
  kw_out(bj, 64); kw_out(bj, 0);
  kw_out(bj, 66); kw_out(bj, 1);
  dkstream_puts_ul(bj->os, 1UL); kw_out(bj, 0);
  kw_out(bj, 67); kw_out(bj, 1);
  dkstream_puts_ul(bj->os, w); kw_out(bj, 0);
  kw_out(bj, 68); kw_out(bj, 1);
  dkstream_puts_ul(bj->os, h); kw_out(bj, 0);
  sprintf(buffer, "[%lu 0 0 -%lu 0 0]", w, h);
  kw_out(bj, 69); kw_out(bj, 1); dkstream_puts(bj->os, buffer); kw_out(bj, 0);
  kw_out(bj, 70); kw_out(bj, 1); kw_out(bj, 58); kw_out(bj, 0);
  kw_out(bj, 71); kw_out(bj, 1); kw_out(bj, 33); kw_out(bj, 35); kw_out(bj, 0);
  kw_out(bj, 72); kw_out(bj, 1);
  dkstream_puts_ul(bj->os, 8UL); kw_out(bj, 0);
  kw_out(bj, 73); kw_out(bj, 1);
  if(((bj->bif)->d).jpg.jpgana.components > 0x01) {
    if(((bj->bif)->d).jpg.jpgana.components == 0x03) {
      kw_out(bj, 75);
    } else {
      if(((bj->bif)->d).jpg.jpgana.adobe_marker_found) {
        kw_out(bj, 87);
      } else {
        kw_out(bj, 86);
      }
    }
  } else {
    kw_out(bj, 74);
  } kw_out(bj, 0);
  kw_out(bj, 65); kw_out(bj, 0);
  kw_out(bj, 61); kw_out(bj, 0);
  kw_out(bj, 33); kw_out(bj, 35); kw_out(bj, 1);
  kw_out(bj, 44); kw_out(bj, 0);
  kw_out(bj, 33); kw_out(bj, 34); kw_out(bj, 1);
  kw_out(bj, 45); kw_out(bj, 1);
  kw_out(bj, 33); kw_out(bj, 34); kw_out(bj, 1);
  kw_out(bj, 44); kw_out(bj, 0);
  if((bj->bo2)->opt & BMEPS_OPT_SHOWPAGE) {
    kw_out(bj, 19); kw_out(bj, 0);
  }
  if((bj->bo2)->opt & BMEPS_OPT_DICTIONARY) {
    kw_out(bj, 23);
    if((bj->bo2)->opt & BMEPS_OPT_VMRECLAIM) {
      kw_out(bj, 1); kw_out(bj, 24);
    }
    kw_out(bj, 0);
  }
  kw_out(bj, 21); kw_out(bj, 0);
  kw_out(bj, 49); kw_out(bj, 1);
  kw_out(bj, 50); kw_out(bj, 0);
  /* image data */
  ofs = dkof_open(bj->os, 2);
  if(ofs) {
    dkof_set(ofs, 0, DK_OF_TYPE_BUFFERED);
    if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) {
      dkof_set(ofs, 1, DK_OF_TYPE_ASCII85);
    } else {
      dkof_set(ofs, 1, DK_OF_TYPE_ASCIIHEX);
    }
    dkof_set_crnl(ofs, 1);
    if(dkof_start_chunk(ofs)) {
      /* transfer_file_contents(bj, ofs); */
      rewind(bj->inf);
      /*
      ((bj->bif)->d).jpg.jpgana.is_printing = 1;
      ((bj->bif)->d).jpg.jpgana.inputfile = bj->inf;
      ((bj->bif)->d).jpg.jpgana.os = ofs;
      ((bj->bif)->d).jpg.jpgana.a = NULL;
      dkbif_jfif_analyze(&(((bj->bif)->d).jpg.jpgana));
      */
      dkbif_jfif_transfer(ofs, bj->inf);

      if(!dkof_end_chunk(ofs)) {
	bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 69);
	bj->exval = 1;
      }
    } else {
       bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 68);
       bj->exval = 1;
    }
    dkof_close(ofs); ofs = NULL;
  } else {
    bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 70);
    bj->exval = 1;
  }
  
#endif
}



static
void
internal_draft DK_P1(BJ *,bj)
{
  DI dinner, douter;
  double r = 0.7, g = 0.0, b = 0.0, gray = 0.9, black = 0.0;
  
  if(bmeps_tool_calc_di(bj, &dinner, &douter, 0.05, 0.01)) {
    /* outer rectangle */
    /* --- 0.8 setgray */
    if((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) {
      dkstream_puts_double(bj->os, r);
      kw_out(bj, 1);
      dkstream_puts_double(bj->os, g);
      kw_out(bj, 1);
      dkstream_puts_double(bj->os, b);
      kw_out(bj, 1);
      kw_out(bj, 94);
    } else {
      dkstream_puts_double(bj->os, black); kw_out(bj, 1);
      kw_out(bj, 93);
    } kw_out(bj, 0);
    /* --- newpath */
    kw_out(bj, 88); kw_out(bj, 0);
    /* --- x0 y0 moveto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0);
    kw_out(bj, 1);
    kw_out(bj, 89); kw_out(bj, 0);
    /* --- x1 y0 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- x1 y1 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- x0 y1 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- closepath */
    kw_out(bj, 91); kw_out(bj, 1);
    /* --- fill */
    kw_out(bj, 92); kw_out(bj, 0);
    /* middle rectangle */
    /* --- 0.8 setgray */
    dkstream_puts_double(bj->os, gray); kw_out(bj, 1);
    kw_out(bj, 93); kw_out(bj, 0);
    /* --- newpath */
    kw_out(bj, 88); kw_out(bj, 0);
    /* --- x0 y0 moveto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0 + douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0 + douter.d);
    kw_out(bj, 1);
    kw_out(bj, 89); kw_out(bj, 0);
    /* --- x1 y0 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1 - douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0 + douter.d);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- x1 y1 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1 - douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1 - douter.d);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- x0 y1 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0 + douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1 - douter.d);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- closepath */
    kw_out(bj, 91); kw_out(bj, 1);
    /* --- fill */
    kw_out(bj, 92); kw_out(bj, 0);
    /* inner rectangle */
    /* --- 1.0 setgray */
    dkstream_puts_double(bj->os, 1.0); kw_out(bj, 1);
    kw_out(bj, 93); kw_out(bj, 0);
    /* --- newpath */
    kw_out(bj, 88); kw_out(bj, 0);
    /* --- x0 y0 moveto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0 + dinner.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0 + dinner.d);
    kw_out(bj, 1);
    kw_out(bj, 89); kw_out(bj, 0);
    /* --- x1 y0 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1 - dinner.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0 + dinner.d);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- x1 y1 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1 - dinner.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1 - dinner.d);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- x0 y1 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0 + dinner.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1 - dinner.d);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- closepath */
    kw_out(bj, 91); kw_out(bj, 1);
    /* --- fill */
    kw_out(bj, 92); kw_out(bj, 0);
    /* outer diagonal lines */
    /* --- 0.8 setgray */
    dkstream_puts_double(bj->os, gray); kw_out(bj, 1);
    kw_out(bj, 93); kw_out(bj, 0);
    /* --- newpath */
    kw_out(bj, 88); kw_out(bj, 0);
    /* --- x0 y0 moveto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0 + douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0 + douter.d);
    kw_out(bj, 1);
    kw_out(bj, 89); kw_out(bj, 0);
    /* --- x0+deltax y0 moveto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0 + dinner.deltax + douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0 + douter.d);
    kw_out(bj, 1); kw_out(bj, 90); kw_out(bj, 0);
    /* --- x1 y1-deltay moveto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1 - douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1 - dinner.deltay - douter.d);
    kw_out(bj, 1);
    kw_out(bj, 1); kw_out(bj, 90); kw_out(bj, 0);
    /* --- x1 y1 moveto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1 - douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1 - douter.d);
    kw_out(bj, 1);
    kw_out(bj, 1); kw_out(bj, 90); kw_out(bj, 0);
    /* --- x1-deltax y1 moveto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1 - dinner.deltax - douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1 - douter.d);
    kw_out(bj, 1);
    kw_out(bj, 1); kw_out(bj, 90); kw_out(bj, 0);
    /* --- x0 y0+deltay moveto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0 + douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0 + dinner.deltay + douter.d);
    kw_out(bj, 1);
    kw_out(bj, 1); kw_out(bj, 90); kw_out(bj, 0);
    /* --- closepath */
    kw_out(bj, 91); kw_out(bj, 1);
    /* --- fill */
    kw_out(bj, 92); kw_out(bj, 0);
    /* --- newpath */
    kw_out(bj, 88); kw_out(bj, 0);
    /* --- x0 y1 moveto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0 + douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1 - douter.d);
    kw_out(bj, 1);
    kw_out(bj, 89); kw_out(bj, 0);
    /* --- x0+deltax y1 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0 + dinner.deltax + douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1 - douter.d);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- x1 y0+deltay lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1 - douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0 + dinner.deltay - douter.d);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- x1 y0 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1 - douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0 + douter.d);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- x1-deltax y0 lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x1 - dinner.deltax - douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y0 + douter.d);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- x0 y1-deltay lineto */
    dkstream_puts_double(bj->os, (bj->trans).iu.x0 + douter.d);
    kw_out(bj, 1);
    dkstream_puts_double(bj->os, (bj->trans).iu.y1 - dinner.deltay - douter.d);
    kw_out(bj, 1);
    kw_out(bj, 90); kw_out(bj, 0);
    /* --- closepath */
    kw_out(bj, 91); kw_out(bj, 1);
    /* --- fill */
    kw_out(bj, 92); kw_out(bj, 0);
    if((bj->bo2)->opt & BMEPS_OPT_SHOWPAGE) {
      kw_out(bj, 19); kw_out(bj, 0);
    }
  } else {
    bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 72); bj->exval = 1;
  }
  
}


static
void
run_internal DK_P2(BJ *,bj, int,howto)
{
  BO bo;
  int l = 2; size_t kwno; long frameno;
  char buffer[64], *ptr;
  
  bj->bo2 = &bo;
  dkmem_cpy(bj->bo2, bj->bo, sizeof(BO));
  if(bj->frame_s != bj->frame_e) {
    (bj->bo2)->opt |= BMEPS_OPT_SHOWPAGE;
  }
  switch((bj->bo2)->l) {
    case BMEPS_PS_LEVEL_1: l = 1; break;
    case BMEPS_PS_LEVEL_3: l = 3; break;
    default: l = 2; break;
  }
  sprintf(buffer, "-%d.0",  l);
  kw_out(bj, 2);
  dkstream_puts(bj->os, buffer);
  if(((bj->bo2)->opt & BMEPS_OPT_DSC)
     && (!((bj->bo2)->opt & BMEPS_OPT_SHOWPAGE)))
  {
    kw_out(bj, 1); kw_out(bj, 4);
    dkstream_puts(bj->os, buffer);
  }
  kw_out(bj, 0);
  bmeps_eps_bb(bj);
  if((bj->bo2)->opt & BMEPS_OPT_DSC) {
    for(kwno = 5; kwno < 15; kwno++) {
      kw_out(bj, kwno);
      switch((int)kwno) {
        case 6: {
	  if(bj->infname) {
	    ptr = dksf_get_last_filename(bj->infname);
	    if(ptr) {
	      dkstream_puts(bj->os, ptr);
	    } else {
	      kw_out(bj, 17);
	    }
	  } else {
	    kw_out(bj, 17);
	  }
	} break;
	case 7: {
	  sprintf(
	    buffer, "%lu",
	    (1UL + bj->frame_e - bj->frame_s)
	  ); dkstream_puts(bj->os, buffer);
	} break;
      }
      kw_out(bj, 0);
    }
  }
  for(frameno = bj->frame_s; frameno <= bj->frame_e; frameno++) {
    
    if(dkbif_set_frame(bj->bif, frameno)) {
      bmeps_tool_calculate_areas(bj);
      if((bj->bo2)->opt & BMEPS_OPT_DSC) {
        unsigned long ul;
        ul = frameno - (bj->frame_s) + 1UL;
        sprintf(buffer, "%lu %lu", ul, ul);
        kw_out(bj, 18); dkstream_puts(bj->os, buffer); kw_out(bj, 0);
      }
      switch(howto) {
        case 1: {
#if DK_HAVE_JPEGLIB_H
          internal_dct(bj);
#else
	  internal_conventional(bj);
#endif
        } break;
        case 2: {
          internal_draft(bj);
        } break;
        default: {
          internal_conventional(bj);
        } break;
      }
    }
  }
  if((bj->bo2)->opt & BMEPS_OPT_DSC) {
    for(kwno = 15; kwno < 17; kwno++) { kw_out(bj, kwno); kw_out(bj, 0); }
  }
  bj->bo2 = NULL;
  
}




void
bmeps_eps_conventional DK_P1(BJ *,bj)
{
  
  run_internal(bj, 0);
  
}



void
bmeps_eps_dct DK_P1(BJ *,bj)
{
  
  run_internal(bj, 1);
  
}


void
bmeps_eps_draft DK_P1(BJ *,bj)
{
  
  run_internal(bj, 2);
  
}


#ifndef LINT
static char sccs_id[] = {
"@(#)b2eps.ctr 1.4 01/03/07\tbmeps2"
};
#endif

