1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: sbxdef.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
37 #include <tools/solar.h>
40 #include "tools/errcode.hxx"
43 #ifndef _SBX_CLASS_TYPE
44 #define _SBX_CLASS_TYPE
48 enum SbxClassType
{ // SBX-Klassen-IDs (Reihenfolge ist wichtig)
49 SbxCLASS_DONTCARE
= 1, // egal (bei der Suche, nicht 0 wg. StarBASIC)
50 SbxCLASS_ARRAY
, // Array aus SbxVariablen
51 SbxCLASS_VALUE
, // einfacher Wert
52 SbxCLASS_VARIABLE
, // Variable (ab hier gibts einen Broadcaster)
53 SbxCLASS_METHOD
, // Methode (Function oder Sub)
54 SbxCLASS_PROPERTY
, // Property
55 SbxCLASS_OBJECT
// Objekt
60 #ifndef _SBX_DATA_TYPE
61 #define _SBX_DATA_TYPE
64 SbxEMPTY
= 0, // * Uninitialized
65 SbxNULL
= 1, // * Contains no valid data
66 SbxINTEGER
= 2, // * Integer (INT16)
67 SbxLONG
= 3, // * Long integer (INT32)
68 SbxSINGLE
= 4, // * Single-precision floating point number (float)
69 SbxDOUBLE
= 5, // * Double-precision floating point number (double)
70 SbxCURRENCY
= 6, // Currency (INT64)
71 SbxDATE
= 7, // * Date (double)
72 SbxSTRING
= 8, // * String (StarView)
73 SbxOBJECT
= 9, // * SbxBase object pointer
74 SbxERROR
= 10, // * Error (UINT16)
75 SbxBOOL
= 11, // * Boolean (0 or -1)
76 SbxVARIANT
= 12, // * Anzeige fuer varianten Datentyp
77 SbxDATAOBJECT
= 13, // * Common data object w/o ref count
79 SbxCHAR
= 16, // * signed char
80 SbxBYTE
= 17, // * unsigned char
81 SbxUSHORT
= 18, // * unsigned short (UINT16)
82 SbxULONG
= 19, // * unsigned long (UINT32)
83 SbxLONG64
= 20, // signed 64-bit int
84 SbxULONG64
= 21, // unsigned 64-bit int
85 SbxINT
= 22, // * signed machine-dependent int
86 SbxUINT
= 23, // * unsigned machine-dependent int
87 SbxVOID
= 24, // * no value (= SbxEMPTY)
88 SbxHRESULT
= 25, // HRESULT
89 SbxPOINTER
= 26, // generic pointer
90 SbxDIMARRAY
= 27, // dimensioned array
91 SbxCARRAY
= 28, // C style array
92 SbxUSERDEF
= 29, // user defined
93 SbxLPSTR
= 30, // * null terminated string
94 SbxLPWSTR
= 31, // wide null terminated string
95 SbxCoreSTRING
= 32, // AB 10.4.97, fuer GetCoreString(), nur zum Konvertieren
96 SbxWSTRING
= 33, // AB 4.10.2000 Reimplemented for backwards compatibility (#78919)
97 SbxWCHAR
= 34, // AB 4.10.2000 Reimplemented for backwards compatibility (#78919)
98 SbxSALINT64
= 35, // for UNO hyper
99 SbxSALUINT64
= 36, // for UNO unsigned hyper
100 SbxDECIMAL
= 37, // for UNO/automation Decimal
102 SbxVECTOR
= 0x1000, // simple counted array
103 SbxARRAY
= 0x2000, // array
104 SbxBYREF
= 0x4000, // access by reference
106 SbxSV1
= 128, // first defined data type for StarView
107 SbxMEMORYSTREAM
, // SvMemoryStream
108 SbxSTORAGE
, // SvStorage
110 SbxUSER1
= 256, // first user defined data type
111 SbxUSERn
= 2047 // last user defined data type
116 #ifndef _SBX_OPERATOR
117 #define _SBX_OPERATOR
121 SbxEXP
, // this ^ var
122 SbxMUL
, // this * var
123 SbxDIV
, // this / var
124 SbxMOD
, // this MOD var
125 SbxPLUS
, // this + var
126 SbxMINUS
, // this - var
127 SbxNEG
, // -this (var wird ignoriert)
128 SbxIDIV
, // this / var (beide Operanden sind max. INT32!)
129 // Boolesche Operatoren (auch max INT32!):
130 SbxAND
, // this & var
132 SbxXOR
, // this ^ var
133 SbxEQV
, // ~this ^ var
134 SbxIMP
, // ~this | var
135 SbxNOT
, // ~this (var wird ignoriert)
136 // String-Verkettung:
137 SbxCAT
, // this & var
140 SbxNE
, // this <> var
143 SbxLE
, // this <= var
149 #ifndef _SBX_NAME_TYPE
150 #define _SBX_NAME_TYPE
152 enum SbxNameType
{ // Art des erfragten Namens einer Variablen
153 SbxNAME_NONE
, // der nackte Name
154 SbxNAME_SHORT
, // Name(A,B)
155 SbxNAME_SHORT_TYPES
, // Name%(A%,B$)
156 SbxNAME_LONG_TYPES
// Name(A As Integer, B As String) As Integer
161 // AB: 20.3.96: Neue Fehler-Meldungen
162 typedef ULONG SbxError
; // Alten Typ erhalten
168 // Neue Fehler-Codes per define
169 #define ERRCODE_SBX_OK ERRCODE_NONE // durchgefuehrt
170 #define ERRCODE_SBX_SYNTAX (1UL | ERRCODE_AREA_SBX | \
171 ERRCODE_CLASS_COMPILER) // Syntaxfehler im Parser
172 #define ERRCODE_SBX_NOTIMP (2UL | ERRCODE_AREA_SBX | \
173 ERRCODE_CLASS_NOTSUPPORTED) // nicht moeglich
174 #define ERRCODE_SBX_OVERFLOW (3UL | ERRCODE_AREA_SBX | \
175 ERRCODE_CLASS_SBX) // Ueberlauf
176 #define ERRCODE_SBX_BOUNDS (4UL | ERRCODE_AREA_SBX | \
177 ERRCODE_CLASS_SBX) // Array-Index ungueltig
178 #define ERRCODE_SBX_ZERODIV (5UL | ERRCODE_AREA_SBX | \
179 ERRCODE_CLASS_SBX) // Division durch Null
180 #define ERRCODE_SBX_CONVERSION (6UL | ERRCODE_AREA_SBX | \
181 ERRCODE_CLASS_SBX) // falscher Datentyp
182 #define ERRCODE_SBX_BAD_PARAMETER (7UL | ERRCODE_AREA_SBX | \
183 ERRCODE_CLASS_RUNTIME) // ungueltiger Parameter
184 #define ERRCODE_SBX_PROC_UNDEFINED (8UL | ERRCODE_AREA_SBX | \
185 ERRCODE_CLASS_RUNTIME) // BASIC-Sub oder Function undefiniert
186 #define ERRCODE_SBX_ERROR (9UL | ERRCODE_AREA_SBX | \
187 ERRCODE_CLASS_UNKNOWN) // andere Fehler, Objektbezogene Fehler
188 #define ERRCODE_SBX_NO_OBJECT (10UL | ERRCODE_AREA_SBX | \
189 ERRCODE_CLASS_RUNTIME) // Objektvariable nicht belegt
190 #define ERRCODE_SBX_CANNOT_LOAD (11UL | ERRCODE_AREA_SBX | \
191 ERRCODE_CLASS_CREATE) // Objekt kann nicht geladen/eingerichtet werden
192 #define ERRCODE_SBX_BAD_INDEX (12UL | ERRCODE_AREA_SBX | \
193 ERRCODE_CLASS_SBX) // Invalid object index
194 #define ERRCODE_SBX_NO_ACTIVE_OBJECT (13UL | ERRCODE_AREA_SBX | \
195 ERRCODE_CLASS_ACCESS) // Objekt ist nicht aktiviert
196 #define ERRCODE_SBX_BAD_PROP_VALUE (14UL | ERRCODE_AREA_SBX | \
197 ERRCODE_CLASS_RUNTIME) // Bad property value
198 #define ERRCODE_SBX_PROP_READONLY (15UL | ERRCODE_AREA_SBX | \
199 ERRCODE_CLASS_READ) // Property is read only
200 #define ERRCODE_SBX_PROP_WRITEONLY (16UL | ERRCODE_AREA_SBX | \
201 ERRCODE_CLASS_WRITE) // Property is write only
202 #define ERRCODE_SBX_INVALID_OBJECT (17UL | ERRCODE_AREA_SBX | \
203 ERRCODE_CLASS_ACCESS) // Invalid object reference
204 #define ERRCODE_SBX_NO_METHOD (18UL | ERRCODE_AREA_SBX | \
205 ERRCODE_CLASS_RUNTIME) // Property oder Methode unbekannt
206 #define ERRCODE_SBX_INVALID_USAGE_OBJECT (19UL | ERRCODE_AREA_SBX | \
207 ERRCODE_CLASS_ACCESS) // Falsche Verwendung eines Objekts
208 #define ERRCODE_SBX_NO_OLE (20UL | ERRCODE_AREA_SBX | \
209 ERRCODE_CLASS_ACCESS) // Kein OLE-Objekt
210 #define ERRCODE_SBX_BAD_METHOD (21UL | ERRCODE_AREA_SBX | \
211 ERRCODE_CLASS_RUNTIME) // Methode nicht unterst�tzt
212 #define ERRCODE_SBX_OLE_ERROR (22UL | ERRCODE_AREA_SBX | \
213 ERRCODE_CLASS_RUNTIME) // OLE Automation-Fehler
214 #define ERRCODE_SBX_BAD_ACTION (23UL | ERRCODE_AREA_SBX | \
215 ERRCODE_CLASS_NOTSUPPORTED) // Aktion nicht unterst�tzt
216 #define ERRCODE_SBX_NO_NAMED_ARGS (24UL | ERRCODE_AREA_SBX | \
217 ERRCODE_CLASS_RUNTIME) // Keine benannten Argumente
218 #define ERRCODE_SBX_BAD_LOCALE (25UL | ERRCODE_AREA_SBX | \
219 ERRCODE_CLASS_NOTSUPPORTED) // Laenderspezifische Einstellungen nicht unterst�tzt
220 #define ERRCODE_SBX_NAMED_NOT_FOUND (26UL | ERRCODE_AREA_SBX | \
221 ERRCODE_CLASS_RUNTIME) // Unbekanntes benanntes Argument
222 #define ERRCODE_SBX_NOT_OPTIONAL (27UL | ERRCODE_AREA_SBX | \
223 ERRCODE_CLASS_RUNTIME) // Argument nicht optional
224 #define ERRCODE_SBX_WRONG_ARGS (28UL | ERRCODE_AREA_SBX | \
225 ERRCODE_CLASS_SBX) // Falsche Zahl von Argumenten
226 #define ERRCODE_SBX_NOT_A_COLL (29UL | ERRCODE_AREA_SBX | \
227 ERRCODE_CLASS_RUNTIME) // Objekt enthaelt keine Elemente
228 #define LAST_SBX_ERROR_ID 29UL
231 // Ab hier fuer Ressource wieder unwichtig
234 // Alte Codes auf neue mappen
235 #define SbxERR_OK ERRCODE_SBX_OK
236 #define SbxERR_SYNTAX ERRCODE_SBX_SYNTAX
237 #define SbxERR_NOTIMP ERRCODE_SBX_NOTIMP
238 #define SbxERR_OVERFLOW ERRCODE_SBX_OVERFLOW
239 #define SbxERR_BOUNDS ERRCODE_SBX_BOUNDS
240 #define SbxERR_ZERODIV ERRCODE_SBX_ZERODIV
241 #define SbxERR_CONVERSION ERRCODE_SBX_CONVERSION
242 #define SbxERR_BAD_PARAMETER ERRCODE_SBX_BAD_PARAMETER
243 #define SbxERR_PROC_UNDEFINED ERRCODE_SBX_PROC_UNDEFINED
244 #define SbxERR_ERROR ERRCODE_SBX_ERROR
245 #define SbxERR_NO_OBJECT ERRCODE_SBX_NO_OBJECT
246 #define SbxERR_CANNOT_LOAD ERRCODE_SBX_CANNOT_LOAD
247 #define SbxERR_BAD_INDEX ERRCODE_SBX_BAD_INDEX
248 #define SbxERR_NO_ACTIVE_OBJECT ERRCODE_SBX_NO_ACTIVE_OBJECT
249 #define SbxERR_BAD_PROP_VALUE ERRCODE_SBX_BAD_PROP_VALUE
250 #define SbxERR_PROP_READONLY ERRCODE_SBX_PROP_READONLY
251 #define SbxERR_PROP_WRITEONLY ERRCODE_SBX_PROP_WRITEONLY
252 #define SbxERR_INVALID_OBJECT ERRCODE_SBX_INVALID_OBJECT
253 #define SbxERR_NO_METHOD ERRCODE_SBX_NO_METHOD
254 #define SbxERR_INVALID_USAGE_OBJECT ERRCODE_SBX_INVALID_USAGE_OBJECT
255 #define SbxERR_NO_OLE ERRCODE_SBX_NO_OLE
256 #define SbxERR_BAD_METHOD ERRCODE_SBX_BAD_METHOD
257 #define SbxERR_OLE_ERROR ERRCODE_SBX_OLE_ERROR
258 #define SbxERR_BAD_ACTION ERRCODE_SBX_BAD_ACTION
259 #define SbxERR_NO_NAMED_ARGS ERRCODE_SBX_NO_NAMED_ARGS
260 #define SbxERR_BAD_LOCALE ERRCODE_SBX_BAD_LOCALE
261 #define SbxERR_NAMED_NOT_FOUND ERRCODE_SBX_NAMED_NOT_FOUND
262 #define SbxERR_NOT_OPTIONAL ERRCODE_SBX_NOT_OPTIONAL
263 #define SbxERR_WRONG_ARGS ERRCODE_SBX_WRONG_ARGS
264 #define SbxERR_NOT_A_COLL ERRCODE_SBX_NOT_A_COLL
267 /* Alte Codes mit VB-Fehler-Codes
268 enum SbxError { // Ergebnis einer Rechenoperation/Konversion
269 SbxERR_OK = 0, // durchgefuehrt
270 SbxERR_SYNTAX = 2, // Syntaxfehler im Parser
271 SbxERR_NOTIMP = 5, // nicht moeglich
272 SbxERR_OVERFLOW = 6, // Ueberlauf
273 SbxERR_BOUNDS = 9, // Array-Index ungueltig
274 SbxERR_ZERODIV = 11, // Division durch Null
275 SbxERR_CONVERSION = 13, // falscher Datentyp
276 SbxERR_BAD_PARAMETER = 14, // ung�ltiger Parameter
277 SbxERR_PROC_UNDEFINED = 35, // BASIC-Sub oder Function undefiniert
278 SbxERR_ERROR = 51, // andere Fehler
279 // Objektbezogene Fehler
280 SbxERR_NO_OBJECT = 91, // Objektvariable nicht belegt
281 SbxERR_CANNOT_LOAD = 323, // Objekt kann nicht geladen/eingerichtet werden
282 SbxERR_BAD_INDEX = 341, // Invalid object index
283 SbxERR_NO_ACTIVE_OBJECT=366,// Objekt ist nicht aktiviert
284 SbxERR_BAD_PROP_VALUE = 380,// Bad property value
285 SbxERR_PROP_READONLY = 382, // Property is read only
286 SbxERR_PROP_WRITEONLY = 394,// Property is write only
287 SbxERR_INVALID_OBJECT = 420,// Invalid object reference
288 SbxERR_NO_METHOD = 423, // Property oder Methode unbekannt
289 SbxERR_INVALID_USAGE_OBJECT=425,// Falsche Verwendung eines Objekts
290 SbxERR_NO_OLE = 430, // Kein OLE-Objekt
291 SbxERR_BAD_METHOD = 438, // Methode nicht unterst�tzt
292 SbxERR_OLE_ERROR = 440, // OLE Automation-Fehler
293 SbxERR_BAD_ACTION = 445, // Aktion nicht unterst�tzt
294 SbxERR_NO_NAMED_ARGS = 446, // Keine benannten Argumente
295 SbxERR_BAD_LOCALE = 447, // Laenderspezifische Einstellungen nicht unterst�tzt
296 SbxERR_NAMED_NOT_FOUND = 448,// Unbekanntes benanntes Argument
297 SbxERR_NOT_OPTIONAL = 449, // Argument nicht optional
298 SbxERR_WRONG_ARGS = 450, // Falsche Zahl von Argumenten
299 SbxERR_NOT_A_COLL = 451 // Objekt enth„lt keine Elemente
304 #define SBX_READ 0x0001 // Leseerlaubnis
305 #define SBX_WRITE 0x0002 // Schreiberlaubnis
306 #define SBX_READWRITE 0x0003 // beides
307 #define SBX_DONTSTORE 0x0004 // Objekt nicht speichern
308 #define SBX_MODIFIED 0x0008 // Objekt ist geaendert
309 #define SBX_FIXED 0x0010 // fester Datentyp (SbxVariable)
310 #define SBX_CONST 0x0020 // Definition eines Const-Wertes
311 #define SBX_OPTIONAL 0x0040 // Parameter ist optional
312 #define SBX_HIDDEN 0x0080 // Element ist unsichtbar
313 #define SBX_INVISIBLE 0x0100 // Element wird mit Find() nicht gefunden
314 #define SBX_EXTSEARCH 0x0200 // Objekt wird komplett durchsucht
315 #define SBX_EXTFOUND 0x0400 // Variable wurde durch Extended Srch gefunden
316 #define SBX_GBLSEARCH 0x0800 // Globale Suche ueber Parents
317 #define SBX_RESERVED 0x1000 // reserviert
318 #define SBX_PRIVATE 0x1000 // #110004, #112015, cannot conflict with SBX_RESERVED
319 #define SBX_NO_BROADCAST 0x2000 // kein Broadcast bei Get/Put
320 #define SBX_REFERENCE 0x4000 // Parameter ist Referenz (DLL-Aufruf)
321 #define SBX_NO_MODIFY 0x8000 // SetModified wird unterdrueckt
324 #define SBX_HINT_DYING SFX_HINT_DYING
325 #define SBX_HINT_DATAWANTED SFX_HINT_USER00
326 #define SBX_HINT_DATACHANGED SFX_HINT_DATACHANGED
327 #define SBX_HINT_CONVERTED SFX_HINT_USER01
328 #define SBX_HINT_INFOWANTED SFX_HINT_USER02
329 #define SBX_HINT_OBJECTCHANGED SFX_HINT_USER03
331 // Liste aller Creators fuer Load/Store
333 #define SBXCR_SBX 0x20584253 // SBX(blank)
335 // Liste der vordefinierten SBX-IDs. Eigene SBX-IDs muessen spezifisch
336 // so vergeben werden, dass sie innerhalb des Streams und der dazu passenden
337 // Factory eindeutig sind.
339 #define SBXID_VALUE 0x4E4E // NN: SbxValue
340 #define SBXID_VARIABLE 0x4156 // VA: SbxVariable
341 #define SBXID_ARRAY 0x5241 // AR: SbxArray
342 #define SBXID_DIMARRAY 0x4944 // DI: SbxDimArray
343 #define SBXID_OBJECT 0x424F // OB: SbxObject
344 #define SBXID_COLLECTION 0x4F43 // CO: SbxCollection
345 #define SBXID_FIXCOLLECTION 0x4346 // FC: SbxStdCollection
346 #define SBXID_METHOD 0x454D // ME: SbxMethod
347 #define SBXID_PROPERTY 0x5250 // PR: SbxProperty
349 // StarBASIC begrenzt die Basis-Datentypen auf verschiedene
350 // Bereiche. Diese Bereiche sind zwecks Portabilitaet fest
351 // definiert, unabhaengig von der Implementation. Allein der
352 // Datentyp double nimmt auf, was er fassen kann.
354 #define SbxMAXCHAR ((sal_Unicode)65535)
355 #define SbxMINCHAR (0)
356 #define SbxMAXBYTE ( 255)
357 #define SbxMAXINT ( 32767)
358 #define SbxMININT (-32768)
359 #define SbxMAXUINT ((UINT16) 65535)
360 #define SbxMAXLNG ( 2147483647)
361 #define SbxMINLNG ((INT32)(-2147483647-1))
362 #define SbxMAXULNG ((UINT32) 0xffffffff)
364 #define SbxMAXSALINT64 SAL_MAX_INT64
365 #define SbxMINSALINT64 SAL_MIN_INT64
366 #define SbxMAXSALUINT64 SAL_MAX_UINT64
368 #define SbxMAXSNG ( 3.402823e+38)
369 #define SbxMINSNG (-3.402823e+38)
370 #define SbxMAXSNG2 ( 1.175494351e-38)
371 #define SbxMINSNG2 (-1.175494351e-38)
372 #define SbxMAXCURR ( 922337203685477.5807)
373 #define SbxMINCURR (-922337203685477.5808)
374 #define CURRENCY_FACTOR 10000
375 #define SbxMAXCURRLNG (SbxMAXLNG/CURRENCY_FACTOR)
376 #define SbxMINCURRLNG (SbxMINLNG/CURRENCY_FACTOR)
378 // Der maximal zulaessige Offset-Index fuer Sbx-Arrays (wg. 64K-Limit)
380 #define SBX_MAXINDEX 0x3FF0
381 #define SBX_MAXINDEX32 SbxMAXLNG
383 // Die numerischen Werte fuer TRUE und FALSE sind wie folgt definiert:
385 enum SbxBOOL
{ SbxFALSE
= 0, SbxTRUE
= -1 };