/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * Copyright 2000, 2010 Oracle and/or its affiliates.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/


#ifndef _SBXDEF_HXX
#define _SBXDEF_HXX

#ifndef __RSC
#include <bf_svtools/bf_solar.h>
#include "tools/errcode.hxx"

#ifndef _SBX_CLASS_TYPE
#define _SBX_CLASS_TYPE

namespace binfilter {

enum SbxClassType {         // SBX-Klassen-IDs (Reihenfolge ist wichtig)
    SbxCLASS_DONTCARE = 1,  // egal (bei der Suche, nicht 0 wg. StarBASIC)
    SbxCLASS_ARRAY,         // Array aus SbxVariablen
    SbxCLASS_VALUE,         // einfacher Wert
    SbxCLASS_VARIABLE,      // Variable (ab hier gibts einen Broadcaster)
    SbxCLASS_METHOD,        // Methode (Function oder Sub)
    SbxCLASS_PROPERTY,      // Property
    SbxCLASS_OBJECT         // Objekt
};

#endif

#ifndef _SBX_DATA_TYPE
#define _SBX_DATA_TYPE

enum SbxDataType {
    SbxEMPTY      =  0, // * Uninitialized
    SbxNULL       =  1, // * Contains no valid data
    SbxINTEGER    =  2, // * Integer (INT16)
    SbxLONG       =  3, // * Long integer (INT32)
    SbxSINGLE     =  4, // * Single-precision floating point number (float)
    SbxDOUBLE     =  5, // * Double-precision floating point number (double)
    SbxCURRENCY   =  6, //   Currency (INT64)
    SbxDATE       =  7, // * Date (double)
    SbxSTRING     =  8, // * String (StarView)
    SbxOBJECT     =  9, // * SbxBase object pointer
    SbxERROR      = 10, // * Error (UINT16)
    SbxBOOL       = 11, // * Boolean (0 or -1)
    SbxVARIANT    = 12, // * Anzeige fuer varianten Datentyp
    SbxDATAOBJECT = 13, // * Common data object w/o ref count

    SbxCHAR       = 16, // * signed char
    SbxBYTE       = 17, // * unsigned char
    SbxUSHORT     = 18, // * unsigned short (UINT16)
    SbxULONG      = 19, // * unsigned long (UINT32)
    SbxLONG64     = 20, //   signed 64-bit int
    SbxULONG64    = 21, //   unsigned 64-bit 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, //   AB 10.4.97, fuer GetCoreString(), nur zum Konvertieren
    SbxWSTRING    = 33, //   AB 4.10.2000 Reimplemented for backwards compatibility (#78919)
    SbxWCHAR      = 34, //   AB 4.10.2000 Reimplemented for backwards compatibility (#78919)
    SbxSALINT64   = 35, //   for UNO hyper
    SbxSALUINT64  = 36, //   for 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
};

#endif

#ifndef _SBX_OPERATOR
#define _SBX_OPERATOR

enum SbxOperator {
                        // Arithmetik:
    SbxEXP,             // this ^ var
    SbxMUL,             // this * var
    SbxDIV,             // this / var
    SbxMOD,             // this MOD var
    SbxPLUS,            // this + var
    SbxMINUS,           // this - var
    SbxNEG,             // -this (var wird ignoriert)
    SbxIDIV,            // this / var (beide Operanden sind max. INT32!)
                        // Boolesche Operatoren (auch max INT32!):
    SbxAND,             // this & var
    SbxOR,              // this | var
    SbxXOR,             // this ^ var
    SbxEQV,             // ~this ^ var
    SbxIMP,             // ~this | var
    SbxNOT,             // ~this (var wird ignoriert)
                        // String-Verkettung:
    SbxCAT,             // this & var
                        // Vergleiche:
    SbxEQ,              // this = var
    SbxNE,              // this <> var
    SbxLT,              // this < var
    SbxGT,              // this > var
    SbxLE,              // this <= var
    SbxGE               // this >= var
};

#endif

#ifndef _SBX_NAME_TYPE
#define _SBX_NAME_TYPE

enum SbxNameType {              // Art des erfragten Namens einer Variablen
    SbxNAME_NONE,               // der nackte Name
    SbxNAME_SHORT,              // Name(A,B)
    SbxNAME_SHORT_TYPES,        // Name%(A%,B$)
    SbxNAME_LONG_TYPES          // Name(A As Integer, B As String) As Integer
};

#endif

// AB: 20.3.96: Neue Fehler-Meldungen
typedef ULONG SbxError;         // Alten Typ erhalten

#endif
// von #ifndef __RSC


// Neue Fehler-Codes per define
#define ERRCODE_SBX_OK                          ERRCODE_NONE                    // durchgefuehrt
#define ERRCODE_SBX_SYNTAX                      (1UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_COMPILER)         // Syntaxfehler im Parser
#define ERRCODE_SBX_NOTIMP                      (2UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_NOTSUPPORTED)     // nicht moeglich
#define ERRCODE_SBX_OVERFLOW                    (3UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_SBX)              // Ueberlauf
#define ERRCODE_SBX_BOUNDS                      (4UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_SBX)              // Array-Index ungueltig
#define ERRCODE_SBX_ZERODIV                     (5UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_SBX)              // Division durch Null
#define ERRCODE_SBX_CONVERSION                  (6UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_SBX)              // falscher Datentyp
#define ERRCODE_SBX_BAD_PARAMETER               (7UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_RUNTIME)          // ungueltiger Parameter
#define ERRCODE_SBX_PROC_UNDEFINED              (8UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_RUNTIME)          // BASIC-Sub oder Function undefiniert
#define ERRCODE_SBX_ERROR                       (9UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_UNKNOWN)          // andere Fehler, Objektbezogene Fehler
#define ERRCODE_SBX_NO_OBJECT                   (10UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_RUNTIME)          // Objektvariable nicht belegt
#define ERRCODE_SBX_CANNOT_LOAD                 (11UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_CREATE)           // Objekt kann nicht geladen/eingerichtet werden
#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)           // Objekt ist nicht aktiviert
#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)           // Falsche Verwendung eines Objekts
#define ERRCODE_SBX_NO_OLE                      (20UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_ACCESS)           // Kein OLE-Objekt
#define ERRCODE_SBX_BAD_METHOD                  (21UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_RUNTIME)          // Methode nicht unterst�tzt
#define ERRCODE_SBX_OLE_ERROR                   (22UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_RUNTIME)          // OLE Automation-Fehler
#define ERRCODE_SBX_BAD_ACTION                  (23UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_NOTSUPPORTED)     // Aktion nicht unterst�tzt
#define ERRCODE_SBX_NO_NAMED_ARGS               (24UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_RUNTIME)          // Keine benannten Argumente
#define ERRCODE_SBX_BAD_LOCALE                  (25UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_NOTSUPPORTED)     // Laenderspezifische Einstellungen nicht unterst�tzt
#define ERRCODE_SBX_NAMED_NOT_FOUND             (26UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_RUNTIME)          // Unbekanntes benanntes Argument
#define ERRCODE_SBX_NOT_OPTIONAL                (27UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_RUNTIME)          // Argument nicht optional
#define ERRCODE_SBX_WRONG_ARGS                  (28UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_SBX)              // Falsche Zahl von Argumenten
#define ERRCODE_SBX_NOT_A_COLL                  (29UL | ERRCODE_AREA_SBX | \
                                                ERRCODE_CLASS_RUNTIME)          // Objekt enthaelt keine Elemente
#define LAST_SBX_ERROR_ID                       29UL


// Ab hier fuer Ressource wieder unwichtig
#ifndef __RSC

// Alte Codes auf neue mappen
#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


/* Alte Codes mit VB-Fehler-Codes
enum SbxError {                 // Ergebnis einer Rechenoperation/Konversion
    SbxERR_OK = 0,              // durchgefuehrt
    SbxERR_SYNTAX = 2,          // Syntaxfehler im Parser
    SbxERR_NOTIMP = 5,          // nicht moeglich
    SbxERR_OVERFLOW = 6,        // Ueberlauf
    SbxERR_BOUNDS = 9,          // Array-Index ungueltig
    SbxERR_ZERODIV = 11,        // Division durch Null
    SbxERR_CONVERSION = 13,     // falscher Datentyp
    SbxERR_BAD_PARAMETER = 14,  // ung�ltiger Parameter
    SbxERR_PROC_UNDEFINED = 35, // BASIC-Sub oder Function undefiniert
    SbxERR_ERROR = 51,          // andere Fehler
                                // Objektbezogene Fehler
    SbxERR_NO_OBJECT = 91,      // Objektvariable nicht belegt
    SbxERR_CANNOT_LOAD = 323,   // Objekt kann nicht geladen/eingerichtet werden
    SbxERR_BAD_INDEX = 341,     // Invalid object index
    SbxERR_NO_ACTIVE_OBJECT=366,// Objekt ist nicht aktiviert
    SbxERR_BAD_PROP_VALUE = 380,// Bad property value
    SbxERR_PROP_READONLY = 382, // Property is read only
    SbxERR_PROP_WRITEONLY = 394,// Property is write only
    SbxERR_INVALID_OBJECT = 420,// Invalid object reference
    SbxERR_NO_METHOD = 423,     // Property oder Methode unbekannt
    SbxERR_INVALID_USAGE_OBJECT=425,// Falsche Verwendung eines Objekts
    SbxERR_NO_OLE = 430,        // Kein OLE-Objekt
    SbxERR_BAD_METHOD = 438,    // Methode nicht unterst�tzt
    SbxERR_OLE_ERROR = 440,     // OLE Automation-Fehler
    SbxERR_BAD_ACTION = 445,    // Aktion nicht unterst�tzt
    SbxERR_NO_NAMED_ARGS = 446, // Keine benannten Argumente
    SbxERR_BAD_LOCALE = 447,    // Laenderspezifische Einstellungen nicht unterst�tzt
    SbxERR_NAMED_NOT_FOUND = 448,// Unbekanntes benanntes Argument
    SbxERR_NOT_OPTIONAL = 449,  // Argument nicht optional
    SbxERR_WRONG_ARGS = 450,    // Falsche Zahl von Argumenten
    SbxERR_NOT_A_COLL = 451     // Objekt enth�lt keine Elemente
};
*/

// Flag-Bits:
#define SBX_READ      0x0001    // Leseerlaubnis
#define SBX_WRITE     0x0002    // Schreiberlaubnis
#define SBX_READWRITE 0x0003    // beides
#define SBX_DONTSTORE 0x0004    // Objekt nicht speichern
#define SBX_MODIFIED  0x0008    // Objekt ist geaendert
#define SBX_FIXED     0x0010    // fester Datentyp (SbxVariable)
#define SBX_CONST     0x0020    // Definition eines Const-Wertes
#define SBX_OPTIONAL  0x0040    // Parameter ist optional
#define SBX_HIDDEN    0x0080    // Element ist unsichtbar
#define SBX_INVISIBLE 0x0100    // Element wird mit Find() nicht gefunden
#define SBX_EXTSEARCH 0x0200    // Objekt wird komplett durchsucht
#define SBX_EXTFOUND  0x0400    // Variable wurde durch Extended Srch gefunden
#define SBX_GBLSEARCH 0x0800    // Globale Suche ueber Parents
#define SBX_RESERVED  0x1000    // reserviert
#define SBX_PRIVATE   0x1000    // #110004, #112015, cannot conflict with SBX_RESERVED
#define SBX_NO_BROADCAST 0x2000 // kein Broadcast bei Get/Put
#define SBX_REFERENCE 0x4000    // Parameter ist Referenz (DLL-Aufruf)
#define SBX_NO_MODIFY 0x8000    // SetModified wird unterdrueckt

// 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

// Liste aller Creators fuer Load/Store

#define SBXCR_SBX           0x20584253      // SBX(blank)

// Liste der vordefinierten SBX-IDs. Eigene SBX-IDs muessen spezifisch
// so vergeben werden, dass sie innerhalb des Streams und der dazu passenden
// Factory eindeutig sind.

#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 begrenzt die Basis-Datentypen auf verschiedene
// Bereiche. Diese Bereiche sind zwecks Portabilitaet fest
// definiert, unabhaengig von der Implementation. Allein der
// Datentyp double nimmt auf, was er fassen kann.

#define SbxMAXCHAR          ((sal_Unicode)65535)
#define SbxMINCHAR          (0)
#define SbxMAXBYTE          ( 255)
#define SbxMAXINT           ( 32767)
#define SbxMININT           (-32768)
#define SbxMAXUINT          ((UINT16) 65535)
#define SbxMAXLNG           ( 2147483647)
#define SbxMINLNG           ((INT32)(-2147483647-1))
#define SbxMAXULNG          ((UINT32) 0xffffffff)

#define SbxMAXSALINT64      SAL_MAX_INT64
#define SbxMINSALINT64      SAL_MIN_INT64
#define SbxMAXSALUINT64     SAL_MAX_UINT64

#define SbxMAXSNG           ( 3.402823e+38)
#define SbxMINSNG           (-3.402823e+38)
#define SbxMAXSNG2          ( 1.175494351e-38)
#define SbxMINSNG2          (-1.175494351e-38)
#define SbxMAXCURR          ( 922337203685477.5807)
#define SbxMINCURR          (-922337203685477.5808)
#define CURRENCY_FACTOR     10000
#define SbxMAXCURRLNG       (SbxMAXLNG/CURRENCY_FACTOR)
#define SbxMINCURRLNG       (SbxMINLNG/CURRENCY_FACTOR)

// Der maximal zulaessige Offset-Index fuer Sbx-Arrays (wg. 64K-Limit)

#define SBX_MAXINDEX        0x3FF0
#define SBX_MAXINDEX32      SbxMAXLNG

// Die numerischen Werte fuer TRUE und FALSE sind wie folgt definiert:

enum SbxBOOL { SbxFALSE = 0, SbxTRUE = -1 };

#endif
// von #ifndef __RSC

}

#endif

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