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

Diff of /psiconv/trunk/lib/psiconv/data.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 43 Revision 239
1/* 1/*
2 data.h - Part of psiconv, a PSION 5 file formats converter 2 data.h - Part of psiconv, a PSION 5 file formats converter
3 Copyright (c) 1999 Frodo Looijaard <frodol@dds.nl> 3 Copyright (c) 1999-2004 Frodo Looijaard <frodol@dds.nl>
4 4
5 This program is free software; you can redistribute it and/or modify 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 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 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18*/ 18*/
19 19
20/* This file contains the declarations of all types that are used to 20/* This file contains the declarations of all types that are used to
21 represent the Word file. Variables of these types are written by the 21 represent the Psion files. Variables of these types are written by the
22 parse routines, and read by the generation routines. */ 22 parse routines, and read by the generation routines.
23
24 Mostly, the data structures reflect the file format documentation,
25 as included in the formats directory. When in doubt, refer there. */
23 26
24#ifndef PSICONV_DATA_H 27#ifndef PSICONV_DATA_H
25#define PSICONV_DATA_H 28#define PSICONV_DATA_H
26 29
27#include "general.h" 30#include <psiconv/general.h>
28#include "list.h" 31#include <psiconv/list.h>
29 32
30/* All types which end on _t are plain types; all other types are pointers 33/* All types which end on _t are plain types; all other types are pointers
31 to structs */ 34 to structs. */
32 35
36#ifdef __cplusplus
37extern "C" {
38#endif /* __cplusplus */
39
40/* Forward declaration (for psiconv_embedded_object_section) */
41typedef struct psiconv_file_s *psiconv_file;
42
43
44/* Enums and simple types */
45
46
47/* Floating point number representation */
48typedef double psiconv_float_t;
49
50/* The supported file types. */
33typedef enum psiconv_file_type { 51typedef enum psiconv_file_type {
34 psiconv_unknown_file, 52 psiconv_unknown_file,
35 psiconv_word_file, 53 psiconv_word_file,
36 psiconv_texted_file, 54 psiconv_texted_file,
37 psiconv_mbm_file, 55 psiconv_mbm_file,
38 psiconv_sketch_file, 56 psiconv_sketch_file,
39 psiconv_clipart_file 57 psiconv_clipart_file,
58 psiconv_sheet_file
40} psiconv_file_type_t; 59} psiconv_file_type_t;
41 60
42/* Length indicators */ 61/* String representation. A string is an array of UCS2 characters, terminated
62 by a 0. So they are just like normal C strings, except that they are built
63 of psiconv_ucs2 elements instead of char elements.
64 The psiconv_ucs2 type holds 16 bits; see unicode.h for more information. */
43typedef psiconv_u32 psiconv_S_t; 65typedef psiconv_ucs2 *psiconv_string_t;
44typedef psiconv_u32 psiconv_X_t;
45 66
46/* A string */ 67/* Represent lengths (in centimeters) and sizes (in points).
47typedef char *psiconv_string_t;
48
49/* In the Psion file, these are identical; but we translate them to more 68 In the Psion file, these are identical; but we translate them to more
50 human-readable quantities */ 69 human-readable quantities */
51typedef float psiconv_length_t; /* For offsets in centimeters */ 70typedef float psiconv_length_t; /* For offsets in centimeters */
52typedef float psiconv_size_t; /* For sizes in points */ 71typedef float psiconv_size_t; /* For sizes in points */
53 72
54/* Some enums */ 73/* Represent booleans. As false is zero in the enum, you can still do things
74 like { if (test) ... } instead of { if (test == psiconv_bool_true) ... }.
75 Choose whatever style suits you best. */
55typedef enum psiconv_bool 76typedef enum psiconv_bool
56{ 77{
57 psiconv_bool_false, 78 psiconv_bool_false,
58 psiconv_bool_true 79 psiconv_bool_true
59} psiconv_bool_t; 80} psiconv_bool_t;
60 81
82/* Some kind of three-valued boolean, used at several places. */
83typedef enum psiconv_triple
84{
85 psiconv_triple_on,
86 psiconv_triple_off,
87 psiconv_triple_auto
88} psiconv_triple_t;
89
90/* Text can be in superscript or subscript or neither, but never both
91 superscript and subscript at once. Also, super-superscript and things
92 like that do not exist in the Psion world. */
61typedef enum psiconv_super_sub 93typedef enum psiconv_super_sub
62{ psiconv_normalscript, 94{ psiconv_normalscript,
63 psiconv_superscript, 95 psiconv_superscript,
64 psiconv_subscript 96 psiconv_subscript
65} psiconv_super_sub_t; 97} psiconv_super_sub_t;
66 98
99/* Horizontal justification. */
67typedef enum psiconv_justify_hor 100typedef enum psiconv_justify_hor
68{ psiconv_justify_left, 101{ psiconv_justify_left,
69 psiconv_justify_centre, 102 psiconv_justify_centre,
70 psiconv_justify_right, 103 psiconv_justify_right,
71 psiconv_justify_full 104 psiconv_justify_full
72} psiconv_justify_hor_t; 105} psiconv_justify_hor_t;
73 106
107/* Vertical justification. */
74typedef enum psiconv_justify_ver 108typedef enum psiconv_justify_ver
75{ psiconv_justify_top, 109{ psiconv_justify_top,
76 psiconv_justify_middle, 110 psiconv_justify_middle,
77 psiconv_justify_bottom 111 psiconv_justify_bottom
78} psiconv_justify_ver_t; 112} psiconv_justify_ver_t;
79 113
114/* Borders around text fields. */
80typedef enum psiconv_border_kind 115typedef enum psiconv_border_kind
81{ psiconv_border_none, 116{ psiconv_border_none, /* No border */
82 psiconv_border_solid, 117 psiconv_border_solid, /* Single line */
83 psiconv_border_double, 118 psiconv_border_double, /* Double line */
84 psiconv_border_dotted, 119 psiconv_border_dotted, /* Dotted line: . . . . . */
85 psiconv_border_striped, 120 psiconv_border_dashed, /* Dashed line: _ _ _ _ _ */
86 psiconv_border_dotstripe, 121 psiconv_border_dotdashed, /* Dotted/dashed line: _ . _ . _ */
87 psiconv_border_dotdotstripe 122 psiconv_border_dotdotdashed /* Dotted/dashed line: . . _ . . _ */
88} psiconv_border_kind_t; 123} psiconv_border_kind_t;
89 124
90/* Colors. 125/* Though each printer driver has its own fonts for printing, they are
126 represented on the Psion screen by a few built-in fonts. */
127typedef enum psiconv_screenfont
128{
129 psiconv_font_misc, /* Nonproportional symbols, like Wingbat? */
130 psiconv_font_sansserif, /* Proportional sans-serif, like Arial */
131 psiconv_font_nonprop, /* Nonproportional, like Courier */
132 psiconv_font_serif /* Proportional serifed, like Times */
133} psiconv_screenfont_t;
134
135
136/* The kind of tab. Note that decimal tabs are not supported by the Psion. */
137typedef enum psiconv_tab_kind
138{
139 psiconv_tab_left, /* Left tab */
140 psiconv_tab_centre, /* Centre tab */
141 psiconv_tab_right /* Right tab */
142} psiconv_tab_kind_t;
143
144/* When text has to be replaced, the kind of replacement to do
145 (not yet implemented!) */
146typedef enum psiconv_replacement_type
147{
148 psiconv_replace_time,
149 psiconv_replace_date,
150 psiconv_replace_pagenr,
151 psiconv_replace_nr_of_pages,
152 psiconv_replace_filename
153} psiconv_replacement_type_t;
154
155
156/* Here starts the struct definitions */
157
158/* The color of a single pixel, in RGB format.
91 black: 0x00 0x00 0x00 159 Black: 0x00 0x00 0x00
92 white: 0xff 0xff 0xff */ 160 White: 0xff 0xff 0xff */
93typedef struct psiconv_color 161typedef struct psiconv_color_s
94{ 162{
95 psiconv_u8 red; 163 psiconv_u8 red;
96 psiconv_u8 green; 164 psiconv_u8 green;
97 psiconv_u8 blue; 165 psiconv_u8 blue;
98} * psiconv_color; 166} * psiconv_color;
99 167
168
169/* Complete font information: both a printer font and a corresponding screen
170 font to display it. */
100typedef struct psiconv_font 171typedef struct psiconv_font_s
101{ 172{
102 char *name; 173 psiconv_string_t name; /* Printer font */
103 psiconv_u8 screenfont; 174 psiconv_screenfont_t screenfont; /* Screen font */
104} *psiconv_font; 175} *psiconv_font;
105 176
177/* Complete border information */
106typedef struct psiconv_border 178typedef struct psiconv_border_s
107{ 179{
108 psiconv_border_kind_t kind; 180 psiconv_border_kind_t kind; /* Border kind */
109 psiconv_size_t thickness; /* Set to 1/20 for non-solid lines */ 181 psiconv_size_t thickness; /* Set to 1/20 for non-solid lines */
110 psiconv_color color; 182 psiconv_color color; /* Border color */
111} *psiconv_border; 183} *psiconv_border;
112 184
185/* Complete bullet information.
186 The interaction of left and first line indentation and bullets is quite
187 complicated.
188
189 BULLET FIRST BULLET FIRST LINE NEXT LINES
190
191 None = 0 - Left+First Left
192 > 0 - Left+First Left
193 < 0 - Left+First Left
194
195 Indent Off = 0 Left Left(+Bullet) Left
196 > 0 Left Left+First Left
197 < 0 Left+First Left+First(+Bullet) Left
198
199 Indent On = 0 Left Left(+Bullet) Left
200 > 0 Left Left+First Left+First
201 < 0 Left+First Left Left
202*/
113typedef struct psiconv_bullet 203typedef struct psiconv_bullet_s
114{ 204{
115 psiconv_bool_t on; 205 psiconv_bool_t on; /* Whether the bullet is shown */
116 psiconv_size_t font_size; 206 psiconv_size_t font_size; /* Bullet font size */
117 psiconv_u8 character; 207 psiconv_ucs2 character; /* Bullet character */
118 psiconv_bool_t indent; 208 psiconv_bool_t indent; /* Whether to indent (see above */
119 psiconv_color color; 209 psiconv_color color; /* Bullet color */
120 psiconv_font font; 210 psiconv_font font; /* Bullet font */
121} *psiconv_bullet; 211} *psiconv_bullet;
122 212
123typedef enum psiconv_tab_kind 213/* Complete single tab information */
124{
125 psiconv_tab_left,
126 psiconv_tab_centre,
127 psiconv_tab_right
128} psiconv_tab_kind_t;
129
130typedef struct psiconv_tab 214typedef struct psiconv_tab_s
131{ 215{
132 psiconv_length_t location; 216 psiconv_length_t location; /* The indentation level */
133 psiconv_tab_kind_t kind; 217 psiconv_tab_kind_t kind; /* Tab kind */
134} *psiconv_tab; 218} *psiconv_tab;
135 219
136 220/* A list of tabs */
137typedef psiconv_list psiconv_tab_list; /* of struct psiconv_tab */ 221typedef psiconv_list psiconv_tab_list; /* of struct psiconv_tab_s */
138 222
223/* Information about all tabs.
224 Normal tabs start after the rightmost extra tab */
139typedef struct psiconv_all_tabs 225typedef struct psiconv_all_tabs_s
140{ 226{
141 psiconv_length_t normal; 227 psiconv_length_t normal; /* Normal tab distance */
142 psiconv_tab_list extras; 228 psiconv_tab_list extras; /* Additional defined tabs */
143} *psiconv_all_tabs; 229} *psiconv_all_tabs;
144 230
231/* Character layout.
232 This structure holds all layout information that can be applied on the
233 character level (as opposed to layouts that only apply to whole
234 paragraphs).
235 Note that at all times, this structure holds the complete layout
236 information; we do not use incremental layouts, unlike the Psion
237 file format itself. So if an italic text is also underlined, the
238 character_layout will have both set for that region. */
145typedef struct psiconv_character_layout 239typedef struct psiconv_character_layout_s
146{ 240{
147 psiconv_color color; 241 psiconv_color color; /* Character color */
148 psiconv_color back_color; 242 psiconv_color back_color; /* Background color */
149 psiconv_size_t font_size; 243 psiconv_size_t font_size; /* Font size */
150 psiconv_bool_t italic; 244 psiconv_bool_t italic; /* Use italics? */
151 psiconv_bool_t bold; 245 psiconv_bool_t bold; /* Use bold? */
152 psiconv_super_sub_t super_sub; 246 psiconv_super_sub_t super_sub; /* Use super/subscript? */
153 psiconv_bool_t underline; 247 psiconv_bool_t underline; /* Underline? */
154 psiconv_bool_t strike_out; 248 psiconv_bool_t strikethrough; /* Strike through? */
155 psiconv_font font; 249 psiconv_font font; /* Character font */
156} *psiconv_character_layout; 250} *psiconv_character_layout;
157 251
252/* Paragraph layout.
253 This structure holds all layout information that can be applied on the
254 paragraph level (as opposed to layouts that also apply to single
255 characters).
256 Note that at all times, this structure holds the complete layout
257 information; we do not use incremental layouts, unlike the Psion
258 file format itself.
259 Linespacing is the amount of vertical space between lines. If
260 linespacing_exact is set, this amount is used even if that would make
261 text overlap; if it is not set, a greater distance is used if text would
262 otherwise overlap.
263 Several booleans determine where page breaks may be set. keep_together
264 forbids page breaks in the middle of the paragraph; keep_with_next
265 forbids page breaks between this and the next paragraph. on_next_page
266 forces a pagebreak before the paragraph. no_widow_protection allows
267 one single line of the paragraph on a page, and the rest on another page.
268 Sheet cell text normally does not wrap; wrap_to_fit_cell allows this. */
158typedef struct psiconv_paragraph_layout 269typedef struct psiconv_paragraph_layout_s
159{ 270{
160 psiconv_color back_color; 271 psiconv_color back_color; /* Background color */
161 psiconv_length_t indent_left; 272 psiconv_length_t indent_left; /* Left indentation (except first line) */
162 psiconv_length_t indent_right; 273 psiconv_length_t indent_right; /* Right indentation */
163 psiconv_length_t indent_first; 274 psiconv_length_t indent_first; /* First line left indentation */
164 psiconv_justify_hor_t justify_hor; 275 psiconv_justify_hor_t justify_hor; /* Horizontal justification */
165 psiconv_justify_ver_t justify_ver; 276 psiconv_justify_ver_t justify_ver; /* Vertical justification */
166 psiconv_size_t interline; 277 psiconv_size_t linespacing; /* The linespacing */
167 psiconv_bool_t interline_exact; 278 psiconv_bool_t linespacing_exact; /* Is linespacing exact or the minimum? */
168 psiconv_size_t top_space; 279 psiconv_size_t space_above; /* Vertical space before the paragraph */
169 psiconv_size_t bottom_space; 280 psiconv_size_t space_below; /* Vertical space after the paragraph */
170 psiconv_bool_t on_one_page; 281 psiconv_bool_t keep_together; /* Keep lines on one page? */
171 psiconv_bool_t together_with; /* What the heck is this? */ 282 psiconv_bool_t keep_with_next; /* Disallow pagebreak after paragraph? */
172 psiconv_bool_t on_next_page; 283 psiconv_bool_t on_next_page; /* Force page break before paragraph? */
173 psiconv_bool_t no_widow_protection; 284 psiconv_bool_t no_widow_protection; /* Undo widow protection? */
174 psiconv_length_t border_distance; 285 psiconv_bool_t wrap_to_fit_cell; /* Wrap sheet cell text? */
175 psiconv_bullet bullet; 286 psiconv_length_t border_distance; /* Distance to borders */
176 psiconv_border left_border; 287 psiconv_bullet bullet; /* Bullet information */
177 psiconv_border right_border; 288 psiconv_border left_border; /* Left border information */
178 psiconv_border top_border; 289 psiconv_border right_border; /* Right border information */
179 psiconv_border bottom_border; 290 psiconv_border top_border; /* Top border information */
180 psiconv_all_tabs tabs; 291 psiconv_border bottom_border; /* Bottom border information */
292 psiconv_all_tabs tabs; /* All tab information */
181} *psiconv_paragraph_layout; 293} *psiconv_paragraph_layout;
182 294
295/* A Header Section.
296 It contains the three UIDs and the checksum, and the type of file.
297 As the type of file uniquely defines the UIDs, and as the UIDs determine
298 the checksum, this is never included in a regular psiconv_file structure.
299 It can be used to read the header section separately, though. */
183typedef struct psiconv_header_section 300typedef struct psiconv_header_section_s
184{ 301{
185 psiconv_u32 uid1; 302 psiconv_u32 uid1;
186 psiconv_u32 uid2; 303 psiconv_u32 uid2;
187 psiconv_u32 uid3; 304 psiconv_u32 uid3;
188 psiconv_u32 checksum; 305 psiconv_u32 checksum;
189 psiconv_file_type_t file; 306 psiconv_file_type_t file;
190} *psiconv_header_section; 307} *psiconv_header_section;
191 308
309/* A Section Table Section entry.
310 Each entry has a UID and an offset.
311 This is never included in a regular psiconv_file structure, as the
312 information is too low-level. It is used internally, though. */
192typedef struct psiconv_section_table_entry 313typedef struct psiconv_section_table_entry_s
193{ 314{
194 psiconv_u32 id; 315 psiconv_u32 id; /* Section UID */
195 psiconv_u32 offset; 316 psiconv_u32 offset; /* Section offset within the file */
196} *psiconv_section_table_entry; 317} *psiconv_section_table_entry;
197 318
319/* A Section Table Section.
320 A list of sections and their offsets.
321 It is simply a list of Section Table Section Entries.
322 This is never included in a regular psiconv_file structure, as the
323 information is too low-level. It is used internally, though. */
198typedef psiconv_list psiconv_section_table_section; 324typedef psiconv_list psiconv_section_table_section;
199/* Of struct sectiontable_entry */ 325 /* Of struct psiconv_sectiontable_entry_s */
200 326
327/* An Application ID Section.
328 The type of file.
329 Never included in a regular psiconv_file structure, because it is too
330 low-level. You can always recover it if you know the file type. Used
331 internally.
332 The name should probably be case-insensitive. */
201typedef struct psiconv_application_id_section 333typedef struct psiconv_application_id_section_s
202{ 334{
203 psiconv_u32 id; 335 psiconv_u32 id; /* File type UID */
204 psiconv_string_t name; 336 psiconv_string_t name; /* File type name */
205} *psiconv_application_id_section; 337} *psiconv_application_id_section;
206 338
339/* An Object Icon Section.
340 The icon used for an embedded object. */
341typedef struct psiconv_object_icon_section_s
342{
343 psiconv_length_t icon_width; /* Icon width */
344 psiconv_length_t icon_height; /* Icon height */
345 psiconv_string_t icon_name; /* Icon name */
346} *psiconv_object_icon_section;
347
348/* An Object Display Section.
349 How an embedded icon should be displayed.
350 The sizes are computed after cropping or resizing; if the object is shown
351 as an icon, the icon sizes are used here. */
352typedef struct psiconv_object_display_section_s
353{
354 psiconv_bool_t show_icon; /* Show an icon or the whole file? */
355 psiconv_length_t width; /* Object display width */
356 psiconv_length_t height; /* Object display height */
357} *psiconv_object_display_section;
358
359/* An Embedded Object Section.
360 All data about an embedded object.
361 An object is another psiconv_file, which is embedded in the current
362 file. Objects can also be embedded in each other, of course. */
363typedef struct psiconv_embedded_object_section_s
364{
365 psiconv_object_icon_section icon; /* Icon information */
366 psiconv_object_display_section display; /* Display information */
367 psiconv_file object; /* The object itself */
368} *psiconv_embedded_object_section;
369
370/* Inline character-level layout information.
371 Information how some characters should be laid out.
372 Note that, though you can choose specific layouts for an object, this
373 will probably not affect the object's rendering.
374 Usually, object will be NULL, and the object_width and object_height
375 will be ignored.
376 The object sizes are the same as in the Object Display Section, so
377 this information seems to be redundant. */
207typedef struct psiconv_in_line_layout 378typedef struct psiconv_in_line_layout_s
208{ 379{
209 psiconv_character_layout layout; 380 psiconv_character_layout layout; /* Layout information */
210 int length; 381 int length; /* Number of characters */
382 psiconv_embedded_object_section object; /* Embedded object or NULL */
383 psiconv_length_t object_width; /* Object display width */
384 psiconv_length_t object_height; /* Object display height */
211} *psiconv_in_line_layout; 385} *psiconv_in_line_layout;
212 386
387/* Inline character information for a whole line.
388 A list of inline character information */
213typedef psiconv_list psiconv_in_line_layouts; /* of struct in_line_layout */ 389typedef psiconv_list psiconv_in_line_layouts;
390 /* of struct psiconv_in_line_layout_s */
214 391
215typedef enum psiconv_replacement_type 392/* What to replace where in text. Not yet implemented!
216{ 393 (not yet implemented!) */
217 psiconv_replace_time,
218 psiconv_replace_date,
219 psiconv_replace_pagenr,
220 psiconv_replace_nr_of_pages,
221 psiconv_replace_filename
222} psiconv_replacement_type_t;
223
224typedef struct psiconv_replacement 394typedef struct psiconv_replacement_s
225{ 395{
226 int offset; 396 int offset; /* Offset in text */
227 int cur_len; 397 int cur_len; /* Length of text to replace */
228 psiconv_replacement_type_t type; 398 psiconv_replacement_type_t type; /* Kind of replacement */
229} *psiconv_replacement; 399} *psiconv_replacement;
230 400
401/* A list of replacements */
231typedef psiconv_list psiconv_replacements; /* of struct replacement */ 402typedef psiconv_list psiconv_replacements; /* of struct psiconv_replacement_s */
232 403
404/* A paragraph of text.
405 Layout and actual paragraph text are combined here, even though
406 they are seperated in the Psion file format.
407 The base style is referred to, but the base_character and
408 base_paragraph have all style settings already incorporated.
409 The base style can be found using the psiconv_get_style function.
410 The in_lines are either an empty list, or they should apply to exactly
411 the number of characters in this paragraph */
233typedef struct psiconv_paragraph 412typedef struct psiconv_paragraph_s
234{ 413{
235 char *text; 414 psiconv_string_t text; /* Paragraph text */
236 psiconv_character_layout base_character; 415 psiconv_character_layout base_character; /* Base character layout */
237 psiconv_paragraph_layout base_paragraph; 416 psiconv_paragraph_layout base_paragraph; /* Base paragraph layout */
238 psiconv_s16 base_style; 417 psiconv_s16 base_style; /* Paragraph style */
239 psiconv_in_line_layouts in_lines; 418 psiconv_in_line_layouts in_lines; /* In-paragraph layout */
240 psiconv_replacements replacements; 419 psiconv_replacements replacements; /* Replacements like the date */
241} *psiconv_paragraph; 420} *psiconv_paragraph;
242 421
422/* A collection of text paragraphs */
243typedef psiconv_list psiconv_text_and_layout; /* Of struct paragraphs */ 423typedef psiconv_list psiconv_text_and_layout;
424 /* Of struct psiconv_paragraph_s */
244 425
426/* A TextEd Section.
427 Text and simple layout, without styles. */
245typedef struct psiconv_texted_section 428typedef struct psiconv_texted_section_s
246{ 429{
247 psiconv_text_and_layout paragraphs; 430 psiconv_text_and_layout paragraphs;
248} *psiconv_texted_section; 431} *psiconv_texted_section;
249 432
433/* A Page Header.
434 All information about a page header or footer.
435 An explicit base paragraph and character layout is found; this is used
436 as a sort of base style, on which all further formatting is based */
250typedef struct psiconv_page_header 437typedef struct psiconv_page_header_s
251{ 438{
252 psiconv_bool_t on_first_page; 439 psiconv_bool_t on_first_page; /* Display on first page? */
253 psiconv_paragraph_layout base_paragraph_layout; 440 psiconv_paragraph_layout base_paragraph_layout; /* Base paragraph layout */
254 psiconv_character_layout base_character_layout; 441 psiconv_character_layout base_character_layout; /* Base character layout */
255 psiconv_texted_section text; 442 psiconv_texted_section text; /* The actual text */
256} *psiconv_page_header; 443} *psiconv_page_header;
257 444
445/* A Page Layout Section
446 All information about the layout of a page.
447 Margins, page size, the header, the footer and page numbers */
258typedef struct psiconv_page_layout_section 448typedef struct psiconv_page_layout_section_s
259{ 449{
260 psiconv_u32 first_page_nr; 450 psiconv_u32 first_page_nr; /* Page numbers start counting here */
261 psiconv_length_t header_dist; 451 psiconv_length_t header_dist; /* Distance of header to text */
262 psiconv_length_t footer_dist; 452 psiconv_length_t footer_dist; /* Distance of footer to text */
263 psiconv_length_t left_margin; 453 psiconv_length_t left_margin; /* Left margin */
264 psiconv_length_t right_margin; 454 psiconv_length_t right_margin; /* Right margin */
265 psiconv_length_t top_margin; 455 psiconv_length_t top_margin; /* Top margin */
266 psiconv_length_t bottom_margin; 456 psiconv_length_t bottom_margin; /* Bottom margin */
267 psiconv_length_t page_width; 457 psiconv_length_t page_width; /* Page width */
268 psiconv_length_t page_height; 458 psiconv_length_t page_height; /* Page height */
269 psiconv_page_header header; 459 psiconv_page_header header; /* Header information */
270 psiconv_page_header footer; 460 psiconv_page_header footer; /* Footer information */
461 psiconv_bool_t landscape; /* Landscape orientation? */
271} * psiconv_page_layout_section; 462} * psiconv_page_layout_section;
272 463
464/* A Word Status Section
465 Settings of the Word program.
466 Several whitespace and related characters can be explicitely shown.
467 Embedded pictures and graphs can be iconized or displayed full.
468 Toolbars can be shown or hidden.
469 Long lines can be wrapped, or you have to use scrolling.
470 The cursor position is the character number of the text.
471 Zoom level: 1000 is "normal" */
273typedef struct psiconv_word_status_section 472typedef struct psiconv_word_status_section_s
274{ 473{
275 psiconv_bool_t show_tabs; 474 psiconv_bool_t show_tabs; /* Show tabs? */
276 psiconv_bool_t show_spaces; 475 psiconv_bool_t show_spaces; /* Show spaces? */
277 psiconv_bool_t show_paragraph_ends; 476 psiconv_bool_t show_paragraph_ends; /* Show paragraph ends? */
278 psiconv_bool_t show_line_breaks; 477 psiconv_bool_t show_line_breaks; /* Show line breaks */
279 psiconv_bool_t show_hard_minus; 478 psiconv_bool_t show_hard_minus; /* Show hard dashes? */
280 psiconv_bool_t show_hard_space; 479 psiconv_bool_t show_hard_space; /* Show hard spaces? */
281 psiconv_bool_t show_full_pictures; 480 psiconv_bool_t show_full_pictures; /* Show embedded pictures (or iconize)? */
282 psiconv_bool_t show_full_graphs; 481 psiconv_bool_t show_full_graphs; /* Show embedded graphs (or iconize)? */
283 psiconv_bool_t show_top_toolbar; 482 psiconv_bool_t show_top_toolbar; /* Show top toolbar? */
284 psiconv_bool_t show_side_toolbar; 483 psiconv_bool_t show_side_toolbar; /* Show side toolbar? */
285 psiconv_bool_t fit_lines_to_screen; 484 psiconv_bool_t fit_lines_to_screen; /* Wrap lines? */
286 psiconv_u32 cursor_position; 485 psiconv_u32 cursor_position; /* Cursor position (character number) */
287 psiconv_u32 display_size; 486 psiconv_u32 display_size; /* Zooming level */
288} *psiconv_word_status_section; 487} *psiconv_word_status_section;
289 488
489/* A Word Style.
490 All information about a single Style.
491 A builtin style may not be changed in the Word program.
492 Outline level is zero if unused.
493 The name may be NULL for the normal style! */
290typedef struct psiconv_word_style 494typedef struct psiconv_word_style_s
291{ 495{
292 psiconv_character_layout character; 496 psiconv_character_layout character; /* character-level layout */
293 psiconv_paragraph_layout paragraph; 497 psiconv_paragraph_layout paragraph; /* paragraph-level layout */
294 psiconv_u8 hotkey; 498 psiconv_ucs2 hotkey; /* The hotkey */
295 psiconv_string_t name; 499 psiconv_string_t name; /* Style name */
296 psiconv_bool_t built_in; 500 psiconv_bool_t built_in; /* Builtin style? */
297 psiconv_u32 outline_level; 501 psiconv_u32 outline_level; /* Outline level */
298} *psiconv_word_style; 502} *psiconv_word_style;
299 503
504/* A list of Word Styles */
300typedef psiconv_list psiconv_word_style_list; /* Of style */ 505typedef psiconv_list psiconv_word_style_list;
506 /* Of struct psiconv_word_style_s */
301 507
508/* A Word Styles Section
509 All information about styles.
510 Note that the name of the normal style is NULL! */
302typedef struct psiconv_word_styles_section 511typedef struct psiconv_word_styles_section_s
303{ 512{
304 psiconv_word_style normal; 513 psiconv_word_style normal; /* The normal (unspecified) style */
305 psiconv_word_style_list styles; 514 psiconv_word_style_list styles; /* All other defined styles */
306} *psiconv_word_styles_section; 515} *psiconv_word_styles_section;
307 516
517/* A Word File
518 All information about a Word File.
519 Note that a section can be NULL if it is not present. */
308typedef struct psiconv_word_f { 520typedef struct psiconv_word_f_s
521{
309 psiconv_page_layout_section page_sec; 522 psiconv_page_layout_section page_sec; /* Page layout */
310 psiconv_text_and_layout paragraphs; 523 psiconv_text_and_layout paragraphs; /* Text and text layout */
311 psiconv_word_status_section status_sec; 524 psiconv_word_status_section status_sec; /* Internal Word program settings */
312 psiconv_word_styles_section styles_sec; 525 psiconv_word_styles_section styles_sec; /* Styles */
313} *psiconv_word_f; 526} *psiconv_word_f;
314 527
528/* A TextEd File
529 All information about a TextEd File.
530 Note that a section can be NULL if it is not present. */
315typedef struct psiconv_texted_f { 531typedef struct psiconv_texted_f_s
532{
316 psiconv_page_layout_section page_sec; 533 psiconv_page_layout_section page_sec; /* Page layout */
317 psiconv_texted_section texted_sec; 534 psiconv_texted_section texted_sec; /* Text and text layout */
318} *psiconv_texted_f; 535} *psiconv_texted_f;
319 536
537/* A Jumptable Section.
538 A simple list of offsets.
539 This is never included in a regular psiconv_file structure, as the
540 information is too low-level. It is used internally, though. */
320typedef psiconv_list psiconv_jumptable_section; /* of psiconv_u32 */ 541typedef psiconv_list psiconv_jumptable_section; /* of psiconv_u32 */
321 542
543/* A Paint Data Section
544 A collection of pixels.
322/* Normalized values [0..1] for each component 545 Normalized values [0..1] for each color component.
323 Origin is (x,y)=(0,0), to get pixel at (X,Y) use index [Y*xsize+X] */ 546 Origin is (x,y)=(0,0), to get pixel at (X,Y) use index [Y*xsize+X] */
324typedef struct psiconv_paint_data_section { 547typedef struct psiconv_paint_data_section_s
325 psiconv_u32 xsize; 548{
326 psiconv_u32 ysize; 549 psiconv_u32 xsize; /* Number of pixels in a row */
550 psiconv_u32 ysize; /* Number of pixels in a column */
327 psiconv_length_t pic_xsize; /* 0 if not specified */ 551 psiconv_length_t pic_xsize; /* 0 if not specified */
328 psiconv_length_t pic_ysize; /* 0 if not specified */ 552 psiconv_length_t pic_ysize; /* 0 if not specified */
329 float *red; 553 float *red;
330 float *green; 554 float *green;
331 float *blue; 555 float *blue;
332} *psiconv_paint_data_section; 556} *psiconv_paint_data_section;
333 557
558/* A collection of Paint Data Sections */
334typedef psiconv_list psiconv_pictures; 559typedef psiconv_list psiconv_pictures;
335 /* of struct psiconv_paint_data_section */ 560 /* of struct psiconv_paint_data_section_s */
336 561
562/* A MBM file
563 All information about a MBM file
564 MBM files contain one or more pictures. */
337typedef struct psiconv_mbm_f { 565typedef struct psiconv_mbm_f_s
566{
338 psiconv_pictures sections; 567 psiconv_pictures sections;
339} *psiconv_mbm_f; 568} *psiconv_mbm_f;
340 569
341/* This is a little intricated. A picture may be embedded in a larger form. 570/* Read the Psiconv file format documentation for a complete discription.
342 A form is empty, except for the picture. The form has size form_{x,y}size, 571 Basic idea: a picture has a certain display size. Within it, the pixel
343 and the picture is at offset picture_{x,y}_offset within the form. The 572 data begins at a certain offset. Around it, there is an empty form.
344 picture itself has size picture_{x,y}size. 573 The first eight values are before magnification and cuts.
345 Cuts are always <= 1.0; a cut of 0.0 cuts nothing away, a cut of 1.0 574 Cuts are always <= 1.0; a cut of 0.0 cuts nothing away, a cut of 1.0
346 cuts everything away. */ 575 cuts everything away. */
347typedef struct psiconv_sketch_section { 576typedef struct psiconv_sketch_section_s
577{
578 psiconv_u16 displayed_xsize;
579 psiconv_u16 displayed_ysize;
580 psiconv_u16 picture_data_x_offset;
581 psiconv_u16 picture_data_y_offset;
348 psiconv_u16 form_xsize; 582 psiconv_u16 form_xsize;
349 psiconv_u16 form_ysize; 583 psiconv_u16 form_ysize;
350 psiconv_u16 picture_x_offset; 584 psiconv_u16 displayed_size_x_offset;
351 psiconv_u16 picture_y_offset; 585 psiconv_u16 displayed_size_y_offset;
352 psiconv_u16 picture_xsize;
353 psiconv_u16 picture_ysize;
354 float magnification_x; /* computed relative to first six values */ 586 float magnification_x; /* computed relative to first eight values */
355 float magnification_y; /* computed relative to first six values */ 587 float magnification_y; /* computed relative to first eight values */
356 float cut_left; /* computed relative to first six values */ 588 float cut_left; /* computed relative to first eight values */
357 float cut_right; /* computed relative to first six values */ 589 float cut_right; /* computed relative to first eight values */
358 float cut_top; /* computed relative to first six values */ 590 float cut_top; /* computed relative to first eight values */
359 float cut_bottom; /* computed relative to first six values */ 591 float cut_bottom; /* computed relative to first eight values */
360 psiconv_paint_data_section picture; 592 psiconv_paint_data_section picture;
361} *psiconv_sketch_section; 593} *psiconv_sketch_section;
362 594
363typedef struct psiconv_sketch_f { 595typedef struct psiconv_sketch_f_s
596{
364 psiconv_sketch_section sketch_sec; 597 psiconv_sketch_section sketch_sec;
365} *psiconv_sketch_f; 598} *psiconv_sketch_f;
366 599
367typedef struct psiconv_clipart_section { 600typedef struct psiconv_clipart_section_s
601{
368 /* Perhaps later on some currently unknown stuff. */ 602 /* Perhaps later on some currently unknown stuff. */
369 psiconv_paint_data_section picture; 603 psiconv_paint_data_section picture;
370} * psiconv_clipart_section; 604} * psiconv_clipart_section;
371 605
372typedef psiconv_list psiconv_cliparts; /* of struct psiconv_clipart_section */ 606typedef psiconv_list psiconv_cliparts; /* of struct psiconv_clipart_section_s */
373 607
374typedef struct psiconv_clipart_f { 608typedef struct psiconv_clipart_f_s
609{
375 psiconv_cliparts sections; 610 psiconv_cliparts sections;
376} *psiconv_clipart_f; 611} *psiconv_clipart_f;
377 612
613typedef struct psiconv_sheet_ref_s
614{
615 psiconv_s16 offset;
616 psiconv_bool_t absolute;
617} psiconv_sheet_ref_t;
618
619typedef struct psiconv_sheet_cell_reference_s
620{
621 psiconv_sheet_ref_t row;
622 psiconv_sheet_ref_t column;
623} psiconv_sheet_cell_reference_t;
624
625typedef struct psiconv_sheet_cell_block_s
626{
627 psiconv_sheet_cell_reference_t first;
628 psiconv_sheet_cell_reference_t last;
629} psiconv_sheet_cell_block_t;
630
631typedef enum psiconv_cell_type
632{
633 psiconv_cell_blank,
634 psiconv_cell_int,
635 psiconv_cell_bool,
636 psiconv_cell_error,
637 psiconv_cell_float,
638 psiconv_cell_string
639} psiconv_cell_type_t;
640
641typedef enum psiconv_sheet_errorcode
642{
643 psiconv_sheet_error_none,
644 psiconv_sheet_error_null,
645 psiconv_sheet_error_divzero,
646 psiconv_sheet_error_value,
647 psiconv_sheet_error_reference,
648 psiconv_sheet_error_name,
649 psiconv_sheet_error_number,
650 psiconv_sheet_error_notavail
651} psiconv_sheet_errorcode_t;
652
653typedef enum psiconv_sheet_numberformat_code
654{
655 psiconv_numberformat_general,
656 psiconv_numberformat_fixeddecimal,
657 psiconv_numberformat_scientific,
658 psiconv_numberformat_currency,
659 psiconv_numberformat_percent,
660 psiconv_numberformat_triads,
661 psiconv_numberformat_boolean,
662 psiconv_numberformat_text,
663 psiconv_numberformat_date_dmm,
664 psiconv_numberformat_date_mmd,
665 psiconv_numberformat_date_ddmmyy,
666 psiconv_numberformat_date_mmddyy,
667 psiconv_numberformat_date_yymmdd,
668 psiconv_numberformat_date_dmmm,
669 psiconv_numberformat_date_dmmmyy,
670 psiconv_numberformat_date_ddmmmyy,
671 psiconv_numberformat_date_mmm,
672 psiconv_numberformat_date_monthname,
673 psiconv_numberformat_date_mmmyy,
674 psiconv_numberformat_date_monthnameyy,
675 psiconv_numberformat_date_monthnamedyyyy,
676 psiconv_numberformat_datetime_ddmmyyyyhhii,
677 psiconv_numberformat_datetime_ddmmyyyyHHii,
678 psiconv_numberformat_datetime_mmddyyyyhhii,
679 psiconv_numberformat_datetime_mmddyyyyHHii,
680 psiconv_numberformat_datetime_yyyymmddhhii,
681 psiconv_numberformat_datetime_yyyymmddHHii,
682 psiconv_numberformat_time_hhii,
683 psiconv_numberformat_time_hhiiss,
684 psiconv_numberformat_time_HHii,
685 psiconv_numberformat_time_HHiiss
686} psiconv_sheet_numberformat_code_t;
687
688typedef struct psiconv_sheet_numberformat_s
689{
690 psiconv_sheet_numberformat_code_t code;
691 psiconv_u8 decimal;
692} *psiconv_sheet_numberformat;
693
694typedef struct psiconv_sheet_cell_layout_s
695{
696 psiconv_character_layout character;
697 psiconv_paragraph_layout paragraph;
698 psiconv_sheet_numberformat numberformat;
699} * psiconv_sheet_cell_layout;
700
701typedef struct psiconv_sheet_cell_s
702{
703 psiconv_u16 column;
704 psiconv_u16 row;
705 psiconv_cell_type_t type;
706 union {
707 psiconv_u32 dat_int;
708 double dat_float;
709 psiconv_string_t dat_string;
710 psiconv_bool_t dat_bool;
711 psiconv_sheet_errorcode_t dat_error;
712 } data;
713 psiconv_sheet_cell_layout layout;
714 psiconv_bool_t calculated;
715 psiconv_u32 ref_formula;
716} *psiconv_sheet_cell;
717
718typedef psiconv_list psiconv_sheet_cell_list;
719 /* Of struct psiconv_sheet_cell_s */
720
721typedef struct psiconv_sheet_status_section_s
722{
723 psiconv_bool_t show_graph;
724 psiconv_u32 cursor_row;
725 psiconv_u32 cursor_column;
726 psiconv_bool_t show_top_sheet_toolbar;
727 psiconv_bool_t show_side_sheet_toolbar;
728 psiconv_bool_t show_top_graph_toolbar;
729 psiconv_bool_t show_side_graph_toolbar;
730 psiconv_u32 sheet_display_size;
731 psiconv_u32 graph_display_size;
732 psiconv_triple_t show_horizontal_scrollbar;
733 psiconv_triple_t show_vertical_scrollbar;
734} *psiconv_sheet_status_section;
735
736typedef enum psiconv_formula_type
737{
738 psiconv_formula_unknown,
739 psiconv_formula_op_lt,
740 psiconv_formula_op_le,
741 psiconv_formula_op_gt,
742 psiconv_formula_op_ge,
743 psiconv_formula_op_ne,
744 psiconv_formula_op_eq,
745 psiconv_formula_op_add,
746 psiconv_formula_op_sub,
747 psiconv_formula_op_mul,
748 psiconv_formula_op_div,
749 psiconv_formula_op_pow,
750 psiconv_formula_op_pos,
751 psiconv_formula_op_neg,
752 psiconv_formula_op_not,
753 psiconv_formula_op_and,
754 psiconv_formula_op_or,
755 psiconv_formula_op_con,
756 psiconv_formula_op_bra,
757 psiconv_formula_mark_eof,
758 psiconv_formula_dat_float,
759 psiconv_formula_dat_int,
760 psiconv_formula_dat_var,
761 psiconv_formula_dat_string,
762 psiconv_formula_dat_cellref,
763 psiconv_formula_dat_cellblock,
764 psiconv_formula_dat_vcellblock,
765 psiconv_formula_mark_opsep,
766 psiconv_formula_mark_opend,
767 psiconv_formula_fun_false,
768 psiconv_formula_fun_if,
769 psiconv_formula_fun_true,
770 psiconv_formula_fun_cell,
771 psiconv_formula_fun_errortype,
772 psiconv_formula_fun_isblank,
773 psiconv_formula_fun_iserr,
774 psiconv_formula_fun_iserror,
775 psiconv_formula_fun_islogical,
776 psiconv_formula_fun_isna,
777 psiconv_formula_fun_isnontext,
778 psiconv_formula_fun_isnumber,
779 psiconv_formula_fun_istext,
780 psiconv_formula_fun_n,
781 psiconv_formula_fun_type,
782 psiconv_formula_fun_address,
783 psiconv_formula_fun_column,
784 psiconv_formula_fun_columns,
785 psiconv_formula_fun_hlookup,
786 psiconv_formula_fun_index,
787 psiconv_formula_fun_indirect,
788 psiconv_formula_fun_lookup,
789 psiconv_formula_fun_offset,
790 psiconv_formula_fun_row,
791 psiconv_formula_fun_rows,
792 psiconv_formula_fun_vlookup,
793 psiconv_formula_fun_char,
794 psiconv_formula_fun_code,
795 psiconv_formula_fun_exact,
796 psiconv_formula_fun_find,
797 psiconv_formula_fun_left,
798 psiconv_formula_fun_len,
799 psiconv_formula_fun_lower,
800 psiconv_formula_fun_mid,
801 psiconv_formula_fun_proper,
802 psiconv_formula_fun_replace,
803 psiconv_formula_fun_rept,
804 psiconv_formula_fun_right,
805 psiconv_formula_fun_string,
806 psiconv_formula_fun_t,
807 psiconv_formula_fun_trim,
808 psiconv_formula_fun_upper,
809 psiconv_formula_fun_value,
810 psiconv_formula_fun_date,
811 psiconv_formula_fun_datevalue,
812 psiconv_formula_fun_day,
813 psiconv_formula_fun_hour,
814 psiconv_formula_fun_minute,
815 psiconv_formula_fun_month,
816 psiconv_formula_fun_now,
817 psiconv_formula_fun_second,
818 psiconv_formula_fun_today,
819 psiconv_formula_fun_time,
820 psiconv_formula_fun_timevalue,
821 psiconv_formula_fun_year,
822 psiconv_formula_fun_abs,
823 psiconv_formula_fun_acos,
824 psiconv_formula_fun_asin,
825 psiconv_formula_fun_atan,
826 psiconv_formula_fun_atan2,
827 psiconv_formula_fun_cos,
828 psiconv_formula_fun_degrees,
829 psiconv_formula_fun_exp,
830 psiconv_formula_fun_fact,
831 psiconv_formula_fun_int,
832 psiconv_formula_fun_ln,
833 psiconv_formula_fun_log10,
834 psiconv_formula_fun_mod,
835 psiconv_formula_fun_pi,
836 psiconv_formula_fun_radians,
837 psiconv_formula_fun_rand,
838 psiconv_formula_fun_round,
839 psiconv_formula_fun_sign,
840 psiconv_formula_fun_sin,
841 psiconv_formula_fun_sqrt,
842 psiconv_formula_fun_sumproduct,
843 psiconv_formula_fun_tan,
844 psiconv_formula_fun_trunc,
845 psiconv_formula_fun_cterm,
846 psiconv_formula_fun_ddb,
847 psiconv_formula_fun_fv,
848 psiconv_formula_fun_irr,
849 psiconv_formula_fun_npv,
850 psiconv_formula_fun_pmt,
851 psiconv_formula_fun_pv,
852 psiconv_formula_fun_rate,
853 psiconv_formula_fun_sln,
854 psiconv_formula_fun_syd,
855 psiconv_formula_fun_term,
856 psiconv_formula_fun_combin,
857 psiconv_formula_fun_permut,
858 psiconv_formula_vfn_average,
859 psiconv_formula_vfn_choose,
860 psiconv_formula_vfn_count,
861 psiconv_formula_vfn_counta,
862 psiconv_formula_vfn_countblank,
863 psiconv_formula_vfn_max,
864 psiconv_formula_vfn_min,
865 psiconv_formula_vfn_product,
866 psiconv_formula_vfn_stdevp,
867 psiconv_formula_vfn_stdev,
868 psiconv_formula_vfn_sum,
869 psiconv_formula_vfn_sumsq,
870 psiconv_formula_vfn_varp,
871 psiconv_formula_vfn_var
872} psiconv_formula_type_t;
873
874typedef psiconv_list psiconv_formula_list; /* Of struct psiconv_formula_s */
875
378typedef struct psiconv_file { 876typedef struct psiconv_formula_s
877{
878 psiconv_formula_type_t type;
879 union {
880 psiconv_u32 dat_int;
881 double dat_float;
882 psiconv_string_t dat_string;
883 psiconv_sheet_cell_reference_t dat_cellref;
884 psiconv_sheet_cell_block_t dat_cellblock;
885 psiconv_formula_list fun_operands;
886 psiconv_u32 dat_variable;
887 } data;
888} *psiconv_formula;
889
890typedef struct psiconv_sheet_line_s
891{
892 psiconv_u32 position;
893 psiconv_sheet_cell_layout layout;
894} *psiconv_sheet_line;
895
896typedef psiconv_list psiconv_sheet_line_list;
897 /* Of struct psiconv_sheet_line_s */
898
899typedef struct psiconv_sheet_grid_size_s
900{
901 psiconv_u32 line_number;
902 psiconv_length_t size;
903} *psiconv_sheet_grid_size;
904
905typedef psiconv_list psiconv_sheet_grid_size_list;
906 /* Of struct psiconv_sheet_grid_size_s */
907
908typedef psiconv_list psiconv_sheet_grid_break_list; /* of psiconv_u32 */
909
910typedef struct psiconv_sheet_grid_section_s
911{
912 psiconv_bool_t show_column_titles;
913 psiconv_bool_t show_row_titles;
914 psiconv_bool_t show_vertical_grid;
915 psiconv_bool_t show_horizontal_grid;
916 psiconv_bool_t freeze_rows;
917 psiconv_bool_t freeze_columns;
918 psiconv_u32 frozen_rows;
919 psiconv_u32 frozen_columns;
920 psiconv_u32 first_unfrozen_row_displayed;
921 psiconv_u32 first_unfrozen_column_displayed;
922 psiconv_bool_t show_page_breaks;
923 psiconv_u32 first_row;
924 psiconv_u32 first_column;
925 psiconv_u32 last_row;
926 psiconv_u32 last_column;
927 psiconv_length_t default_row_height;
928 psiconv_length_t default_column_width;
929 psiconv_sheet_grid_size_list row_heights;
930 psiconv_sheet_grid_size_list column_heights;
931 psiconv_sheet_grid_break_list row_page_breaks;
932 psiconv_sheet_grid_break_list column_page_breaks;
933} *psiconv_sheet_grid_section;
934
935typedef struct psiconv_sheet_worksheet_s
936{
937 psiconv_sheet_cell_layout default_layout;
938 psiconv_sheet_cell_list cells;
939 psiconv_bool_t show_zeros;
940 psiconv_sheet_line_list row_default_layouts;
941 psiconv_sheet_line_list col_default_layouts;
942 psiconv_sheet_grid_section grid;
943} *psiconv_sheet_worksheet;
944
945typedef psiconv_list psiconv_sheet_worksheet_list;
946 /* of struct psiconv_sheet_worksheet_s */
947
948typedef enum psiconv_variable_type
949{
950 psiconv_var_int,
951 psiconv_var_float,
952 psiconv_var_string,
953 psiconv_var_cellref,
954 psiconv_var_cellblock
955} psiconv_variable_type_t;
956
957typedef struct psiconv_sheet_variable_s
958{
959 psiconv_u32 number;
960 psiconv_string_t name;
961 psiconv_variable_type_t type;
962 union {
963 psiconv_s32 dat_int;
964 double dat_float;
965 psiconv_string_t dat_string;
966 psiconv_sheet_cell_reference_t dat_cellref;
967 psiconv_sheet_cell_block_t dat_cellblock;
968 } data;
969} *psiconv_sheet_variable;
970
971typedef psiconv_list psiconv_sheet_variable_list;
972 /* of struct psiconv_sheet_variable_s */
973
974typedef struct psiconv_sheet_name_section_s
975{
976 psiconv_string_t name;
977} *psiconv_sheet_name_section;
978
979typedef struct psiconv_sheet_info_section_s
980{
981 psiconv_bool_t auto_recalc;
982} *psiconv_sheet_info_section;
983
984typedef struct psiconv_sheet_workbook_section_s
985{
986 psiconv_formula_list formulas;
987 psiconv_sheet_worksheet_list worksheets;
988 psiconv_sheet_variable_list variables;
989 psiconv_sheet_info_section info;
990 psiconv_sheet_name_section name;
991} *psiconv_sheet_workbook_section;
992
993typedef struct psiconv_sheet_f_s
994{
995 psiconv_page_layout_section page_sec;
996 psiconv_sheet_status_section status_sec;
997 psiconv_sheet_workbook_section workbook_sec;
998} *psiconv_sheet_f;
999
1000/* NB: psiconv_file is already defined above */
1001struct psiconv_file_s
1002{
379 psiconv_file_type_t type; 1003 psiconv_file_type_t type;
380 void *file; 1004 void *file;
381} *psiconv_file; 1005};
382 1006
383 1007
384/* UID1 */ 1008/* UID1 */
385#define PSICONV_ID_PSION5 0x10000037 1009#define PSICONV_ID_PSION5 0x10000037
386#define PSICONV_ID_CLIPART 0x10000041 1010#define PSICONV_ID_CLIPART 0x10000041
389#define PSICONV_ID_MBM_FILE 0x10000042 1013#define PSICONV_ID_MBM_FILE 0x10000042
390/* UID3 */ 1014/* UID3 */
391#define PSICONV_ID_WORD 0x1000007F 1015#define PSICONV_ID_WORD 0x1000007F
392#define PSICONV_ID_TEXTED 0x10000085 1016#define PSICONV_ID_TEXTED 0x10000085
393#define PSICONV_ID_SKETCH 0x1000007D 1017#define PSICONV_ID_SKETCH 0x1000007D
1018#define PSICONV_ID_SHEET 0x10000088
394 1019
395/* Section table ids */ 1020/* Section table ids */
396#define PSICONV_ID_WORD_STATUS_SECTION 0x10000243 1021#define PSICONV_ID_WORD_STATUS_SECTION 0x10000243
397#define PSICONV_ID_APPL_ID_SECTION 0x10000089 1022#define PSICONV_ID_APPL_ID_SECTION 0x10000089
398#define PSICONV_ID_TEXT_SECTION 0x10000106 1023#define PSICONV_ID_TEXT_SECTION 0x10000106
399#define PSICONV_ID_LAYOUT_SECTION 0x10000143 1024#define PSICONV_ID_LAYOUT_SECTION 0x10000143
400#define PSICONV_ID_WORD_STYLES_SECTION 0x10000104 1025#define PSICONV_ID_WORD_STYLES_SECTION 0x10000104
401#define PSICONV_ID_PAGE_LAYOUT_SECTION 0x10000105 1026#define PSICONV_ID_PAGE_LAYOUT_SECTION 0x10000105
402#define PSICONV_ID_PASSWORD_SECTION 0x100000CD 1027#define PSICONV_ID_PASSWORD_SECTION 0x100000CD
403#define PSICONV_ID_SKETCH_SECTION 0x1000007D 1028#define PSICONV_ID_SKETCH_SECTION 0x1000007D
1029#define PSICONV_ID_SHEET_STATUS_SECTION 0x1000011F
1030#define PSICONV_ID_SHEET_WORKBOOK_SECTION 0x1000011D
1031#define PSICONV_ID_SHEET_GRAPH_SECTION 0x10000121
404 1032
405/* Other ids */ 1033/* Other ids */
406#define PSICONV_ID_PAGE_DIMENSIONS 0x100000fd 1034#define PSICONV_ID_PAGE_DIMENSIONS1 0x100000fd
1035#define PSICONV_ID_PAGE_DIMENSIONS2 0x1000010e
407#define PSICONV_ID_TEXTED_BODY 0x1000005c 1036#define PSICONV_ID_TEXTED_BODY 0x1000005c
408#define PSICONV_ID_TEXTED_REPLACEMENT 0x10000063 1037#define PSICONV_ID_TEXTED_REPLACEMENT 0x10000063
409#define PSICONV_ID_TEXTED_UNKNOWN 0x10000065 1038#define PSICONV_ID_TEXTED_UNKNOWN 0x10000065
410#define PSICONV_ID_TEXTED_LAYOUT 0x10000066 1039#define PSICONV_ID_TEXTED_LAYOUT 0x10000066
411#define PSICONV_ID_TEXTED_TEXT 0x10000064 1040#define PSICONV_ID_TEXTED_TEXT 0x10000064
412#define PSICONV_ID_STYLE_REMOVABLE 0x1000004F 1041#define PSICONV_ID_STYLE_REMOVABLE 0x1000004F
413#define PSICONV_ID_STYLE_BUILT_IN 0x1000004C 1042#define PSICONV_ID_STYLE_BUILT_IN 0x1000004C
414#define PSICONV_ID_CLIPART_ITEM 0x10000040 1043#define PSICONV_ID_CLIPART_ITEM 0x10000040
1044#define PSICONV_ID_OBJECT 0x10000051
1045#define PSICONV_ID_OBJECT_DISPLAY_SECTION 0x10000146
1046#define PSICONV_ID_OBJECT_ICON_SECTION 0x1000012A
1047#define PSICONV_ID_OBJECT_SECTION_TABLE_SECTION 0x10000144
415 1048
416 1049
417/* Return a clean layout_status. You can modify it at will */ 1050/* Return a clean layout_status. You can modify it at will. Returns NULL
1051 if there is not enough memory. */
418extern psiconv_character_layout psiconv_basic_character_layout(void); 1052extern psiconv_character_layout psiconv_basic_character_layout(void);
419 1053
420/* Return a clean layout_status. You can modify it at will */ 1054/* Return a clean layout_status. You can modify it at will. Returns NULL
1055 if there is not enough memory. */
421extern psiconv_paragraph_layout psiconv_basic_paragraph_layout(void); 1056extern psiconv_paragraph_layout psiconv_basic_paragraph_layout(void);
422 1057
423/* Clone a layout_status: the new copy is completely independent of the 1058/* Clone a layout_status: the new copy is completely independent of the
424 original one */ 1059 original one. Returns NULL if there is not enough memory. */
425extern psiconv_paragraph_layout psiconv_clone_paragraph_layout 1060extern psiconv_paragraph_layout psiconv_clone_paragraph_layout
426 (psiconv_paragraph_layout ls); 1061 (psiconv_paragraph_layout ls);
427 1062
428extern psiconv_character_layout psiconv_clone_character_layout 1063extern psiconv_character_layout psiconv_clone_character_layout
429 (psiconv_character_layout ls); 1064 (psiconv_character_layout ls);
430 1065
431/* Get a numbered style */ 1066/* Get a numbered style. Returns NULL if the style is unknown. */
432extern psiconv_word_style psiconv_get_style (psiconv_word_styles_section ss, int nr); 1067extern psiconv_word_style psiconv_get_style (psiconv_word_styles_section ss, int nr);
1068/* Get a numbered formula. Returns NULL if the style is unknown. */
1069extern psiconv_formula psiconv_get_formula (psiconv_formula_list ss, int nr);
1070
1071/* Return the default layout */
1072extern psiconv_sheet_cell_layout psiconv_get_default_layout
1073 (psiconv_sheet_line_list row_defaults,
1074 psiconv_sheet_line_list col_defaults,
1075 psiconv_sheet_cell_layout cell_default,
1076 int row,int col);
433 1077
434extern void psiconv_free_color(psiconv_color color); 1078extern void psiconv_free_color(psiconv_color color);
435extern void psiconv_free_border(psiconv_border border); 1079extern void psiconv_free_border(psiconv_border border);
436extern void psiconv_free_bullet(psiconv_bullet bullet); 1080extern void psiconv_free_bullet(psiconv_bullet bullet);
437extern void psiconv_free_font(psiconv_font font); 1081extern void psiconv_free_font(psiconv_font font);
440extern void psiconv_free_paragraph_layout(psiconv_paragraph_layout layout); 1084extern void psiconv_free_paragraph_layout(psiconv_paragraph_layout layout);
441extern void psiconv_free_character_layout(psiconv_character_layout layout); 1085extern void psiconv_free_character_layout(psiconv_character_layout layout);
442extern void psiconv_free_word_style(psiconv_word_style style); 1086extern void psiconv_free_word_style(psiconv_word_style style);
443extern void psiconv_free_word_styles_section 1087extern void psiconv_free_word_styles_section
444 (psiconv_word_styles_section styles); 1088 (psiconv_word_styles_section styles);
1089extern void psiconv_free_formula(psiconv_formula formula);
1090extern void psiconv_free_formula_list(psiconv_formula_list list);
1091extern void psiconv_free_sheet_status_section
1092 (psiconv_sheet_status_section section);
1093extern void psiconv_free_sheet_cell_layout(psiconv_sheet_cell_layout layout);
1094extern void psiconv_free_sheet_grid_break_list
1095 (psiconv_sheet_grid_break_list list);
1096extern void psiconv_free_sheet_grid_size(psiconv_sheet_grid_size s);
1097extern void psiconv_free_sheet_grid_size_list
1098 (psiconv_sheet_grid_size_list list);
1099extern void psiconv_free_sheet_grid_section(psiconv_sheet_grid_section sec);
1100extern void psiconv_free_sheet_worksheet(psiconv_sheet_worksheet sheet);
1101extern void psiconv_free_sheet_worksheet_list
1102 (psiconv_sheet_worksheet_list list);
1103
1104extern void psiconv_free_sheet_f(psiconv_sheet_f file);
1105extern void psiconv_free_sheet_cell(psiconv_sheet_cell cell);
1106extern void psiconv_free_sheet_cell_list(psiconv_sheet_cell_list list);
1107extern void psiconv_free_sheet_numberformat
1108 (psiconv_sheet_numberformat numberformat);
1109extern void psiconv_free_sheet_line_list(psiconv_sheet_line_list list);
1110extern void psiconv_free_sheet_line(psiconv_sheet_line line);
1111extern void psiconv_free_sheet_name_section(psiconv_sheet_name_section section);
1112extern void psiconv_free_sheet_variable(psiconv_sheet_variable list);
1113extern void psiconv_free_sheet_variable_list(psiconv_sheet_variable_list list);
1114extern void psiconv_free_sheet_info_section(psiconv_sheet_info_section section);
1115extern void psiconv_free_sheet_workbook_section
1116 (psiconv_sheet_workbook_section section);
445extern void psiconv_free_header_section(psiconv_header_section header); 1117extern void psiconv_free_header_section(psiconv_header_section header);
446extern void psiconv_free_section_table_entry(psiconv_section_table_entry entry); 1118extern void psiconv_free_section_table_entry(psiconv_section_table_entry entry);
447extern void psiconv_free_section_table_section 1119extern void psiconv_free_section_table_section
448 (psiconv_section_table_section section); 1120 (psiconv_section_table_section section);
449extern void psiconv_free_application_id_section 1121extern void psiconv_free_application_id_section
450 (psiconv_application_id_section section); 1122 (psiconv_application_id_section section);
1123extern void psiconv_free_object_display_section
1124 (psiconv_object_display_section section);
1125extern void psiconv_free_object_icon_section
1126 (psiconv_object_icon_section section);
1127extern void psiconv_free_embedded_object_section
1128 (psiconv_embedded_object_section object);
451extern void psiconv_free_in_line_layout(psiconv_in_line_layout layout); 1129extern void psiconv_free_in_line_layout(psiconv_in_line_layout layout);
452extern void psiconv_free_in_line_layouts(psiconv_in_line_layouts layouts); 1130extern void psiconv_free_in_line_layouts(psiconv_in_line_layouts layouts);
453extern void psiconv_free_replacement(psiconv_replacement replacement); 1131extern void psiconv_free_replacement(psiconv_replacement replacement);
454extern void psiconv_free_replacements(psiconv_replacements replacements); 1132extern void psiconv_free_replacements(psiconv_replacements replacements);
455extern void psiconv_free_paragraph(psiconv_paragraph paragraph); 1133extern void psiconv_free_paragraph(psiconv_paragraph paragraph);
471extern void psiconv_free_sketch_f(psiconv_sketch_f file); 1149extern void psiconv_free_sketch_f(psiconv_sketch_f file);
472extern void psiconv_free_clipart_section(psiconv_clipart_section section); 1150extern void psiconv_free_clipart_section(psiconv_clipart_section section);
473extern void psiconv_free_cliparts(psiconv_cliparts section); 1151extern void psiconv_free_cliparts(psiconv_cliparts section);
474extern void psiconv_free_clipart_f(psiconv_clipart_f file); 1152extern void psiconv_free_clipart_f(psiconv_clipart_f file);
475 1153
476
477extern void psiconv_free_file(psiconv_file file); 1154extern void psiconv_free_file(psiconv_file file);
478 1155
1156extern int psiconv_compare_color(const psiconv_color value1,
1157 const psiconv_color value2);
1158extern int psiconv_compare_font(const psiconv_font value1,
1159 const psiconv_font value2);
1160extern int psiconv_compare_border(const psiconv_border value1,
1161 const psiconv_border value2);
1162extern int psiconv_compare_bullet(const psiconv_bullet value1,
1163 const psiconv_bullet value2);
1164extern int psiconv_compare_tab(const psiconv_tab value1,
1165 const psiconv_tab value2);
1166extern int psiconv_compare_all_tabs(const psiconv_all_tabs value1,
1167 const psiconv_all_tabs value2);
1168extern int psiconv_compare_paragraph_layout
1169 (const psiconv_paragraph_layout value1,
1170 const psiconv_paragraph_layout value2);
1171
1172extern int psiconv_compare_character_layout
1173 (const psiconv_character_layout value1,
1174 const psiconv_character_layout value2);
1175
1176/* Get a newly allocated file with sensible defaults, ready to generate. */
1177extern psiconv_file psiconv_empty_file(psiconv_file_type_t type);
1178
1179
1180#ifdef __cplusplus
1181}
1182#endif /* __cplusplus */
479 1183
480#endif /* def PSICONV_DATA_H */ 1184#endif /* def PSICONV_DATA_H */

Legend:
Removed from v.43  
changed lines
  Added in v.239

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