1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 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/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 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 . 18 */ 19 20 21 #include <runtime.hxx> 22 #include <stdobj.hxx> 23 #include <sbstdobj.hxx> 24 #include <rtlproto.hxx> 25 #include <sbintern.hxx> 26 // The nArgs-field of a table entry is encrypted as follows: 27 // At the moment it is assumed that properties don't need any 28 // parameters! 29 30 // previously ARGSMASK_ was 0x007F ( e.g. up to 127 args ) however 63 should be 31 // enough, if not we need to increase the size of nArgs member in the Methods 32 // struct below. 33 // note: the limitation of 63 args is only for RTL functions defined here and 34 // does NOT impose a limit on User defined procedures ). This changes is to 35 // allow us space for a flag to blacklist some functions in vba mode 36 37 #define ARGSMASK_ 0x003F // 63 Arguments 38 #define COMPTMASK_ 0x00C0 // COMPATIBILITY mask 39 #define COMPATONLY_ 0x0080 // procedure is visible in vba mode only 40 #define NORMONLY_ 0x0040 // procedure is visible in normal mode only 41 42 #define RWMASK_ 0x0F00 // mask for R/W-bits 43 #define TYPEMASK_ 0xF000 // mask for the entry's type 44 45 #define OPT_ 0x0400 // parameter is optional 46 #define CONST_ 0x0800 // property is const 47 #define METHOD_ 0x3000 48 #define PROPERTY_ 0x4000 49 #define OBJECT_ 0x8000 50 // combination of bits above: 51 #define FUNCTION_ 0x1100 52 #define LFUNCTION_ 0x1300 // mask for function which also works as Lvalue 53 #define SUB_ 0x2100 54 #define ROPROP_ 0x4100 // mask Read Only-Property 55 #define RWPROP_ 0x4300 // mask Read/Write-Property 56 #define CPROP_ 0x4900 // mask for constant 57 58 namespace { 59 60 struct Methods { 61 const char* pName; 62 SbxDataType eType; 63 short nArgs; 64 RtlCall pFunc; 65 sal_uInt16 nHash; 66 }; 67 68 } 69 70 static Methods aMethods[] = { 71 72 { "Abs", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Abs),0 }, 73 { "number", SbxDOUBLE, 0,nullptr,0 }, 74 { "Array", SbxOBJECT, FUNCTION_, RTLNAME(Array),0 }, 75 { "Asc", SbxLONG, 1 | FUNCTION_, RTLNAME(Asc),0 }, 76 { "string", SbxSTRING, 0,nullptr,0 }, 77 { "AscW", SbxLONG, 1 | FUNCTION_ | COMPATONLY_, RTLNAME(Asc),0}, 78 { "string", SbxSTRING, 0,nullptr,0 }, 79 { "Atn", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Atn),0 }, 80 { "number", SbxDOUBLE, 0,nullptr,0 }, 81 { "ATTR_ARCHIVE", SbxINTEGER, CPROP_, RTLNAME(ATTR_ARCHIVE),0 }, 82 { "ATTR_DIRECTORY", SbxINTEGER, CPROP_, RTLNAME(ATTR_DIRECTORY),0 }, 83 { "ATTR_HIDDEN", SbxINTEGER, CPROP_, RTLNAME(ATTR_HIDDEN),0 }, 84 { "ATTR_NORMAL", SbxINTEGER, CPROP_, RTLNAME(ATTR_NORMAL),0 }, 85 { "ATTR_READONLY", SbxINTEGER, CPROP_, RTLNAME(ATTR_READONLY),0 }, 86 { "ATTR_SYSTEM", SbxINTEGER, CPROP_, RTLNAME(ATTR_SYSTEM),0 }, 87 { "ATTR_VOLUME", SbxINTEGER, CPROP_, RTLNAME(ATTR_VOLUME),0 }, 88 89 { "Beep", SbxNULL, FUNCTION_, RTLNAME(Beep),0 }, 90 { "Blue", SbxINTEGER, 1 | FUNCTION_ | NORMONLY_, RTLNAME(Blue),0 }, 91 { "RGB-Value", SbxLONG, 0,nullptr,0 }, 92 93 { "CallByName", SbxVARIANT, 3 | FUNCTION_, RTLNAME(CallByName),0 }, 94 { "Object", SbxOBJECT, 0,nullptr,0 }, 95 { "ProcedureName",SbxSTRING, 0,nullptr,0 }, 96 { "CallType", SbxINTEGER, 0,nullptr,0 }, 97 { "CBool", SbxBOOL, 1 | FUNCTION_, RTLNAME(CBool),0 }, 98 { "expression", SbxVARIANT, 0,nullptr,0 }, 99 { "CByte", SbxBYTE, 1 | FUNCTION_, RTLNAME(CByte),0 }, 100 { "expression", SbxVARIANT, 0,nullptr,0 }, 101 { "CCur", SbxCURRENCY, 1 | FUNCTION_, RTLNAME(CCur),0 }, 102 { "expression", SbxVARIANT, 0,nullptr,0 }, 103 { "CDate", SbxDATE, 1 | FUNCTION_, RTLNAME(CDate),0 }, 104 { "expression", SbxVARIANT, 0,nullptr,0 }, 105 { "CDateFromUnoDate", SbxDATE, 1 | FUNCTION_, RTLNAME(CDateFromUnoDate),0 }, 106 { "UnoDate", SbxOBJECT, 0,nullptr,0 }, 107 { "CDateToUnoDate", SbxOBJECT, 1 | FUNCTION_, RTLNAME(CDateToUnoDate),0 }, 108 { "Date", SbxDATE, 0,nullptr,0 }, 109 { "CDateFromUnoTime", SbxDATE, 1 | FUNCTION_, RTLNAME(CDateFromUnoTime),0 }, 110 { "UnoTime", SbxOBJECT, 0,nullptr,0 }, 111 { "CDateToUnoTime", SbxOBJECT, 1 | FUNCTION_, RTLNAME(CDateToUnoTime),0 }, 112 { "Time", SbxDATE, 0,nullptr,0 }, 113 { "CDateFromUnoDateTime", SbxDATE, 1 | FUNCTION_, RTLNAME(CDateFromUnoDateTime),0 }, 114 { "UnoDateTime", SbxOBJECT, 0,nullptr,0 }, 115 { "CDateToUnoDateTime", SbxOBJECT, 1 | FUNCTION_, RTLNAME(CDateToUnoDateTime),0 }, 116 { "DateTime", SbxDATE, 0,nullptr,0 }, 117 { "CDateFromIso", SbxDATE, 1 | FUNCTION_, RTLNAME(CDateFromIso),0 }, 118 { "IsoDate", SbxSTRING, 0,nullptr,0 }, 119 { "CDateToIso", SbxSTRING, 1 | FUNCTION_, RTLNAME(CDateToIso),0 }, 120 { "Date", SbxDATE, 0,nullptr,0 }, 121 { "CDec", SbxDECIMAL, 1 | FUNCTION_, RTLNAME(CDec),0 }, 122 { "expression", SbxVARIANT, 0,nullptr,0 }, 123 { "CDbl", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(CDbl),0 }, 124 { "expression", SbxVARIANT, 0,nullptr,0 }, 125 { "CF_BITMAP", SbxINTEGER, CPROP_, RTLNAME(CF_BITMAP),0 }, 126 { "CF_METAFILEPICT",SbxINTEGER, CPROP_, RTLNAME(CF_METAFILEPICT),0 }, 127 { "CF_TEXT", SbxINTEGER, CPROP_, RTLNAME(CF_TEXT),0 }, 128 { "ChDir", SbxNULL, 1 | FUNCTION_, RTLNAME(ChDir),0 }, 129 { "string", SbxSTRING, 0,nullptr,0 }, 130 { "ChDrive", SbxNULL, 1 | FUNCTION_, RTLNAME(ChDrive),0 }, 131 { "string", SbxSTRING, 0,nullptr,0 }, 132 133 { "Choose", SbxVARIANT, 2 | FUNCTION_, RTLNAME(Choose),0 }, 134 { "Index", SbxINTEGER, 0,nullptr,0 }, 135 { "Expression", SbxVARIANT, 0,nullptr,0 }, 136 137 { "Chr", SbxSTRING, 1 | FUNCTION_, RTLNAME(Chr),0 }, 138 { "string", SbxINTEGER, 0,nullptr,0 }, 139 { "ChrW", SbxSTRING, 1 | FUNCTION_ | COMPATONLY_, RTLNAME(ChrW),0}, 140 { "string", SbxINTEGER, 0,nullptr,0 }, 141 142 { "CInt", SbxINTEGER, 1 | FUNCTION_, RTLNAME(CInt),0 }, 143 { "expression", SbxVARIANT, 0,nullptr,0 }, 144 { "CLEAR_ALLTABS", SbxINTEGER, CPROP_, RTLNAME(CLEAR_ALLTABS),0 }, 145 { "CLEAR_TAB", SbxINTEGER, CPROP_, RTLNAME(CLEAR_TAB),0 }, 146 { "CLng", SbxLONG, 1 | FUNCTION_, RTLNAME(CLng),0 }, 147 { "expression", SbxVARIANT, 0,nullptr,0 }, 148 { "CompatibilityMode", SbxBOOL, 1 | FUNCTION_, RTLNAME(CompatibilityMode),0}, 149 { "bEnable", SbxBOOL, 0,nullptr,0 }, 150 { "ConvertFromUrl", SbxSTRING, 1 | FUNCTION_, RTLNAME(ConvertFromUrl),0 }, 151 { "Url", SbxSTRING, 0,nullptr,0 }, 152 { "ConvertToUrl", SbxSTRING, 1 | FUNCTION_, RTLNAME(ConvertToUrl),0 }, 153 { "SystemPath", SbxSTRING, 0,nullptr,0 }, 154 { "Cos", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Cos),0 }, 155 { "number", SbxDOUBLE, 0,nullptr,0 }, 156 { "CreateObject", SbxOBJECT, 1 | FUNCTION_, RTLNAME( CreateObject ),0 }, 157 { "class", SbxSTRING, 0,nullptr,0 }, 158 { "CreateUnoListener",SbxOBJECT, 1 | FUNCTION_, RTLNAME( CreateUnoListener ),0 }, 159 { "prefix", SbxSTRING, 0,nullptr,0 }, 160 { "typename", SbxSTRING, 0,nullptr,0 }, 161 { "CreateUnoDialog",SbxOBJECT, 2 | FUNCTION_, RTLNAME( CreateUnoDialog ),0 }, 162 { "dialoglibrary",SbxOBJECT, 0,nullptr,0 }, 163 { "dialogname", SbxSTRING, 0,nullptr,0 }, 164 { "CreateUnoService",SbxOBJECT, 1 | FUNCTION_, RTLNAME( CreateUnoService ),0 }, 165 { "servicename", SbxSTRING, 0,nullptr,0 }, 166 { "CreateUnoServiceWithArguments",SbxOBJECT, 2 | FUNCTION_, RTLNAME( CreateUnoServiceWithArguments ),0 }, 167 { "servicename", SbxSTRING, 0,nullptr,0 }, 168 { "arguments", SbxARRAY, 0,nullptr,0 }, 169 { "CreateUnoStruct",SbxOBJECT, 1 | FUNCTION_, RTLNAME( CreateUnoStruct ),0 }, 170 { "classname", SbxSTRING, 0,nullptr,0 }, 171 { "CreateUnoValue", SbxOBJECT, 2 | FUNCTION_, RTLNAME( CreateUnoValue ),0 }, 172 { "type", SbxSTRING, 0,nullptr,0 }, 173 { "value", SbxVARIANT, 0,nullptr,0 }, 174 { "CreatePropertySet",SbxOBJECT, 1 | FUNCTION_, RTLNAME( CreatePropertySet ),0 }, 175 { "values", SbxARRAY, 0,nullptr,0 }, 176 { "CSng", SbxSINGLE, 1 | FUNCTION_, RTLNAME(CSng),0 }, 177 { "expression", SbxVARIANT, 0,nullptr,0 }, 178 { "CStr", SbxSTRING, 1 | FUNCTION_, RTLNAME(CStr),0 }, 179 { "expression", SbxVARIANT, 0,nullptr,0 }, 180 { "CurDir", SbxSTRING, 1 | FUNCTION_, RTLNAME(CurDir),0 }, 181 { "string", SbxSTRING, 0,nullptr,0 }, 182 { "CVar", SbxVARIANT, 1 | FUNCTION_, RTLNAME(CVar),0 }, 183 { "expression", SbxVARIANT, 0,nullptr,0 }, 184 { "CVErr", SbxVARIANT, 1 | FUNCTION_, RTLNAME(CVErr),0 }, 185 { "expression", SbxVARIANT, 0,nullptr,0 }, 186 { "DDB", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, RTLNAME(DDB),0 }, 187 { "Cost", SbxDOUBLE, 0, nullptr,0 }, 188 { "Salvage", SbxDOUBLE, 0, nullptr,0 }, 189 { "Life", SbxDOUBLE, 0, nullptr,0 }, 190 { "Period", SbxDOUBLE, 0, nullptr,0 }, 191 { "Factor", SbxVARIANT, OPT_, nullptr,0 }, 192 { "Date", SbxDATE, LFUNCTION_,RTLNAME(Date),0 }, 193 { "DateAdd", SbxDATE, 3 | FUNCTION_, RTLNAME(DateAdd),0 }, 194 { "Interval", SbxSTRING, 0,nullptr,0 }, 195 { "Number", SbxLONG, 0,nullptr,0 }, 196 { "Date", SbxDATE, 0,nullptr,0 }, 197 { "DateDiff", SbxDOUBLE, 5 | FUNCTION_, RTLNAME(DateDiff),0 }, 198 { "Interval", SbxSTRING, 0,nullptr,0 }, 199 { "Date1", SbxDATE, 0,nullptr,0 }, 200 { "Date2", SbxDATE, 0,nullptr,0 }, 201 { "Firstdayofweek" , SbxINTEGER, OPT_,nullptr,0 }, 202 { "Firstweekofyear", SbxINTEGER, OPT_,nullptr,0 }, 203 { "DatePart", SbxLONG, 4 | FUNCTION_, RTLNAME(DatePart),0 }, 204 { "Interval", SbxSTRING, 0,nullptr,0 }, 205 { "Date", SbxDATE, 0,nullptr,0 }, 206 { "Firstdayofweek" , SbxINTEGER, OPT_, nullptr,0 }, 207 { "Firstweekofyear", SbxINTEGER, OPT_, nullptr,0 }, 208 { "DateSerial", SbxDATE, 3 | FUNCTION_, RTLNAME(DateSerial),0 }, 209 { "Year", SbxINTEGER, 0,nullptr,0 }, 210 { "Month", SbxINTEGER, 0,nullptr,0 }, 211 { "Day", SbxINTEGER, 0,nullptr,0 }, 212 { "DateValue", SbxDATE, 1 | FUNCTION_, RTLNAME(DateValue),0 }, 213 { "String", SbxSTRING, 0,nullptr,0 }, 214 { "Day", SbxINTEGER, 1 | FUNCTION_, RTLNAME(Day),0 }, 215 { "Date", SbxDATE, 0,nullptr,0 }, 216 { "Ddeexecute", SbxNULL, 2 | FUNCTION_, RTLNAME(DDEExecute),0 }, 217 { "Channel", SbxLONG, 0,nullptr,0 }, 218 { "Command", SbxSTRING, 0,nullptr,0 }, 219 { "Ddeinitiate", SbxINTEGER, 2 | FUNCTION_, RTLNAME(DDEInitiate),0 }, 220 { "Application", SbxSTRING, 0,nullptr,0 }, 221 { "Topic", SbxSTRING, 0,nullptr,0 }, 222 { "Ddepoke", SbxNULL, 3 | FUNCTION_, RTLNAME(DDEPoke),0 }, 223 { "Channel", SbxLONG, 0,nullptr,0 }, 224 { "Item", SbxSTRING, 0,nullptr,0 }, 225 { "Data", SbxSTRING, 0,nullptr,0 }, 226 { "Dderequest", SbxSTRING, 2 | FUNCTION_, RTLNAME(DDERequest),0 }, 227 { "Channel", SbxLONG, 0,nullptr,0 }, 228 { "Item", SbxSTRING, 0,nullptr,0 }, 229 { "Ddeterminate", SbxNULL, 1 | FUNCTION_, RTLNAME(DDETerminate),0 }, 230 { "Channel", SbxLONG, 0,nullptr,0 }, 231 { "Ddeterminateall", SbxNULL, FUNCTION_, RTLNAME(DDETerminateAll),0 }, 232 { "DimArray", SbxOBJECT, FUNCTION_, RTLNAME(DimArray),0 }, 233 { "Dir", SbxSTRING, 2 | FUNCTION_, RTLNAME(Dir),0 }, 234 { "FileSpec", SbxSTRING, OPT_, nullptr,0 }, 235 { "attrmask", SbxINTEGER, OPT_, nullptr,0 }, 236 { "DoEvents", SbxINTEGER, FUNCTION_, RTLNAME(DoEvents),0 }, 237 { "DumpAllObjects", SbxEMPTY, 2 | SUB_, RTLNAME(DumpAllObjects),0 }, 238 { "FileSpec", SbxSTRING, 0,nullptr,0 }, 239 { "DumpAll", SbxINTEGER, OPT_, nullptr,0 }, 240 241 { "Empty", SbxVARIANT, CPROP_, RTLNAME(Empty),0 }, 242 { "EqualUnoObjects",SbxBOOL, 2 | FUNCTION_, RTLNAME(EqualUnoObjects),0 }, 243 { "Variant", SbxVARIANT, 0,nullptr,0 }, 244 { "Variant", SbxVARIANT, 0,nullptr,0 }, 245 { "EnableReschedule", SbxNULL, 1 | FUNCTION_, RTLNAME(EnableReschedule),0}, 246 { "bEnable", SbxBOOL, 0,nullptr,0 }, 247 { "Environ", SbxSTRING, 1 | FUNCTION_, RTLNAME(Environ),0 }, 248 { "Environmentstring",SbxSTRING, 0,nullptr,0 }, 249 { "EOF", SbxBOOL, 1 | FUNCTION_, RTLNAME(EOF),0 }, 250 { "Channel", SbxINTEGER, 0,nullptr,0 }, 251 { "Erl", SbxLONG, ROPROP_, RTLNAME( Erl ),0 }, 252 { "Err", SbxVARIANT, RWPROP_, RTLNAME( Err ),0 }, 253 { "Error", SbxSTRING, 1 | FUNCTION_, RTLNAME( Error ),0 }, 254 { "code", SbxLONG, 0,nullptr,0 }, 255 { "Exp", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Exp),0 }, 256 { "number", SbxDOUBLE, 0,nullptr,0 }, 257 258 { "False", SbxBOOL, CPROP_, RTLNAME(False),0 }, 259 { "FileAttr", SbxINTEGER, 2 | FUNCTION_, RTLNAME(FileAttr),0 }, 260 { "Channel", SbxINTEGER, 0,nullptr,0 }, 261 { "Attributes", SbxINTEGER, 0,nullptr,0 }, 262 { "FileCopy", SbxNULL, 2 | FUNCTION_, RTLNAME(FileCopy),0 }, 263 { "Source", SbxSTRING, 0,nullptr,0 }, 264 { "Destination", SbxSTRING, 0,nullptr,0 }, 265 { "FileDateTime", SbxSTRING, 1 | FUNCTION_, RTLNAME(FileDateTime),0 }, 266 { "filename", SbxSTRING, 0,nullptr,0 }, 267 { "FileExists", SbxBOOL, 1 | FUNCTION_, RTLNAME(FileExists),0 }, 268 { "filename", SbxSTRING, 0,nullptr,0 }, 269 { "FileLen", SbxLONG, 1 | FUNCTION_, RTLNAME(FileLen),0 }, 270 { "filename", SbxSTRING, 0,nullptr,0 }, 271 { "FindObject", SbxOBJECT, 1 | FUNCTION_, RTLNAME(FindObject),0 }, 272 { "Name", SbxSTRING, 0,nullptr,0 }, 273 { "FindPropertyObject", SbxOBJECT, 2 | FUNCTION_, RTLNAME(FindPropertyObject),0 }, 274 { "Object", SbxOBJECT, 0,nullptr,0 }, 275 { "Name", SbxSTRING, 0,nullptr,0 }, 276 { "Fix", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Fix),0 }, 277 { "number", SbxDOUBLE, 0,nullptr,0 }, 278 { "Format", SbxSTRING, 2 | FUNCTION_, RTLNAME(Format),0 }, 279 { "expression", SbxVARIANT, 0,nullptr,0 }, 280 { "format", SbxSTRING, OPT_, nullptr,0 }, 281 { "FormatDateTime", SbxSTRING, 2 | FUNCTION_ | COMPATONLY_, RTLNAME(FormatDateTime),0 }, 282 { "Date", SbxDATE, 0,nullptr,0 }, 283 { "NamedFormat", SbxINTEGER, OPT_, nullptr,0 }, 284 { "FormatNumber", SbxSTRING, 5 | FUNCTION_ | COMPATONLY_, RTLNAME(FormatNumber), 0 }, 285 { "expression", SbxDOUBLE, 0, nullptr, 0 }, 286 { "numDigitsAfterDecimal", SbxINTEGER, OPT_, nullptr, 0 }, 287 { "includeLeadingDigit", SbxINTEGER, OPT_, nullptr, 0 }, // vbTriState 288 { "useParensForNegativeNumbers", SbxINTEGER, OPT_, nullptr, 0 }, // vbTriState 289 { "groupDigits", SbxINTEGER, OPT_, nullptr, 0 }, // vbTriState 290 { "Frac", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Frac),0 }, 291 { "number", SbxDOUBLE, 0,nullptr,0 }, 292 { "FRAMEANCHORCHAR", SbxINTEGER, CPROP_, RTLNAME(FRAMEANCHORCHAR),0 }, 293 { "FRAMEANCHORPAGE", SbxINTEGER, CPROP_, RTLNAME(FRAMEANCHORPAGE),0 }, 294 { "FRAMEANCHORPARA", SbxINTEGER, CPROP_, RTLNAME(FRAMEANCHORPARA),0 }, 295 { "FreeFile", SbxINTEGER, FUNCTION_, RTLNAME(FreeFile),0 }, 296 { "FreeLibrary", SbxNULL, 1 | FUNCTION_, RTLNAME(FreeLibrary),0 }, 297 { "Modulename", SbxSTRING, 0,nullptr,0 }, 298 299 { "FV", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, RTLNAME(FV),0 }, 300 { "Rate", SbxDOUBLE, 0, nullptr,0 }, 301 { "NPer", SbxDOUBLE, 0, nullptr,0 }, 302 { "Pmt", SbxDOUBLE, 0, nullptr,0 }, 303 { "PV", SbxVARIANT, OPT_, nullptr,0 }, 304 { "Due", SbxVARIANT, OPT_, nullptr,0 }, 305 { "Get", SbxNULL, 3 | FUNCTION_, RTLNAME(Get),0 }, 306 { "filenumber", SbxINTEGER, 0,nullptr,0 }, 307 { "recordnumber", SbxLONG, 0,nullptr,0 }, 308 { "variablename", SbxVARIANT, 0,nullptr,0 }, 309 { "GetAttr", SbxINTEGER, 1 | FUNCTION_, RTLNAME(GetAttr),0 }, 310 { "filename", SbxSTRING, 0,nullptr,0 }, 311 { "GetDefaultContext", SbxOBJECT, 0 | FUNCTION_, RTLNAME(GetDefaultContext),0 }, 312 { "GetDialogZoomFactorX", SbxDOUBLE, FUNCTION_,RTLNAME(GetDialogZoomFactorX),0 }, 313 { "GetDialogZoomFactorY", SbxDOUBLE, FUNCTION_,RTLNAME(GetDialogZoomFactorY),0 }, 314 { "GetGUIType", SbxINTEGER, FUNCTION_,RTLNAME(GetGUIType),0 }, 315 { "GetGUIVersion", SbxLONG, FUNCTION_,RTLNAME(GetGUIVersion),0 }, 316 { "GetPathSeparator", SbxSTRING, FUNCTION_,RTLNAME(GetPathSeparator),0 }, 317 { "GetProcessServiceManager", SbxOBJECT, 0 | FUNCTION_, RTLNAME(GetProcessServiceManager),0 }, 318 { "GetSolarVersion", SbxLONG, FUNCTION_,RTLNAME(GetSolarVersion),0 }, 319 { "GetSystemTicks", SbxLONG, FUNCTION_,RTLNAME(GetSystemTicks),0 }, 320 { "GetSystemType", SbxINTEGER, FUNCTION_,RTLNAME(GetSystemType),0 }, 321 { "GlobalScope", SbxOBJECT, FUNCTION_,RTLNAME(GlobalScope),0 }, 322 { "Green", SbxINTEGER, 1 | FUNCTION_ | NORMONLY_, RTLNAME(Green),0 }, 323 { "RGB-Value", SbxLONG, 0,nullptr,0 }, 324 325 { "HasUnoInterfaces", SbxBOOL, 1 | FUNCTION_, RTLNAME(HasUnoInterfaces),0}, 326 { "InterfaceName",SbxSTRING, 0,nullptr,0 }, 327 { "Hex", SbxSTRING, 1 | FUNCTION_, RTLNAME(Hex),0 }, 328 { "number", SbxLONG, 0,nullptr,0 }, 329 { "Hour", SbxINTEGER, 1 | FUNCTION_, RTLNAME(Hour),0 }, 330 { "Date", SbxDATE, 0,nullptr,0 }, 331 332 { "IDABORT", SbxINTEGER, CPROP_, RTLNAME(IDABORT),0 }, 333 { "IDCANCEL", SbxINTEGER, CPROP_, RTLNAME(IDCANCEL),0 }, 334 { "IDNO", SbxINTEGER, CPROP_, RTLNAME(IDNO),0 }, 335 { "IDOK", SbxINTEGER, CPROP_, RTLNAME(IDOK),0 }, 336 { "IDRETRY", SbxINTEGER, CPROP_, RTLNAME(IDRETRY),0 }, 337 { "IDYES", SbxINTEGER, CPROP_, RTLNAME(IDYES),0 }, 338 339 { "Iif", SbxVARIANT, 3 | FUNCTION_, RTLNAME(Iif),0 }, 340 { "Bool", SbxBOOL, 0,nullptr,0 }, 341 { "Variant1", SbxVARIANT, 0,nullptr,0 }, 342 { "Variant2", SbxVARIANT, 0,nullptr,0 }, 343 344 { "Input", SbxSTRING, 2 | FUNCTION_ | COMPATONLY_, RTLNAME(Input),0}, 345 { "Number", SbxLONG, 0,nullptr,0 }, 346 { "FileNumber", SbxLONG, 0,nullptr,0 }, 347 { "InputBox", SbxSTRING, 5 | FUNCTION_, RTLNAME(InputBox),0 }, 348 { "Prompt", SbxSTRING, 0,nullptr,0 }, 349 { "Title", SbxSTRING, OPT_, nullptr,0 }, 350 { "Default", SbxSTRING, OPT_, nullptr,0 }, 351 { "XPosTwips", SbxLONG, OPT_, nullptr,0 }, 352 { "YPosTwips", SbxLONG, OPT_, nullptr,0 }, 353 { "InStr", SbxLONG, 4 | FUNCTION_, RTLNAME(InStr),0 }, 354 { "Start", SbxSTRING, OPT_, nullptr,0 }, 355 { "String1", SbxSTRING, 0,nullptr,0 }, 356 { "String2", SbxSTRING, 0,nullptr,0 }, 357 { "Compare", SbxINTEGER, OPT_, nullptr,0 }, 358 { "InStrRev", SbxLONG, 4 | FUNCTION_ | COMPATONLY_, RTLNAME(InStrRev),0}, 359 { "String1", SbxSTRING, 0,nullptr,0 }, 360 { "String2", SbxSTRING, 0,nullptr,0 }, 361 { "Start", SbxSTRING, OPT_, nullptr,0 }, 362 { "Compare", SbxINTEGER, OPT_, nullptr,0 }, 363 { "Int", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Int),0 }, 364 { "number", SbxDOUBLE, 0,nullptr,0 }, 365 { "IPmt", SbxDOUBLE, 6 | FUNCTION_ | COMPATONLY_, RTLNAME(IPmt),0 }, 366 { "Rate", SbxDOUBLE, 0, nullptr,0 }, 367 { "Per", SbxDOUBLE, 0, nullptr,0 }, 368 { "NPer", SbxDOUBLE, 0, nullptr,0 }, 369 { "PV", SbxDOUBLE, 0, nullptr,0 }, 370 { "FV", SbxVARIANT, OPT_, nullptr,0 }, 371 { "Due", SbxVARIANT, OPT_, nullptr,0 }, 372 { "IRR", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, RTLNAME(IRR),0 }, 373 { "ValueArray", SbxARRAY, 0, nullptr,0 }, 374 { "Guess", SbxVARIANT, OPT_, nullptr,0 }, 375 { "IsArray", SbxBOOL, 1 | FUNCTION_, RTLNAME(IsArray),0 }, 376 { "Variant", SbxVARIANT, 0,nullptr,0 }, 377 { "IsDate", SbxBOOL, 1 | FUNCTION_, RTLNAME(IsDate),0 }, 378 { "Variant", SbxVARIANT, 0,nullptr,0 }, 379 { "IsEmpty", SbxBOOL, 1 | FUNCTION_, RTLNAME(IsEmpty),0 }, 380 { "Variant", SbxVARIANT, 0,nullptr,0 }, 381 { "IsError", SbxBOOL, 1 | FUNCTION_, RTLNAME(IsError),0 }, 382 { "Variant", SbxVARIANT, 0,nullptr,0 }, 383 { "IsMissing", SbxBOOL, 1 | FUNCTION_, RTLNAME(IsMissing),0 }, 384 { "Variant", SbxVARIANT, 0,nullptr,0 }, 385 { "IsNull", SbxBOOL, 1 | FUNCTION_, RTLNAME(IsNull),0 }, 386 { "Variant", SbxVARIANT, 0,nullptr,0 }, 387 { "IsNumeric", SbxBOOL, 1 | FUNCTION_, RTLNAME(IsNumeric),0 }, 388 { "Variant", SbxVARIANT, 0,nullptr,0 }, 389 { "IsObject", SbxBOOL, 1 | FUNCTION_, RTLNAME(IsObject),0 }, 390 { "Variant", SbxVARIANT, 0,nullptr,0 }, 391 { "IsUnoStruct", SbxBOOL, 1 | FUNCTION_, RTLNAME(IsUnoStruct),0 }, 392 { "Variant", SbxVARIANT, 0,nullptr,0 }, 393 { "Join", SbxSTRING, 2 | FUNCTION_, RTLNAME(Join),0 }, 394 { "list", SbxOBJECT, 0,nullptr,0 }, 395 { "delimiter", SbxSTRING, 0,nullptr,0 }, 396 { "Kill", SbxNULL, 1 | FUNCTION_, RTLNAME(Kill),0 }, 397 { "filespec", SbxSTRING, 0,nullptr,0 }, 398 { "LBound", SbxLONG, 1 | FUNCTION_, RTLNAME(LBound),0 }, 399 { "Variant", SbxVARIANT, 0,nullptr,0 }, 400 { "LCase", SbxSTRING, 1 | FUNCTION_, RTLNAME(LCase),0 }, 401 { "string", SbxSTRING, 0,nullptr,0 }, 402 { "Left", SbxSTRING, 2 | FUNCTION_, RTLNAME(Left),0 }, 403 { "String", SbxSTRING, 0,nullptr,0 }, 404 { "Count", SbxLONG, 0,nullptr,0 }, 405 { "Len", SbxLONG, 1 | FUNCTION_, RTLNAME(Len),0 }, 406 { "StringOrVariant", SbxVARIANT, 0,nullptr,0 }, 407 { "LenB", SbxLONG, 1 | FUNCTION_, RTLNAME(Len),0 }, 408 { "StringOrVariant", SbxVARIANT, 0,nullptr,0 }, 409 { "Load", SbxNULL, 1 | FUNCTION_, RTLNAME(Load),0 }, 410 { "object", SbxOBJECT, 0,nullptr,0 }, 411 { "LoadPicture", SbxOBJECT, 1 | FUNCTION_, RTLNAME(LoadPicture),0 }, 412 { "string", SbxSTRING, 0,nullptr,0 }, 413 { "Loc", SbxLONG, 1 | FUNCTION_, RTLNAME(Loc),0 }, 414 { "Channel", SbxINTEGER, 0,nullptr,0 }, 415 { "Lof", SbxLONG, 1 | FUNCTION_, RTLNAME(Lof),0 }, 416 { "Channel", SbxINTEGER, 0,nullptr,0 }, 417 { "Log", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Log),0 }, 418 { "number", SbxDOUBLE, 0,nullptr,0 }, 419 { "LTrim", SbxSTRING, 1 | FUNCTION_, RTLNAME(LTrim),0 }, 420 { "string", SbxSTRING, 0,nullptr,0 }, 421 422 { "MB_ABORTRETRYIGNORE", SbxINTEGER, CPROP_, RTLNAME(MB_ABORTRETRYIGNORE),0}, 423 { "MB_APPLMODAL", SbxINTEGER, CPROP_, RTLNAME(MB_APPLMODAL),0 }, 424 { "MB_DEFBUTTON1", SbxINTEGER, CPROP_, RTLNAME(MB_DEFBUTTON1),0 }, 425 { "MB_DEFBUTTON2", SbxINTEGER, CPROP_, RTLNAME(MB_DEFBUTTON2),0 }, 426 { "MB_DEFBUTTON3", SbxINTEGER, CPROP_, RTLNAME(MB_DEFBUTTON3),0 }, 427 { "MB_ICONEXCLAMATION", SbxINTEGER, CPROP_, RTLNAME(MB_ICONEXCLAMATION),0}, 428 { "MB_ICONINFORMATION", SbxINTEGER, CPROP_, RTLNAME(MB_ICONINFORMATION),0}, 429 { "MB_ICONQUESTION",SbxINTEGER, CPROP_, RTLNAME(MB_ICONQUESTION),0 }, 430 { "MB_ICONSTOP", SbxINTEGER, CPROP_, RTLNAME(MB_ICONSTOP),0 }, 431 { "MB_OK", SbxINTEGER, CPROP_, RTLNAME(MB_OK),0 }, 432 { "MB_OKCANCEL", SbxINTEGER, CPROP_, RTLNAME(MB_OKCANCEL),0 }, 433 { "MB_RETRYCANCEL", SbxINTEGER, CPROP_, RTLNAME(MB_RETRYCANCEL),0 }, 434 { "MB_SYSTEMMODAL", SbxINTEGER, CPROP_, RTLNAME(MB_SYSTEMMODAL),0 }, 435 { "MB_YESNO", SbxINTEGER, CPROP_, RTLNAME(MB_YESNO),0 }, 436 { "MB_YESNOCANCEL", SbxINTEGER, CPROP_, RTLNAME(MB_YESNOCANCEL),0 }, 437 438 { "Me", SbxOBJECT, 0 | FUNCTION_ | COMPATONLY_, RTLNAME(Me),0 }, 439 { "Mid", SbxSTRING, 3 | LFUNCTION_,RTLNAME(Mid),0 }, 440 { "String", SbxSTRING, 0,nullptr,0 }, 441 { "StartPos", SbxLONG, 0,nullptr,0 }, 442 { "Length", SbxLONG, OPT_, nullptr,0 }, 443 { "Minute", SbxINTEGER, 1 | FUNCTION_, RTLNAME(Minute),0 }, 444 { "Date", SbxDATE, 0,nullptr,0 }, 445 { "MIRR", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, RTLNAME(MIRR),0 }, 446 { "ValueArray", SbxARRAY, 0, nullptr,0 }, 447 { "FinanceRate", SbxDOUBLE, 0, nullptr,0 }, 448 { "ReinvestRate", SbxDOUBLE, 0, nullptr,0 }, 449 { "MkDir", SbxNULL, 1 | FUNCTION_, RTLNAME(MkDir),0 }, 450 { "pathname", SbxSTRING, 0,nullptr,0 }, 451 { "Month", SbxINTEGER, 1 | FUNCTION_, RTLNAME(Month),0 }, 452 { "Date", SbxDATE, 0,nullptr,0 }, 453 { "MonthName", SbxSTRING, 2 | FUNCTION_ | COMPATONLY_, RTLNAME(MonthName),0 }, 454 { "Month", SbxINTEGER, 0,nullptr,0 }, 455 { "Abbreviate", SbxBOOL, OPT_, nullptr,0 }, 456 { "MsgBox", SbxINTEGER, 5 | FUNCTION_, RTLNAME(MsgBox),0 }, 457 { "Prompt", SbxSTRING, 0,nullptr,0 }, 458 { "Buttons", SbxINTEGER, OPT_, nullptr,0 }, 459 { "Title", SbxSTRING, OPT_, nullptr,0 }, 460 { "Helpfile", SbxSTRING, OPT_, nullptr,0 }, 461 { "Context", SbxINTEGER, OPT_, nullptr,0 }, 462 463 { "Nothing", SbxOBJECT, CPROP_, RTLNAME(Nothing),0 }, 464 { "Now", SbxDATE, FUNCTION_, RTLNAME(Now),0 }, 465 { "NPer", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, RTLNAME(NPer),0 }, 466 { "Rate", SbxDOUBLE, 0, nullptr,0 }, 467 { "Pmt", SbxDOUBLE, 0, nullptr,0 }, 468 { "PV", SbxDOUBLE, 0, nullptr,0 }, 469 { "FV", SbxVARIANT, OPT_, nullptr,0 }, 470 { "Due", SbxVARIANT, OPT_, nullptr,0 }, 471 { "NPV", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, RTLNAME(NPV),0 }, 472 { "Rate", SbxDOUBLE, 0, nullptr,0 }, 473 { "ValueArray", SbxARRAY, 0, nullptr,0 }, 474 { "Null", SbxNULL, CPROP_, RTLNAME(Null),0 }, 475 476 { "Oct", SbxSTRING, 1 | FUNCTION_, RTLNAME(Oct),0 }, 477 { "number", SbxLONG, 0,nullptr,0 }, 478 479 { "Partition", SbxSTRING, 4 | FUNCTION_, RTLNAME(Partition),0 }, 480 { "number", SbxLONG, 0,nullptr,0 }, 481 { "start", SbxLONG, 0,nullptr,0 }, 482 { "stop", SbxLONG, 0,nullptr,0 }, 483 { "interval", SbxLONG, 0,nullptr,0 }, 484 { "Pi", SbxDOUBLE, CPROP_, RTLNAME(PI),0 }, 485 486 { "Pmt", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, RTLNAME(Pmt),0 }, 487 { "Rate", SbxDOUBLE, 0, nullptr,0 }, 488 { "NPer", SbxDOUBLE, 0, nullptr,0 }, 489 { "PV", SbxDOUBLE, 0, nullptr,0 }, 490 { "FV", SbxVARIANT, OPT_, nullptr,0 }, 491 { "Due", SbxVARIANT, OPT_, nullptr,0 }, 492 493 { "PPmt", SbxDOUBLE, 6 | FUNCTION_ | COMPATONLY_, RTLNAME(PPmt),0 }, 494 { "Rate", SbxDOUBLE, 0, nullptr,0 }, 495 { "Per", SbxDOUBLE, 0, nullptr,0 }, 496 { "NPer", SbxDOUBLE, 0, nullptr,0 }, 497 { "PV", SbxDOUBLE, 0, nullptr,0 }, 498 { "FV", SbxVARIANT, OPT_, nullptr,0 }, 499 { "Due", SbxVARIANT, OPT_, nullptr,0 }, 500 501 { "Put", SbxNULL, 3 | FUNCTION_, RTLNAME(Put),0 }, 502 { "filenumber", SbxINTEGER, 0,nullptr,0 }, 503 { "recordnumber", SbxLONG, 0,nullptr,0 }, 504 { "variablename", SbxVARIANT, 0,nullptr,0 }, 505 506 { "PV", SbxDOUBLE, 5 | FUNCTION_ | COMPATONLY_, RTLNAME(PV),0 }, 507 { "Rate", SbxDOUBLE, 0, nullptr,0 }, 508 { "NPer", SbxDOUBLE, 0, nullptr,0 }, 509 { "Pmt", SbxDOUBLE, 0, nullptr,0 }, 510 { "FV", SbxVARIANT, OPT_, nullptr,0 }, 511 { "Due", SbxVARIANT, OPT_, nullptr,0 }, 512 513 { "QBColor", SbxLONG, 1 | FUNCTION_, RTLNAME(QBColor),0 }, 514 { "number", SbxINTEGER, 0,nullptr,0 }, 515 516 { "Randomize", SbxNULL, 1 | FUNCTION_, RTLNAME(Randomize),0 }, 517 { "Number", SbxDOUBLE, OPT_, nullptr,0 }, 518 { "Rate", SbxDOUBLE, 6 | FUNCTION_ | COMPATONLY_, RTLNAME(Rate),0 }, 519 { "NPer", SbxDOUBLE, 0, nullptr,0 }, 520 { "Pmt", SbxDOUBLE, 0, nullptr,0 }, 521 { "PV", SbxDOUBLE, 0, nullptr,0 }, 522 { "FV", SbxVARIANT, OPT_, nullptr,0 }, 523 { "Due", SbxVARIANT, OPT_, nullptr,0 }, 524 { "Guess", SbxVARIANT, OPT_, nullptr,0 }, 525 { "Red", SbxINTEGER, 1 | FUNCTION_ | NORMONLY_, RTLNAME(Red),0 }, 526 { "RGB-Value", SbxLONG, 0,nullptr,0 }, 527 { "Reset", SbxNULL, 0 | FUNCTION_, RTLNAME(Reset),0 }, 528 { "ResolvePath", SbxSTRING, 1 | FUNCTION_, RTLNAME(ResolvePath),0 }, 529 { "Path", SbxSTRING, 0,nullptr,0 }, 530 { "RGB", SbxLONG, 3 | FUNCTION_, RTLNAME(RGB),0 }, 531 { "Red", SbxINTEGER, 0,nullptr,0 }, 532 { "Green", SbxINTEGER, 0,nullptr,0 }, 533 { "Blue", SbxINTEGER, 0,nullptr,0 }, 534 { "Replace", SbxSTRING, 6 | FUNCTION_, RTLNAME(Replace),0 }, 535 { "Expression", SbxSTRING, 0,nullptr,0 }, 536 { "Find", SbxSTRING, 0,nullptr,0 }, 537 { "Replace", SbxSTRING, 0,nullptr,0 }, 538 { "Start", SbxINTEGER, OPT_, nullptr,0 }, 539 { "Count", SbxINTEGER, OPT_, nullptr,0 }, 540 { "Compare", SbxINTEGER, OPT_, nullptr,0 }, 541 { "Right", SbxSTRING, 2 | FUNCTION_, RTLNAME(Right),0 }, 542 { "String", SbxSTRING, 0,nullptr,0 }, 543 { "Count", SbxLONG, 0,nullptr,0 }, 544 { "RmDir", SbxNULL, 1 | FUNCTION_, RTLNAME(RmDir),0 }, 545 { "pathname", SbxSTRING, 0,nullptr,0 }, 546 { "Round", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, RTLNAME(Round),0}, 547 { "Expression", SbxDOUBLE, 0,nullptr,0 }, 548 { "Numdecimalplaces", SbxINTEGER, OPT_, nullptr,0 }, 549 { "Rnd", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Rnd),0 }, 550 { "Number", SbxDOUBLE, OPT_, nullptr,0 }, 551 { "RTL", SbxOBJECT, 0 | FUNCTION_ | COMPATONLY_, RTLNAME(RTL),0}, 552 { "RTrim", SbxSTRING, 1 | FUNCTION_, RTLNAME(RTrim),0 }, 553 { "string", SbxSTRING, 0,nullptr,0 }, 554 555 { "SavePicture", SbxNULL, 2 | FUNCTION_, RTLNAME(SavePicture),0 }, 556 { "object", SbxOBJECT, 0,nullptr,0 }, 557 { "string", SbxSTRING, 0,nullptr,0 }, 558 { "Second", SbxINTEGER, 1 | FUNCTION_, RTLNAME(Second),0 }, 559 { "Date", SbxDATE, 0,nullptr,0 }, 560 { "Seek", SbxLONG, 1 | FUNCTION_, RTLNAME(Seek),0 }, 561 { "Channel", SbxINTEGER, 0,nullptr,0 }, 562 { "SendKeys", SbxNULL, 2 | FUNCTION_, RTLNAME(SendKeys),0 }, 563 { "String", SbxSTRING, 0,nullptr,0 }, 564 { "Wait", SbxBOOL, OPT_, nullptr,0 }, 565 { "SetAttr", SbxNULL, 2 | FUNCTION_, RTLNAME(SetAttr),0 }, 566 { "File" , SbxSTRING, 0,nullptr,0 }, 567 { "Attributes", SbxINTEGER, 0,nullptr,0 }, 568 { "SET_OFF", SbxINTEGER, CPROP_, RTLNAME(SET_OFF),0 }, 569 { "SET_ON", SbxINTEGER, CPROP_, RTLNAME(SET_ON),0 }, 570 { "SET_TAB", SbxINTEGER, CPROP_, RTLNAME(SET_TAB),0 }, 571 { "Sgn", SbxINTEGER, 1 | FUNCTION_, RTLNAME(Sgn),0 }, 572 { "number", SbxDOUBLE, 0,nullptr,0 }, 573 { "Shell", SbxLONG, 2 | FUNCTION_, RTLNAME(Shell),0 }, 574 { "Commandstring",SbxSTRING, 0,nullptr,0 }, 575 { "WindowStyle", SbxINTEGER, OPT_, nullptr,0 }, 576 { "Sin", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Sin),0 }, 577 { "number", SbxDOUBLE, 0,nullptr,0 }, 578 { "SLN", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, RTLNAME(SLN),0 }, 579 { "Cost", SbxDOUBLE, 0,nullptr,0 }, 580 { "Double", SbxDOUBLE, 0,nullptr,0 }, 581 { "Life", SbxDOUBLE, 0,nullptr,0 }, 582 { "SYD", SbxDOUBLE, 2 | FUNCTION_ | COMPATONLY_, RTLNAME(SYD),0 }, 583 { "Cost", SbxDOUBLE, 0,nullptr,0 }, 584 { "Salvage", SbxDOUBLE, 0,nullptr,0 }, 585 { "Life", SbxDOUBLE, 0,nullptr,0 }, 586 { "Period", SbxDOUBLE, 0,nullptr,0 }, 587 { "Space", SbxSTRING, 1 | FUNCTION_, RTLNAME(Space),0 }, 588 { "string", SbxLONG, 0,nullptr,0 }, 589 { "Spc", SbxSTRING, 1 | FUNCTION_, RTLNAME(Spc),0 }, 590 { "Count", SbxLONG, 0,nullptr,0 }, 591 { "Split", SbxOBJECT, 3 | FUNCTION_, RTLNAME(Split),0 }, 592 { "expression", SbxSTRING, 0,nullptr,0 }, 593 { "delimiter", SbxSTRING, 0,nullptr,0 }, 594 { "count", SbxLONG, 0,nullptr,0 }, 595 { "Sqr", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Sqr),0 }, 596 { "number", SbxDOUBLE, 0,nullptr,0 }, 597 { "Str", SbxSTRING, 1 | FUNCTION_, RTLNAME(Str),0 }, 598 { "number", SbxDOUBLE, 0,nullptr,0 }, 599 { "StrComp", SbxINTEGER, 3 | FUNCTION_, RTLNAME(StrComp),0 }, 600 { "String1", SbxSTRING, 0,nullptr,0 }, 601 { "String2", SbxSTRING, 0,nullptr,0 }, 602 { "Compare", SbxINTEGER, OPT_, nullptr,0 }, 603 { "StrConv", SbxOBJECT, 3 | FUNCTION_, RTLNAME(StrConv),0 }, 604 { "String", SbxSTRING, 0,nullptr,0 }, 605 { "Conversion", SbxSTRING, 0,nullptr,0 }, 606 { "LCID", SbxINTEGER, OPT_,nullptr,0 }, 607 { "String", SbxSTRING, 2 | FUNCTION_, RTLNAME(String),0 }, 608 { "Count", SbxLONG, 0,nullptr,0 }, 609 { "Filler", SbxVARIANT, 0,nullptr,0 }, 610 { "StrReverse", SbxSTRING, 1 | FUNCTION_ | COMPATONLY_, RTLNAME(StrReverse),0 }, 611 { "String1", SbxSTRING, 0,nullptr,0 }, 612 { "Switch", SbxVARIANT, 2 | FUNCTION_, RTLNAME(Switch),0 }, 613 { "Expression", SbxVARIANT, 0,nullptr,0 }, 614 { "Value", SbxVARIANT, 0,nullptr,0 }, 615 { "Tab", SbxSTRING, 1 | FUNCTION_, RTLNAME(Tab),0 }, 616 { "Count", SbxLONG, 0,nullptr,0 }, 617 { "Tan", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Tan),0 }, 618 { "number", SbxDOUBLE, 0,nullptr,0 }, 619 { "Time", SbxVARIANT, LFUNCTION_,RTLNAME(Time),0 }, 620 { "Timer", SbxDATE, FUNCTION_, RTLNAME(Timer),0 }, 621 { "TimeSerial", SbxDATE, 3 | FUNCTION_, RTLNAME(TimeSerial),0 }, 622 { "Hour", SbxLONG, 0,nullptr,0 }, 623 { "Minute", SbxLONG, 0,nullptr,0 }, 624 { "Second", SbxLONG, 0,nullptr,0 }, 625 { "TimeValue", SbxDATE, 1 | FUNCTION_, RTLNAME(TimeValue),0 }, 626 { "String", SbxSTRING, 0,nullptr,0 }, 627 { "TOGGLE", SbxINTEGER, CPROP_, RTLNAME(TOGGLE),0 }, 628 { "Trim", SbxSTRING, 1 | FUNCTION_, RTLNAME(Trim),0 }, 629 { "String", SbxSTRING, 0,nullptr,0 }, 630 { "True", SbxBOOL, CPROP_, RTLNAME(True),0 }, 631 { "TwipsPerPixelX", SbxLONG, FUNCTION_, RTLNAME(TwipsPerPixelX),0 }, 632 { "TwipsPerPixelY", SbxLONG, FUNCTION_, RTLNAME(TwipsPerPixelY),0 }, 633 634 { "TYP_AUTHORFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_AUTHORFLD),0 }, 635 { "TYP_CHAPTERFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_CHAPTERFLD),0 }, 636 { "TYP_CONDTXTFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_CONDTXTFLD),0 }, 637 { "TYP_DATEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_DATEFLD),0 }, 638 { "TYP_DBFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_DBFLD),0 }, 639 { "TYP_DBNAMEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_DBNAMEFLD),0 }, 640 { "TYP_DBNEXTSETFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_DBNEXTSETFLD),0 }, 641 { "TYP_DBNUMSETFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_DBNUMSETFLD),0 }, 642 { "TYP_DBSETNUMBERFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_DBSETNUMBERFLD),0 }, 643 { "TYP_DDEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_DDEFLD),0 }, 644 { "TYP_DOCINFOFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_DOCINFOFLD),0 }, 645 { "TYP_DOCSTATFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_DOCSTATFLD),0 }, 646 { "TYP_EXTUSERFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_EXTUSERFLD),0 }, 647 { "TYP_FILENAMEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_FILENAMEFLD),0 }, 648 { "TYP_FIXDATEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_FIXDATEFLD),0 }, 649 { "TYP_FIXTIMEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_FIXTIMEFLD),0 }, 650 { "TYP_FORMELFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_FORMELFLD),0 }, 651 { "TYP_GETFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_GETFLD),0 }, 652 { "TYP_GETREFFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_GETREFFLD),0 }, 653 { "TYP_GETREFPAGEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_GETREFPAGEFLD),0 }, 654 { "TYP_HIDDENPARAFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_HIDDENPARAFLD),0 }, 655 { "TYP_HIDDENTXTFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_HIDDENTXTFLD),0 }, 656 { "TYP_INPUTFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_INPUTFLD),0 }, 657 { "TYP_INTERNETFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_INTERNETFLD),0 }, 658 { "TYP_JUMPEDITFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_JUMPEDITFLD),0 }, 659 { "TYP_MACROFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_MACROFLD),0 }, 660 { "TYP_NEXTPAGEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_NEXTPAGEFLD),0 }, 661 { "TYP_PAGENUMBERFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_PAGENUMBERFLD),0 }, 662 { "TYP_POSTITFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_POSTITFLD),0 }, 663 { "TYP_PREVPAGEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_PREVPAGEFLD),0 }, 664 { "TYP_SEQFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_SEQFLD),0 }, 665 { "TYP_SETFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_SETFLD),0 }, 666 { "TYP_SETINPFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_SETINPFLD),0 }, 667 { "TYP_SETREFFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_SETREFFLD),0 }, 668 { "TYP_SETREFPAGEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_SETREFPAGEFLD),0 }, 669 { "TYP_TEMPLNAMEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_TEMPLNAMEFLD),0}, 670 { "TYP_TIMEFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_TIMEFLD),0 }, 671 { "TYP_USERFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_USERFLD),0 }, 672 { "TYP_USRINPFLD", SbxINTEGER, CPROP_, RTLNAME(TYP_USRINPFLD),0 }, 673 674 { "TypeLen", SbxINTEGER, 1 | FUNCTION_, RTLNAME(TypeLen),0 }, 675 { "Var", SbxVARIANT, 0,nullptr,0 }, 676 { "TypeName", SbxSTRING, 1 | FUNCTION_, RTLNAME(TypeName),0 }, 677 { "Var", SbxVARIANT, 0,nullptr,0 }, 678 679 { "UBound", SbxLONG, 1 | FUNCTION_, RTLNAME(UBound),0 }, 680 { "Var", SbxVARIANT, 0,nullptr,0 }, 681 { "UCase", SbxSTRING, 1 | FUNCTION_, RTLNAME(UCase),0 }, 682 { "String", SbxSTRING, 0,nullptr,0 }, 683 { "Unload", SbxNULL, 1 | FUNCTION_, RTLNAME(Unload),0 }, 684 { "Dialog", SbxOBJECT, 0,nullptr,0 }, 685 686 { "Val", SbxDOUBLE, 1 | FUNCTION_, RTLNAME(Val),0 }, 687 { "String", SbxSTRING, 0,nullptr,0 }, 688 { "VarType", SbxINTEGER, 1 | FUNCTION_, RTLNAME(VarType),0 }, 689 { "Var", SbxVARIANT, 0,nullptr,0 }, 690 { "V_EMPTY", SbxINTEGER, CPROP_, RTLNAME(V_EMPTY),0 }, 691 { "V_NULL", SbxINTEGER, CPROP_, RTLNAME(V_NULL),0 }, 692 { "V_INTEGER", SbxINTEGER, CPROP_, RTLNAME(V_INTEGER),0 }, 693 { "V_LONG", SbxINTEGER, CPROP_, RTLNAME(V_LONG),0 }, 694 { "V_SINGLE", SbxINTEGER, CPROP_, RTLNAME(V_SINGLE),0 }, 695 { "V_DOUBLE", SbxINTEGER, CPROP_, RTLNAME(V_DOUBLE),0 }, 696 { "V_CURRENCY", SbxINTEGER, CPROP_, RTLNAME(V_CURRENCY),0 }, 697 { "V_DATE", SbxINTEGER, CPROP_, RTLNAME(V_DATE),0 }, 698 { "V_STRING", SbxINTEGER, CPROP_, RTLNAME(V_STRING),0 }, 699 700 { "Wait", SbxNULL, 1 | FUNCTION_, RTLNAME(Wait),0 }, 701 { "Milliseconds", SbxLONG, 0,nullptr,0 }, 702 { "FuncCaller", SbxVARIANT, FUNCTION_, RTLNAME(FuncCaller),0 }, 703 //#i64882# 704 { "WaitUntil", SbxNULL, 1 | FUNCTION_, RTLNAME(WaitUntil),0 }, 705 { "Date", SbxDOUBLE, 0,nullptr,0 }, 706 { "Weekday", SbxINTEGER, 2 | FUNCTION_, RTLNAME(Weekday),0 }, 707 { "Date", SbxDATE, 0,nullptr,0 }, 708 { "Firstdayofweek", SbxINTEGER, OPT_, nullptr,0 }, 709 { "WeekdayName", SbxSTRING, 3 | FUNCTION_ | COMPATONLY_, RTLNAME(WeekdayName),0 }, 710 { "Weekday", SbxINTEGER, 0,nullptr,0 }, 711 { "Abbreviate", SbxBOOL, OPT_, nullptr,0 }, 712 { "Firstdayofweek", SbxINTEGER, OPT_, nullptr,0 }, 713 { "Year", SbxINTEGER, 1 | FUNCTION_, RTLNAME(Year),0 }, 714 { "Date", SbxDATE, 0,nullptr,0 }, 715 716 { nullptr, SbxNULL, -1,nullptr,0 }}; // end of the table 717 718 SbiStdObject::SbiStdObject( const OUString& r, StarBASIC* pb ) : SbxObject( r ) 719 { 720 // do we have to initialize the hashcodes? 721 Methods* p = aMethods; 722 if( !p->nHash ) 723 while( p->nArgs != -1 ) 724 { 725 OUString aName_ = OUString::createFromAscii( p->pName ); 726 p->nHash = SbxVariable::MakeHashCode( aName_ ); 727 p += ( p->nArgs & ARGSMASK_ ) + 1; 728 } 729 730 // #i92642: Remove default properties 731 Remove( "Name", SbxClassType::DontCare ); 732 Remove( "Parent", SbxClassType::DontCare ); 733 734 SetParent( pb ); 735 736 pStdFactory.reset( new SbStdFactory ); 737 SbxBase::AddFactory( pStdFactory.get() ); 738 739 Insert( new SbStdClipboard ); 740 } 741 742 SbiStdObject::~SbiStdObject() 743 { 744 SbxBase::RemoveFactory( pStdFactory.get() ); 745 pStdFactory.reset(); 746 } 747 748 // Finding an element: 749 // It runs linearly through the method table here until an 750 // adequate method is has been found. Because of the bits in 751 // the nArgs-field the adequate instance of an SbxObjElement 752 // is created then. If the method/property hasn't been found, 753 // return NULL without error code, so that a whole chain of 754 // objects can be asked for the method/property. 755 756 SbxVariable* SbiStdObject::Find( const OUString& rName, SbxClassType t ) 757 { 758 // entered already? 759 SbxVariable* pVar = SbxObject::Find( rName, t ); 760 if( !pVar ) 761 { 762 // else search one 763 sal_uInt16 nHash_ = SbxVariable::MakeHashCode( rName ); 764 Methods* p = aMethods; 765 bool bFound = false; 766 short nIndex = 0; 767 sal_uInt16 nSrchMask = TYPEMASK_; 768 switch( t ) 769 { 770 case SbxClassType::Method: nSrchMask = METHOD_; break; 771 case SbxClassType::Property: nSrchMask = PROPERTY_; break; 772 case SbxClassType::Object: nSrchMask = OBJECT_; break; 773 default: break; 774 } 775 while( p->nArgs != -1 ) 776 { 777 if( ( p->nArgs & nSrchMask ) 778 && ( p->nHash == nHash_ ) 779 && ( rName.equalsIgnoreAsciiCaseAscii( p->pName ) ) ) 780 { 781 bFound = true; 782 if( p->nArgs & COMPTMASK_ ) 783 { 784 bool bCompatibility = false; 785 SbiInstance* pInst = GetSbData()->pInst; 786 if (pInst) 787 { 788 bCompatibility = pInst->IsCompatibility(); 789 } 790 else 791 { 792 // No instance running => compiling a source on module level. 793 const SbModule* pModule = GetSbData()->pCompMod; 794 if (pModule) 795 bCompatibility = pModule->IsVBACompat(); 796 } 797 if ((bCompatibility && (NORMONLY_ & p->nArgs)) || (!bCompatibility && (COMPATONLY_ & p->nArgs))) 798 bFound = false; 799 } 800 break; 801 } 802 nIndex += ( p->nArgs & ARGSMASK_ ) + 1; 803 p = aMethods + nIndex; 804 } 805 806 if( bFound ) 807 { 808 // isolate Args-fields: 809 SbxFlagBits nAccess = static_cast<SbxFlagBits>(( p->nArgs & RWMASK_ ) >> 8); 810 short nType = ( p->nArgs & TYPEMASK_ ); 811 if( p->nArgs & CONST_ ) 812 nAccess |= SbxFlagBits::Const; 813 OUString aName_ = OUString::createFromAscii( p->pName ); 814 SbxClassType eCT = SbxClassType::Object; 815 if( nType & PROPERTY_ ) 816 { 817 eCT = SbxClassType::Property; 818 } 819 else if( nType & METHOD_ ) 820 { 821 eCT = SbxClassType::Method; 822 } 823 pVar = Make( aName_, eCT, p->eType, ( p->nArgs & FUNCTION_ ) == FUNCTION_ ); 824 pVar->SetUserData( nIndex + 1 ); 825 pVar->SetFlags( nAccess ); 826 } 827 } 828 return pVar; 829 } 830 831 // SetModified must be pinched off at the RTL 832 void SbiStdObject::SetModified( bool ) 833 { 834 } 835 836 837 void SbiStdObject::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) 838 839 { 840 const SbxHint* pHint = dynamic_cast<const SbxHint*>(&rHint); 841 if( pHint ) 842 { 843 SbxVariable* pVar = pHint->GetVar(); 844 SbxArray* pPar_ = pVar->GetParameters(); 845 const sal_uInt16 nCallId = static_cast<sal_uInt16>(pVar->GetUserData()); 846 if( nCallId ) 847 { 848 const SfxHintId t = pHint->GetId(); 849 if( t == SfxHintId::BasicInfoWanted ) 850 pVar->SetInfo( GetInfo( static_cast<short>(pVar->GetUserData()) ) ); 851 else 852 { 853 bool bWrite = false; 854 if( t == SfxHintId::BasicDataChanged ) 855 bWrite = true; 856 if( t == SfxHintId::BasicDataWanted || bWrite ) 857 { 858 RtlCall p = aMethods[ nCallId-1 ].pFunc; 859 SbxArrayRef rPar( pPar_ ); 860 if( !pPar_ ) 861 { 862 rPar = pPar_ = new SbxArray; 863 pPar_->Put32( pVar, 0 ); 864 } 865 p( static_cast<StarBASIC*>(GetParent()), *pPar_, bWrite ); 866 return; 867 } 868 } 869 } 870 SbxObject::Notify( rBC, rHint ); 871 } 872 } 873 874 // building the info-structure for single elements 875 // if nIdx = 0, don't create anything (Std-Props!) 876 877 SbxInfo* SbiStdObject::GetInfo( short nIdx ) 878 { 879 if( !nIdx ) 880 return nullptr; 881 Methods* p = &aMethods[ --nIdx ]; 882 SbxInfo* pInfo_ = new SbxInfo; 883 short nPar = p->nArgs & ARGSMASK_; 884 for( short i = 0; i < nPar; i++ ) 885 { 886 p++; 887 OUString aName_ = OUString::createFromAscii( p->pName ); 888 SbxFlagBits nFlags_ = static_cast<SbxFlagBits>(( p->nArgs >> 8 ) & 0x03); 889 if( p->nArgs & OPT_ ) 890 { 891 nFlags_ |= SbxFlagBits::Optional; 892 } 893 pInfo_->AddParam( aName_, p->eType, nFlags_ ); 894 } 895 return pInfo_; 896 } 897 898 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 899
