/[public]/psiconv/trunk/lib/psiconv/data.c
ViewVC logotype

Annotation of /psiconv/trunk/lib/psiconv/data.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 167 - (hide annotations)
Sun Nov 23 21:47:24 2003 UTC (20 years, 5 months ago) by frodo
File MIME type: text/plain
File size: 39680 byte(s)
(Frodo) Embedded object generation works!

Not too useful though, we also need sketch or sheet generation; the only thing
actually working at the moment is embedding word docs within word docs.
Oh well. It's a good start.

1 frodo 2 /*
2     data.c - Part of psiconv, a PSION 5 file formats converter
3 frodo 63 Copyright (c) 1999, 2000 Frodo Looijaard <frodol@dds.nl>
4 frodo 2
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9    
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13     GNU General Public License for more details.
14    
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18     */
19    
20     #include "config.h"
21 frodo 20 #include "compat.h"
22 frodo 2 #include <stdlib.h>
23     #include <string.h>
24     #include "data.h"
25 frodo 87 #include "list.h"
26 frodo 2
27 frodo 142 #ifdef DMALLOC
28     #include <dmalloc.h>
29     #endif
30    
31 frodo 2 static psiconv_color clone_color(psiconv_color color);
32     static psiconv_font clone_font(psiconv_font font);
33     static psiconv_border clone_border(psiconv_border border);
34     static psiconv_bullet clone_bullet(psiconv_bullet bullet);
35     static psiconv_all_tabs clone_all_tabs(psiconv_all_tabs all_tabs);
36     static void psiconv_free_style_aux(void *style);
37     static void psiconv_free_in_line_layout_aux(void * layout);
38     static void psiconv_free_paragraph_aux(void * paragraph);
39 frodo 12 static void psiconv_free_paint_data_section_aux(void * section);
40 frodo 42 static void psiconv_free_clipart_section_aux(void * section);
41 frodo 99 static void psiconv_free_formula_aux(void *data);
42 frodo 111 static void psiconv_free_sheet_worksheet_aux (void *data);
43 frodo 129 static void psiconv_free_sheet_variable_aux(void * variable);
44 frodo 2
45 frodo 87 static psiconv_word_styles_section psiconv_empty_word_styles_section(void);
46     static psiconv_text_and_layout psiconv_empty_text_and_layout(void);
47     static psiconv_texted_section psiconv_empty_texted_section(void);
48     static psiconv_page_header psiconv_empty_page_header(void);
49     static psiconv_page_layout_section psiconv_empty_page_layout_section(void);
50     static psiconv_word_status_section psiconv_empty_word_status_section(void);
51     static psiconv_word_f psiconv_empty_word_f(void);
52 frodo 94 static psiconv_sheet_status_section psiconv_empty_sheet_status_section(void);
53 frodo 98 static psiconv_formula_list psiconv_empty_formula_list(void);
54 frodo 95 static psiconv_sheet_workbook_section
55     psiconv_empty_sheet_workbook_section(void);
56 frodo 94 static psiconv_sheet_f psiconv_empty_sheet_f(void);
57 frodo 87 static psiconv_texted_f psiconv_empty_texted_f(void);
58     static psiconv_paint_data_section psiconv_empty_paint_data_section(void);
59     static psiconv_pictures psiconv_empty_pictures(void);
60     static psiconv_mbm_f psiconv_empty_mbm_f(void);
61     static psiconv_sketch_section psiconv_empty_sketch_section(void);
62     static psiconv_sketch_f psiconv_empty_sketch_f(void);
63     static psiconv_clipart_f psiconv_empty_clipart_f(void);
64     static psiconv_cliparts psiconv_empty_cliparts(void);
65    
66    
67 frodo 69 /* Note: these defaults seem to be hard-coded somewhere outside the
68     files themself. */
69 frodo 2 psiconv_character_layout psiconv_basic_character_layout(void)
70     {
71 frodo 20 /* Make the structures static, to oblige IRIX */
72 frodo 56 static struct psiconv_color_s black =
73 frodo 2 {
74     0x00, /* red */
75     0x00, /* green */
76     0x00, /* blue */
77     };
78 frodo 56 static struct psiconv_color_s white =
79 frodo 2 {
80     0xff, /* red */
81     0xff, /* green */
82     0xff, /* blue */
83     };
84 frodo 56 static struct psiconv_font_s font =
85 frodo 20 {
86     "Times New Roman", /* name */
87     3 /* screenfont */
88     };
89 frodo 56 struct psiconv_character_layout_s cl =
90 frodo 2 {
91     &black, /* color */
92     &white, /* back_color */
93     10.0, /* font_size */
94     psiconv_bool_false, /* italic */
95     psiconv_bool_false, /* bold */
96     psiconv_normalscript, /* super_sub */
97     psiconv_bool_false, /* underline */
98 frodo 67 psiconv_bool_false, /* strikethrough */
99 frodo 24 &font, /* font */
100 frodo 2 };
101    
102     return psiconv_clone_character_layout(&cl);
103     }
104    
105 frodo 69 /* Note: these defaults seem to be hard-coded somewhere outside the
106     files themself. */
107 frodo 2 psiconv_paragraph_layout psiconv_basic_paragraph_layout(void)
108     {
109 frodo 56 static struct psiconv_font_s font =
110 frodo 2 {
111 frodo 20 "Times New Roman", /* name */
112 frodo 2 2 /* screenfont */
113     };
114 frodo 56 static struct psiconv_color_s black =
115 frodo 2 {
116     0x00, /* red */
117     0x00, /* green */
118     0x00, /* blue */
119     };
120 frodo 56 static struct psiconv_color_s white =
121 frodo 2 {
122     0xff, /* red */
123     0xff, /* green */
124     0xff, /* blue */
125     };
126 frodo 56 static struct psiconv_border_s no_border =
127 frodo 2 {
128     psiconv_border_none, /* kind */
129     1, /* thickness */
130     &black /* color */
131     };
132 frodo 56 static struct psiconv_bullet_s bullet =
133 frodo 2 {
134     psiconv_bool_false, /* on */
135     10.0, /* font_size */
136     0x95, /* character */
137     psiconv_bool_true, /* indent */
138     &black, /* color */
139     &font, /* font */
140     };
141 frodo 56 static struct psiconv_all_tabs_s tabs =
142 frodo 2 {
143     0.64, /* normal */
144     NULL /* kind */
145     };
146 frodo 56 struct psiconv_paragraph_layout_s pl =
147 frodo 2 {
148     &white, /* back_color */
149     0.0, /* indent_left */
150     0.0, /* indent_right */
151     0.0, /* indent_first */
152     psiconv_justify_left, /* justify_hor */
153     psiconv_justify_middle,/* justify_ver */
154 frodo 69 10.0, /* linespacing */
155 frodo 67 psiconv_bool_false, /* linespacing_exact */
156     0.0, /* space_above */
157     0.0, /* space_below */
158     psiconv_bool_false, /* keep_together */
159     psiconv_bool_false, /* keep_with_next */
160 frodo 2 psiconv_bool_false, /* on_next_page */
161     psiconv_bool_false, /* no_widow_protection */
162 frodo 104 psiconv_bool_false, /* wrap_to_fit_cell */
163 frodo 2 0.0, /* left_margin */
164     &bullet, /* bullet */
165     &no_border, /* left_border */
166     &no_border, /* right_border */
167     &no_border, /* top_border */
168     &no_border, /* bottom_border */
169     &tabs, /* tabs */
170     };
171     psiconv_paragraph_layout res;
172    
173 frodo 62 if (!(pl.tabs->extras = psiconv_list_new(sizeof(struct psiconv_tab_s))))
174     return NULL;
175 frodo 2 res = psiconv_clone_paragraph_layout(&pl);
176     psiconv_list_free(pl.tabs->extras);
177     return res;
178     }
179    
180     psiconv_color clone_color(psiconv_color color)
181     {
182     psiconv_color result;
183 frodo 62 if (!(result = malloc(sizeof(*result))))
184     return NULL;
185 frodo 2 *result = *color;
186     return result;
187     }
188    
189     psiconv_font clone_font(psiconv_font font)
190     {
191     psiconv_font result;
192 frodo 62 if(!(result = malloc(sizeof(*result))))
193     goto ERROR1;
194 frodo 2 *result = *font;
195 frodo 62 if (!(result->name = strdup(result->name)))
196     goto ERROR2;
197 frodo 2 return result;
198 frodo 62 ERROR2:
199     free(result);
200     ERROR1:
201     return NULL;
202 frodo 2 }
203    
204     psiconv_border clone_border(psiconv_border border)
205     {
206     psiconv_border result;
207 frodo 62 if (!(result = malloc(sizeof(*result))))
208     goto ERROR1;
209 frodo 2 *result = *border;
210 frodo 62 if(!(result->color = clone_color(result->color)))
211     goto ERROR2;
212 frodo 2 return result;
213 frodo 62 ERROR2:
214     free(result);
215     ERROR1:
216     return NULL;
217 frodo 2 }
218    
219     psiconv_bullet clone_bullet(psiconv_bullet bullet)
220     {
221     psiconv_bullet result;
222 frodo 62 if (!(result = malloc(sizeof(*result))))
223     goto ERROR1;
224 frodo 2 *result = *bullet;
225 frodo 62 if (!(result->font = clone_font(result->font)))
226     goto ERROR2;
227     if (!(result->color = clone_color(result->color)))
228     goto ERROR3;
229 frodo 2 return result;
230 frodo 62 ERROR3:
231     psiconv_free_font(result->font);
232     ERROR2:
233     free(result);
234     ERROR1:
235     return NULL;
236 frodo 2 }
237    
238     psiconv_all_tabs clone_all_tabs(psiconv_all_tabs all_tabs)
239     {
240     psiconv_all_tabs result;
241 frodo 62 if (!(result = malloc(sizeof(*result))))
242     goto ERROR1;
243 frodo 2 *result = *all_tabs;
244 frodo 62 if (!(result->extras = psiconv_list_clone(result->extras)))
245     goto ERROR2;
246 frodo 2 return result;
247 frodo 62 ERROR2:
248     free(result);
249     ERROR1:
250     return NULL;
251 frodo 2 }
252    
253     psiconv_character_layout psiconv_clone_character_layout
254     (psiconv_character_layout ls)
255     {
256     psiconv_character_layout result;
257    
258 frodo 62 if (!(result = malloc(sizeof(*result))))
259     goto ERROR1;
260 frodo 2 *result = *ls;
261 frodo 62 if (!(result->color = clone_color(result->color)))
262     goto ERROR2;
263     if (!(result->back_color = clone_color(result->back_color)))
264     goto ERROR3;
265     if (!(result->font = clone_font(result->font)))
266     goto ERROR4;
267 frodo 2 return result;
268 frodo 62 ERROR4:
269     psiconv_free_color(result->back_color);
270     ERROR3:
271     psiconv_free_color(result->color);
272     ERROR2:
273     free(result);
274     ERROR1:
275     return NULL;
276 frodo 2 }
277    
278     psiconv_paragraph_layout psiconv_clone_paragraph_layout
279     (psiconv_paragraph_layout ls)
280     {
281     psiconv_paragraph_layout result;
282    
283 frodo 62 if (!(result = malloc(sizeof(*result))))
284     goto ERROR1;
285 frodo 2 *result = *ls;
286 frodo 62 if (!(result->back_color = clone_color(result->back_color)))
287     goto ERROR2;
288     if (!(result->bullet = clone_bullet(result->bullet)))
289     goto ERROR3;
290     if (!(result->left_border = clone_border(result->left_border)))
291     goto ERROR4;
292     if (!(result->right_border = clone_border(result->right_border)))
293     goto ERROR5;
294     if (!(result->top_border = clone_border(result->top_border)))
295     goto ERROR6;
296     if (!(result->bottom_border = clone_border(result->bottom_border)))
297     goto ERROR7;
298     if (!(result->tabs = clone_all_tabs(result->tabs)))
299     goto ERROR8;
300 frodo 2 return result;
301 frodo 62 ERROR8:
302     psiconv_free_border(result->bottom_border);
303     ERROR7:
304     psiconv_free_border(result->top_border);
305     ERROR6:
306     psiconv_free_border(result->right_border);
307     ERROR5:
308     psiconv_free_border(result->left_border);
309     ERROR4:
310     psiconv_free_bullet(result->bullet);
311     ERROR3:
312     psiconv_free_color(result->back_color);
313     ERROR2:
314     free(result);
315     ERROR1:
316     return NULL;
317 frodo 2 }
318    
319     psiconv_word_style psiconv_get_style (psiconv_word_styles_section ss, int nr)
320     {
321     if (nr == 0)
322     return ss->normal;
323     else
324     return psiconv_list_get(ss->styles,0xff - nr);
325     }
326    
327 frodo 125 psiconv_formula psiconv_get_formula (psiconv_formula_list ss, int nr)
328     {
329     return psiconv_list_get(ss,psiconv_list_length(ss)-nr-1);
330     }
331    
332 frodo 128 /* TODO: What if a cell is both in a default row and a default column?!? */
333     psiconv_sheet_cell_layout psiconv_get_default_layout
334     (psiconv_sheet_line_list row_defaults,
335     psiconv_sheet_line_list col_defaults,
336     psiconv_sheet_cell_layout cell_default,
337     int row,int col)
338     {
339     int i;
340     psiconv_sheet_line line;
341     for (i = 0;i < psiconv_list_length(row_defaults);i++) {
342     line = psiconv_list_get(row_defaults,i);
343     if (line->position == row)
344     return line->layout;
345     }
346     for (i = 0;i < psiconv_list_length(col_defaults);i++) {
347     line = psiconv_list_get(col_defaults,i);
348     if (line->position == col)
349     return line->layout;
350     }
351     return cell_default;
352     }
353 frodo 125
354 frodo 128
355 frodo 2 void psiconv_free_color (psiconv_color color)
356     {
357     if (color)
358     free(color);
359     }
360    
361     void psiconv_free_border(psiconv_border border)
362     {
363     if (border) {
364     psiconv_free_color(border->color);
365     free(border);
366     }
367     }
368    
369     void psiconv_free_font(psiconv_font font)
370     {
371     if (font) {
372     if (font->name)
373     free(font->name);
374     free(font);
375     }
376     }
377    
378     void psiconv_free_bullet(psiconv_bullet bullet)
379     {
380     if (bullet) {
381     psiconv_free_color(bullet->color);
382     psiconv_free_font(bullet->font);
383     free(bullet);
384     }
385     }
386    
387     void psiconv_free_character_layout(psiconv_character_layout layout)
388     {
389     if (layout) {
390     psiconv_free_color(layout->color);
391     psiconv_free_color(layout->back_color);
392     psiconv_free_font(layout->font);
393     free(layout);
394     }
395     }
396    
397     void psiconv_free_tab(psiconv_tab tab)
398     {
399     if (tab)
400     free(tab);
401     }
402    
403     void psiconv_free_tabs(psiconv_all_tabs tabs)
404     {
405     if (tabs) {
406     psiconv_list_free(tabs->extras);
407     free(tabs);
408     }
409     }
410    
411     void psiconv_free_paragraph_layout(psiconv_paragraph_layout layout)
412     {
413     if (layout) {
414     psiconv_free_color(layout->back_color);
415     psiconv_free_bullet(layout->bullet);
416     psiconv_free_border(layout->left_border);
417     psiconv_free_border(layout->right_border);
418     psiconv_free_border(layout->top_border);
419     psiconv_free_border(layout->bottom_border);
420     psiconv_free_tabs(layout->tabs);
421     free(layout);
422     }
423     }
424    
425     void psiconv_free_style_aux(void *style)
426     {
427     if(((psiconv_word_style) style)->name)
428     free(((psiconv_word_style) style)->name);
429     psiconv_free_character_layout(((psiconv_word_style) style)->character);
430     psiconv_free_paragraph_layout(((psiconv_word_style) style)->paragraph);
431     }
432    
433     void psiconv_free_word_style(psiconv_word_style style)
434     {
435     if (style) {
436     psiconv_free_style_aux(style);
437     free(style);
438     }
439     }
440    
441     void psiconv_free_word_styles_section(psiconv_word_styles_section styles)
442     {
443     if (styles) {
444     psiconv_free_word_style(styles->normal);
445     if (styles->styles)
446     psiconv_list_free_el(styles->styles,psiconv_free_style_aux);
447 frodo 143 free(styles);
448 frodo 2 }
449     }
450    
451     void psiconv_free_header_section(psiconv_header_section header)
452     {
453     if (header)
454     free(header);
455     }
456    
457     void psiconv_free_section_table_entry(psiconv_section_table_entry entry)
458     {
459     if (entry)
460     free(entry);
461     }
462    
463     void psiconv_free_section_table_section(psiconv_section_table_section section)
464     {
465     if (section)
466     psiconv_list_free(section);
467     }
468    
469     void psiconv_free_application_id_section(psiconv_application_id_section section)
470     {
471     if (section) {
472     if (section->name)
473     free(section->name);
474     free(section);
475     }
476     }
477    
478 frodo 159 void psiconv_free_object_icon_section(psiconv_object_icon_section section)
479     {
480     if (section) {
481     if (section->icon_name)
482     free(section->icon_name);
483     free(section);
484     }
485     }
486    
487     void psiconv_free_object_display_section(psiconv_object_display_section section)
488     {
489     if (section)
490     free(section);
491     }
492    
493 frodo 167 void psiconv_free_embedded_object_section
494     (psiconv_embedded_object_section object)
495 frodo 159 {
496     if (object) {
497     psiconv_free_object_icon_section(object->icon);
498     psiconv_free_object_display_section(object->display);
499     psiconv_free_file(object->object);
500     free(object);
501     }
502     }
503    
504 frodo 2 void psiconv_free_in_line_layout_aux(void * layout)
505     {
506     psiconv_free_character_layout(((psiconv_in_line_layout) layout)->layout);
507 frodo 167 psiconv_free_embedded_object_section
508     (((psiconv_in_line_layout) layout)->object);
509 frodo 2 }
510    
511     void psiconv_free_in_line_layout(psiconv_in_line_layout layout)
512     {
513     if (layout) {
514     psiconv_free_in_line_layout_aux(layout);
515     free(layout);
516     }
517     }
518    
519     void psiconv_free_in_line_layouts(psiconv_in_line_layouts layouts)
520     {
521     if (layouts)
522     psiconv_list_free_el(layouts,&psiconv_free_in_line_layout_aux);
523     }
524    
525     void psiconv_free_replacement(psiconv_replacement replacement)
526     {
527     if (replacement)
528     free(replacement);
529     }
530    
531     void psiconv_free_replacements(psiconv_replacements replacements)
532     {
533     if (replacements)
534     psiconv_list_free(replacements);
535     }
536    
537     void psiconv_free_paragraph_aux(void * paragraph)
538     {
539     if(((psiconv_paragraph) paragraph)->text)
540     free(((psiconv_paragraph) paragraph)->text);
541     psiconv_free_character_layout(((psiconv_paragraph) paragraph)
542     ->base_character);
543     psiconv_free_paragraph_layout(((psiconv_paragraph) paragraph)
544     ->base_paragraph);
545     psiconv_free_in_line_layouts(((psiconv_paragraph) paragraph)
546     ->in_lines);
547     psiconv_free_replacements(((psiconv_paragraph) paragraph)
548     ->replacements);
549     }
550    
551     void psiconv_free_paragraph(psiconv_paragraph paragraph)
552     {
553     if (paragraph) {
554     psiconv_free_paragraph_aux(paragraph);
555     free(paragraph);
556     }
557     }
558    
559     void psiconv_free_text_and_layout(psiconv_text_and_layout text)
560     {
561     if (text)
562     psiconv_list_free_el(text,&psiconv_free_paragraph_aux);
563     }
564    
565     void psiconv_free_texted_section(psiconv_texted_section section)
566     {
567     if (section) {
568     psiconv_free_text_and_layout(section->paragraphs);
569     free(section);
570     }
571     }
572    
573     void psiconv_free_page_header(psiconv_page_header header)
574     {
575     if (header) {
576     psiconv_free_character_layout(header->base_character_layout);
577     psiconv_free_paragraph_layout(header->base_paragraph_layout);
578     psiconv_free_texted_section(header->text);
579     free(header);
580     }
581     }
582    
583     void psiconv_free_page_layout_section(psiconv_page_layout_section section)
584     {
585     if (section) {
586     psiconv_free_page_header(section->header);
587     psiconv_free_page_header(section->footer);
588     free(section);
589     }
590     }
591    
592     void psiconv_free_word_status_section(psiconv_word_status_section section)
593     {
594     if (section)
595     free(section);
596     }
597    
598     void psiconv_free_word_f(psiconv_word_f file)
599     {
600     if (file) {
601     psiconv_free_page_layout_section(file->page_sec);
602     psiconv_free_text_and_layout(file->paragraphs);
603     psiconv_free_word_status_section(file->status_sec);
604     psiconv_free_word_styles_section(file->styles_sec);
605     free(file);
606     }
607     }
608    
609 frodo 94 void psiconv_free_sheet_status_section(psiconv_sheet_status_section section)
610     {
611     if (section)
612     free(section);
613     }
614    
615 frodo 111 void psiconv_free_sheet_numberformat(psiconv_sheet_numberformat numberformat)
616 frodo 110 {
617     if (numberformat)
618     free(numberformat);
619     }
620    
621 frodo 111 void psiconv_free_sheet_cell_layout(psiconv_sheet_cell_layout layout)
622     {
623     psiconv_free_paragraph_layout(layout->paragraph);
624     psiconv_free_character_layout(layout->character);
625     psiconv_free_sheet_numberformat(layout->numberformat);
626     }
627    
628 frodo 121 void psiconv_free_sheet_cell_aux(void *cell)
629     {
630     psiconv_sheet_cell data = cell;
631    
632     psiconv_free_sheet_cell_layout(data->layout);
633    
634     if ((data->type == psiconv_cell_string) && (data->data.dat_string))
635     free(data->data.dat_string);
636     }
637    
638 frodo 110 void psiconv_free_sheet_cell(psiconv_sheet_cell cell)
639     {
640     if (cell) {
641 frodo 121 psiconv_free_sheet_cell_aux(cell);
642 frodo 111 free(cell);
643 frodo 110 }
644     }
645    
646     void psiconv_free_sheet_cell_list(psiconv_sheet_cell_list list)
647     {
648     if (list)
649     psiconv_list_free_el(list,psiconv_free_sheet_cell_aux);
650     }
651    
652 frodo 128 void psiconv_free_sheet_line_aux(void *line)
653     {
654     psiconv_sheet_line data = line;
655    
656     psiconv_free_sheet_cell_layout(data->layout);
657     }
658    
659     void psiconv_free_sheet_line(psiconv_sheet_line line)
660     {
661     if (line) {
662     psiconv_free_sheet_line_aux(line);
663     free(line);
664     }
665     }
666    
667 frodo 134
668 frodo 128 void psiconv_free_sheet_line_list(psiconv_sheet_line_list list)
669     {
670     if (list)
671     psiconv_list_free_el(list,psiconv_free_sheet_line_aux);
672     }
673    
674 frodo 134 void psiconv_free_sheet_grid_break_list(psiconv_sheet_grid_break_list list)
675     {
676     if (list)
677     psiconv_list_free(list);
678     }
679    
680     void psiconv_free_sheet_grid_size(psiconv_sheet_grid_size s)
681     {
682     if (s)
683     free(s);
684     }
685    
686     void psiconv_free_sheet_grid_size_list(psiconv_sheet_grid_size_list list)
687     {
688     if (list)
689     psiconv_list_free(list);
690     }
691    
692     void psiconv_free_sheet_grid_section(psiconv_sheet_grid_section sec)
693     {
694     if (sec) {
695     psiconv_free_sheet_grid_size_list(sec->row_heights);
696     psiconv_free_sheet_grid_size_list(sec->column_heights);
697     psiconv_free_sheet_grid_break_list(sec->row_page_breaks);
698     psiconv_free_sheet_grid_break_list(sec->column_page_breaks);
699     free(sec);
700     }
701     }
702    
703 frodo 111 void psiconv_free_sheet_worksheet_aux (void *data)
704 frodo 110 {
705 frodo 111 psiconv_sheet_worksheet section = data;
706     psiconv_free_sheet_cell_layout(section->default_layout);
707     psiconv_free_sheet_cell_list(section->cells);
708 frodo 128 psiconv_free_sheet_line_list(section->row_default_layouts);
709     psiconv_free_sheet_line_list(section->col_default_layouts);
710 frodo 134 psiconv_free_sheet_grid_section(section->grid);
711 frodo 111 }
712    
713     void psiconv_free_sheet_worksheet(psiconv_sheet_worksheet sheet)
714     {
715     if (sheet) {
716     psiconv_free_sheet_worksheet_aux(sheet);
717     free(sheet);
718 frodo 110 }
719     }
720    
721 frodo 111 void psiconv_free_sheet_worksheet_list(psiconv_sheet_worksheet_list list)
722     {
723     if (list)
724     psiconv_list_free_el(list,psiconv_free_sheet_worksheet_aux);
725     }
726    
727 frodo 99 void psiconv_free_formula_aux(void *data)
728     {
729     psiconv_formula formula;
730     formula = data;
731     if (formula->type == psiconv_formula_dat_string)
732     free(formula->data.dat_string);
733     else if ((formula->type != psiconv_formula_dat_int) &&
734     (formula->type != psiconv_formula_dat_var) &&
735     (formula->type != psiconv_formula_dat_float) &&
736     (formula->type != psiconv_formula_dat_cellref) &&
737     (formula->type != psiconv_formula_dat_cellblock) &&
738     (formula->type != psiconv_formula_dat_vcellblock) &&
739     (formula->type != psiconv_formula_mark_opsep) &&
740     (formula->type != psiconv_formula_mark_opend) &&
741     (formula->type != psiconv_formula_mark_eof) &&
742     (formula->type != psiconv_formula_unknown))
743     psiconv_free_formula_list(formula->data.fun_operands);
744     }
745    
746 frodo 98 void psiconv_free_formula(psiconv_formula formula)
747 frodo 97 {
748 frodo 99 if (formula) {
749     psiconv_free_formula_aux(formula);
750 frodo 97 free(formula);
751 frodo 99 }
752 frodo 97 }
753    
754 frodo 98 void psiconv_free_formula_list(psiconv_formula_list list)
755 frodo 97 {
756 frodo 99 if (list)
757     psiconv_list_free_el(list,psiconv_free_formula_aux);
758 frodo 97 }
759    
760 frodo 129 void psiconv_free_sheet_name_section(psiconv_sheet_name_section section)
761     {
762     if (section) {
763     if(section->name)
764     free(section->name);
765     free(section);
766     }
767     }
768    
769     void psiconv_free_sheet_info_section(psiconv_sheet_info_section section)
770     {
771     if (section) {
772     free(section);
773     }
774     }
775    
776     void psiconv_free_sheet_variable_aux(void * variable)
777     {
778     psiconv_sheet_variable var = variable;
779     if (var->name)
780     free(var->name);
781     if (var->type == psiconv_var_string)
782     free(var->data.dat_string);
783     }
784    
785     void psiconv_free_sheet_variable(psiconv_sheet_variable var)
786     {
787     if (var) {
788     psiconv_free_sheet_variable_aux(var);
789     free(var);
790     }
791     }
792    
793     void psiconv_free_sheet_variable_list(psiconv_sheet_variable_list list)
794     {
795     if (list)
796     psiconv_list_free_el(list,psiconv_free_sheet_variable_aux);
797     }
798    
799 frodo 95 void psiconv_free_sheet_workbook_section(psiconv_sheet_workbook_section section)
800     {
801 frodo 97 if (section) {
802 frodo 98 psiconv_free_formula_list(section->formulas);
803 frodo 121 psiconv_free_sheet_worksheet_list(section->worksheets);
804 frodo 129 psiconv_free_sheet_name_section(section->name);
805     psiconv_free_sheet_info_section(section->info);
806     psiconv_free_sheet_variable_list(section->variables);
807 frodo 95 free(section);
808 frodo 97 }
809 frodo 95 }
810    
811 frodo 94 void psiconv_free_sheet_f(psiconv_sheet_f file)
812     {
813     if (file) {
814     psiconv_free_page_layout_section(file->page_sec);
815     psiconv_free_sheet_status_section(file->status_sec);
816 frodo 95 psiconv_free_sheet_workbook_section(file->workbook_sec);
817 frodo 94 free(file);
818     }
819     }
820    
821 frodo 12 void psiconv_free_texted_f(psiconv_texted_f file)
822     {
823     if (file) {
824     psiconv_free_page_layout_section(file->page_sec);
825     psiconv_free_texted_section(file->texted_sec);
826     free(file);
827     }
828     }
829    
830     void psiconv_free_paint_data_section_aux(void * section)
831     {
832     if (((psiconv_paint_data_section) section)->red)
833     free(((psiconv_paint_data_section)section) -> red);
834     if (((psiconv_paint_data_section) section)->green)
835     free(((psiconv_paint_data_section)section) -> green);
836     if (((psiconv_paint_data_section) section)->blue)
837     free(((psiconv_paint_data_section)section) -> blue);
838     }
839    
840     void psiconv_free_paint_data_section(psiconv_paint_data_section section)
841     {
842     if (section) {
843     psiconv_free_paint_data_section_aux(section);
844     free(section);
845     }
846     }
847    
848     void psiconv_free_pictures(psiconv_pictures section)
849     {
850     if (section)
851     psiconv_list_free_el(section,&psiconv_free_paint_data_section_aux);
852     }
853    
854 frodo 42 void psiconv_free_jumptable_section (psiconv_jumptable_section section)
855 frodo 13 {
856     if (section)
857     psiconv_list_free(section);
858     }
859    
860 frodo 12 void psiconv_free_mbm_f(psiconv_mbm_f file)
861     {
862     if (file) {
863     psiconv_free_pictures(file->sections);
864     free(file);
865     }
866     }
867    
868 frodo 24 void psiconv_free_sketch_section(psiconv_sketch_section sec)
869     {
870     if (sec) {
871     psiconv_free_paint_data_section(sec->picture);
872     free(sec);
873     }
874     }
875    
876     void psiconv_free_sketch_f(psiconv_sketch_f file)
877     {
878     if (file) {
879     psiconv_free_sketch_section(file->sketch_sec);
880     free(file);
881     }
882     }
883    
884 frodo 42 void psiconv_free_clipart_section_aux(void *section)
885 frodo 41 {
886     if (section)
887 frodo 42 free(((psiconv_clipart_section ) section)->picture);
888 frodo 41 }
889    
890     void psiconv_free_clipart_section(psiconv_clipart_section section)
891     {
892     if (section) {
893     psiconv_free_clipart_section_aux(section);
894     free(section);
895     }
896     }
897    
898     void psiconv_free_cliparts(psiconv_cliparts section)
899     {
900     if (section)
901     psiconv_list_free_el(section,&psiconv_free_clipart_section_aux);
902     }
903    
904     void psiconv_free_clipart_f(psiconv_clipart_f file)
905     {
906     if (file) {
907     psiconv_free_cliparts(file->sections);
908     free(file);
909     }
910     }
911    
912 frodo 2 void psiconv_free_file(psiconv_file file)
913     {
914     if (file) {
915     if (file->type == psiconv_word_file)
916     psiconv_free_word_f((psiconv_word_f) file->file);
917 frodo 12 else if (file->type == psiconv_texted_file)
918     psiconv_free_texted_f((psiconv_texted_f) file->file);
919     else if (file->type == psiconv_mbm_file)
920     psiconv_free_mbm_f((psiconv_mbm_f) file->file);
921 frodo 24 else if (file->type == psiconv_sketch_file)
922     psiconv_free_sketch_f((psiconv_sketch_f) file->file);
923 frodo 41 else if (file->type == psiconv_clipart_file)
924 frodo 42 psiconv_free_clipart_f((psiconv_clipart_f) file->file);
925 frodo 94 else if (file->type == psiconv_sheet_file)
926     psiconv_free_sheet_f((psiconv_sheet_f) file->file);
927 frodo 2 free(file);
928     }
929     }
930 frodo 78
931     int psiconv_compare_color(const psiconv_color value1,
932     const psiconv_color value2)
933     {
934     if (!value1 || !value2)
935     return 1;
936     if ((value1->red == value2->red) &&
937     (value1->green == value2->green) &&
938     (value1->blue == value2->blue))
939     return 0;
940     else
941     return 1;
942     }
943    
944     int psiconv_compare_font(const psiconv_font value1,
945     const psiconv_font value2)
946     {
947     if (!value1 || !value2 || !value1->name || !value2->name)
948     return 1;
949     if ((value1->screenfont == value2->screenfont) &&
950     !strcmp(value1->name,value2->name))
951     return 0;
952     else
953     return 1;
954     }
955    
956     int psiconv_compare_border(const psiconv_border value1,
957     const psiconv_border value2)
958     {
959     if (!value1 || !value2)
960     return 1;
961     if ((value1->kind == value2->kind) &&
962     (value1->thickness == value2->thickness) &&
963     !psiconv_compare_color(value1->color,value2->color))
964     return 0;
965     else
966     return 1;
967     }
968    
969     int psiconv_compare_bullet(const psiconv_bullet value1,
970     const psiconv_bullet value2)
971     {
972     if (!value1 || !value2)
973     return 1;
974     if ((value1->on == value2->on) &&
975     (value1->font_size == value2->font_size) &&
976     (value1->character == value2->character) &&
977     (value1->indent == value2->indent) &&
978     !psiconv_compare_color(value1->color,value2->color) &&
979     !psiconv_compare_font(value1->font,value2->font))
980     return 0;
981     else
982     return 1;
983     }
984    
985     int psiconv_compare_tab(const psiconv_tab value1, const psiconv_tab value2)
986     {
987     if (!value1 || !value2)
988     return 1;
989     if ((value1->location == value2->location) &&
990     (value1->kind == value2->kind))
991     return 0;
992     else
993     return 1;
994     }
995    
996     int psiconv_compare_all_tabs(const psiconv_all_tabs value1,
997     const psiconv_all_tabs value2)
998     {
999     int i;
1000    
1001     if (!value1 || !value2 || !value1->extras || !value2->extras)
1002     return 1;
1003    
1004     if ((value1->normal != value2->normal) ||
1005     psiconv_list_length(value1->extras) !=
1006     psiconv_list_length(value2->extras))
1007     return 1;
1008     for (i = 0; i < psiconv_list_length(value1->extras); i++)
1009     if (psiconv_compare_tab(psiconv_list_get(value1->extras,i),
1010     psiconv_list_get(value2->extras,i)))
1011    
1012     return 1;
1013     return 0;
1014     }
1015    
1016     int psiconv_compare_paragraph_layout(const psiconv_paragraph_layout value1,
1017     const psiconv_paragraph_layout value2)
1018     {
1019     if (!value1 || !value2)
1020     return 1;
1021     if ((value1->indent_left == value2->indent_left) &&
1022     (value1->indent_right == value2->indent_right) &&
1023     (value1->indent_first == value2->indent_first) &&
1024     (value1->justify_hor == value2->justify_hor) &&
1025     (value1->justify_ver == value2->justify_ver) &&
1026     (value1->linespacing == value2->linespacing) &&
1027     (value1->space_above == value2->space_above) &&
1028     (value1->space_below == value2->space_below) &&
1029     (value1->keep_together == value2->keep_together) &&
1030     (value1->keep_with_next == value2->keep_with_next) &&
1031     (value1->on_next_page == value2->on_next_page) &&
1032     (value1->no_widow_protection == value2->no_widow_protection) &&
1033     (value1->border_distance == value2->border_distance) &&
1034     !psiconv_compare_color(value1->back_color,value2->back_color) &&
1035     !psiconv_compare_bullet(value1->bullet,value2->bullet) &&
1036     !psiconv_compare_border(value1->left_border,value2->left_border) &&
1037     !psiconv_compare_border(value1->right_border,value2->right_border) &&
1038     !psiconv_compare_border(value1->top_border,value2->top_border) &&
1039     !psiconv_compare_border(value1->bottom_border,value2->bottom_border) &&
1040     !psiconv_compare_all_tabs(value1->tabs,value2->tabs))
1041     return 0;
1042     else
1043     return 1;
1044     }
1045    
1046    
1047     int psiconv_compare_character_layout(const psiconv_character_layout value1,
1048     const psiconv_character_layout value2)
1049     {
1050     if (!value1 || !value2)
1051     return 1;
1052     if ((value1->font_size == value2->font_size) &&
1053     (value1->italic == value2->italic) &&
1054     (value1->bold == value2->bold) &&
1055     (value1->super_sub == value2->super_sub) &&
1056     (value1->underline == value2->underline) &&
1057     (value1->strikethrough == value2->strikethrough) &&
1058     !psiconv_compare_color(value1->color,value2->color) &&
1059     !psiconv_compare_color(value1->back_color,value2->back_color) &&
1060     !psiconv_compare_font(value1->font,value2->font))
1061     return 0;
1062     else
1063     return 1;
1064     }
1065 frodo 87
1066    
1067    
1068     psiconv_word_styles_section psiconv_empty_word_styles_section(void)
1069     {
1070     psiconv_word_styles_section result;
1071     if (!(result = malloc(sizeof(*result))))
1072     goto ERROR1;
1073     if (!(result->styles = psiconv_list_new(sizeof(struct psiconv_word_style_s))))
1074     goto ERROR2;
1075     if (!(result->normal = malloc(sizeof(struct psiconv_word_style_s))))
1076     goto ERROR3;
1077     if (!(result->normal->character = psiconv_basic_character_layout()))
1078     goto ERROR4;
1079     if (!(result->normal->paragraph = psiconv_basic_paragraph_layout()))
1080     goto ERROR5;
1081     result->normal->hotkey = 'N';
1082     result->normal->name = NULL;
1083     result->normal->built_in = psiconv_bool_true;
1084     result->normal->outline_level = 0;
1085     return result;
1086     ERROR5:
1087     psiconv_free_character_layout(result->normal->character);
1088     ERROR4:
1089     free(result->normal);
1090     ERROR3:
1091     psiconv_list_free(result->styles);
1092     ERROR2:
1093     free(result);
1094     ERROR1:
1095     return NULL;
1096     }
1097    
1098     psiconv_text_and_layout psiconv_empty_text_and_layout(void)
1099     {
1100     return psiconv_list_new(sizeof(struct psiconv_paragraph_s));
1101     }
1102    
1103     psiconv_texted_section psiconv_empty_texted_section(void)
1104     {
1105     psiconv_texted_section result;
1106     if (!(result = malloc(sizeof(*result))))
1107     goto ERROR1;
1108     if (!(result->paragraphs = psiconv_empty_text_and_layout()))
1109     goto ERROR2;
1110     return result;
1111     ERROR2:
1112     free(result);
1113     ERROR1:
1114     return NULL;
1115     }
1116    
1117     psiconv_page_header psiconv_empty_page_header(void)
1118     {
1119     psiconv_page_header result;
1120     if (!(result = malloc(sizeof(*result))))
1121     goto ERROR1;
1122     result->on_first_page = psiconv_bool_true;
1123     if (!(result->base_paragraph_layout = psiconv_basic_paragraph_layout()))
1124     goto ERROR2;
1125     if (!(result->base_character_layout = psiconv_basic_character_layout()))
1126     goto ERROR3;
1127     if (!(result->text = psiconv_empty_texted_section()))
1128     goto ERROR4;
1129     return result;
1130     ERROR4:
1131     psiconv_free_character_layout(result->base_character_layout);
1132     ERROR3:
1133     psiconv_free_paragraph_layout(result->base_paragraph_layout);
1134     ERROR2:
1135     free(result);
1136     ERROR1:
1137     return NULL;
1138     }
1139    
1140     psiconv_page_layout_section psiconv_empty_page_layout_section(void)
1141     {
1142     psiconv_page_layout_section result;
1143     if (!(result = malloc(sizeof(*result))))
1144     goto ERROR1;
1145 frodo 88 result->first_page_nr = 1;
1146 frodo 87 result->header_dist = result->footer_dist = 1.27;
1147     result->left_margin = result->right_margin = 3.175;
1148     result->top_margin = result->bottom_margin = 2.54;
1149     result->page_width = 21.0;
1150     result->page_height = 29.7;
1151     result->landscape = psiconv_bool_false;
1152     if (!(result->header = psiconv_empty_page_header()))
1153     goto ERROR2;
1154     if (!(result->footer = psiconv_empty_page_header()))
1155     goto ERROR3;
1156     return result;
1157     ERROR3:
1158     psiconv_free_page_header(result->header);
1159     ERROR2:
1160     free(result);
1161     ERROR1:
1162     return NULL;
1163     }
1164    
1165     psiconv_word_status_section psiconv_empty_word_status_section(void)
1166     {
1167     psiconv_word_status_section result;
1168     if (!(result = malloc(sizeof(*result))))
1169     return NULL;
1170     result->show_tabs = result->show_spaces = result->show_paragraph_ends =
1171     result->show_hard_minus = result->show_hard_space =
1172     result->fit_lines_to_screen = psiconv_bool_false;
1173     result->show_full_pictures = result->show_full_graphs =
1174     result->show_top_toolbar = result->show_side_toolbar =
1175     psiconv_bool_true;
1176     result->cursor_position = 0;
1177     result->display_size = 1000;
1178     return result;
1179     }
1180    
1181     psiconv_word_f psiconv_empty_word_f(void)
1182     {
1183     psiconv_word_f result;
1184     if (!(result = malloc(sizeof(*result))))
1185     goto ERROR1;
1186     if (!(result->page_sec = psiconv_empty_page_layout_section()))
1187     goto ERROR2;
1188     if (!(result->paragraphs = psiconv_empty_text_and_layout()))
1189     goto ERROR3;
1190     if (!(result->status_sec = psiconv_empty_word_status_section()))
1191     goto ERROR4;
1192     if (!(result->styles_sec = psiconv_empty_word_styles_section()))
1193     goto ERROR5;
1194     return result;
1195     ERROR5:
1196     psiconv_free_word_status_section(result->status_sec);
1197     ERROR4:
1198     psiconv_free_text_and_layout(result->paragraphs);
1199     ERROR3:
1200     psiconv_free_page_layout_section(result->page_sec);
1201     ERROR2:
1202     free(result);
1203     ERROR1:
1204     return NULL;
1205     }
1206    
1207 frodo 94 psiconv_sheet_status_section psiconv_empty_sheet_status_section(void)
1208     {
1209     psiconv_sheet_status_section result;
1210     if (!(result = malloc(sizeof(*result))))
1211     return NULL;
1212     result->show_horizontal_scrollbar = result->show_vertical_scrollbar =
1213     psiconv_triple_auto;
1214     result->show_graph = psiconv_bool_false;
1215     result->show_top_sheet_toolbar = result->show_side_sheet_toolbar =
1216     result->show_top_graph_toolbar = result->show_side_graph_toolbar =
1217     psiconv_bool_true;
1218     result->cursor_row = result->cursor_column = 0;
1219     result->sheet_display_size = result->graph_display_size = 1000;
1220     return result;
1221     }
1222    
1223 frodo 98 psiconv_formula_list psiconv_empty_formula_list(void)
1224 frodo 97 {
1225 frodo 98 return psiconv_list_new(sizeof(struct psiconv_formula_s));
1226 frodo 97 }
1227    
1228 frodo 95 psiconv_sheet_workbook_section psiconv_empty_sheet_workbook_section(void)
1229     {
1230     psiconv_sheet_workbook_section result;
1231     if (!(result = malloc(sizeof(*result))))
1232 frodo 97 goto ERROR1;
1233 frodo 98 if (!(result->formulas = psiconv_empty_formula_list()))
1234 frodo 97 goto ERROR2;
1235 frodo 95 return result;
1236 frodo 97 ERROR2:
1237     free(result);
1238     ERROR1:
1239     return NULL;
1240 frodo 95 }
1241    
1242 frodo 97
1243 frodo 94 psiconv_sheet_f psiconv_empty_sheet_f(void)
1244     {
1245     psiconv_sheet_f result;
1246     if (!(result = malloc(sizeof(*result))))
1247     goto ERROR1;
1248     if (!(result->page_sec = psiconv_empty_page_layout_section()))
1249     goto ERROR2;
1250     if (!(result->status_sec = psiconv_empty_sheet_status_section()))
1251     goto ERROR3;
1252 frodo 95 if (!(result->workbook_sec = psiconv_empty_sheet_workbook_section()))
1253     goto ERROR4;
1254 frodo 94 return result;
1255 frodo 95 ERROR4:
1256     psiconv_free_sheet_status_section(result->status_sec);
1257 frodo 94 ERROR3:
1258     psiconv_free_page_layout_section(result->page_sec);
1259     ERROR2:
1260     free(result);
1261     ERROR1:
1262     return NULL;
1263     }
1264    
1265 frodo 87 psiconv_texted_f psiconv_empty_texted_f(void)
1266     {
1267     psiconv_texted_f result;
1268     if (!(result = malloc(sizeof(*result))))
1269     goto ERROR1;
1270     if (!(result->page_sec = psiconv_empty_page_layout_section()))
1271     goto ERROR2;
1272     if (!(result->texted_sec = psiconv_empty_texted_section()))
1273     goto ERROR3;
1274     return result;
1275     ERROR3:
1276     psiconv_free_page_layout_section(result->page_sec);
1277     ERROR2:
1278     free(result);
1279     ERROR1:
1280     return NULL;
1281     }
1282    
1283     psiconv_paint_data_section psiconv_empty_paint_data_section(void)
1284     {
1285     psiconv_paint_data_section result;
1286     if (!(result = malloc(sizeof(*result))))
1287     goto ERROR1;
1288     /* Is this correct? */
1289     result->xsize = result->ysize = result->pic_xsize = result->pic_ysize = 0;
1290     /* Probably forbidden... */
1291     if (!(result->red = malloc(0)))
1292     goto ERROR2;
1293     if (!(result->green = malloc(0)))
1294     goto ERROR3;
1295     if (!(result->blue = malloc(0)))
1296     goto ERROR4;
1297     return result;
1298     ERROR4:
1299     free(result->green);
1300     ERROR3:
1301     free(result->red);
1302     ERROR2:
1303     free(result);
1304     ERROR1:
1305     return NULL;
1306     }
1307    
1308    
1309     psiconv_pictures psiconv_empty_pictures(void)
1310     {
1311     psiconv_pictures result;
1312     psiconv_paint_data_section pds;
1313     if (!(result = psiconv_list_new(sizeof(struct psiconv_paint_data_section_s))))
1314     goto ERROR1;
1315     if (!(pds = psiconv_empty_paint_data_section()))
1316     goto ERROR2;
1317     if (psiconv_list_add(result,pds))
1318     goto ERROR3;
1319     free(pds);
1320     return result;
1321     ERROR3:
1322     psiconv_free_paint_data_section(pds);
1323     ERROR2:
1324     psiconv_list_free(result);
1325     ERROR1:
1326     return NULL;
1327     }
1328    
1329     psiconv_mbm_f psiconv_empty_mbm_f(void)
1330     {
1331     psiconv_mbm_f result;
1332     if (!(result = malloc(sizeof(*result))))
1333     goto ERROR1;
1334     if (!(result->sections = psiconv_empty_pictures()))
1335     goto ERROR2;
1336     return result;
1337     ERROR2:
1338     free(result);
1339     ERROR1:
1340     return NULL;
1341     }
1342    
1343     psiconv_sketch_section psiconv_empty_sketch_section(void)
1344     {
1345     psiconv_sketch_section result;
1346     if (!(result = malloc(sizeof(*result))))
1347     goto ERROR1;
1348 frodo 163 result->displayed_xsize = 320;
1349     result->displayed_ysize = 200;
1350     result->picture_data_x_offset = result->picture_data_y_offset =
1351     result->form_xsize = result->form_ysize =
1352     result->displayed_size_x_offset = result->displayed_size_y_offset = 0;
1353 frodo 87 result->magnification_x = result->magnification_y = 1.0;
1354     result->cut_left = result->cut_right = result->cut_top =
1355     result->cut_bottom = 0.0;
1356     if (!(result->picture = psiconv_empty_paint_data_section()))
1357     goto ERROR2;
1358     return result;
1359     ERROR2:
1360     free(result);
1361     ERROR1:
1362     return NULL;
1363     }
1364    
1365     psiconv_sketch_f psiconv_empty_sketch_f(void)
1366     {
1367     psiconv_sketch_f result;
1368     if (!(result = malloc(sizeof(*result))))
1369     goto ERROR1;
1370     if (!(result->sketch_sec = psiconv_empty_sketch_section()))
1371     goto ERROR2;
1372     return result;
1373     ERROR2:
1374     free(result);
1375     ERROR1:
1376     return NULL;
1377     }
1378    
1379     psiconv_cliparts psiconv_empty_cliparts(void)
1380     {
1381     /* Is this correct? */
1382     return psiconv_list_new(sizeof(struct psiconv_clipart_section_s));
1383     }
1384    
1385     psiconv_clipart_f psiconv_empty_clipart_f(void)
1386     {
1387     psiconv_clipart_f result;
1388     if (!(result = malloc(sizeof(*result))))
1389     goto ERROR1;
1390     if (!(result->sections = psiconv_empty_cliparts()))
1391     goto ERROR2;
1392     return result;
1393     ERROR2:
1394     free(result);
1395     ERROR1:
1396     return NULL;
1397     }
1398    
1399     psiconv_file psiconv_empty_file(psiconv_file_type_t type)
1400     {
1401     psiconv_file result;
1402     if (!(result = malloc(sizeof(*result))))
1403     return NULL;
1404     result->type = type;
1405     if (type == psiconv_word_file) {
1406     if (!(result->file = psiconv_empty_word_f()))
1407     goto ERROR;
1408 frodo 94 } else if (type == psiconv_sheet_file) {
1409     if (!(result->file = psiconv_empty_sheet_f()))
1410     goto ERROR;
1411 frodo 87 } else if (type == psiconv_texted_file) {
1412     if (!(result->file = psiconv_empty_texted_f()))
1413     goto ERROR;
1414     } else if (type == psiconv_mbm_file) {
1415     if (!(result->file = psiconv_empty_mbm_f()))
1416     goto ERROR;
1417     } else if (type == psiconv_sketch_file) {
1418     if (!(result->file = psiconv_empty_sketch_f()))
1419     goto ERROR;
1420     } else if (type == psiconv_clipart_file) {
1421     if (!(result->file = psiconv_empty_clipart_f()))
1422     goto ERROR;
1423     } else
1424     goto ERROR;
1425     return result;
1426     ERROR:
1427     free(result);
1428     return NULL;
1429     }

frodo@frodo.looijaard.name
ViewVC Help
Powered by ViewVC 1.1.26