File: biff.h

package info (click to toggle)
gretl 2025a-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 64,792 kB
  • sloc: ansic: 425,462; sh: 4,916; makefile: 3,251; cpp: 2,777; xml: 606; perl: 364
file content (293 lines) | stat: -rw-r--r-- 12,457 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
/**
 * ms-biff.h: MS Excel BIFF support for Gnumeric
 *
 * Author:
 *    Michael Meeks (michael@ximian.com)
 *
 * (C) 1998, 1999, 2000 Michael Meeks
 **/

#ifndef GNUMERIC_BIFF_H
#define GNUMERIC_BIFF_H

#include <libole2/ms-ole.h>

#undef EDEBUG

typedef struct _BiffQuery BiffQuery;

struct _BiffQuery {
    guint8  ms_op;
    guint8  ls_op;
    guint16 opcode;

    guint8  *data;
    int     data_malloced;
    guint32 length;

    guint32 streamPos;
    MsOleStream *pos;
};

typedef enum { 
    MS_BIFF_V2 = 2,
    MS_BIFF_V3 = 3,
    MS_BIFF_V4 = 4,
    MS_BIFF_V5 = 5, /* Excel 5.0 */
    MS_BIFF_V7 = 7, /* Excel 95 */
    MS_BIFF_V8 = 8, /* Excel 97 */
    MS_BIFF_V_UNKNOWN = 0
} MsBiffVersion;


/* Pass this a BiffQuery * */
#define EX_GETROW(p)      (MS_OLE_GET_GUINT16(p->data + 0))
#define EX_GETCOL(p)      (MS_OLE_GET_GUINT16(p->data + 2))
#define EX_GETXF(p)       (MS_OLE_GET_GUINT16(p->data + 4))
#define EX_GETSTRLEN(p)   (MS_OLE_GET_GUINT16(p->data + 6))

/* Version info types as found in various Biff records */
typedef enum { 
    MS_BIFF_TYPE_Workbook, 
    MS_BIFF_TYPE_VBModule, 
    MS_BIFF_TYPE_Worksheet,
    MS_BIFF_TYPE_Chart, 
    MS_BIFF_TYPE_Macrosheet, 
    MS_BIFF_TYPE_Workspace,
    MS_BIFF_TYPE_Unknown 
} MsBiffFileType;

/* Cell / XF types */
typedef enum { 
    MS_BIFF_H_VISIBLE, 
    MS_BIFF_H_HIDDEN,
    MS_BIFF_H_VERY_HIDDEN 
} MsBiffHidden;

typedef enum { 
    MS_BIFF_X_STYLE, 
    MS_BIFF_X_CELL 
} MsBiffXfType;

typedef enum { 
    MS_BIFF_F_MS, 
    MS_BIFF_F_LOTUS 
} MsBiffFormat;

typedef enum { 
    MS_BIFF_E_CONTEXT, 
    MS_BIFF_E_LEFT_TO_RIGHT,
    MS_BIFF_E_RIGHT_TO_LEFT 
} MsBiffEastern;

typedef struct {
    MsBiffVersion version;
    MsBiffFileType type;
} MsBiffBofData;

typedef enum {
    MsBiffMaxRowsV7 = 16384,
    MsBiffMaxRowsV8 = 65536
} MsBiffMaxRows;

int excel_book_get_info (const char *fname, wbook *book);
MsBiffBofData *new_ms_biff_bof_data  (BiffQuery *pos);
void free_ms_biff_bof_data (MsBiffBofData *data);
BiffQuery *ms_biff_query_new (MsOleStream *ptr);
int ms_biff_query_next (BiffQuery *bq);
void ms_biff_query_destroy (BiffQuery *bq);

/**
 * biff-types.h: A long and dull list of BIFF types.
 *
 * Author:
 *    Michael Meeks (michael@ximian.com)
 *
 * (C) 1998-2001 Michael Meeks
 **/

#define BIFF_DIMENSIONS                 0x00	/* 2, NOT 1,10 */
#define BIFF_BLANK                      0x01	/* 2, NOT 10 */
#define BIFF_NUMBER                     0x03	/* 2, NOT 1,10 */
#define BIFF_LABEL                      0x04	/* 2 */
#define BIFF_BOOLERR                    0x05	/* 2, NOT 10 */
#define BIFF_FORMULA                    0x06	/* 4, NOT 10 */
#define BIFF_STRING                     0x07	/* 2 */
#define BIFF_ROW                        0x08	/* 2 */
#define BIFF_BOF                        0x09	/* 8, NOT 10 */
#define BIFF_EOF                        0x0a	/* 0, NOT 10 */
#define BIFF_INDEX                      0x0b	/* 2, NOT 10 */
#define BIFF_CALCCOUNT                  0x0c	/* 0, NOT 10 */
#define BIFF_CALCMODE                   0x0d	/* 0, NOT 10 */
#define BIFF_PRECISION                  0x0e	/* 0 */
#define BIFF_REFMODE                    0x0f	/* 0 */
#define BIFF_DELTA                      0x10	/* 0 */
#define BIFF_ITERATION                  0x11	/* 0 */
#define BIFF_PROTECT                    0x12	/* 0 */
#define BIFF_PASSWORD                   0x13	/* 0 */
#define BIFF_HEADER                     0x14	/* 0, NOT 10 */
#define BIFF_FOOTER                     0x15	/* 0, NOT 10 */
#define BIFF_EXTERNCOUNT                0x16	/* 0, NOT 10 */
#define BIFF_EXTERNSHEET                0x17	/* 0, NOT 10 */
#define BIFF_NAME                       0x18	/* 2, NOT 10 */
#define BIFF_WINDOWPROTECT              0x19	/* 0, NOT 10 */
#define BIFF_VERTICALPAGEBREAKS         0x1a	/* 0, NOT 10 */
#define BIFF_HORIZONTALPAGEBREAKS       0x1b	/* 0, NOT 10 */
#define BIFF_NOTE                       0x1c	/* 0, NOT 10 */
#define BIFF_SELECTION                  0x1d	/* 0, NOT 10 */
#define BIFF_FORMAT                     0x1e	/* 4, NOT 10 */
#define BIFF_ARRAY                      0x21	/* 2, NOT 10 */
#define BIFF_1904                       0x22	/* 0, NOT 1,10 */
#define BIFF_EXTERNNAME                 0x23	/* 2 */
#define BIFF_DEFAULTROWHEIGHT		0x25	/* 2, NOT 10 */
#define BIFF_LEFT_MARGIN                0x26	/* 0, NOT 10 */
#define BIFF_RIGHT_MARGIN               0x27	/* 0, NOT 10 */
#define BIFF_TOP_MARGIN                 0x28	/* 0 */
#define BIFF_BOTTOM_MARGIN              0x29	/* 0 */
#define BIFF_PRINTHEADERS               0x2a	/* 0 */
#define BIFF_PRINTGRIDLINES             0x2b	/* 0 */
#define BIFF_FILEPASS                   0x2f	/* 0 */
#define BIFF_FONT                       0x31	/* 2 */
#define BIFF_PRINTSIZE                  0x33	/* 0, Undocumented */
#define BIFF_TABLE                      0x36	/* 2 */
#define BIFF_CONTINUE                   0x3c	/* 0, NOT 10 */
#define BIFF_WINDOW1                    0x3d	/* 0, NOT 1,10 */
#define BIFF_WINDOW2                    0x3e	/* 2, NOT 10 */
#define BIFF_BACKUP                     0x40	/* 0, NOT 10 */
#define BIFF_PANE                       0x41	/* 0, NOT 10 */
#define BIFF_CODEPAGE                   0x42	/* DUPLICATE 42 */
#define BIFF_XF_OLD                     0x43	/* What is this ?, NOT 10 */
#define BIFF_PLS                        0x4d	/* 0 */
#define BIFF_DCON                       0x50	/* 0, NOT 10 */
#define BIFF_DCONREF                    0x51	/* 0, NOT 10 */
#define BIFF_DCONNAME                   0x52	/* 0 */
#define BIFF_DEFCOLWIDTH                0x55	/* 0 */
#define BIFF_XCT                        0x59	/* 0 */
#define BIFF_CRN                        0x5a	/* 0 */
#define BIFF_FILESHARING                0x5b	/* 0, NOT 10 */
#define BIFF_WRITEACCESS                0x5c	/* 0 */
#define BIFF_OBJ                        0x5d	/* 0, NOT 10 */
#define BIFF_UNCALCED                   0x5e	/* 0 */
#define BIFF_SAVERECALC                 0x5f	/* 0 */
#define BIFF_TEMPLATE                   0x60	/* 0, NOT 1,10 */
#define BIFF_TAB_COLOR                  0x62	/* 8 */
#define BIFF_OBJPROTECT                 0x63	/* 0, NOT 10 */
#define BIFF_COLINFO                    0x7d	/* 0 */
#define BIFF_RK                         0x7e	/* 0 */
#define BIFF_IMDATA                     0x7f	/* 0 */
#define BIFF_GUTS                       0x80	/* 0 */
#define BIFF_WSBOOL                     0x81	/* 0 */
#define BIFF_GRIDSET                    0x82	/* 0 */
#define BIFF_HCENTER                    0x83	/* 0 */
#define BIFF_VCENTER                    0x84	/* 0 */
#define BIFF_BOUNDSHEET                 0x85	/* 0 */
#define BIFF_WRITEPROT                  0x86	/* 0 */
#define BIFF_ADDIN                      0x87	/* 0 */
#define BIFF_EDG                        0x88	/* 0 */
#define BIFF_PUB                        0x89	/* 0 */
#define BIFF_COUNTRY                    0x8c	/* 0 */
#define BIFF_HIDEOBJ                    0x8d	/* 0 */
#define BIFF_SORT                       0x90	/* 0 */
#define BIFF_SUB                        0x91	/* 0 */
#define BIFF_PALETTE                    0x92	/* 0 */
#define BIFF_STYLE                      0x93	/* 2 */
#define BIFF_LHRECORD                   0x94	/* 0 */
#define BIFF_LHNGRAPH                   0x95	/* 0 */
#define BIFF_SOUND                      0x96	/* 0 */
#define BIFF_LPR                        0x98	/* 0 */
#define BIFF_STANDARDWIDTH              0x99	/* 0 */
#define BIFF_FNGROUPNAME                0x9a	/* 0 */
#define BIFF_FILTERMODE                 0x9b	/* 0 */
#define BIFF_FNGROUPCOUNT               0x9c	/* 0 */
#define BIFF_AUTOFILTERINFO             0x9d	/* 0 */
#define BIFF_AUTOFILTER                 0x9e	/* 0 */
#define BIFF_SCL                        0xa0	/* 0 */
#define BIFF_SETUP                      0xa1	/* 0 */
#define BIFF_COORDLIST                  0xa9	/* 0 NOT 1 */
#define BIFF_GCW                        0xab	/* 0 NOT 1 */
#define BIFF_SCENMAN                    0xae	/* 0 NOT 1 */
#define BIFF_SCENARIO                   0xaf	/* 0 NOT 1 */
#define BIFF_SXVIEW                     0xb0	/* 0 */
#define BIFF_SXVD                       0xb1	/* 0 NOT 1 */
#define BIFF_SXVI                       0xb2	/* 0 NOT 1 */
#define BIFF_SXIVD                      0xb4	/* 0 */
#define BIFF_SXLI                       0xb5	/* 0 NOT 1 */
#define BIFF_SXPI                       0xb6	/* 0 NOT 1 */
#define BIFF_DOCROUTE                   0xb8	/* 0 NOT 1 */
#define BIFF_RECIPNAME                  0xb9	/* 0 */
#define BIFF_SHRFMLA                    0xbc	/* 0 NOT 1 */
#define BIFF_MULRK                      0xbd	/* 0 */
#define BIFF_MULBLANK                   0xbe	/* 0 NOT 1 */
#define BIFF_MMS                        0xc1	/* 0 */
#define BIFF_ADDMENU                    0xc2	/* 0 */
#define BIFF_DELMENU                    0xc3	/* 0 */
#define BIFF_SXDI                       0xc5	/* 0 */
#define BIFF_SXDB                       0xc6	/* 0 */
#define BIFF_SXSTRING                   0xcd	/* 0 */
#define BIFF_SXTBL                      0xd0	/* 0 */
#define BIFF_SXTBRGIITM                 0xd1	/* 0 */
#define BIFF_SXTBPG                     0xd2	/* 0 */
#define BIFF_OBPROJ                     0xd3	/* 0 */
#define BIFF_SXIDSTM                    0xd5	/* 0 */
#define BIFF_RSTRING                    0xd6	/* 0 */
#define BIFF_DBCELL                     0xd7	/* 0 */
#define BIFF_BOOKBOOL                   0xda	/* 0 */
#define BIFF_PARAMQRY                   0xdc	/* DUPLICATE dc */
#define BIFF_SXEXT                      0xdc	/* DUPLICATE dc */
#define BIFF_SCENPROTECT                0xdd	/* 0 */
#define BIFF_OLESIZE                    0xde	/* 0 */
#define BIFF_UDDESC                     0xdf	/* 0 */
#define BIFF_XF                         0xe0	/* 0 */
#define BIFF_INTERFACEHDR               0xe1	/* 0 */
#define BIFF_INTERFACEEND               0xe2	/* 0 */
#define BIFF_SXVX                       0xe3	/* 0 */
#define BIFF_MERGECELLS                 0xe5	/* Undocumented */
#define BIFF_BG_PIC                 	0xe9	/* Undocumented */
#define BIFF_TABIDCONF                  0xea	/* 0 */
#define BIFF_MS_O_DRAWING_GROUP         0xeb	/* 0 */
#define BIFF_MS_O_DRAWING               0xec	/* 0 */
#define BIFF_MS_O_DRAWING_SELECTION     0xed	/* 0 */
#define BIFF_PHONETIC			0xef	/* semi-Undocumented */
#define BIFF_SXRULE                     0xf0	/* 0 */
#define BIFF_SXEX                       0xf1	/* 0 */
#define BIFF_SXFILT                     0xf2	/* 0 */
#define BIFF_SXNAME                     0xf6	/* 0 */
#define BIFF_SXSELECT                   0xf7	/* 0 */
#define BIFF_SXPAIR                     0xf8	/* 0 */
#define BIFF_SXFMLA                     0xf9	/* 0 */
#define BIFF_SXFORMAT                   0xfb	/* 0 */
#define BIFF_SST                        0xfc	/* 0 */
#define BIFF_LABELSST                   0xfd	/* 0 */
#define BIFF_EXTSST                     0xff	/* 0 */

/* Odd balls */
#define BIFF_SXVDEX                    0x100	/* ONLY 1 */
#define BIFF_SXFORMULA                 0x103	/* ONLY 1 */
#define BIFF_SXDBEX                    0x122	/* ONLY 1 */
#define BIFF_TABID                     0x13d	/* ONLY 1 */
#define BIFF_USESELFS                  0x160	/* ONLY 1 */
#define BIFF_DSF                       0x161	/* ONLY 1 */
#define BIFF_XL5MODIFY                 0x162	/* ONLY 1 */
#define BIFF_FILESHARING2              0x1a5
#define BIFF_USERDBVIEW                0x1a9	/* ONLY 1 */
#define BIFF_USERSVIEWBEGIN            0x1aa
#define BIFF_USERSVIEWEND              0x1ab	/* ONLY 1 */
#define BIFF_QSI                       0x1ad
#define BIFF_SUPBOOK                   0x1ae	/* ONLY 1 */
#define BIFF_PROT4REV                  0x1af	/* ONLY 1 */
#define BIFF_CONDFMT                   0x1b0	/* ONLY 1 */
#define BIFF_CF                        0x1b1	/* ONLY 1 */
#define BIFF_DVAL                      0x1b2	/* ONLY 1 */
#define BIFF_DCONBIN                   0x1b5	/* ONLY 1 */
#define BIFF_TXO                       0x1b6	/* ONLY 1 */
#define BIFF_REFRESHALL                0x1b7	/* ONLY 1 */
#define BIFF_HLINK                     0x1b8	/* ONLY 1 */
#define BIFF_CODENAME                  0x1ba	/* ONLY 1, TYPO in MS Docs */
#define BIFF_SXFDBTYPE                 0x1bb
#define BIFF_PROT4REVPASS              0x1bc	/* ONLY 1 */
#define BIFF_DV                        0x1be	/* ONLY 1 */
#define BIFF_XL9FILE		       0x1c0	/* ONLY 1 */
#define BIFF_RECALCID		       0x1c1	/* ONLY 1 */
#define BIFF_UNKNOWN_1		       0x810	/* what this is */

#endif /* GNUMERIC_BIFF_H */