--- psiconv/trunk/lib/psiconv/generate_word.c 2004/02/04 12:19:09 196 +++ psiconv/trunk/lib/psiconv/generate_word.c 2004/02/25 20:57:10 231 @@ -39,47 +39,56 @@ psiconv_progress(config,lev,0,"Writing word status section"); if (!value) { - psiconv_error(config,0,psiconv_buffer_length(buf),"Null word status section"); - return -PSICONV_E_GENERATE; + psiconv_error(config,lev,0,"Null word status section"); + res = -PSICONV_E_GENERATE; + goto ERROR; } if ((res = psiconv_write_u8(config,buf,lev+1,0x02))) - return res; + goto ERROR; if ((res = psiconv_write_u8(config,buf,lev+1,(value->show_tabs?0x01:0x00) | (value->show_spaces?0x02:0x00) | (value->show_paragraph_ends?0x04:0x00) | (value->show_line_breaks?0x08:0x00) | (value->show_hard_minus?0x20:0x00) | (value->show_hard_space?0x40:0x00)))) - return res; + goto ERROR; if ((res = psiconv_write_u8(config,buf,lev+1,(value->show_full_pictures?0x01:0x00) | (value->show_full_graphs?0x02:0x00)))) - return res; + goto ERROR; if ((res = psiconv_write_bool(config,buf,lev+1,value->show_top_toolbar))) - return res; + goto ERROR; if ((res = psiconv_write_bool(config,buf,lev+1,value->show_side_toolbar))) - return res; + goto ERROR; if ((res = psiconv_write_u8(config,buf,lev+1,(value->fit_lines_to_screen?0x08:0x00)))) - return res; + goto ERROR; if ((res = psiconv_write_u32(config,buf,lev+1,value->cursor_position))) - return res; - return psiconv_write_u32(config,buf,lev+1,value->display_size); + goto ERROR; + if ((res = psiconv_write_u32(config,buf,lev+1,value->display_size))) + goto ERROR; + psiconv_progress(config,lev,0,"End of word status section"); + return 0; + +ERROR: + psiconv_error(config,lev,0,"Writing of word status section failed"); + return res; } int psiconv_write_word_styles_section(const psiconv_config config, psiconv_buffer buf, int lev, psiconv_word_styles_section value) { - int res,i; + int res,i,j; psiconv_word_style style; psiconv_paragraph_layout basepara; psiconv_character_layout basechar; psiconv_font font; + psiconv_u32 buflen; psiconv_progress(config,lev,0,"Writing word styles section"); if (!value || !value->normal || !value->styles) { - psiconv_error(config,0,psiconv_buffer_length(buf),"Null word styles section"); + psiconv_error(config,lev,0,"Null word styles section"); res = -PSICONV_E_GENERATE; goto ERROR1; } @@ -95,43 +104,56 @@ } - if ((res = psiconv_write_paragraph_layout_list(config,buf,lev+1,value->normal->paragraph, + if ((res = psiconv_write_paragraph_layout_list(config,buf,lev+1, + value->normal->paragraph, basepara))) goto ERROR3; /* Always generate the font for Normal */ font = basechar->font; basechar->font = NULL; - res = psiconv_write_character_layout_list(config,buf,lev+1,value->normal->character, - basechar); + res = psiconv_write_character_layout_list(config,buf,lev+1, + value->normal->character, + basechar); basechar->font = font; if (res) goto ERROR3; - if ((res = psiconv_write_u32(config,buf,lev+1,psiconv_unicode_to_char(config,value->normal->hotkey)))) + buflen = psiconv_buffer_length(buf); + if ((res = psiconv_unicode_write_char(config,buf,lev+1, + value->normal->hotkey))) goto ERROR3; - if ((res = psiconv_write_u8(config,buf,lev+1,psiconv_list_length(value->styles)))) + for (j = psiconv_buffer_length(buf) - buflen; j < 4; j++) + if ((res = psiconv_write_u8(config,buf,lev+1,0))) + goto ERROR3; + + if ((res = psiconv_write_u8(config,buf,lev+1, + psiconv_list_length(value->styles)))) goto ERROR3; for (i = 0; i < psiconv_list_length(value->styles); i++) { if (!(style = psiconv_list_get(value->styles,i))) { - psiconv_error(config,0,psiconv_buffer_length(buf),"Massive memory corruption"); + psiconv_error(config,lev,0,"Massive memory corruption"); res = -PSICONV_E_NOMEM; goto ERROR3; } - if ((res = psiconv_write_u32(config,buf,lev+1,psiconv_unicode_to_char(config,style->hotkey)))) + buflen = psiconv_buffer_length(buf); + if ((res = psiconv_unicode_write_char(config,buf,lev+1,style->hotkey))) goto ERROR3; + for (j = psiconv_buffer_length(buf) - buflen; j < 4; j++) + if ((res = psiconv_write_u8(config,buf,lev+1,0))) + goto ERROR3; } if ((res = psiconv_write_u8(config,buf,lev+1,psiconv_list_length(value->styles)))) goto ERROR3; for (i = 0; i < psiconv_list_length(value->styles); i++) { if (!(style = psiconv_list_get(value->styles,i))) { - psiconv_error(config,0,psiconv_buffer_length(buf),"Massive memory corruption"); + psiconv_error(config,lev,0,"Massive memory corruption"); res = -PSICONV_E_NOMEM; goto ERROR3; } if (!style->name) { - psiconv_error(config,0,psiconv_buffer_length(buf),"Null style name"); + psiconv_error(config,lev,0,"Null style name"); res = -PSICONV_E_GENERATE; goto ERROR3; } @@ -160,5 +182,9 @@ ERROR2: psiconv_free_paragraph_layout(basepara); ERROR1: + if (res) + psiconv_error(config,lev,0,"Writing of word styles section failed"); + else + psiconv_progress(config,lev,0,"End of word styles section"); return res; }