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

Legend:
Removed from v.90  
changed lines
  Added in v.188

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