blob: 7a8eb4d7fef57af64c42513ed7c7b93447cb9860 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#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_CHOSE 7
#define SC_OPCODE_OPEN 8 /* parentheses and separators */
#define SC_OPCODE_CLOSE 9
#define SC_OPCODE_SEP 10
#define SC_OPCODE_MISSING 11 /* special OpCodes */
#define SC_OPCODE_BAD 12
#define SC_OPCODE_SPACES 13
#define SC_OPCODE_MAT_REF 14
#define SC_OPCODE_DB_AREA 15 /* additional access operators */
#define SC_OPCODE_MACRO 16
#define SC_OPCODE_COL_ROW_NAME 17
#define SC_OPCODE_COL_ROW_NAME_AUTO 18
#define SC_OPCODE_PERCENT_SIGN 19 /* operator _follows_ value */
#define SC_OPCODE_ARRAY_OPEN 20
#define SC_OPCODE_ARRAY_CLOSE 21
#define SC_OPCODE_ARRAY_ROW_SEP 22
#define SC_OPCODE_ARRAY_COL_SEP 23 /* some convs use sep != col_sep */
#define SC_OPCODE_STOP_DIV 24
/*** 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
/*** 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_AVERAGE_IF 395
#define SC_OPCODE_XOR 396
#define SC_OPCODE_SUM_IFS 397
#define SC_OPCODE_AVERAGE_IFS 398
#define SC_OPCODE_COUNT_IFS 399
#define SC_OPCODE_LENB 400
#define SC_OPCODE_RIGHTB 401
#define SC_OPCODE_LEFTB 402
#define SC_OPCODE_MIDB 403
#define SC_OPCODE_STOP_2_PAR 404
#define SC_OPCODE_LAST_OPCODE_ID 403 /* last OpCode */
/*** Interna ***/
#define SC_OPCODE_INTERNAL_BEGIN 9999
#define SC_OPCODE_TTT 9999
#define SC_OPCODE_INTERNAL_END 9999
/*** from here on ExtraData contained ***/
#define SC_OPCODE_DATA_TOKEN_1 10000
#define SC_OPCODE_NONE 0xFFFF
#endif /* FORMULA_COMPILER_HRC */