summaryrefslogtreecommitdiff
path: root/include/formula/compiler.hrc
blob: e11f82594729f504097c0161ddd5d4f1bc9ea0a7 (plain)
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
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */

#ifndef FORMULA_COMPILER_HRC
#define FORMULA_COMPILER_HRC

/* Central definition of OpCodes for spreadsheet functions */

/*** Special commands ***/
#define SC_OPCODE_PUSH                0     /* internal commands */
#define SC_OPCODE_CALL                1
#define SC_OPCODE_STOP                2
#define SC_OPCODE_EXTERNAL            3
#define SC_OPCODE_NAME                4
#define SC_OPCODE_EXTERNAL_REF        5
#define SC_OPCODE_IF                  6     /* jump commands */
#define SC_OPCODE_IF_ERROR            7
#define SC_OPCODE_IF_NA               8
#define SC_OPCODE_CHOSE               9
#define SC_OPCODE_OPEN               10     /* parentheses and separators */
#define SC_OPCODE_CLOSE              11
#define SC_OPCODE_SEP                12
#define SC_OPCODE_MISSING            13     /* special OpCodes */
#define SC_OPCODE_BAD                14
#define SC_OPCODE_STRINGXML          15
#define SC_OPCODE_SPACES             16
#define SC_OPCODE_MAT_REF            17
#define SC_OPCODE_DB_AREA            18     /* additional access operators */
#define SC_OPCODE_MACRO              19
#define SC_OPCODE_COL_ROW_NAME       20
#define SC_OPCODE_COL_ROW_NAME_AUTO  21
#define SC_OPCODE_PERCENT_SIGN       22     /* operator _follows_ value */
#define SC_OPCODE_ARRAY_OPEN         23
#define SC_OPCODE_ARRAY_CLOSE        24
#define SC_OPCODE_ARRAY_ROW_SEP      25
#define SC_OPCODE_ARRAY_COL_SEP      26     /* some convs use sep != col_sep */
#define SC_OPCODE_STOP_DIV           27
#define SC_OPCODE_SKIP               28     /* used to skip raw tokens during string compilation */

/*** error constants #... ***/
#define SC_OPCODE_START_ERRORS       30
#define SC_OPCODE_ERROR_NULL         30
#define SC_OPCODE_ERROR_DIVZERO      31
#define SC_OPCODE_ERROR_VALUE        32
#define SC_OPCODE_ERROR_REF          33
#define SC_OPCODE_ERROR_NAME         34
#define SC_OPCODE_ERROR_NUM          35
#define SC_OPCODE_ERROR_NA           36
#define SC_OPCODE_STOP_ERRORS        37

/*** Binary operators ***/
#define SC_OPCODE_START_BIN_OP       40
#define SC_OPCODE_ADD                40
#define SC_OPCODE_SUB                41
#define SC_OPCODE_MUL                42
#define SC_OPCODE_DIV                43
#define SC_OPCODE_AMPERSAND          44
#define SC_OPCODE_POW                45
#define SC_OPCODE_EQUAL              46
#define SC_OPCODE_NOT_EQUAL          47
#define SC_OPCODE_LESS               48
#define SC_OPCODE_GREATER            49
#define SC_OPCODE_LESS_EQUAL         50
#define SC_OPCODE_GREATER_EQUAL      51
#define SC_OPCODE_AND                52
#define SC_OPCODE_OR                 53
#define SC_OPCODE_INTERSECT          54
#define SC_OPCODE_UNION              55
#define SC_OPCODE_RANGE              56
#define SC_OPCODE_STOP_BIN_OP        57

/* NOTE: binary and unary operators must be in sequence for compiler! */

/*** Unary operators ***/
#define SC_OPCODE_START_UN_OP        60
#define SC_OPCODE_NOT                60
#define SC_OPCODE_NEG                61
#define SC_OPCODE_NEG_SUB            62
#define SC_OPCODE_STOP_UN_OP         63

#define SC_OPCODE_START_FUNCTION     65

/*** Functions without parameters ***/
#define SC_OPCODE_START_NO_PAR       65
#define SC_OPCODE_PI                 65
#define SC_OPCODE_RANDOM             66
#define SC_OPCODE_TRUE               67
#define SC_OPCODE_FALSE              68
#define SC_OPCODE_GET_ACT_DATE       69
#define SC_OPCODE_GET_ACT_TIME       70
#define SC_OPCODE_NO_VALUE           71
#define SC_OPCODE_CURRENT            72
#define SC_OPCODE_STOP_NO_PAR        73

/*** Functions with one parameter ***/
#define SC_OPCODE_START_1_PAR        80
#define SC_OPCODE_DEG                80     /* trigonometric */
#define SC_OPCODE_RAD                81
#define SC_OPCODE_SIN                82
#define SC_OPCODE_COS                83
#define SC_OPCODE_TAN                84
#define SC_OPCODE_COT                85
#define SC_OPCODE_ARC_SIN            86
#define SC_OPCODE_ARC_COS            87
#define SC_OPCODE_ARC_TAN            88
#define SC_OPCODE_ARC_COT            89
#define SC_OPCODE_SIN_HYP            90
#define SC_OPCODE_COS_HYP            91
#define SC_OPCODE_TAN_HYP            92
#define SC_OPCODE_COT_HYP            93
#define SC_OPCODE_ARC_SIN_HYP        94     /* transcendent */
#define SC_OPCODE_ARC_COS_HYP        95
#define SC_OPCODE_ARC_TAN_HYP        96
#define SC_OPCODE_ARC_COT_HYP        97
#define SC_OPCODE_COSECANT           98
#define SC_OPCODE_SECANT             99
#define SC_OPCODE_COSECANT_HYP      100
#define SC_OPCODE_SECANT_HYP        101
#define SC_OPCODE_EXP               102
#define SC_OPCODE_LN                103
#define SC_OPCODE_SQRT              104
#define SC_OPCODE_FACT              105
#define SC_OPCODE_GET_YEAR          106     /* date and time */
#define SC_OPCODE_GET_MONTH         107
#define SC_OPCODE_GET_DAY           108
#define SC_OPCODE_GET_HOUR          109
#define SC_OPCODE_GET_MIN           110
#define SC_OPCODE_GET_SEC           111
#define SC_OPCODE_PLUS_MINUS        112     /* miscellaneous */
#define SC_OPCODE_ABS               113
#define SC_OPCODE_INT               114
#define SC_OPCODE_PHI               115
#define SC_OPCODE_GAUSS             116
#define SC_OPCODE_IS_EMPTY          117     /* obtain type */
#define SC_OPCODE_IS_STRING         118
#define SC_OPCODE_IS_NON_STRING     119
#define SC_OPCODE_IS_LOGICAL        120
#define SC_OPCODE_TYPE              121
#define SC_OPCODE_IS_REF            122
#define SC_OPCODE_IS_VALUE          123
#define SC_OPCODE_IS_FORMULA        124
#define SC_OPCODE_IS_NV             125
#define SC_OPCODE_IS_ERR            126
#define SC_OPCODE_IS_ERROR          127
#define SC_OPCODE_IS_EVEN           128
#define SC_OPCODE_IS_ODD            129
#define SC_OPCODE_N                 130
#define SC_OPCODE_GET_DATE_VALUE    131     /* string functions */
#define SC_OPCODE_GET_TIME_VALUE    132
#define SC_OPCODE_CODE              133
#define SC_OPCODE_TRIM              134
#define SC_OPCODE_UPPER             135
#define SC_OPCODE_PROPPER           136
#define SC_OPCODE_LOWER             137
#define SC_OPCODE_LEN               138
#define SC_OPCODE_T                 139     /* miscellaneous, part 21 */
#define SC_OPCODE_VALUE             140
#define SC_OPCODE_CLEAN             141
#define SC_OPCODE_CHAR              142
#define SC_OPCODE_LOG10             143
#define SC_OPCODE_EVEN              144
#define SC_OPCODE_ODD               145
#define SC_OPCODE_STD_NORM_DIST     146
#define SC_OPCODE_FISHER            147
#define SC_OPCODE_FISHER_INV        148
#define SC_OPCODE_S_NORM_INV        149
#define SC_OPCODE_GAMMA_LN          150
#define SC_OPCODE_ERROR_TYPE        151
#define SC_OPCODE_ERR_CELL          152
#define SC_OPCODE_FORMULA           153
#define SC_OPCODE_ARABIC            154
#define SC_OPCODE_INFO              155
#define SC_OPCODE_BAHTTEXT          156
#define SC_OPCODE_JIS               157
#define SC_OPCODE_ASC               158
#define SC_OPCODE_UNICODE           159
#define SC_OPCODE_UNICHAR           160
#define SC_OPCODE_GAMMA             161
#define SC_OPCODE_STOP_1_PAR        162

/*** Functions with more than one parameters ***/
#define SC_OPCODE_START_2_PAR       201
#define SC_OPCODE_ARC_TAN_2         201
#define SC_OPCODE_CEIL              202
#define SC_OPCODE_FLOOR             203
#define SC_OPCODE_ROUND             204
#define SC_OPCODE_ROUND_UP          205
#define SC_OPCODE_ROUND_DOWN        206
#define SC_OPCODE_TRUNC             207
#define SC_OPCODE_LOG               208
#define SC_OPCODE_POWER             209
#define SC_OPCODE_GGT               210
#define SC_OPCODE_KGV               211
#define SC_OPCODE_MOD               212
#define SC_OPCODE_SUM_PRODUCT       213
#define SC_OPCODE_SUM_SQ            214
#define SC_OPCODE_SUM_X2MY2         215
#define SC_OPCODE_SUM_X2DY2         216
#define SC_OPCODE_SUM_XMY2          217
#define SC_OPCODE_GET_DATE          218
#define SC_OPCODE_GET_TIME          219
#define SC_OPCODE_GET_DIFF_DATE     220
#define SC_OPCODE_GET_DIFF_DATE_360 221
#define SC_OPCODE_MIN               222
#define SC_OPCODE_MAX               223
#define SC_OPCODE_SUM               224
#define SC_OPCODE_PRODUCT           225
#define SC_OPCODE_AVERAGE           226
#define SC_OPCODE_COUNT             227
#define SC_OPCODE_COUNT_2           228
#define SC_OPCODE_NBW               229
#define SC_OPCODE_IKV               230
#define SC_OPCODE_VAR               231
#define SC_OPCODE_VAR_P             232
#define SC_OPCODE_ST_DEV            233
#define SC_OPCODE_ST_DEV_P          234
#define SC_OPCODE_B                 235
#define SC_OPCODE_NORM_DIST         236
#define SC_OPCODE_EXP_DIST          237
#define SC_OPCODE_BINOM_DIST        238
#define SC_OPCODE_POISSON_DIST      239
#define SC_OPCODE_KOMBIN            240
#define SC_OPCODE_KOMBIN_2          241
#define SC_OPCODE_VARIATIONEN       242
#define SC_OPCODE_VARIATIONEN_2     243
#define SC_OPCODE_BW                244
#define SC_OPCODE_DIA               245
#define SC_OPCODE_GDA               246
#define SC_OPCODE_GDA_2             247
#define SC_OPCODE_VBD               248
#define SC_OPCODE_LAUFZ             249
#define SC_OPCODE_LIA               250
#define SC_OPCODE_RMZ               251
#define SC_OPCODE_COLUMNS           252
#define SC_OPCODE_ROWS              253
#define SC_OPCODE_COLUMN            254
#define SC_OPCODE_ROW               255
#define SC_OPCODE_ZGZ               256
#define SC_OPCODE_ZW                257
#define SC_OPCODE_ZZR               258
#define SC_OPCODE_ZINS              259
#define SC_OPCODE_ZINS_Z            260
#define SC_OPCODE_KAPZ              261
#define SC_OPCODE_KUM_ZINS_Z        262
#define SC_OPCODE_KUM_KAP_Z         263
#define SC_OPCODE_EFFEKTIV          264
#define SC_OPCODE_NOMINAL           265
#define SC_OPCODE_SUB_TOTAL         266
#define SC_OPCODE_DB_SUM            267     /* database functions */
#define SC_OPCODE_DB_COUNT          268
#define SC_OPCODE_DB_COUNT_2        269
#define SC_OPCODE_DB_AVERAGE        270
#define SC_OPCODE_DB_GET            271
#define SC_OPCODE_DB_MAX            272
#define SC_OPCODE_DB_MIN            273
#define SC_OPCODE_DB_PRODUCT        274
#define SC_OPCODE_DB_STD_DEV        275
#define SC_OPCODE_DB_STD_DEV_P      276
#define SC_OPCODE_DB_VAR            277
#define SC_OPCODE_DB_VAR_P          278
#define SC_OPCODE_INDIRECT          279     /* management functions */
#define SC_OPCODE_ADDRESS           280
#define SC_OPCODE_MATCH             281
#define SC_OPCODE_COUNT_EMPTY_CELLS 282
#define SC_OPCODE_COUNT_IF          283
#define SC_OPCODE_SUM_IF            284
#define SC_OPCODE_LOOKUP            285
#define SC_OPCODE_V_LOOKUP          286
#define SC_OPCODE_H_LOOKUP          287
#define SC_OPCODE_MULTI_AREA        288
#define SC_OPCODE_OFFSET            289
#define SC_OPCODE_INDEX             290
#define SC_OPCODE_AREAS             291
#define SC_OPCODE_CURRENCY          292     /* string functions */
#define SC_OPCODE_REPLACE           293
#define SC_OPCODE_FIXED             294
#define SC_OPCODE_FIND              295
#define SC_OPCODE_EXACT             296
#define SC_OPCODE_LEFT              297
#define SC_OPCODE_RIGHT             298
#define SC_OPCODE_SEARCH            299
#define SC_OPCODE_MID               300
#define SC_OPCODE_TEXT              301
#define SC_OPCODE_SUBSTITUTE        302
#define SC_OPCODE_REPT              303
#define SC_OPCODE_CONCAT            304
#define SC_OPCODE_MAT_VALUE         305     /* matrix functions */
#define SC_OPCODE_MAT_DET           306
#define SC_OPCODE_MAT_INV           307
#define SC_OPCODE_MAT_MULT          308
#define SC_OPCODE_MAT_TRANS         309
#define SC_OPCODE_MATRIX_UNIT       310
#define SC_OPCODE_BACK_SOLVER       311     /* BackSolver */
#define SC_OPCODE_HYP_GEOM_DIST     312     /* statistical functions */
#define SC_OPCODE_LOG_NORM_DIST     313
#define SC_OPCODE_T_DIST            314
#define SC_OPCODE_F_DIST            315
#define SC_OPCODE_CHI_DIST          316
#define SC_OPCODE_WEIBULL           317
#define SC_OPCODE_NEG_BINOM_VERT    318
#define SC_OPCODE_KRIT_BINOM        319
#define SC_OPCODE_KURT              320
#define SC_OPCODE_HAR_MEAN          321
#define SC_OPCODE_GEO_MEAN          322
#define SC_OPCODE_STANDARD          323
#define SC_OPCODE_AVE_DEV           324
#define SC_OPCODE_SCHIEFE           325
#define SC_OPCODE_DEV_SQ            326
#define SC_OPCODE_MEDIAN            327
#define SC_OPCODE_MODAL_VALUE       328
#define SC_OPCODE_Z_TEST            329
#define SC_OPCODE_T_TEST            330
#define SC_OPCODE_RANK              331
#define SC_OPCODE_PERCENTILE        332
#define SC_OPCODE_PERCENT_RANK      333
#define SC_OPCODE_LARGE             334
#define SC_OPCODE_SMALL             335
#define SC_OPCODE_FREQUENCY         336
#define SC_OPCODE_QUARTILE          337
#define SC_OPCODE_NORM_INV          338
#define SC_OPCODE_CONFIDENCE        339
#define SC_OPCODE_F_TEST            340
#define SC_OPCODE_TRIM_MEAN         341
#define SC_OPCODE_PROB              342
#define SC_OPCODE_CORREL            343
#define SC_OPCODE_COVAR             344
#define SC_OPCODE_PEARSON           345
#define SC_OPCODE_RSQ               346
#define SC_OPCODE_STEYX             347
#define SC_OPCODE_SLOPE             348
#define SC_OPCODE_INTERCEPT         349
#define SC_OPCODE_TREND             350
#define SC_OPCODE_GROWTH            351
#define SC_OPCODE_RGP               352
#define SC_OPCODE_RKP               353
#define SC_OPCODE_FORECAST          354
#define SC_OPCODE_CHI_INV           355
#define SC_OPCODE_GAMMA_DIST        356
#define SC_OPCODE_GAMMA_INV         357
#define SC_OPCODE_T_INV             358
#define SC_OPCODE_F_INV             359
#define SC_OPCODE_CHI_TEST          360
#define SC_OPCODE_LOG_INV           361
#define SC_OPCODE_TABLE_OP          362
#define SC_OPCODE_BETA_DIST         363
#define SC_OPCODE_BETA_INV          364
#define SC_OPCODE_WEEK              365     /* miscellaneous */
#define SC_OPCODE_GET_DAY_OF_WEEK   366
#define SC_OPCODE_NO_NAME           367
#define SC_OPCODE_STYLE             368
#define SC_OPCODE_DDE               369
#define SC_OPCODE_BASE              370
#define SC_OPCODE_TABLE             371
#define SC_OPCODE_TABLES            372
#define SC_OPCODE_MIN_A             373
#define SC_OPCODE_MAX_A             374
#define SC_OPCODE_AVERAGE_A         375
#define SC_OPCODE_ST_DEV_A          376
#define SC_OPCODE_ST_DEV_P_A        377
#define SC_OPCODE_VAR_A             378
#define SC_OPCODE_VAR_P_A           379
#define SC_OPCODE_EASTERSUNDAY      380
#define SC_OPCODE_DECIMAL           381
#define SC_OPCODE_CONVERT           382
#define SC_OPCODE_ROMAN             383
#define SC_OPCODE_MIRR              384
#define SC_OPCODE_CELL              385
#define SC_OPCODE_ISPMT             386
#define SC_OPCODE_HYPERLINK         387
#define SC_OPCODE_INDIRECT_XL       388     /* See also INDIRECT for OOO variant */
#define SC_OPCODE_ADDRESS_XL        389     /* See also ADRESS for OOO variant */
#define SC_OPCODE_GET_PIVOT_DATA    390
#define SC_OPCODE_EUROCONVERT       391
#define SC_OPCODE_NUMBERVALUE       392
#define SC_OPCODE_CHISQ_DIST        393
#define SC_OPCODE_CHISQ_INV         394
#define SC_OPCODE_BITAND            395
#define SC_OPCODE_BITOR             396
#define SC_OPCODE_BITXOR            397
#define SC_OPCODE_BITRSHIFT         398
#define SC_OPCODE_BITLSHIFT         399
#define SC_OPCODE_GET_DATEDIF       400
#define SC_OPCODE_XOR               401
#define SC_OPCODE_AVERAGE_IF        402
#define SC_OPCODE_SUM_IFS           403
#define SC_OPCODE_AVERAGE_IFS       404
#define SC_OPCODE_COUNT_IFS         405
#define SC_OPCODE_SKEWP             406
#define SC_OPCODE_LENB              407
#define SC_OPCODE_RIGHTB            408
#define SC_OPCODE_LEFTB             409
#define SC_OPCODE_MIDB              410
#define SC_OPCODE_FILTERXML         411
#define SC_OPCODE_WEBSERVICE        412
#define SC_OPCODE_COVARIANCE_S      413
#define SC_OPCODE_COVARIANCE_P      414
#define SC_OPCODE_ST_DEV_P_MS       415
#define SC_OPCODE_ST_DEV_S          416
#define SC_OPCODE_VAR_P_MS          417
#define SC_OPCODE_VAR_S             418
#define SC_OPCODE_BETA_DIST_MS      419
#define SC_OPCODE_BETA_INV_MS       420
#define SC_OPCODE_BINOM_DIST_MS     421
#define SC_OPCODE_BINOM_INV         422
#define SC_OPCODE_CHI_DIST_MS       423
#define SC_OPCODE_CHI_INV_MS        424
#define SC_OPCODE_CHI_TEST_MS       425
#define SC_OPCODE_CHISQ_DIST_MS     426
#define SC_OPCODE_CHISQ_INV_MS      427
#define SC_OPCODE_CONFIDENCE_N      428
#define SC_OPCODE_CONFIDENCE_T      429
#define SC_OPCODE_F_DIST_LT         430
#define SC_OPCODE_F_DIST_RT         431
#define SC_OPCODE_F_INV_LT          432
#define SC_OPCODE_F_INV_RT          433
#define SC_OPCODE_F_TEST_MS         434
#define SC_OPCODE_EXP_DIST_MS       435
#define SC_OPCODE_HYP_GEOM_DIST_MS  436
#define SC_OPCODE_POISSON_DIST_MS   437
#define SC_OPCODE_WEIBULL_MS        438

#define SC_OPCODE_STOP_2_PAR        439     /* last function with two or more parameters' OpCode + 1 */
#define SC_OPCODE_STOP_FUNCTION     SC_OPCODE_STOP_2_PAR            /* last function's OpCode + 1 */
#define SC_OPCODE_LAST_OPCODE_ID    (SC_OPCODE_STOP_FUNCTION - 1)   /* last OpCode */

/*** Internal ***/
#define SC_OPCODE_INTERNAL_BEGIN   9999
#define SC_OPCODE_TTT              9999
#define SC_OPCODE_DEBUG_VAR       10000
#define SC_OPCODE_INTERNAL_END    10000

/*** from here on ExtraData contained ***/
#define SC_OPCODE_DATA_TOKEN_1    10001

#define SC_OPCODE_NONE           0xFFFF


#endif /* FORMULA_COMPILER_HRC */

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */