--- psiconv/trunk/lib/psiconv/generate_image.c 2004/01/04 22:20:43 183 +++ psiconv/trunk/lib/psiconv/generate_image.c 2004/01/06 20:15:01 184 @@ -55,7 +55,7 @@ psiconv_pixel_bytes *encoded_bytes); int psiconv_write_paint_data_section(const psiconv_config config, - psiconv_buffer buf, + psiconv_buffer buf, int lev, const psiconv_paint_data_section value, int is_clipart) { @@ -65,12 +65,14 @@ psiconv_list bytes,bytes_rle; psiconv_u8 *byteptr,encoding; + psiconv_progress(config,lev,0,"Writing paint data section"); + /* First, we check whether we can cope with the current configuration. If not, we stop at once */ if ((config->colordepth != 2) && (config->colordepth != 4) && (config->colordepth != 8) && (config->colordepth != 12) && (config->colordepth != 16) && (config->colordepth != 24)) { - psiconv_warn(config,0,psiconv_buffer_length(buf), + psiconv_error(config,0,psiconv_buffer_length(buf), "Unsupported color depth (%d); try 2, 4, 8, 16 or 24", config->colordepth); res = -PSICONV_E_GENERATE; @@ -80,7 +82,7 @@ if ((config->color) && (config->bluebits || config->redbits || config->greenbits) && (config->bluebits+config->redbits+config->greenbits!=config->colordepth)) { - psiconv_warn(config,0,psiconv_buffer_length(buf), + psiconv_error(config,0,psiconv_buffer_length(buf), "Sum of red (%d), green (%d) and blue (%d) bits should be " "equal to the color depth (%d)", config->redbits,config->greenbits,config->bluebits, @@ -92,7 +94,7 @@ if (config->color && !(config->redbits || config->greenbits || config->bluebits) && (config->colordepth != 4) && (config->colordepth != 8)) { - psiconv_warn(config,0,psiconv_buffer_length(buf), + psiconv_error(config,0,psiconv_buffer_length(buf), "Current color depth (%d) has no palet associated with it", config->colordepth); res = -PSICONV_E_GENERATE; @@ -105,7 +107,7 @@ if (!value) { - psiconv_warn(config,0,psiconv_buffer_length(buf),"Null paint data section"); + psiconv_error(config,0,psiconv_buffer_length(buf),"Null paint data section"); res = -PSICONV_E_GENERATE; goto ERROR1; } @@ -116,7 +118,7 @@ floats.length = value->xsize * value->ysize; palet = psiconv_palet_none; - if ((config->color) && (config->redbits == 0) && (config->greenbits == 0) &&\ + if ((config->color) && (config->redbits == 0) && (config->greenbits == 0) && (config->bluebits == 0)) switch (config->colordepth) { case 4: palet = psiconv_palet_color_4; break; @@ -128,12 +130,16 @@ value->ysize,floats, config->colordepth,config->color, config->redbits,config->greenbits, - config->bluebits,palet))) + config->bluebits,palet))) { + psiconv_error(config,lev,0,"Error collecting pixel data"); goto ERROR1; + } if ((res = psiconv_pixel_data_to_bytes(config,&bytes,value->xsize,value->ysize, - ints,config->colordepth))) + ints,config->colordepth))) { + psiconv_error(config,lev,0,"Error translating pixel data to bytes"); goto ERROR2; + } switch (config->colordepth) { @@ -141,23 +147,31 @@ case 4: case 8: encoding = 0x01; - if ((res = psiconv_encode_rle8(config,bytes,&bytes_rle))) + if ((res = psiconv_encode_rle8(config,bytes,&bytes_rle))) { + psiconv_error(config,lev,0,"Error encoding RLE8"); goto ERROR3; + } break; case 12: encoding = 0x02; - if ((res = psiconv_encode_rle12(config,bytes,&bytes_rle))) + if ((res = psiconv_encode_rle12(config,bytes,&bytes_rle))) { + psiconv_error(config,lev,0,"Error encoding RLE12"); goto ERROR3; + } break; case 16: encoding = 0x03; - if ((res = psiconv_encode_rle16(config,bytes,&bytes_rle))) + if ((res = psiconv_encode_rle16(config,bytes,&bytes_rle))) { + psiconv_error(config,lev,0,"Error encoding RLE16"); goto ERROR3; + } break; case 24: encoding = 0x04; - if ((res = psiconv_encode_rle24(config,bytes,&bytes_rle))) + if ((res = psiconv_encode_rle24(config,bytes,&bytes_rle))) { + psiconv_error(config,lev,0,"Error encoding RLE24"); goto ERROR3; + } break; default: encoding = 0x00; @@ -172,38 +186,38 @@ } } - if ((res = psiconv_write_u32(config,buf, + if ((res = psiconv_write_u32(config,buf,lev+1, 0x28+psiconv_list_length(bytes)))) goto ERROR3; - if ((res = psiconv_write_u32(config,buf,0x28))) + if ((res = psiconv_write_u32(config,buf,lev+1,0x28))) goto ERROR3; - if ((res = psiconv_write_u32(config,buf,value->xsize))) + if ((res = psiconv_write_u32(config,buf,lev+1,value->xsize))) goto ERROR3; - if ((res = psiconv_write_u32(config,buf,value->ysize))) + if ((res = psiconv_write_u32(config,buf,lev+1,value->ysize))) goto ERROR3; - if ((res = psiconv_write_length(config,buf,value->pic_xsize))) + if ((res = psiconv_write_length(config,buf,lev+1,value->pic_xsize))) goto ERROR3; - if ((res = psiconv_write_length(config,buf,value->pic_ysize))) + if ((res = psiconv_write_length(config,buf,lev+1,value->pic_ysize))) goto ERROR3; colordepth = config->colordepth; - if ((res = psiconv_write_u32(config,buf,colordepth))) + if ((res = psiconv_write_u32(config,buf,lev+1,colordepth))) goto ERROR3; - if ((res = psiconv_write_u32(config,buf,(config->color?1:0)))) + if ((res = psiconv_write_u32(config,buf,lev+1,(config->color?1:0)))) goto ERROR3; - if ((res = psiconv_write_u32(config,buf,0))) + if ((res = psiconv_write_u32(config,buf,lev+1,0))) goto ERROR3; - if ((res = psiconv_write_u32(config,buf,encoding))) + if ((res = psiconv_write_u32(config,buf,lev+1,encoding))) goto ERROR3; if (is_clipart) { - if ((res = psiconv_write_u32(config,buf,0xffffffff))) + if ((res = psiconv_write_u32(config,buf,lev+1,0xffffffff))) goto ERROR3; - if ((res = psiconv_write_u32(config,buf,0x00000044))) + if ((res = psiconv_write_u32(config,buf,lev+1,0x00000044))) goto ERROR3; } for (i = 0; i < psiconv_list_length(bytes); i++) { if (!(byteptr = psiconv_list_get(bytes,i))) goto ERROR3; - if ((res = psiconv_write_u8(config,buf,*byteptr))) + if ((res = psiconv_write_u8(config,buf,lev+1,*byteptr))) goto ERROR3; } @@ -289,17 +303,17 @@ if (!bytes) { - psiconv_warn(config,0,0,"NULL pixel data"); + psiconv_error(config,0,0,"NULL pixel data"); res = -PSICONV_E_GENERATE; goto ERROR1; } if (!pixels) { - psiconv_warn(config,0,0,"NULL pixel data"); + psiconv_error(config,0,0,"NULL pixel data"); res = -PSICONV_E_GENERATE; goto ERROR1; } if (psiconv_list_length(pixels) != xsize * ysize) { - psiconv_warn(config,0,0,"Pixel number is not correct"); + psiconv_error(config,0,0,"Pixel number is not correct"); res = -PSICONV_E_GENERATE; goto ERROR1; } @@ -316,7 +330,7 @@ outputbytenr = 0; for (x = 0; x < xsize; x++) { if (!(pixelptr = psiconv_list_get(pixels,y*xsize+x))) { - psiconv_warn(config,0,0,"Massive internal corruption"); + psiconv_error(config,0,0,"Massive internal corruption"); res = -PSICONV_E_NOMEM; goto ERROR2; } @@ -397,9 +411,9 @@ goto ERROR2; i +=2; } else if (*next == *entry) { - len = 0; + len = 1; while ((*next == *entry) && - (i+len + 1 < psiconv_list_length(plain_bytes)) && + (i+len + 2 < psiconv_list_length(plain_bytes)) && len < 0x80) { len ++; if (!(next = psiconv_list_get(plain_bytes,i+len))) { @@ -819,51 +833,52 @@ int psiconv_write_sketch_section(const psiconv_config config, - psiconv_buffer buf, + psiconv_buffer buf, int lev, const psiconv_sketch_section value) { int res; + psiconv_progress(config,lev,0,"Writing sketch section"); if (!value) { - psiconv_warn(config,0,0,"NULL sketch section"); + psiconv_error(config,0,0,"NULL sketch section"); res = -PSICONV_E_GENERATE; goto ERROR1; } - if ((res = psiconv_write_u16(config,buf,value->displayed_xsize))) + if ((res = psiconv_write_u16(config,buf,lev+1,value->displayed_xsize))) goto ERROR1; - if ((res = psiconv_write_u16(config,buf,value->displayed_ysize))) + if ((res = psiconv_write_u16(config,buf,lev+1,value->displayed_ysize))) goto ERROR1; - if ((res = psiconv_write_u16(config,buf,value->picture_data_x_offset))) + if ((res = psiconv_write_u16(config,buf,lev+1,value->picture_data_x_offset))) goto ERROR1; - if ((res = psiconv_write_u16(config,buf,value->picture_data_y_offset))) + if ((res = psiconv_write_u16(config,buf,lev+1,value->picture_data_y_offset))) goto ERROR1; - if ((res = psiconv_write_u16(config,buf,value->displayed_size_x_offset))) + if ((res = psiconv_write_u16(config,buf,lev+1,value->displayed_size_x_offset))) goto ERROR1; - if ((res = psiconv_write_u16(config,buf,value->displayed_size_y_offset))) + if ((res = psiconv_write_u16(config,buf,lev+1,value->displayed_size_y_offset))) goto ERROR1; - if ((res = psiconv_write_u16(config,buf,value->form_xsize))) + if ((res = psiconv_write_u16(config,buf,lev+1,value->form_xsize))) goto ERROR1; - if ((res = psiconv_write_u16(config,buf,value->form_ysize))) + if ((res = psiconv_write_u16(config,buf,lev+1,value->form_ysize))) goto ERROR1; - if ((res = psiconv_write_u16(config,buf,0x0000))) + if ((res = psiconv_write_u16(config,buf,lev+1,0x0000))) goto ERROR1; - if ((res = psiconv_write_paint_data_section(config,buf,value->picture,0))) + if ((res = psiconv_write_paint_data_section(config,buf,lev+1,value->picture,0))) goto ERROR1; - if ((res = psiconv_write_u16(config,buf,value->magnification_x * 0x03e8))) + if ((res = psiconv_write_u16(config,buf,lev+1,value->magnification_x * 0x03e8))) goto ERROR1; - if ((res = psiconv_write_u16(config,buf,value->magnification_y * 0x03e8))) + if ((res = psiconv_write_u16(config,buf,lev+1,value->magnification_y * 0x03e8))) goto ERROR1; - if ((res = psiconv_write_u32(config,buf,value->cut_left * 0x0c * + if ((res = psiconv_write_u32(config,buf,lev+1,value->cut_left * 0x0c * value->displayed_xsize))) goto ERROR1; - if ((res = psiconv_write_u32(config,buf,value->cut_right * 0x0c * + if ((res = psiconv_write_u32(config,buf,lev+1,value->cut_right * 0x0c * value->displayed_xsize))) goto ERROR1; - if ((res = psiconv_write_u32(config,buf,value->cut_top * 0x0c * + if ((res = psiconv_write_u32(config,buf,lev+1,value->cut_top * 0x0c * value->displayed_ysize))) goto ERROR1; - if ((res = psiconv_write_u32(config,buf,value->cut_bottom * 0x0c * + if ((res = psiconv_write_u32(config,buf,lev+1,value->cut_bottom * 0x0c * value->displayed_ysize))) goto ERROR1; @@ -872,29 +887,29 @@ } int psiconv_write_clipart_section(const psiconv_config config, - psiconv_buffer buf, + psiconv_buffer buf, int lev, const psiconv_clipart_section value) { int res; - + psiconv_progress(config,lev,0,"Writing clipart section"); if (!value) { - psiconv_warn(config,0,psiconv_buffer_length(buf), + psiconv_error(config,0,psiconv_buffer_length(buf), "NULL Clipart Section"); res = -PSICONV_E_GENERATE; goto ERROR; } - if ((res = psiconv_write_u32(config,buf,PSICONV_ID_CLIPART_ITEM))) + if ((res = psiconv_write_u32(config,buf,lev+1,PSICONV_ID_CLIPART_ITEM))) goto ERROR; - if ((res = psiconv_write_u32(config,buf,0x00000002))) + if ((res = psiconv_write_u32(config,buf,lev+1,0x00000002))) goto ERROR; - if ((res = psiconv_write_u32(config,buf,0x00000000))) + if ((res = psiconv_write_u32(config,buf,lev+1,0x00000000))) goto ERROR; - if ((res = psiconv_write_u32(config,buf,0x00000000))) + if ((res = psiconv_write_u32(config,buf,lev+1,0x00000000))) goto ERROR; - if ((res = psiconv_write_u32(config,buf,0x0000000C))) + if ((res = psiconv_write_u32(config,buf,lev+1,0x0000000C))) goto ERROR; - if ((res = psiconv_write_paint_data_section(config,buf,value->picture,1))) + if ((res = psiconv_write_paint_data_section(config,buf,lev+1,value->picture,1))) goto ERROR; ERROR: @@ -902,29 +917,30 @@ } int psiconv_write_jumptable_section(const psiconv_config config, - psiconv_buffer buf, + psiconv_buffer buf, int lev, const psiconv_jumptable_section value) { int res,i; psiconv_u32 *offset_ptr; + psiconv_progress(config,lev,0,"Writing jumptable section"); if (!value) { - psiconv_warn(config,0,psiconv_buffer_length(buf), + psiconv_error(config,0,psiconv_buffer_length(buf), "NULL Jumptable Section"); res = -PSICONV_E_GENERATE; goto ERROR; } - if ((res = psiconv_write_u32(config,buf,psiconv_list_length(value)))) + if ((res = psiconv_write_u32(config,buf,lev+1,psiconv_list_length(value)))) goto ERROR; for (i = 0; i < psiconv_list_length(value); i++) { if (!(offset_ptr = psiconv_list_get(value,i))) { - psiconv_warn(config,0,psiconv_buffer_length(buf), + psiconv_error(config,0,psiconv_buffer_length(buf), "Massive memory corruption"); res = -PSICONV_E_NOMEM; goto ERROR; } - if ((res = psiconv_write_offset(config,buf,*offset_ptr))) + if ((res = psiconv_write_offset(config,buf,lev+1,*offset_ptr))) goto ERROR; }