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
|
/* -*- 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 INCLUDED_BASIC_SBXDEF_HXX
#define INCLUDED_BASIC_SBXDEF_HXX
#ifndef __RSC
#include <tools/errcode.hxx>
enum SbxClassType { // SBX-class-IDs (order is important!)
SbxCLASS_DONTCARE = 1, // don't care (search, not 0 due to StarBASIC)
SbxCLASS_ARRAY, // Array of SbxVariables
SbxCLASS_VALUE, // simple value
SbxCLASS_VARIABLE, // Variable (from here there is Broadcaster)
SbxCLASS_METHOD, // Method (Function or Sub)
SbxCLASS_PROPERTY, // Property
SbxCLASS_OBJECT // Object
};
enum SbxDataType {
SbxEMPTY = 0, // * Uninitialized
SbxNULL = 1, // * Contains no valid data
SbxINTEGER = 2, // * Integer (sal_Int16)
SbxLONG = 3, // * Long integer (sal_Int32)
SbxSINGLE = 4, // * Single-precision floating point number (float)
SbxDOUBLE = 5, // * Double-precision floating point number (double)
SbxCURRENCY = 6, // Currency (sal_Int64)
SbxDATE = 7, // * Date (double)
SbxSTRING = 8, // * String (StarView)
SbxOBJECT = 9, // * SbxBase object pointer
SbxERROR = 10, // * Error (sal_uInt16)
SbxBOOL = 11, // * Boolean (0 or -1)
SbxVARIANT = 12, // * Display for variant datatype
SbxDATAOBJECT = 13, // * Common data object w/o ref count
SbxCHAR = 16, // * signed char
SbxBYTE = 17, // * unsigned char
SbxUSHORT = 18, // * unsigned short (sal_uInt16)
SbxULONG = 19, // * unsigned long (sal_uInt32)
//deprecated: // old 64bit types kept for backward compatibility in file I/O
SbxLONG64 = 20, // moved to SbxSALINT64 as 64bit int
SbxULONG64 = 21, // moved to SbxSALUINT64 as 64bit int
SbxINT = 22, // * signed machine-dependent int
SbxUINT = 23, // * unsigned machine-dependent int
SbxVOID = 24, // * no value (= SbxEMPTY)
SbxHRESULT = 25, // HRESULT
SbxPOINTER = 26, // generic pointer
SbxDIMARRAY = 27, // dimensioned array
SbxCARRAY = 28, // C style array
SbxUSERDEF = 29, // user defined
SbxLPSTR = 30, // * null terminated string
SbxLPWSTR = 31, // wide null terminated string
SbxCoreSTRING = 32, // from 1997-4-10 for GetCoreString(), only for converting<
SbxWSTRING = 33, // from 2000-10-4 Reimplemented for backwards compatibility (#78919)
SbxWCHAR = 34, // from 2000-10-4 Reimplemented for backwards compatibility (#78919)
SbxSALINT64 = 35, // for currency internal, signed 64-bit int and UNO hyper
SbxSALUINT64= 36, // for currency internal, unsigned 64-bit int and UNO unsigned hyper
SbxDECIMAL = 37, // for UNO/automation Decimal
SbxVECTOR = 0x1000, // simple counted array
SbxARRAY = 0x2000, // array
SbxBYREF = 0x4000, // access by reference
SbxSV1 = 128, // first defined data type for StarView
SbxMEMORYSTREAM, // SvMemoryStream
SbxSTORAGE, // SvStorage
SbxUSER1 = 256, // first user defined data type
SbxUSERn = 2047 // last user defined data type
};
const sal_uInt32 SBX_TYPE_WITH_EVENTS_FLAG = 0x10000;
const sal_uInt32 SBX_TYPE_DIM_AS_NEW_FLAG = 0x20000;
const sal_uInt32 SBX_FIXED_LEN_STRING_FLAG = 0x10000; // same value as above as no conflict possible
const sal_uInt32 SBX_TYPE_VAR_TO_DIM_FLAG = 0x40000;
enum SbxOperator {
// Arithmetical:
SbxEXP, // this ^ var
SbxMUL, // this * var
SbxDIV, // this / var
SbxMOD, // this MOD var (max INT32!)
SbxPLUS, // this + var
SbxMINUS, // this - var
SbxNEG, // -this (var is ignored)
SbxIDIV, // this / var (both operands max. sal_Int32!)
// Boolean operators (max sal_Int32!):
// Boolean operators (TODO deprecate this limit: max INT32!)
SbxAND, // this & var
SbxOR, // this | var
SbxXOR, // this ^ var
SbxEQV, // ~this ^ var
SbxIMP, // ~this | var
SbxNOT, // ~this (var is ignored)
// String concatenation:
SbxCAT, // this & var (VBA: this + var)
// Comparisons:
SbxEQ, // this = var
SbxNE, // this <> var
SbxLT, // this < var
SbxGT, // this > var
SbxLE, // this <= var
SbxGE // this >= var
};
enum SbxNameType { // Type of the questioned name of a variable
SbxNAME_NONE, // plain name
SbxNAME_SHORT, // Name(A,B)
SbxNAME_SHORT_TYPES, // Name%(A%,B$)
SbxNAME_LONG_TYPES // Name(A As Integer, B As String) As Integer
};
// from 1996/3/20: New error messages
typedef sal_uIntPtr SbxError; // Preserve old type
#endif
// New error codes per define
#define ERRCODE_SBX_OK ERRCODE_NONE // processed
#define ERRCODE_SBX_SYNTAX (1UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_COMPILER)
#define ERRCODE_SBX_NOTIMP (2UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_NOTSUPPORTED)
#define ERRCODE_SBX_OVERFLOW (3UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_SBX) // overflow
#define ERRCODE_SBX_BOUNDS (4UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_SBX) // Invalid array index
#define ERRCODE_SBX_ZERODIV (5UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_SBX) // Division by zero
#define ERRCODE_SBX_CONVERSION (6UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_SBX) // wrong data type
#define ERRCODE_SBX_BAD_PARAMETER (7UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME) // invalid Parameter
#define ERRCODE_SBX_PROC_UNDEFINED (8UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME) // Sub or Func not def
#define ERRCODE_SBX_ERROR (9UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_UNKNOWN) // generic object error
#define ERRCODE_SBX_NO_OBJECT (10UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME) // Object var not object
#define ERRCODE_SBX_CANNOT_LOAD (11UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_CREATE) // Object init/load fail
#define ERRCODE_SBX_BAD_INDEX (12UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_SBX) // Invalid object index
#define ERRCODE_SBX_NO_ACTIVE_OBJECT (13UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_ACCESS) // Object not active
#define ERRCODE_SBX_BAD_PROP_VALUE (14UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME) // Bad property value
#define ERRCODE_SBX_PROP_READONLY (15UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_READ) // Property is read only
#define ERRCODE_SBX_PROP_WRITEONLY (16UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_WRITE) // Property is write only
#define ERRCODE_SBX_INVALID_OBJECT (17UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_ACCESS) // Invalid object reference
#define ERRCODE_SBX_NO_METHOD (18UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME) // Property oder Methode unbekannt
#define ERRCODE_SBX_INVALID_USAGE_OBJECT (19UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_ACCESS) // Invalid object usage
#define ERRCODE_SBX_NO_OLE (20UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_ACCESS) // No OLE-Object
#define ERRCODE_SBX_BAD_METHOD (21UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME) // Method not supported
#define ERRCODE_SBX_OLE_ERROR (22UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME) // OLE Automation Error
#define ERRCODE_SBX_BAD_ACTION (23UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_NOTSUPPORTED) // Action not supported
#define ERRCODE_SBX_NO_NAMED_ARGS (24UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME) // No named arguments
#define ERRCODE_SBX_BAD_LOCALE (25UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_NOTSUPPORTED) // Locale not supported
#define ERRCODE_SBX_NAMED_NOT_FOUND (26UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME) // Unknown named argument
#define ERRCODE_SBX_NOT_OPTIONAL (27UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME) // Argument not optional
#define ERRCODE_SBX_WRONG_ARGS (28UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_SBX) // Invalid number of arguments
#define ERRCODE_SBX_NOT_A_COLL (29UL | ERRCODE_AREA_SBX | ERRCODE_CLASS_RUNTIME) // Object contains no elements
#define LAST_SBX_ERROR_ID 29UL
#ifndef __RSC
// Map old codes to new ones
#define SbxERR_OK ERRCODE_SBX_OK
#define SbxERR_SYNTAX ERRCODE_SBX_SYNTAX
#define SbxERR_NOTIMP ERRCODE_SBX_NOTIMP
#define SbxERR_OVERFLOW ERRCODE_SBX_OVERFLOW
#define SbxERR_BOUNDS ERRCODE_SBX_BOUNDS
#define SbxERR_ZERODIV ERRCODE_SBX_ZERODIV
#define SbxERR_CONVERSION ERRCODE_SBX_CONVERSION
#define SbxERR_BAD_PARAMETER ERRCODE_SBX_BAD_PARAMETER
#define SbxERR_PROC_UNDEFINED ERRCODE_SBX_PROC_UNDEFINED
#define SbxERR_ERROR ERRCODE_SBX_ERROR
#define SbxERR_NO_OBJECT ERRCODE_SBX_NO_OBJECT
#define SbxERR_CANNOT_LOAD ERRCODE_SBX_CANNOT_LOAD
#define SbxERR_BAD_INDEX ERRCODE_SBX_BAD_INDEX
#define SbxERR_NO_ACTIVE_OBJECT ERRCODE_SBX_NO_ACTIVE_OBJECT
#define SbxERR_BAD_PROP_VALUE ERRCODE_SBX_BAD_PROP_VALUE
#define SbxERR_PROP_READONLY ERRCODE_SBX_PROP_READONLY
#define SbxERR_PROP_WRITEONLY ERRCODE_SBX_PROP_WRITEONLY
#define SbxERR_INVALID_OBJECT ERRCODE_SBX_INVALID_OBJECT
#define SbxERR_NO_METHOD ERRCODE_SBX_NO_METHOD
#define SbxERR_INVALID_USAGE_OBJECT ERRCODE_SBX_INVALID_USAGE_OBJECT
#define SbxERR_NO_OLE ERRCODE_SBX_NO_OLE
#define SbxERR_BAD_METHOD ERRCODE_SBX_BAD_METHOD
#define SbxERR_OLE_ERROR ERRCODE_SBX_OLE_ERROR
#define SbxERR_BAD_ACTION ERRCODE_SBX_BAD_ACTION
#define SbxERR_NO_NAMED_ARGS ERRCODE_SBX_NO_NAMED_ARGS
#define SbxERR_BAD_LOCALE ERRCODE_SBX_BAD_LOCALE
#define SbxERR_NAMED_NOT_FOUND ERRCODE_SBX_NAMED_NOT_FOUND
#define SbxERR_NOT_OPTIONAL ERRCODE_SBX_NOT_OPTIONAL
#define SbxERR_WRONG_ARGS ERRCODE_SBX_WRONG_ARGS
#define SbxERR_NOT_A_COLL ERRCODE_SBX_NOT_A_COLL
// Flag-Bits:
enum SbxFlagBits {
SBX_NONE = 0x0000,
SBX_READ = 0x0001, // Read permission
SBX_WRITE = 0x0002, // Write permission
SBX_READWRITE = 0x0003, // Read/Write permission
SBX_DONTSTORE = 0x0004, // Don't store object
SBX_MODIFIED = 0x0008, // Object was changed
SBX_FIXED = 0x0010, // Fixed data type (SbxVariable)
SBX_CONST = 0x0020, // Definition of const value
SBX_OPTIONAL = 0x0040, // Parameter is optional
SBX_HIDDEN = 0x0080, // Element is invisible
SBX_INVISIBLE = 0x0100, // Element is not found by Find()
SBX_EXTSEARCH = 0x0200, // Object is searched completely
SBX_EXTFOUND = 0x0400, // Variable was found through extended search
SBX_GBLSEARCH = 0x0800, // Global search via Parents
SBX_RESERVED = 0x1000, // reserved
SBX_PRIVATE = 0x1000, // #110004, #112015, cannot conflict with SBX_RESERVED
SBX_NO_BROADCAST = 0x2000, // No broadcast on Get/Put
SBX_REFERENCE = 0x4000, // Parameter is Reference (DLL-call)
SBX_NO_MODIFY = 0x8000, // SetModified is suppressed
SBX_WITH_EVENTS = 0x0080, // Same value as unused SBX_HIDDEN
SBX_DIM_AS_NEW = 0x0800, // Same value as SBX_GBLSEARCH, cannot conflict as one
// is used for objects, the other for variables only
SBX_VAR_TO_DIM = 0x2000, // Same value as SBX_NO_BROADCAST, cannot conflict as
// used for variables without broadcaster only
};
// make combining these type-safe
inline SbxFlagBits operator| (SbxFlagBits lhs, SbxFlagBits rhs)
{
return static_cast<SbxFlagBits>(static_cast<sal_uInt16>(lhs) | static_cast<sal_uInt16>(rhs));
}
inline SbxFlagBits operator& (SbxFlagBits lhs, SbxFlagBits rhs)
{
return static_cast<SbxFlagBits>(static_cast<sal_uInt16>(lhs) & static_cast<sal_uInt16>(rhs));
}
inline SbxFlagBits& operator|= (SbxFlagBits& lhs, SbxFlagBits rhs)
{
lhs = static_cast<SbxFlagBits>(static_cast<sal_uInt16>(lhs) | static_cast<sal_uInt16>(rhs));
return lhs;
}
inline SbxFlagBits operator~ (SbxFlagBits rhs)
{
return static_cast<SbxFlagBits>(0xffff & ~(static_cast<sal_uInt16>(rhs)));
}
inline SbxFlagBits& operator&= (SbxFlagBits& lhs, SbxFlagBits rhs)
{
lhs = static_cast<SbxFlagBits>(static_cast<sal_uInt16>(lhs) & static_cast<sal_uInt16>(rhs));
return lhs;
}
// Broadcaster-IDs:
#define SBX_HINT_DYING SFX_HINT_DYING
#define SBX_HINT_DATAWANTED SFX_HINT_USER00
#define SBX_HINT_DATACHANGED SFX_HINT_DATACHANGED
#define SBX_HINT_CONVERTED SFX_HINT_USER01
#define SBX_HINT_INFOWANTED SFX_HINT_USER02
#define SBX_HINT_OBJECTCHANGED SFX_HINT_USER03
// List of all creators for Load/Store
#define SBXCR_SBX 0x20584253 // SBX(blank)
// List of predefined SBX-IDs. New SBX-IDs must be precisely defined so that
// they are unique within the Stream and appropriate Factory.
#define SBXID_VALUE 0x4E4E // NN: SbxValue
#define SBXID_VARIABLE 0x4156 // VA: SbxVariable
#define SBXID_ARRAY 0x5241 // AR: SbxArray
#define SBXID_DIMARRAY 0x4944 // DI: SbxDimArray
#define SBXID_OBJECT 0x424F // OB: SbxObject
#define SBXID_COLLECTION 0x4F43 // CO: SbxCollection
#define SBXID_FIXCOLLECTION 0x4346 // FC: SbxStdCollection
#define SBXID_METHOD 0x454D // ME: SbxMethod
#define SBXID_PROPERTY 0x5250 // PR: SbxProperty
// StarBASIC restricts the base data type to different intervals.
// These intervals are fixed to create 'portability and independent
// of the implementation. Only type double is greedy and takes
// what it gets.
#define SbxMAXCHAR ((sal_Unicode)65535)
#define SbxMINCHAR (0)
#define SbxMAXBYTE ( 255)
#define SbxMAXINT ( 32767)
#define SbxMININT (-32768)
#define SbxMAXUINT ((sal_uInt16) 65535)
#define SbxMAXLNG ( 2147483647)
#define SbxMINLNG ((sal_Int32)(-2147483647-1))
#define SbxMAXULNG ((sal_uInt32) 0xffffffff)
#define SbxMAXSALUINT64 SAL_MAX_UINT64
#define SbxMAXSALINT64 SAL_MAX_INT64
#define SbxMINSALINT64 SAL_MIN_INT64
// Currency stored as SbxSALINT64 == sal_Int64
// value range limits are ~(2^63 - 1)/10000
// fixed precision has 4 digits right of decimal pt
#define CURRENCY_FACTOR (10000)
#define CURRENCY_FACTOR_SQUARE (100000000)
// TODO effective MAX/MINCURR limits:
// true value ( 922337203685477.5807) is too precise for correct comparison to 64bit double
#define SbxMAXCURR ( 922337203685477.5807)
#define SbxMINCURR (-922337203685477.5808)
#define SbxMAXSNG ( 3.402823e+38)
#define SbxMINSNG (-3.402823e+38)
#define SbxMAXSNG2 ( 1.175494351e-38)
#define SbxMINSNG2 (-1.175494351e-38)
// Max valid offset index of a Sbx-Array (due to 64K limit)
#define SBX_MAXINDEX 0x3FF0
#define SBX_MAXINDEX32 SbxMAXLNG
// The numeric values of sal_True and FALSE
enum SbxBOOL { SbxFALSE = 0, SbxTRUE = -1 };
#endif //ifndef __RSC
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|