1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 #ifndef INCLUDED_BASIC_SBXDEF_HXX
22 #define INCLUDED_BASIC_SBXDEF_HXX
24 #include <o3tl/typed_flags_set.hxx>
25 #include <sal/types.h>
27 enum class SbxClassType
{ // SBX-class-IDs (order is important!)
28 DontCare
= 1, // don't care (search, not 0 due to StarBASIC)
29 Array
, // Array of SbxVariables
30 Value
, // simple value
31 Variable
, // Variable (from here there is Broadcaster)
32 Method
, // Method (Function or Sub)
38 SbxEMPTY
= 0, // * Uninitialized
39 SbxNULL
= 1, // * Contains no valid data
40 SbxINTEGER
= 2, // * Integer (sal_Int16)
41 SbxLONG
= 3, // * Long integer (sal_Int32)
42 SbxSINGLE
= 4, // * Single-precision floating point number (float)
43 SbxDOUBLE
= 5, // * Double-precision floating point number (double)
44 SbxCURRENCY
= 6, // Currency (sal_Int64)
45 SbxDATE
= 7, // * Date (double)
46 SbxSTRING
= 8, // * String (StarView)
47 SbxOBJECT
= 9, // * SbxBase object pointer
48 SbxERROR
= 10, // * Error (sal_uInt16)
49 SbxBOOL
= 11, // * Boolean (0 or -1)
51 SbxVARIANT
= 12, // * Display for variant datatype
52 SbxDATAOBJECT
= 13, // * Common data object w/o ref count
54 SbxCHAR
= 16, // * signed char
55 SbxBYTE
= 17, // * unsigned char
56 SbxUSHORT
= 18, // * unsigned short (sal_uInt16)
57 SbxULONG
= 19, // * unsigned long (sal_uInt32)
59 SbxINT
= 22, // * signed machine-dependent int
60 SbxUINT
= 23, // * unsigned machine-dependent int
62 SbxVOID
= 24, // * no value (= SbxEMPTY)
63 SbxHRESULT
= 25, // HRESULT
64 SbxPOINTER
= 26, // generic pointer
65 SbxDIMARRAY
= 27, // dimensioned array
66 SbxCARRAY
= 28, // C style array
67 SbxUSERDEF
= 29, // user defined
68 SbxLPSTR
= 30, // * null terminated string
70 SbxLPWSTR
= 31, // wide null terminated string
71 SbxCoreSTRING
= 32, // from 1997-4-10 for GetCoreString(), only for converting<
73 SbxWSTRING
= 33, // from 2000-10-4 Reimplemented for backwards compatibility (#78919)
74 SbxWCHAR
= 34, // from 2000-10-4 Reimplemented for backwards compatibility (#78919)
75 SbxSALINT64
= 35, // for currency internal, signed 64-bit int and UNO hyper
76 SbxSALUINT64
= 36, // for currency internal, unsigned 64-bit int and UNO unsigned hyper
77 SbxDECIMAL
= 37, // for UNO/automation Decimal
79 SbxVECTOR
= 0x1000, // simple counted array
80 SbxARRAY
= 0x2000, // array
81 SbxBYREF
= 0x4000, // access by reference
83 // tdf#79426, tdf#125180
84 SbxMISSING
= 0x8000, // Parameter is missing
87 const sal_uInt32 SBX_TYPE_WITH_EVENTS_FLAG
= 0x10000;
88 const sal_uInt32 SBX_TYPE_DIM_AS_NEW_FLAG
= 0x20000;
89 const sal_uInt32 SBX_FIXED_LEN_STRING_FLAG
= 0x10000; // same value as above as no conflict possible
90 const sal_uInt32 SBX_TYPE_VAR_TO_DIM_FLAG
= 0x40000;
97 SbxMOD
, // this MOD var (max INT32!)
98 SbxPLUS
, // this + var
99 SbxMINUS
, // this - var
100 SbxNEG
, // -this (var is ignored)
101 SbxIDIV
, // this / var (both operands max. sal_Int32!)
102 // Boolean operators (max sal_Int32!):
103 // Boolean operators (TODO deprecate this limit: max INT32!)
104 SbxAND
, // this & var
106 SbxXOR
, // this ^ var
107 SbxEQV
, // ~this ^ var
108 SbxIMP
, // ~this | var
109 SbxNOT
, // ~this (var is ignored)
111 // String concatenation:
112 SbxCAT
, // this & var (VBA: this + var)
116 SbxNE
, // this <> var
119 SbxLE
, // this <= var
123 enum class SbxNameType
{ // Type of the questioned name of a variable
125 CaseInsensitive
, // plain name - case insensitive
126 ShortTypes
, // Name%(A%,B$)
131 enum class SbxFlagBits
{
133 Read
= 0x0001, // Read permission
134 Write
= 0x0002, // Write permission
135 ReadWrite
= 0x0003, // Read/Write permission
136 DontStore
= 0x0004, // Don't store object
137 Modified
= 0x0008, // Object was changed
138 Fixed
= 0x0010, // Fixed data type (SbxVariable)
139 Const
= 0x0020, // Definition of const value
140 Optional
= 0x0040, // Parameter is optional
141 Hidden
= 0x0080, // Element is invisible
142 Invisible
= 0x0100, // Element is not found by Find()
143 ExtSearch
= 0x0200, // Object is searched completely
144 ExtFound
= 0x0400, // Variable was found through extended search
145 GlobalSearch
= 0x0800, // Global search via Parents
146 Reserved
= 0x1000, // reserved
147 Private
= 0x1000, // #110004, #112015, cannot conflict with SbxFlagBits::Reserved
148 NoBroadcast
= 0x2000, // No broadcast on Get/Put
149 Reference
= 0x4000, // Parameter is Reference (DLL-call)
150 NoModify
= 0x8000, // SetModified is suppressed
151 WithEvents
= 0x0080, // Same value as unused SbxFlagBits::Hidden
152 DimAsNew
= 0x0800, // Same value as SbxFlagBits::GlobalSearch, cannot conflict as one
153 // is used for objects, the other for variables only
154 VarToDim
= 0x2000, // Same value as SbxFlagBits::NoBroadcast, cannot conflict as
155 // used for variables without broadcaster only
159 template<> struct typed_flags
<SbxFlagBits
> : is_typed_flags
<SbxFlagBits
, 0xffff> {};
162 // List of all creators for Load/Store
164 constexpr auto SBXCR_SBX
= 0x20584253; // SBX(blank)
166 // List of predefined SBX-IDs. New SBX-IDs must be precisely defined so that
167 // they are unique within the Stream and appropriate Factory.
169 constexpr auto SBXID_VALUE
= 0x4E4E; // NN: SbxValue
170 constexpr auto SBXID_VARIABLE
= 0x4156; // VA: SbxVariable
171 constexpr auto SBXID_ARRAY
= 0x5241; // AR: SbxArray
172 constexpr auto SBXID_DIMARRAY
= 0x4944; // DI: SbxDimArray
173 constexpr auto SBXID_OBJECT
= 0x424F; // OB: SbxObject
174 constexpr auto SBXID_COLLECTION
= 0x4F43; // CO: SbxCollection
175 constexpr auto SBXID_FIXCOLLECTION
= 0x4346; // FC: SbxStdCollection
176 constexpr auto SBXID_METHOD
= 0x454D; // ME: SbxMethod
177 constexpr auto SBXID_PROPERTY
= 0x5250; // PR: SbxProperty
179 // StarBASIC restricts the base data type to different intervals.
180 // These intervals are fixed to create 'portability and independent
181 // of the implementation. Only type double is greedy and takes
184 constexpr auto SbxMAXCHAR
= u
'\xFFFF';
185 constexpr auto SbxMINCHAR
= 0;
186 constexpr auto SbxMAXBYTE
= 255;
187 constexpr auto SbxMAXINT
= 32767;
188 constexpr auto SbxMININT
= -32768;
189 constexpr sal_uInt16 SbxMAXUINT
= 65535;
190 constexpr auto SbxMAXLNG
= 2147483647;
191 constexpr sal_Int32 SbxMINLNG
= -2147483647-1;
192 constexpr sal_uInt32 SbxMAXULNG
= 0xffffffff;
194 // Currency stored as SbxSALINT64 == sal_Int64
195 // value range limits are ~(2^63 - 1)/10000
196 // fixed precision has 4 digits right of decimal pt
197 constexpr auto CURRENCY_FACTOR
= 10000;
198 constexpr auto CURRENCY_FACTOR_SQUARE
= 100000000;
200 // TODO effective MAX/MINCURR limits:
201 // true value ( 922337203685477.5807) is too precise for correct comparison to 64bit double
202 constexpr auto SbxMAXCURR
= 922337203685477.5807;
203 constexpr auto SbxMINCURR
= -922337203685477.5808;
205 constexpr auto SbxMAXSNG
= 3.402823e+38;
206 constexpr auto SbxMINSNG
= -3.402823e+38;
207 constexpr auto SbxMAXSNG2
= 1.175494351e-38;
208 constexpr auto SbxMINSNG2
= -1.175494351e-38;
210 // Max valid offset index of a Sbx-Array (due to 64K limit)
211 constexpr auto SBX_MAXINDEX
= 0x3FF0;
212 constexpr auto SBX_MAXINDEX32
= SbxMAXLNG
;
214 // The numeric values of sal_True and FALSE
215 enum SbxBOOL
{ SbxFALSE
= 0, SbxTRUE
= -1 };
219 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */