/[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 142 - (hide annotations)
Tue Jan 29 18:38:38 2002 UTC (22 years, 2 months ago) by frodo
File MIME type: text/plain
File size: 38841 byte(s)
(Frodo) DMALLOC support

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     }
448     }
449    
450     void psiconv_free_header_section(psiconv_header_section header)
451     {
452     if (header)
453     free(header);
454     }
455    
456     void psiconv_free_section_table_entry(psiconv_section_table_entry entry)
457     {
458     if (entry)
459     free(entry);
460     }
461    
462     void psiconv_free_section_table_section(psiconv_section_table_section section)
463     {
464     if (section)
465     psiconv_list_free(section);
466     }
467    
468     void psiconv_free_application_id_section(psiconv_application_id_section section)
469     {
470     if (section) {
471     if (section->name)
472     free(section->name);
473     free(section);
474     }
475     }
476    
477     void psiconv_free_in_line_layout_aux(void * layout)
478     {
479     psiconv_free_character_layout(((psiconv_in_line_layout) layout)->layout);
480     }
481    
482     void psiconv_free_in_line_layout(psiconv_in_line_layout layout)
483     {
484     if (layout) {
485     psiconv_free_in_line_layout_aux(layout);
486     free(layout);
487     }
488     }
489    
490     void psiconv_free_in_line_layouts(psiconv_in_line_layouts layouts)
491     {
492     if (layouts)
493     psiconv_list_free_el(layouts,&psiconv_free_in_line_layout_aux);
494     }
495    
496     void psiconv_free_replacement(psiconv_replacement replacement)
497     {
498     if (replacement)
499     free(replacement);
500     }
501    
502     void psiconv_free_replacements(psiconv_replacements replacements)
503     {
504     if (replacements)
505     psiconv_list_free(replacements);
506     }
507    
508     void psiconv_free_paragraph_aux(void * paragraph)
509     {
510     if(((psiconv_paragraph) paragraph)->text)
511     free(((psiconv_paragraph) paragraph)->text);
512     psiconv_free_character_layout(((psiconv_paragraph) paragraph)
513     ->base_character);
514     psiconv_free_paragraph_layout(((psiconv_paragraph) paragraph)
515     ->base_paragraph);
516     psiconv_free_in_line_layouts(((psiconv_paragraph) paragraph)
517     ->in_lines);
518     psiconv_free_replacements(((psiconv_paragraph) paragraph)
519     ->replacements);
520     }
521    
522     void psiconv_free_paragraph(psiconv_paragraph paragraph)
523     {
524     if (paragraph) {
525     psiconv_free_paragraph_aux(paragraph);
526     free(paragraph);
527     }
528     }
529    
530     void psiconv_free_text_and_layout(psiconv_text_and_layout text)
531     {
532     if (text)
533     psiconv_list_free_el(text,&psiconv_free_paragraph_aux);
534     }
535    
536     void psiconv_free_texted_section(psiconv_texted_section section)
537     {
538     if (section) {
539     psiconv_free_text_and_layout(section->paragraphs);
540     free(section);
541     }
542     }
543    
544     void psiconv_free_page_header(psiconv_page_header header)
545     {
546     if (header) {
547     psiconv_free_character_layout(header->base_character_layout);
548     psiconv_free_paragraph_layout(header->base_paragraph_layout);
549     psiconv_free_texted_section(header->text);
550     free(header);
551     }
552     }
553    
554     void psiconv_free_page_layout_section(psiconv_page_layout_section section)
555     {
556     if (section) {
557     psiconv_free_page_header(section->header);
558     psiconv_free_page_header(section->footer);
559     free(section);
560     }
561     }
562    
563     void psiconv_free_word_status_section(psiconv_word_status_section section)
564     {
565     if (section)
566     free(section);
567     }
568    
569     void psiconv_free_word_f(psiconv_word_f file)
570     {
571     if (file) {
572     psiconv_free_page_layout_section(file->page_sec);
573     psiconv_free_text_and_layout(file->paragraphs);
574     psiconv_free_word_status_section(file->status_sec);
575     psiconv_free_word_styles_section(file->styles_sec);
576     free(file);
577     }
578     }
579    
580 frodo 94 void psiconv_free_sheet_status_section(psiconv_sheet_status_section section)
581     {
582     if (section)
583     free(section);
584     }
585    
586 frodo 111 void psiconv_free_sheet_numberformat(psiconv_sheet_numberformat numberformat)
587 frodo 110 {
588     if (numberformat)
589     free(numberformat);
590     }
591    
592 frodo 111 void psiconv_free_sheet_cell_layout(psiconv_sheet_cell_layout layout)
593     {
594     psiconv_free_paragraph_layout(layout->paragraph);
595     psiconv_free_character_layout(layout->character);
596     psiconv_free_sheet_numberformat(layout->numberformat);
597     }
598    
599 frodo 121 void psiconv_free_sheet_cell_aux(void *cell)
600     {
601     psiconv_sheet_cell data = cell;
602    
603     psiconv_free_sheet_cell_layout(data->layout);
604    
605     if ((data->type == psiconv_cell_string) && (data->data.dat_string))
606     free(data->data.dat_string);
607     }
608    
609 frodo 110 void psiconv_free_sheet_cell(psiconv_sheet_cell cell)
610     {
611     if (cell) {
612 frodo 121 psiconv_free_sheet_cell_aux(cell);
613 frodo 111 free(cell);
614 frodo 110 }
615     }
616    
617     void psiconv_free_sheet_cell_list(psiconv_sheet_cell_list list)
618     {
619     if (list)
620     psiconv_list_free_el(list,psiconv_free_sheet_cell_aux);
621     }
622    
623 frodo 128 void psiconv_free_sheet_line_aux(void *line)
624     {
625     psiconv_sheet_line data = line;
626    
627     psiconv_free_sheet_cell_layout(data->layout);
628     }
629    
630     void psiconv_free_sheet_line(psiconv_sheet_line line)
631     {
632     if (line) {
633     psiconv_free_sheet_line_aux(line);
634     free(line);
635     }
636     }
637    
638 frodo 134
639 frodo 128 void psiconv_free_sheet_line_list(psiconv_sheet_line_list list)
640     {
641     if (list)
642     psiconv_list_free_el(list,psiconv_free_sheet_line_aux);
643     }
644    
645 frodo 134 void psiconv_free_sheet_grid_break_list(psiconv_sheet_grid_break_list list)
646     {
647     if (list)
648     psiconv_list_free(list);
649     }
650    
651     void psiconv_free_sheet_grid_size(psiconv_sheet_grid_size s)
652     {
653     if (s)
654     free(s);
655     }
656    
657     void psiconv_free_sheet_grid_size_list(psiconv_sheet_grid_size_list list)
658     {
659     if (list)
660     psiconv_list_free(list);
661     }
662    
663     void psiconv_free_sheet_grid_section(psiconv_sheet_grid_section sec)
664     {
665     if (sec) {
666     psiconv_free_sheet_grid_size_list(sec->row_heights);
667     psiconv_free_sheet_grid_size_list(sec->column_heights);
668     psiconv_free_sheet_grid_break_list(sec->row_page_breaks);
669     psiconv_free_sheet_grid_break_list(sec->column_page_breaks);
670     free(sec);
671     }
672     }
673    
674 frodo 111 void psiconv_free_sheet_worksheet_aux (void *data)
675 frodo 110 {
676 frodo 111 psiconv_sheet_worksheet section = data;
677     psiconv_free_sheet_cell_layout(section->default_layout);
678     psiconv_free_sheet_cell_list(section->cells);
679 frodo 128 psiconv_free_sheet_line_list(section->row_default_layouts);
680     psiconv_free_sheet_line_list(section->col_default_layouts);
681 frodo 134 psiconv_free_sheet_grid_section(section->grid);
682 frodo 111 }
683    
684     void psiconv_free_sheet_worksheet(psiconv_sheet_worksheet sheet)
685     {
686     if (sheet) {
687     psiconv_free_sheet_worksheet_aux(sheet);
688     free(sheet);
689 frodo 110 }
690     }
691    
692 frodo 111 void psiconv_free_sheet_worksheet_list(psiconv_sheet_worksheet_list list)
693     {
694     if (list)
695     psiconv_list_free_el(list,psiconv_free_sheet_worksheet_aux);
696     }
697    
698 frodo 99 void psiconv_free_formula_aux(void *data)
699     {
700     psiconv_formula formula;
701     formula = data;
702     if (formula->type == psiconv_formula_dat_string)
703     free(formula->data.dat_string);
704     else if ((formula->type != psiconv_formula_dat_int) &&
705     (formula->type != psiconv_formula_dat_var) &&
706     (formula->type != psiconv_formula_dat_float) &&
707     (formula->type != psiconv_formula_dat_cellref) &&
708     (formula->type != psiconv_formula_dat_cellblock) &&
709     (formula->type != psiconv_formula_dat_vcellblock) &&
710     (formula->type != psiconv_formula_mark_opsep) &&
711     (formula->type != psiconv_formula_mark_opend) &&
712     (formula->type != psiconv_formula_mark_eof) &&
713     (formula->type != psiconv_formula_unknown))
714     psiconv_free_formula_list(formula->data.fun_operands);
715     }
716    
717 frodo 98 void psiconv_free_formula(psiconv_formula formula)
718 frodo 97 {
719 frodo 99 if (formula) {
720     psiconv_free_formula_aux(formula);
721 frodo 97 free(formula);
722 frodo 99 }
723 frodo 97 }
724    
725 frodo 98 void psiconv_free_formula_list(psiconv_formula_list list)
726 frodo 97 {
727 frodo 99 if (list)
728     psiconv_list_free_el(list,psiconv_free_formula_aux);
729 frodo 97 }
730    
731 frodo 129 void psiconv_free_sheet_name_section(psiconv_sheet_name_section section)
732     {
733     if (section) {
734     if(section->name)
735     free(section->name);
736     free(section);
737     }
738     }
739    
740     void psiconv_free_sheet_info_section(psiconv_sheet_info_section section)
741     {
742     if (section) {
743     free(section);
744     }
745     }
746    
747     void psiconv_free_sheet_variable_aux(void * variable)
748     {
749     psiconv_sheet_variable var = variable;
750     if (var->name)
751     free(var->name);
752     if (var->type == psiconv_var_string)
753     free(var->data.dat_string);
754     }
755    
756     void psiconv_free_sheet_variable(psiconv_sheet_variable var)
757     {
758     if (var) {
759     psiconv_free_sheet_variable_aux(var);
760     free(var);
761     }
762     }
763    
764     void psiconv_free_sheet_variable_list(psiconv_sheet_variable_list list)
765     {
766     if (list)
767     psiconv_list_free_el(list,psiconv_free_sheet_variable_aux);
768     }
769    
770 frodo 95 void psiconv_free_sheet_workbook_section(psiconv_sheet_workbook_section section)
771     {
772 frodo 97 if (section) {
773 frodo 98 psiconv_free_formula_list(section->formulas);
774 frodo 121 psiconv_free_sheet_worksheet_list(section->worksheets);
775 frodo 129 psiconv_free_sheet_name_section(section->name);
776     psiconv_free_sheet_info_section(section->info);
777     psiconv_free_sheet_variable_list(section->variables);
778 frodo 95 free(section);
779 frodo 97 }
780 frodo 95 }
781    
782 frodo 94 void psiconv_free_sheet_f(psiconv_sheet_f file)
783     {
784     if (file) {
785     psiconv_free_page_layout_section(file->page_sec);
786     psiconv_free_sheet_status_section(file->status_sec);
787 frodo 95 psiconv_free_sheet_workbook_section(file->workbook_sec);
788 frodo 94 free(file);
789     }
790     }
791    
792 frodo 12 void psiconv_free_texted_f(psiconv_texted_f file)
793     {
794     if (file) {
795     psiconv_free_page_layout_section(file->page_sec);
796     psiconv_free_texted_section(file->texted_sec);
797     free(file);
798     }
799     }
800    
801     void psiconv_free_paint_data_section_aux(void * section)
802     {
803     if (((psiconv_paint_data_section) section)->red)
804     free(((psiconv_paint_data_section)section) -> red);
805     if (((psiconv_paint_data_section) section)->green)
806     free(((psiconv_paint_data_section)section) -> green);
807     if (((psiconv_paint_data_section) section)->blue)
808     free(((psiconv_paint_data_section)section) -> blue);
809     }
810    
811     void psiconv_free_paint_data_section(psiconv_paint_data_section section)
812     {
813     if (section) {
814     psiconv_free_paint_data_section_aux(section);
815     free(section);
816     }
817     }
818    
819     void psiconv_free_pictures(psiconv_pictures section)
820     {
821     if (section)
822     psiconv_list_free_el(section,&psiconv_free_paint_data_section_aux);
823     }
824    
825 frodo 42 void psiconv_free_jumptable_section (psiconv_jumptable_section section)
826 frodo 13 {
827     if (section)
828     psiconv_list_free(section);
829     }
830    
831 frodo 12 void psiconv_free_mbm_f(psiconv_mbm_f file)
832     {
833     if (file) {
834     psiconv_free_pictures(file->sections);
835     free(file);
836     }
837     }
838    
839 frodo 24 void psiconv_free_sketch_section(psiconv_sketch_section sec)
840     {
841     if (sec) {
842     psiconv_free_paint_data_section(sec->picture);
843     free(sec);
844     }
845     }
846    
847     void psiconv_free_sketch_f(psiconv_sketch_f file)
848     {
849     if (file) {
850     psiconv_free_sketch_section(file->sketch_sec);
851     free(file);
852     }
853     }
854    
855 frodo 42 void psiconv_free_clipart_section_aux(void *section)
856 frodo 41 {
857     if (section)
858 frodo 42 free(((psiconv_clipart_section ) section)->picture);
859 frodo 41 }
860    
861     void psiconv_free_clipart_section(psiconv_clipart_section section)
862     {
863     if (section) {
864     psiconv_free_clipart_section_aux(section);
865     free(section);
866     }
867     }
868    
869     void psiconv_free_cliparts(psiconv_cliparts section)
870     {
871     if (section)
872     psiconv_list_free_el(section,&psiconv_free_clipart_section_aux);
873     }
874    
875     void psiconv_free_clipart_f(psiconv_clipart_f file)
876     {
877     if (file) {
878     psiconv_free_cliparts(file->sections);
879     free(file);
880     }
881     }
882    
883 frodo 2 void psiconv_free_file(psiconv_file file)
884     {
885     if (file) {
886     if (file->type == psiconv_word_file)
887     psiconv_free_word_f((psiconv_word_f) file->file);
888 frodo 12 else if (file->type == psiconv_texted_file)
889     psiconv_free_texted_f((psiconv_texted_f) file->file);
890     else if (file->type == psiconv_mbm_file)
891     psiconv_free_mbm_f((psiconv_mbm_f) file->file);
892 frodo 24 else if (file->type == psiconv_sketch_file)
893     psiconv_free_sketch_f((psiconv_sketch_f) file->file);
894 frodo 41 else if (file->type == psiconv_clipart_file)
895 frodo 42 psiconv_free_clipart_f((psiconv_clipart_f) file->file);
896 frodo 94 else if (file->type == psiconv_sheet_file)
897     psiconv_free_sheet_f((psiconv_sheet_f) file->file);
898 frodo 2 free(file);
899     }
900     }
901 frodo 78
902     int psiconv_compare_color(const psiconv_color value1,
903     const psiconv_color value2)
904     {
905     if (!value1 || !value2)
906     return 1;
907     if ((value1->red == value2->red) &&
908     (value1->green == value2->green) &&
909     (value1->blue == value2->blue))
910     return 0;
911     else
912     return 1;
913     }
914    
915     int psiconv_compare_font(const psiconv_font value1,
916     const psiconv_font value2)
917     {
918     if (!value1 || !value2 || !value1->name || !value2->name)
919     return 1;
920     if ((value1->screenfont == value2->screenfont) &&
921     !strcmp(value1->name,value2->name))
922     return 0;
923     else
924     return 1;
925     }
926    
927     int psiconv_compare_border(const psiconv_border value1,
928     const psiconv_border value2)
929     {
930     if (!value1 || !value2)
931     return 1;
932     if ((value1->kind == value2->kind) &&
933     (value1->thickness == value2->thickness) &&
934     !psiconv_compare_color(value1->color,value2->color))
935     return 0;
936     else
937     return 1;
938     }
939    
940     int psiconv_compare_bullet(const psiconv_bullet value1,
941     const psiconv_bullet value2)
942     {
943     if (!value1 || !value2)
944     return 1;
945     if ((value1->on == value2->on) &&
946     (value1->font_size == value2->font_size) &&
947     (value1->character == value2->character) &&
948     (value1->indent == value2->indent) &&
949     !psiconv_compare_color(value1->color,value2->color) &&
950     !psiconv_compare_font(value1->font,value2->font))
951     return 0;
952     else
953     return 1;
954     }
955    
956     int psiconv_compare_tab(const psiconv_tab value1, const psiconv_tab value2)
957     {
958     if (!value1 || !value2)
959     return 1;
960     if ((value1->location == value2->location) &&
961     (value1->kind == value2->kind))
962     return 0;
963     else
964     return 1;
965     }
966    
967     int psiconv_compare_all_tabs(const psiconv_all_tabs value1,
968     const psiconv_all_tabs value2)
969     {
970     int i;
971    
972     if (!value1 || !value2 || !value1->extras || !value2->extras)
973     return 1;
974    
975     if ((value1->normal != value2->normal) ||
976     psiconv_list_length(value1->extras) !=
977     psiconv_list_length(value2->extras))
978     return 1;
979     for (i = 0; i < psiconv_list_length(value1->extras); i++)
980     if (psiconv_compare_tab(psiconv_list_get(value1->extras,i),
981     psiconv_list_get(value2->extras,i)))
982    
983     return 1;
984     return 0;
985     }
986    
987     int psiconv_compare_paragraph_layout(const psiconv_paragraph_layout value1,
988     const psiconv_paragraph_layout value2)
989     {
990     if (!value1 || !value2)
991     return 1;
992     if ((value1->indent_left == value2->indent_left) &&
993     (value1->indent_right == value2->indent_right) &&
994     (value1->indent_first == value2->indent_first) &&
995     (value1->justify_hor == value2->justify_hor) &&
996     (value1->justify_ver == value2->justify_ver) &&
997     (value1->linespacing == value2->linespacing) &&
998     (value1->space_above == value2->space_above) &&
999     (value1->space_below == value2->space_below) &&
1000     (value1->keep_together == value2->keep_together) &&
1001     (value1->keep_with_next == value2->keep_with_next) &&
1002     (value1->on_next_page == value2->on_next_page) &&
1003     (value1->no_widow_protection == value2->no_widow_protection) &&
1004     (value1->border_distance == value2->border_distance) &&
1005     !psiconv_compare_color(value1->back_color,value2->back_color) &&
1006     !psiconv_compare_bullet(value1->bullet,value2->bullet) &&
1007     !psiconv_compare_border(value1->left_border,value2->left_border) &&
1008     !psiconv_compare_border(value1->right_border,value2->right_border) &&
1009     !psiconv_compare_border(value1->top_border,value2->top_border) &&
1010     !psiconv_compare_border(value1->bottom_border,value2->bottom_border) &&
1011     !psiconv_compare_all_tabs(value1->tabs,value2->tabs))
1012     return 0;
1013     else
1014     return 1;
1015     }
1016    
1017    
1018     int psiconv_compare_character_layout(const psiconv_character_layout value1,
1019     const psiconv_character_layout value2)
1020     {
1021     if (!value1 || !value2)
1022     return 1;
1023     if ((value1->font_size == value2->font_size) &&
1024     (value1->italic == value2->italic) &&
1025     (value1->bold == value2->bold) &&
1026     (value1->super_sub == value2->super_sub) &&
1027     (value1->underline == value2->underline) &&
1028     (value1->strikethrough == value2->strikethrough) &&
1029     !psiconv_compare_color(value1->color,value2->color) &&
1030     !psiconv_compare_color(value1->back_color,value2->back_color) &&
1031     !psiconv_compare_font(value1->font,value2->font))
1032     return 0;
1033     else
1034     return 1;
1035     }
1036 frodo 87
1037    
1038    
1039     psiconv_word_styles_section psiconv_empty_word_styles_section(void)
1040     {
1041     psiconv_word_styles_section result;
1042     if (!(result = malloc(sizeof(*result))))
1043     goto ERROR1;
1044     if (!(result->styles = psiconv_list_new(sizeof(struct psiconv_word_style_s))))
1045     goto ERROR2;
1046     if (!(result->normal = malloc(sizeof(struct psiconv_word_style_s))))
1047     goto ERROR3;
1048     if (!(result->normal->character = psiconv_basic_character_layout()))
1049     goto ERROR4;
1050     if (!(result->normal->paragraph = psiconv_basic_paragraph_layout()))
1051     goto ERROR5;
1052     result->normal->hotkey = 'N';
1053     result->normal->name = NULL;
1054     result->normal->built_in = psiconv_bool_true;
1055     result->normal->outline_level = 0;
1056     return result;
1057     ERROR5:
1058     psiconv_free_character_layout(result->normal->character);
1059     ERROR4:
1060     free(result->normal);
1061     ERROR3:
1062     psiconv_list_free(result->styles);
1063     ERROR2:
1064     free(result);
1065     ERROR1:
1066     return NULL;
1067     }
1068    
1069     psiconv_text_and_layout psiconv_empty_text_and_layout(void)
1070     {
1071     return psiconv_list_new(sizeof(struct psiconv_paragraph_s));
1072     }
1073    
1074     psiconv_texted_section psiconv_empty_texted_section(void)
1075     {
1076     psiconv_texted_section result;
1077     if (!(result = malloc(sizeof(*result))))
1078     goto ERROR1;
1079     if (!(result->paragraphs = psiconv_empty_text_and_layout()))
1080     goto ERROR2;
1081     return result;
1082     ERROR2:
1083     free(result);
1084     ERROR1:
1085     return NULL;
1086     }
1087    
1088     psiconv_page_header psiconv_empty_page_header(void)
1089     {
1090     psiconv_page_header result;
1091     if (!(result = malloc(sizeof(*result))))
1092     goto ERROR1;
1093     result->on_first_page = psiconv_bool_true;
1094     if (!(result->base_paragraph_layout = psiconv_basic_paragraph_layout()))
1095     goto ERROR2;
1096     if (!(result->base_character_layout = psiconv_basic_character_layout()))
1097     goto ERROR3;
1098     if (!(result->text = psiconv_empty_texted_section()))
1099     goto ERROR4;
1100     return result;
1101     ERROR4:
1102     psiconv_free_character_layout(result->base_character_layout);
1103     ERROR3:
1104     psiconv_free_paragraph_layout(result->base_paragraph_layout);
1105     ERROR2:
1106     free(result);
1107     ERROR1:
1108     return NULL;
1109     }
1110    
1111     psiconv_page_layout_section psiconv_empty_page_layout_section(void)
1112     {
1113     psiconv_page_layout_section result;
1114     if (!(result = malloc(sizeof(*result))))
1115     goto ERROR1;
1116 frodo 88 result->first_page_nr = 1;
1117 frodo 87 result->header_dist = result->footer_dist = 1.27;
1118     result->left_margin = result->right_margin = 3.175;
1119     result->top_margin = result->bottom_margin = 2.54;
1120     result->page_width = 21.0;
1121     result->page_height = 29.7;
1122     result->landscape = psiconv_bool_false;
1123     if (!(result->header = psiconv_empty_page_header()))
1124     goto ERROR2;
1125     if (!(result->footer = psiconv_empty_page_header()))
1126     goto ERROR3;
1127     return result;
1128     ERROR3:
1129     psiconv_free_page_header(result->header);
1130     ERROR2:
1131     free(result);
1132     ERROR1:
1133     return NULL;
1134     }
1135    
1136     psiconv_word_status_section psiconv_empty_word_status_section(void)
1137     {
1138     psiconv_word_status_section result;
1139     if (!(result = malloc(sizeof(*result))))
1140     return NULL;
1141     result->show_tabs = result->show_spaces = result->show_paragraph_ends =
1142     result->show_hard_minus = result->show_hard_space =
1143     result->fit_lines_to_screen = psiconv_bool_false;
1144     result->show_full_pictures = result->show_full_graphs =
1145     result->show_top_toolbar = result->show_side_toolbar =
1146     psiconv_bool_true;
1147     result->cursor_position = 0;
1148     result->display_size = 1000;
1149     return result;
1150     }
1151    
1152     psiconv_word_f psiconv_empty_word_f(void)
1153     {
1154     psiconv_word_f result;
1155     if (!(result = malloc(sizeof(*result))))
1156     goto ERROR1;
1157     if (!(result->page_sec = psiconv_empty_page_layout_section()))
1158     goto ERROR2;
1159     if (!(result->paragraphs = psiconv_empty_text_and_layout()))
1160     goto ERROR3;
1161     if (!(result->status_sec = psiconv_empty_word_status_section()))
1162     goto ERROR4;
1163     if (!(result->styles_sec = psiconv_empty_word_styles_section()))
1164     goto ERROR5;
1165     return result;
1166     ERROR5:
1167     psiconv_free_word_status_section(result->status_sec);
1168     ERROR4:
1169     psiconv_free_text_and_layout(result->paragraphs);
1170     ERROR3:
1171     psiconv_free_page_layout_section(result->page_sec);
1172     ERROR2:
1173     free(result);
1174     ERROR1:
1175     return NULL;
1176     }
1177    
1178 frodo 94 psiconv_sheet_status_section psiconv_empty_sheet_status_section(void)
1179     {
1180     psiconv_sheet_status_section result;
1181     if (!(result = malloc(sizeof(*result))))
1182     return NULL;
1183     result->show_horizontal_scrollbar = result->show_vertical_scrollbar =
1184     psiconv_triple_auto;
1185     result->show_graph = psiconv_bool_false;
1186     result->show_top_sheet_toolbar = result->show_side_sheet_toolbar =
1187     result->show_top_graph_toolbar = result->show_side_graph_toolbar =
1188     psiconv_bool_true;
1189     result->cursor_row = result->cursor_column = 0;
1190     result->sheet_display_size = result->graph_display_size = 1000;
1191     return result;
1192     }
1193    
1194 frodo 98 psiconv_formula_list psiconv_empty_formula_list(void)
1195 frodo 97 {
1196 frodo 98 return psiconv_list_new(sizeof(struct psiconv_formula_s));
1197 frodo 97 }
1198    
1199 frodo 95 psiconv_sheet_workbook_section psiconv_empty_sheet_workbook_section(void)
1200     {
1201     psiconv_sheet_workbook_section result;
1202     if (!(result = malloc(sizeof(*result))))
1203 frodo 97 goto ERROR1;
1204 frodo 98 if (!(result->formulas = psiconv_empty_formula_list()))
1205 frodo 97 goto ERROR2;
1206 frodo 95 return result;
1207 frodo 97 ERROR2:
1208     free(result);
1209     ERROR1:
1210     return NULL;
1211 frodo 95 }
1212    
1213 frodo 97
1214 frodo 94 psiconv_sheet_f psiconv_empty_sheet_f(void)
1215     {
1216     psiconv_sheet_f result;
1217     if (!(result = malloc(sizeof(*result))))
1218     goto ERROR1;
1219     if (!(result->page_sec = psiconv_empty_page_layout_section()))
1220     goto ERROR2;
1221     if (!(result->status_sec = psiconv_empty_sheet_status_section()))
1222     goto ERROR3;
1223 frodo 95 if (!(result->workbook_sec = psiconv_empty_sheet_workbook_section()))
1224     goto ERROR4;
1225 frodo 94 return result;
1226 frodo 95 ERROR4:
1227     psiconv_free_sheet_status_section(result->status_sec);
1228 frodo 94 ERROR3:
1229     psiconv_free_page_layout_section(result->page_sec);
1230     ERROR2:
1231     free(result);
1232     ERROR1:
1233     return NULL;
1234     }
1235    
1236 frodo 87 psiconv_texted_f psiconv_empty_texted_f(void)
1237     {
1238     psiconv_texted_f result;
1239     if (!(result = malloc(sizeof(*result))))
1240     goto ERROR1;
1241     if (!(result->page_sec = psiconv_empty_page_layout_section()))
1242     goto ERROR2;
1243     if (!(result->texted_sec = psiconv_empty_texted_section()))
1244     goto ERROR3;
1245     return result;
1246     ERROR3:
1247     psiconv_free_page_layout_section(result->page_sec);
1248     ERROR2:
1249     free(result);
1250     ERROR1:
1251     return NULL;
1252     }
1253    
1254     psiconv_paint_data_section psiconv_empty_paint_data_section(void)
1255     {
1256     psiconv_paint_data_section result;
1257     if (!(result = malloc(sizeof(*result))))
1258     goto ERROR1;
1259     /* Is this correct? */
1260     result->xsize = result->ysize = result->pic_xsize = result->pic_ysize = 0;
1261     /* Probably forbidden... */
1262     if (!(result->red = malloc(0)))
1263     goto ERROR2;
1264     if (!(result->green = malloc(0)))
1265     goto ERROR3;
1266     if (!(result->blue = malloc(0)))
1267     goto ERROR4;
1268     return result;
1269     ERROR4:
1270     free(result->green);
1271     ERROR3:
1272     free(result->red);
1273     ERROR2:
1274     free(result);
1275     ERROR1:
1276     return NULL;
1277     }
1278    
1279    
1280     psiconv_pictures psiconv_empty_pictures(void)
1281     {
1282     psiconv_pictures result;
1283     psiconv_paint_data_section pds;
1284     if (!(result = psiconv_list_new(sizeof(struct psiconv_paint_data_section_s))))
1285     goto ERROR1;
1286     if (!(pds = psiconv_empty_paint_data_section()))
1287     goto ERROR2;
1288     if (psiconv_list_add(result,pds))
1289     goto ERROR3;
1290     free(pds);
1291     return result;
1292     ERROR3:
1293     psiconv_free_paint_data_section(pds);
1294     ERROR2:
1295     psiconv_list_free(result);
1296     ERROR1:
1297     return NULL;
1298     }
1299    
1300     psiconv_mbm_f psiconv_empty_mbm_f(void)
1301     {
1302     psiconv_mbm_f result;
1303     if (!(result = malloc(sizeof(*result))))
1304     goto ERROR1;
1305     if (!(result->sections = psiconv_empty_pictures()))
1306     goto ERROR2;
1307     return result;
1308     ERROR2:
1309     free(result);
1310     ERROR1:
1311     return NULL;
1312     }
1313    
1314     psiconv_sketch_section psiconv_empty_sketch_section(void)
1315     {
1316     psiconv_sketch_section result;
1317     if (!(result = malloc(sizeof(*result))))
1318     goto ERROR1;
1319     result->form_xsize = 320;
1320     result->form_ysize = 200;
1321     result->picture_x_offset = result->picture_y_offset = result->picture_xsize =
1322     result->picture_ysize = 0;
1323     result->magnification_x = result->magnification_y = 1.0;
1324     result->cut_left = result->cut_right = result->cut_top =
1325     result->cut_bottom = 0.0;
1326     if (!(result->picture = psiconv_empty_paint_data_section()))
1327     goto ERROR2;
1328     return result;
1329     ERROR2:
1330     free(result);
1331     ERROR1:
1332     return NULL;
1333     }
1334    
1335     psiconv_sketch_f psiconv_empty_sketch_f(void)
1336     {
1337     psiconv_sketch_f result;
1338     if (!(result = malloc(sizeof(*result))))
1339     goto ERROR1;
1340     if (!(result->sketch_sec = psiconv_empty_sketch_section()))
1341     goto ERROR2;
1342     return result;
1343     ERROR2:
1344     free(result);
1345     ERROR1:
1346     return NULL;
1347     }
1348    
1349     psiconv_cliparts psiconv_empty_cliparts(void)
1350     {
1351     /* Is this correct? */
1352     return psiconv_list_new(sizeof(struct psiconv_clipart_section_s));
1353     }
1354    
1355     psiconv_clipart_f psiconv_empty_clipart_f(void)
1356     {
1357     psiconv_clipart_f result;
1358     if (!(result = malloc(sizeof(*result))))
1359     goto ERROR1;
1360     if (!(result->sections = psiconv_empty_cliparts()))
1361     goto ERROR2;
1362     return result;
1363     ERROR2:
1364     free(result);
1365     ERROR1:
1366     return NULL;
1367     }
1368    
1369     psiconv_file psiconv_empty_file(psiconv_file_type_t type)
1370     {
1371     psiconv_file result;
1372     if (!(result = malloc(sizeof(*result))))
1373     return NULL;
1374     result->type = type;
1375     if (type == psiconv_word_file) {
1376     if (!(result->file = psiconv_empty_word_f()))
1377     goto ERROR;
1378 frodo 94 } else if (type == psiconv_sheet_file) {
1379     if (!(result->file = psiconv_empty_sheet_f()))
1380     goto ERROR;
1381 frodo 87 } else if (type == psiconv_texted_file) {
1382     if (!(result->file = psiconv_empty_texted_f()))
1383     goto ERROR;
1384     } else if (type == psiconv_mbm_file) {
1385     if (!(result->file = psiconv_empty_mbm_f()))
1386     goto ERROR;
1387     } else if (type == psiconv_sketch_file) {
1388     if (!(result->file = psiconv_empty_sketch_f()))
1389     goto ERROR;
1390     } else if (type == psiconv_clipart_file) {
1391     if (!(result->file = psiconv_empty_clipart_f()))
1392     goto ERROR;
1393     } else
1394     goto ERROR;
1395     return result;
1396     ERROR:
1397     free(result);
1398     return NULL;
1399     }

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