diff options
Diffstat (limited to 'basic/source/runtime/stdobj.cxx')
-rw-r--r-- | basic/source/runtime/stdobj.cxx | 729 |
1 files changed, 729 insertions, 0 deletions
diff --git a/basic/source/runtime/stdobj.cxx b/basic/source/runtime/stdobj.cxx new file mode 100644 index 000000000000..778d5d727440 --- /dev/null +++ b/basic/source/runtime/stdobj.cxx @@ -0,0 +1,729 @@ +/************************************************************************* + * + * $RCSfile: stdobj.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:12:11 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _SBXCLASS_HXX //autogen +#include <svtools/sbx.hxx> +#endif +#include "runtime.hxx" +#pragma hdrstop +#include "stdobj.hxx" +#include "stdobj1.hxx" +#include "rtlproto.hxx" + +#include "segmentc.hxx" +#pragma SW_SEGMENT_CLASS( SBRUNTIME, SBRUNTIME_CODE ) + +// Das nArgs-Feld eines Tabelleneintrags ist wie folgt verschluesselt: +// Zur Zeit wird davon ausgegangen, dass Properties keine Parameter +// benoetigen! + +#define _ARGSMASK 0x00FF // Bis zu 255 Argumente +#define _RWMASK 0x0F00 // Maske fuer R/W-Bits +#define _TYPEMASK 0xF000 // Maske fuer den Typ des Eintrags + +#define _READ 0x0100 // kann gelesen werden +#define _BWRITE 0x0200 // kann as Lvalue verwendet werden +#define _LVALUE _BWRITE // kann as Lvalue verwendet werden +#define _READWRITE 0x0300 // beides +#define _OPT 0x0400 // Parameter ist optional +#define _CONST 0x0800 // Property ist const +#define _METHOD 0x3000 // Masken-Bits fuer eine Methode +#define _PROPERTY 0x4000 // Masken-Bit fuer eine Property +#define _OBJECT 0x8000 // Masken-Bit fuer ein Objekt + // Kombination von oberen Bits: +#define _FUNCTION 0x1100 // Maske fuer Function +#define _LFUNCTION 0x1300 // Maske fuer Function, die auch als Lvalue geht +#define _SUB 0x2100 // Maske fuer Sub +#define _ROPROP 0x4100 // Maske Read Only-Property +#define _WOPROP 0x4200 // Maske Write Only-Property +#define _RWPROP 0x4300 // Maske Read/Write-Property +#define _CPROP 0x4900 // Maske fuer Konstante + +struct Methods { + const char* pName; // Name des Eintrags + SbxDataType eType; // Datentyp + short nArgs; // Argumente und Flags + RtlCall pFunc; // Function Pointer + USHORT nHash; // Hashcode +}; + +static Methods aMethods[] = { + +{ "AboutStarBasic", SbxNULL, 1 | _FUNCTION, RTLNAME(AboutStarBasic) }, + { "Name", SbxSTRING }, +{ "Abs", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Abs) }, + { "number", SbxDOUBLE }, +{ "Array", SbxOBJECT, _FUNCTION, RTLNAME(Array) }, +{ "Asc", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Asc) }, + { "string", SbxSTRING }, +{ "Atn", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Atn) }, + { "number", SbxDOUBLE }, +{ "ATTR_ARCHIVE", SbxINTEGER, _CPROP, RTLNAME(ATTR_ARCHIVE) }, +{ "ATTR_DIRECTORY", SbxINTEGER, _CPROP, RTLNAME(ATTR_DIRECTORY) }, +{ "ATTR_HIDDEN", SbxINTEGER, _CPROP, RTLNAME(ATTR_HIDDEN) }, +{ "ATTR_NORMAL", SbxINTEGER, _CPROP, RTLNAME(ATTR_NORMAL) }, +{ "ATTR_READONLY", SbxINTEGER, _CPROP, RTLNAME(ATTR_READONLY) }, +{ "ATTR_SYSTEM", SbxINTEGER, _CPROP, RTLNAME(ATTR_SYSTEM) }, +{ "ATTR_VOLUME", SbxINTEGER, _CPROP, RTLNAME(ATTR_VOLUME) }, +{ "Beep", SbxNULL, _FUNCTION, RTLNAME(Beep) }, +{ "Blue", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Blue) }, + { "RGB-Value", SbxLONG }, + +{ "CBool", SbxBOOL, 1 | _FUNCTION, RTLNAME(CBool) }, + { "expression", SbxVARIANT }, +{ "CByte", SbxBYTE, 1 | _FUNCTION, RTLNAME(CByte) }, + { "expression", SbxVARIANT }, +{ "CCur", SbxCURRENCY, 1 | _FUNCTION, RTLNAME(CCur) }, + { "expression", SbxVARIANT }, +{ "CDate", SbxDATE, 1 | _FUNCTION, RTLNAME(CDate) }, + { "expression", SbxVARIANT }, +{ "CDbl", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(CDbl) }, + { "expression", SbxVARIANT }, +{ "CF_BITMAP", SbxINTEGER, _CPROP, RTLNAME(CF_BITMAP) }, +{ "CF_METAFILEPICT",SbxINTEGER, _CPROP, RTLNAME(CF_METAFILEPICT) }, +{ "CF_TEXT", SbxINTEGER, _CPROP, RTLNAME(CF_TEXT) }, +{ "ChDir", SbxNULL, 1 | _FUNCTION, RTLNAME(ChDir) }, + { "string", SbxSTRING }, +{ "ChDrive", SbxNULL, 1 | _FUNCTION, RTLNAME(ChDrive) }, + { "string", SbxSTRING }, + +{ "Choose", SbxVARIANT, 2 | _FUNCTION, RTLNAME(Choose) }, + { "Index", SbxINTEGER }, + { "Expression", SbxVARIANT }, + +{ "Chr", SbxSTRING, 1 | _FUNCTION, RTLNAME(Chr) }, + { "string", SbxINTEGER }, + +{ "CInt", SbxINTEGER, 1 | _FUNCTION, RTLNAME(CInt) }, + { "expression", SbxVARIANT }, +{ "CLEAR_ALLTABS", SbxINTEGER, _CPROP, RTLNAME(CLEAR_ALLTABS) }, +{ "CLEAR_TAB", SbxINTEGER, _CPROP, RTLNAME(CLEAR_TAB) }, + +{ "CLng", SbxLONG, 1 | _FUNCTION, RTLNAME(CLng) }, + { "expression", SbxVARIANT }, +{ "Cos", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Cos) }, + { "number", SbxDOUBLE }, +{ "CreateObject", SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreateObject ) }, + { "class", SbxSTRING }, +{ "CreateUnoListener",SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreateUnoListener ) }, + { "prefix", SbxSTRING }, + { "typename", SbxSTRING }, +{ "CreateUnoService",SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreateUnoService ) }, + { "servicename", SbxSTRING }, +{ "CreateUnoStruct",SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreateUnoStruct ) }, + { "classname", SbxSTRING }, +{ "CreatePropertySet",SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreatePropertySet ) }, + { "values", SbxARRAY }, +{ "CSng", SbxSINGLE, 1 | _FUNCTION, RTLNAME(CSng) }, + { "expression", SbxVARIANT }, +{ "CStr", SbxSTRING, 1 | _FUNCTION, RTLNAME(CStr) }, + { "expression", SbxVARIANT }, +{ "CurDir", SbxSTRING, 1 | _FUNCTION, RTLNAME(CurDir) }, + { "string", SbxSTRING }, +{ "CVar", SbxVARIANT, 1 | _FUNCTION, RTLNAME(CVar) }, + { "expression", SbxVARIANT }, +{ "CVErr", SbxVARIANT, 1 | _FUNCTION, RTLNAME(CVErr) }, + { "expression", SbxVARIANT }, +{ "Date", SbxSTRING, _LFUNCTION,RTLNAME(Date) }, +{ "DateAdd", SbxDATE, 1 | _FUNCTION, RTLNAME(DateAdd) }, + { "Interval", SbxSTRING }, + { "Number", SbxLONG }, + { "Date", SbxDATE }, +{ "DateDiff", SbxLONG, 1 | _FUNCTION, RTLNAME(DateDiff) }, + { "Interval", SbxSTRING }, + { "Date1", SbxDATE }, + { "Date2", SbxDATE }, +{ "DatePart", SbxLONG, 1 | _FUNCTION, RTLNAME(DatePart) }, + { "Interval", SbxSTRING }, + { "Date", SbxDATE }, +{ "DateSerial", SbxDATE, 3 | _FUNCTION, RTLNAME(DateSerial) }, + { "Year", SbxINTEGER }, + { "Month", SbxINTEGER }, + { "Day", SbxINTEGER }, +{ "DateValue", SbxDATE, 1 | _FUNCTION, RTLNAME(DateValue) }, + { "String", SbxSTRING }, +{ "Day", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Day) }, + { "Date", SbxDATE }, + +{ "Ddeexecute", SbxNULL, 2 | _FUNCTION, RTLNAME(DDEExecute) }, + { "Channel", SbxLONG }, + { "Command", SbxSTRING }, +{ "Ddeinitiate", SbxINTEGER, 2 | _FUNCTION, RTLNAME(DDEInitiate) }, + { "Application", SbxSTRING }, + { "Topic", SbxSTRING }, +{ "Ddepoke", SbxNULL, 3 | _FUNCTION, RTLNAME(DDEPoke) }, + { "Channel", SbxLONG }, + { "Item", SbxSTRING }, + { "Data", SbxSTRING }, +{ "Dderequest", SbxSTRING, 2 | _FUNCTION, RTLNAME(DDERequest) }, + { "Channel", SbxLONG }, + { "Item", SbxSTRING }, +{ "Ddeterminate", SbxNULL, 1 | _FUNCTION, RTLNAME(DDETerminate) }, + { "Channel", SbxLONG }, +{ "Ddeterminateall", SbxNULL, _FUNCTION, RTLNAME(DDETerminateAll) }, +{ "DimArray", SbxOBJECT, _FUNCTION, RTLNAME(DimArray) }, +{ "Dir", SbxSTRING, 2 | _FUNCTION, RTLNAME(Dir) }, + { "FileSpec", SbxSTRING, _OPT }, + { "attrmask", SbxINTEGER, _OPT }, +{ "DumpAllObjects", SbxEMPTY, 2 | _SUB, RTLNAME(DumpAllObjects) }, + { "FileSpec", SbxSTRING }, + { "DumpAll", SbxINTEGER, _OPT }, + +{ "EqualUnoObjects",SbxBOOL, 2 | _FUNCTION, RTLNAME(EqualUnoObjects) }, + { "Variant", SbxVARIANT }, + { "Variant", SbxVARIANT }, +{ "EnableReschedule", SbxNULL, 1 | _FUNCTION, RTLNAME(EnableReschedule) }, + { "bEnable", SbxBOOL }, +{ "Environ", SbxSTRING, 1 | _FUNCTION, RTLNAME(Environ) }, + { "Environmentstring",SbxSTRING }, +{ "EOF", SbxBOOL, 1 | _FUNCTION, RTLNAME(EOF) }, + { "Channel", SbxINTEGER }, +{ "Erl", SbxLONG, _ROPROP, RTLNAME( Erl ) }, +{ "Err", SbxLONG, _RWPROP, RTLNAME( Err ) }, +{ "Error", SbxSTRING, 1 | _FUNCTION, RTLNAME( Error ) }, + { "code", SbxLONG }, +{ "Exp", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Exp) }, + { "number", SbxDOUBLE }, +{ "False", SbxBOOL, _CPROP, RTLNAME(False) }, +{ "FileAttr", SbxINTEGER, 2 | _FUNCTION, RTLNAME(FileAttr) }, + { "Channel", SbxINTEGER }, + { "Attributes", SbxINTEGER }, +{ "FileCopy", SbxNULL, 2 | _FUNCTION, RTLNAME(FileCopy) }, + { "Source", SbxSTRING }, + { "Destination", SbxSTRING }, +{ "FileDateTime", SbxSTRING, 1 | _FUNCTION, RTLNAME(FileDateTime) }, + { "filename", SbxSTRING }, +{ "FileExists", SbxBOOL, 1 | _FUNCTION, RTLNAME(FileExists) }, + { "filename", SbxSTRING }, +{ "FileLen", SbxLONG, 1 | _FUNCTION, RTLNAME(FileLen) }, + { "filename", SbxSTRING }, +{ "FindObject", SbxOBJECT, 1 | _FUNCTION, RTLNAME(FindObject) }, + { "Name", SbxSTRING }, +{ "FindPropertyObject", SbxOBJECT, 2 | _FUNCTION, RTLNAME(FindPropertyObject) }, + { "Object", SbxOBJECT }, + { "Name", SbxSTRING }, +{ "Fix", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Fix) }, + { "number", SbxDOUBLE }, +{ "Format", SbxSTRING, 2 | _FUNCTION, RTLNAME(Format) }, + { "expression", SbxVARIANT }, + { "format", SbxSTRING, _OPT }, + +{ "FRAMEANCHORCHAR", SbxINTEGER, _CPROP, RTLNAME(FRAMEANCHORCHAR) }, +{ "FRAMEANCHORPAGE", SbxINTEGER, _CPROP, RTLNAME(FRAMEANCHORPAGE) }, +{ "FRAMEANCHORPARA", SbxINTEGER, _CPROP, RTLNAME(FRAMEANCHORPARA) }, + +{ "FreeFile", SbxINTEGER, _FUNCTION, RTLNAME(FreeFile) }, +{ "FreeLibrary", SbxNULL, 1 | _FUNCTION, RTLNAME(FreeLibrary) }, + { "Modulename", SbxSTRING }, + +{ "Get", SbxNULL, 3 | _FUNCTION, RTLNAME(Get) }, + { "filenumber", SbxINTEGER }, + { "recordnumber", SbxLONG }, + { "variablename", SbxVARIANT }, + +{ "GetAttr", SbxINTEGER, 1 | _FUNCTION, RTLNAME(GetAttr) }, + { "filename", SbxSTRING }, +{ "GetDialogZoomFactorX", SbxDOUBLE, _FUNCTION,RTLNAME(GetDialogZoomFactorX) }, +{ "GetDialogZoomFactorY", SbxDOUBLE, _FUNCTION,RTLNAME(GetDialogZoomFactorY) }, +{ "GetGUIType", SbxINTEGER, _FUNCTION,RTLNAME(GetGUIType) }, +{ "GetGUIVersion", SbxLONG, _FUNCTION,RTLNAME(GetGUIVersion) }, +{ "GetPathSeparator", SbxSTRING, _FUNCTION,RTLNAME(GetPathSeparator) }, +{ "GetProcessServiceManager", SbxOBJECT, 0 | _FUNCTION, RTLNAME(GetProcessServiceManager) }, +{ "GetSolarVersion", SbxLONG, _FUNCTION,RTLNAME(GetSolarVersion) }, +{ "GetSystemTicks", SbxLONG, _FUNCTION,RTLNAME(GetSystemTicks) }, +{ "GetSystemType", SbxINTEGER, _FUNCTION,RTLNAME(GetSystemType) }, +{ "Green", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Green) }, + { "RGB-Value", SbxLONG }, + +{ "HasUnoInterfaces", SbxBOOL, 1 | _FUNCTION, RTLNAME(HasUnoInterfaces) }, + { "InterfaceName",SbxSTRING }, +{ "Hex", SbxSTRING, 1 | _FUNCTION, RTLNAME(Hex) }, + { "number", SbxLONG }, +{ "Hour", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Hour) }, + { "Date", SbxDATE }, + +{ "IDABORT", SbxINTEGER, _CPROP, RTLNAME(IDABORT) }, +{ "IDCANCEL", SbxINTEGER, _CPROP, RTLNAME(IDCANCEL) }, +{ "IDNO", SbxINTEGER, _CPROP, RTLNAME(IDNO) }, +{ "IDOK", SbxINTEGER, _CPROP, RTLNAME(IDOK) }, +{ "IDRETRY", SbxINTEGER, _CPROP, RTLNAME(IDRETRY) }, +{ "IDYES", SbxINTEGER, _CPROP, RTLNAME(IDYES) }, + +{ "Iif", SbxVARIANT, 3 | _FUNCTION, RTLNAME(Iif) }, + { "Bool", SbxBOOL }, + { "Variant1", SbxVARIANT }, + { "Variant2", SbxVARIANT }, + +{ "InputBox", SbxSTRING, 5 | _FUNCTION, RTLNAME(InputBox) }, + { "Prompt", SbxSTRING }, + { "Title", SbxSTRING, _OPT }, + { "Default", SbxSTRING, _OPT }, + { "XPosTwips", SbxLONG, _OPT }, + { "YPosTwips", SbxLONG, _OPT }, +{ "InStr", SbxINTEGER, 4 | _FUNCTION, RTLNAME(InStr) }, + { "StartPos", SbxSTRING, _OPT }, + { "String1", SbxSTRING }, + { "String2", SbxSTRING }, + { "Compare", SbxINTEGER, _OPT }, +{ "Int", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Int) }, + { "number", SbxDOUBLE }, +{ "IsArray", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsArray) }, + { "Variant", SbxVARIANT }, +{ "IsDate", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsDate) }, + { "Variant", SbxVARIANT }, +{ "IsEmpty", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsEmpty) }, + { "Variant", SbxVARIANT }, +{ "IsError", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsError) }, + { "Variant", SbxVARIANT }, +{ "IsMissing", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsMissing) }, + { "Variant", SbxVARIANT }, +{ "IsNull", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsNull) }, + { "Variant", SbxVARIANT }, +{ "IsNumeric", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsNumeric) }, + { "Variant", SbxVARIANT }, +{ "IsObject", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsObject) }, + { "Variant", SbxVARIANT }, +{ "IsUnoStruct", SbxBOOL, 1 | _FUNCTION, RTLNAME(IsUnoStruct) }, + { "Variant", SbxVARIANT }, +{ "Kill", SbxNULL, 1 | _FUNCTION, RTLNAME(Kill) }, + { "filespec", SbxSTRING }, +{ "LBound", SbxINTEGER, 1 | _FUNCTION, RTLNAME(LBound) }, + { "Variant", SbxVARIANT }, +{ "LCase", SbxSTRING, 1 | _FUNCTION, RTLNAME(LCase) }, + { "string", SbxSTRING }, +{ "Left", SbxSTRING, 2 | _FUNCTION, RTLNAME(Left) }, + { "String", SbxSTRING }, + { "Count", SbxLONG }, +{ "Len", SbxLONG, 1 | _FUNCTION, RTLNAME(Len) }, + { "StringOrVariant", SbxVARIANT }, +{ "Load", SbxNULL, 1 | _FUNCTION, RTLNAME(Load) }, + { "object", SbxOBJECT }, +{ "LoadPicture", SbxOBJECT, 1 | _FUNCTION, RTLNAME(LoadPicture) }, + { "string", SbxSTRING }, +{ "Loc", SbxLONG, 1 | _FUNCTION, RTLNAME(Loc) }, + { "Channel", SbxINTEGER }, +{ "Lof", SbxLONG, 1 | _FUNCTION, RTLNAME(Lof) }, + { "Channel", SbxINTEGER }, +{ "Log", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Log) }, + { "number", SbxDOUBLE }, +{ "LTrim", SbxSTRING, 1 | _FUNCTION, RTLNAME(LTrim) }, + { "string", SbxSTRING }, + +{ "MB_ABORTRETRYIGNORE", SbxINTEGER, _CPROP, RTLNAME(MB_ABORTRETRYIGNORE)}, +{ "MB_APPLMODAL", SbxINTEGER, _CPROP, RTLNAME(MB_APPLMODAL) }, +{ "MB_DEFBUTTON1", SbxINTEGER, _CPROP, RTLNAME(MB_DEFBUTTON1) }, +{ "MB_DEFBUTTON2", SbxINTEGER, _CPROP, RTLNAME(MB_DEFBUTTON2) }, +{ "MB_DEFBUTTON3", SbxINTEGER, _CPROP, RTLNAME(MB_DEFBUTTON3) }, +{ "MB_ICONEXCLAMATION", SbxINTEGER, _CPROP, RTLNAME(MB_ICONEXCLAMATION)}, +{ "MB_ICONINFORMATION", SbxINTEGER, _CPROP, RTLNAME(MB_ICONINFORMATION)}, +{ "MB_ICONQUESTION",SbxINTEGER, _CPROP, RTLNAME(MB_ICONQUESTION) }, +{ "MB_ICONSTOP", SbxINTEGER, _CPROP, RTLNAME(MB_ICONSTOP) }, +{ "MB_OK", SbxINTEGER, _CPROP, RTLNAME(MB_OK) }, +{ "MB_OKCANCEL", SbxINTEGER, _CPROP, RTLNAME(MB_OKCANCEL) }, +{ "MB_RETRYCANCEL", SbxINTEGER, _CPROP, RTLNAME(MB_RETRYCANCEL) }, +{ "MB_SYSTEMMODAL", SbxINTEGER, _CPROP, RTLNAME(MB_SYSTEMMODAL) }, +{ "MB_YESNO", SbxINTEGER, _CPROP, RTLNAME(MB_YESNO) }, +{ "MB_YESNOCANCEL", SbxINTEGER, _CPROP, RTLNAME(MB_YESNOCANCEL) }, + + +{ "Mid", SbxSTRING, 3 | _LFUNCTION,RTLNAME(Mid) }, + { "String", SbxSTRING }, + { "StartPos", SbxLONG } , + { "Length", SbxLONG, _OPT } , +{ "Minute", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Minute) }, + { "Date", SbxDATE }, +{ "MkDir", SbxNULL, 1 | _FUNCTION, RTLNAME(MkDir) }, + { "pathname", SbxSTRING }, +{ "Month", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Month) }, + { "Date", SbxDATE }, +{ "MsgBox", SbxINTEGER, 3 | _FUNCTION, RTLNAME(MsgBox) }, + { "Message", SbxSTRING }, + { "Type", SbxINTEGER, _OPT }, + { "Title", SbxSTRING, _OPT }, + +{ "Nothing", SbxOBJECT, _CPROP, RTLNAME(Nothing) }, +{ "Now", SbxDATE, _FUNCTION, RTLNAME(Now) }, +{ "Null", SbxOBJECT, _CPROP, RTLNAME(Null) }, +{ "Oct", SbxSTRING, 1 | _FUNCTION, RTLNAME(Oct) }, + { "number", SbxLONG }, +{ "Pi", SbxDOUBLE, _CPROP, RTLNAME(PI) }, + +{ "Put", SbxNULL, 3 | _FUNCTION, RTLNAME(Put) }, + { "filenumber", SbxINTEGER }, + { "recordnumber", SbxLONG }, + { "variablename", SbxVARIANT }, + +{ "QBColor", SbxLONG, 1 | _FUNCTION, RTLNAME(QBColor) }, + { "number", SbxINTEGER }, +{ "Randomize", SbxNULL, 1 | _FUNCTION, RTLNAME(Randomize) }, + { "Number", SbxDOUBLE, _OPT }, +{ "Red", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Red) }, + { "RGB-Value", SbxLONG }, +{ "Reset", SbxNULL, 0 | _FUNCTION, RTLNAME(Reset) }, +{ "ResolvePath", SbxSTRING, 1 | _FUNCTION, RTLNAME(ResolvePath) }, + { "Path", SbxSTRING }, +{ "RGB", SbxLONG, 3 | _FUNCTION, RTLNAME(RGB) }, + { "Red", SbxINTEGER }, + { "Green", SbxINTEGER }, + { "Blue", SbxINTEGER }, + +{ "Right", SbxSTRING, 2 | _FUNCTION, RTLNAME(Right) }, + { "String", SbxSTRING }, + { "Count", SbxLONG } , +{ "RmDir", SbxNULL, 1 | _FUNCTION, RTLNAME(RmDir) }, + { "pathname", SbxSTRING }, +{ "Rnd", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Rnd) }, + { "Number", SbxDOUBLE, _OPT }, +{ "RTrim", SbxSTRING, 1 | _FUNCTION, RTLNAME(RTrim) }, + { "string", SbxSTRING }, +{ "SavePicture", SbxNULL, 2 | _FUNCTION, RTLNAME(SavePicture) }, + { "object", SbxOBJECT }, + { "string", SbxSTRING }, +{ "Second", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Second) }, + { "Date", SbxDATE }, +{ "Seek", SbxLONG, 1 | _FUNCTION, RTLNAME(Seek) }, + { "Channel", SbxINTEGER }, + +{ "SendKeys", SbxNULL, 2 | _FUNCTION, RTLNAME(SendKeys) }, + { "String", SbxSTRING }, + { "Wait", SbxBOOL, _OPT } , +{ "SetAttr", SbxNULL, 2 | _FUNCTION, RTLNAME(SetAttr) }, + { "File" , SbxSTRING }, + { "Attributes", SbxINTEGER } , +{ "SET_OFF", SbxINTEGER, _CPROP, RTLNAME(SET_OFF) }, +{ "SET_ON", SbxINTEGER, _CPROP, RTLNAME(SET_ON) }, +{ "SET_TAB", SbxINTEGER, _CPROP, RTLNAME(SET_TAB) }, + +{ "Sgn", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Sgn) }, + { "number", SbxDOUBLE }, +{ "Shell", SbxLONG, 2 | _FUNCTION, RTLNAME(Shell) }, + { "Commandstring",SbxSTRING }, + { "WindowStyle", SbxINTEGER, _OPT }, +{ "Sin", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Sin) }, + { "number", SbxDOUBLE }, +{ "Space", SbxSTRING, 1 | _FUNCTION, RTLNAME(Space) }, + { "string", SbxLONG }, +{ "Spc", SbxSTRING, 1 | _FUNCTION, RTLNAME(Spc) }, + { "Count", SbxLONG }, +{ "Sqr", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Sqr) }, + { "number", SbxDOUBLE }, +{ "Str", SbxSTRING, 1 | _FUNCTION, RTLNAME(Str) }, + { "number", SbxDOUBLE }, +{ "StrComp", SbxINTEGER, 3 | _FUNCTION, RTLNAME(StrComp) }, + { "String1", SbxSTRING }, + { "String2", SbxSTRING }, + { "Compare", SbxINTEGER, _OPT }, +{ "StrConv", SbxSTRING, 2 | _FUNCTION, RTLNAME(StrConv) }, + { "String", SbxSTRING }, + { "Conversion", SbxSTRING }, +{ "String", SbxSTRING, 2 | _FUNCTION, RTLNAME(String) }, + { "Count", SbxLONG }, + { "Filler", SbxVARIANT }, + +{ "Switch", SbxVARIANT, 2 | _FUNCTION, RTLNAME(Switch) }, + { "Expression", SbxVARIANT }, + { "Value", SbxVARIANT }, + +{ "Tan", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Tan) }, + { "number", SbxDOUBLE }, +{ "Time", SbxVARIANT, _LFUNCTION,RTLNAME(Time) }, +{ "Timer", SbxDATE, _FUNCTION, RTLNAME(Timer) }, +{ "TimeSerial", SbxDATE, 3 | _FUNCTION, RTLNAME(TimeSerial) }, + { "Hour", SbxLONG }, + { "Minute", SbxLONG }, + { "Second", SbxLONG }, +{ "TimeValue", SbxDATE, 1 | _FUNCTION, RTLNAME(TimeValue) }, + { "String", SbxSTRING }, + +{ "TOGGLE", SbxINTEGER, _CPROP, RTLNAME(TOGGLE) }, + +{ "Trim", SbxSTRING, 1 | _FUNCTION, RTLNAME(Trim) }, + { "String", SbxSTRING }, +{ "True", SbxBOOL, _CPROP, RTLNAME(True) }, +{ "TwipsPerPixelX", SbxLONG, _FUNCTION, RTLNAME(TwipsPerPixelX) }, +{ "TwipsPerPixelY", SbxLONG, _FUNCTION, RTLNAME(TwipsPerPixelY) }, + +{ "TYP_AUTHORFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_AUTHORFLD) }, +{ "TYP_CHAPTERFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_CHAPTERFLD) }, +{ "TYP_CONDTXTFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_CONDTXTFLD) }, +{ "TYP_DATEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DATEFLD) }, +{ "TYP_DBFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DBFLD) }, +{ "TYP_DBNAMEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DBNAMEFLD) }, +{ "TYP_DBNEXTSETFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DBNEXTSETFLD) }, +{ "TYP_DBNUMSETFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DBNUMSETFLD) }, +{ "TYP_DBSETNUMBERFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DBSETNUMBERFLD) }, +{ "TYP_DDEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DDEFLD) }, +{ "TYP_DOCINFOFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DOCINFOFLD) }, +{ "TYP_DOCSTATFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_DOCSTATFLD) }, +{ "TYP_EXTUSERFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_EXTUSERFLD) }, +{ "TYP_FILENAMEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_FILENAMEFLD) }, +{ "TYP_FIXDATEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_FIXDATEFLD) }, +{ "TYP_FIXTIMEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_FIXTIMEFLD) }, +{ "TYP_FORMELFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_FORMELFLD) }, +{ "TYP_GETFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_GETFLD) }, +{ "TYP_GETREFFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_GETREFFLD) }, +{ "TYP_GETREFPAGEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_GETREFPAGEFLD) }, +{ "TYP_HIDDENPARAFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_HIDDENPARAFLD) }, +{ "TYP_HIDDENTXTFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_HIDDENTXTFLD) }, +{ "TYP_INPUTFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_INPUTFLD) }, +{ "TYP_INTERNETFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_INTERNETFLD) }, +{ "TYP_JUMPEDITFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_JUMPEDITFLD) }, +{ "TYP_MACROFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_MACROFLD) }, +{ "TYP_NEXTPAGEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_NEXTPAGEFLD) }, +{ "TYP_PAGENUMBERFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_PAGENUMBERFLD) }, +{ "TYP_POSTITFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_POSTITFLD) }, +{ "TYP_PREVPAGEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_PREVPAGEFLD) }, +{ "TYP_SEQFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_SEQFLD) }, +{ "TYP_SETFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_SETFLD) }, +{ "TYP_SETINPFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_SETINPFLD) }, +{ "TYP_SETREFFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_SETREFFLD) }, +{ "TYP_SETREFPAGEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_SETREFPAGEFLD) }, +{ "TYP_TEMPLNAMEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_TEMPLNAMEFLD) }, +{ "TYP_TIMEFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_TIMEFLD) }, +{ "TYP_USERFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_USERFLD) }, +{ "TYP_USRINPFLD", SbxINTEGER, _CPROP, RTLNAME(TYP_USRINPFLD) }, + +{ "TypeLen", SbxINTEGER, 1 | _FUNCTION, RTLNAME(TypeLen) }, + { "Var", SbxVARIANT }, +{ "TypeName", SbxSTRING, 1 | _FUNCTION, RTLNAME(TypeName) }, + { "Var", SbxVARIANT }, +{ "UBound", SbxINTEGER, 1 | _FUNCTION, RTLNAME(UBound) }, + { "Var", SbxVARIANT }, +{ "UCase", SbxSTRING, 1 | _FUNCTION, RTLNAME(UCase) }, + { "String", SbxSTRING }, +{ "Unload", SbxNULL, 1 | _FUNCTION, RTLNAME(Unload) }, + { "Dialog", SbxOBJECT }, +{ "Val", SbxDOUBLE, 1 | _FUNCTION, RTLNAME(Val) }, + { "String", SbxSTRING }, +{ "VarType", SbxINTEGER, 1 | _FUNCTION, RTLNAME(VarType) }, + { "Var", SbxVARIANT }, +{ "V_EMPTY", SbxINTEGER, _CPROP, RTLNAME(V_EMPTY) }, +{ "V_NULL", SbxINTEGER, _CPROP, RTLNAME(V_NULL) }, +{ "V_INTEGER", SbxINTEGER, _CPROP, RTLNAME(V_INTEGER) }, +{ "V_LONG", SbxINTEGER, _CPROP, RTLNAME(V_LONG) }, +{ "V_SINGLE", SbxINTEGER, _CPROP, RTLNAME(V_SINGLE) }, +{ "V_DOUBLE", SbxINTEGER, _CPROP, RTLNAME(V_DOUBLE) }, +{ "V_CURRENCY", SbxINTEGER, _CPROP, RTLNAME(V_CURRENCY) }, +{ "V_DATE", SbxINTEGER, _CPROP, RTLNAME(V_DATE) }, +{ "V_STRING", SbxINTEGER, _CPROP, RTLNAME(V_STRING) }, + +{ "Wait", SbxNULL, 1 | _FUNCTION, RTLNAME(Wait) }, + { "Milliseconds", SbxLONG }, +{ "Weekday", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Weekday) }, + { "Date", SbxDATE }, +{ "Year", SbxINTEGER, 1 | _FUNCTION, RTLNAME(Year) }, + { "Date", SbxDATE }, + +{ NULL, SbxNULL, -1 }}; // Tabellenende + +SbiStdObject::SbiStdObject( const String& r, StarBASIC* pb ) : SbxObject( r ) +{ + // Muessen wir die Hashcodes initialisieren? + Methods* p = aMethods; + if( !p->nHash ) + while( p->nArgs != -1 ) + { + String aName = String::CreateFromAscii( p->pName ); + p->nHash = SbxVariable::MakeHashCode( aName ); + p += ( p->nArgs & _ARGSMASK ) + 1; + } + + SetParent( pb ); + + pStdFactory = new SbStdFactory; + SbxBase::AddFactory( pStdFactory ); + + Insert( new SbStdClipboard ); +} + +SbiStdObject::~SbiStdObject() +{ + SbxBase::RemoveFactory( pStdFactory ); + delete pStdFactory; +} + +// Suche nach einem Element: +// Hier wird linear durch die Methodentabelle gegangen, bis eine +// passende Methode gefunden wurde. Auf Grund der Bits im nArgs-Feld +// wird dann die passende Instanz eines SbxObjElement generiert. +// Wenn die Methode/Property nicht gefunden wurde, nur NULL ohne +// Fehlercode zurueckliefern, da so auch eine ganze Chain von +// Objekten nach der Methode/Property befragt werden kann. + +SbxVariable* SbiStdObject::Find( const String& rName, SbxClassType t ) +{ + // Bereits eingetragen? + SbxVariable* pVar = SbxObject::Find( rName, t ); + if( !pVar ) + { + // sonst suchen + USHORT nHash = SbxVariable::MakeHashCode( rName ); + Methods* p = aMethods; + BOOL bFound = FALSE; + short nIndex = 0; + USHORT nSrchMask = _TYPEMASK; + switch( t ) + { + case SbxCLASS_METHOD: nSrchMask = _METHOD; break; + case SbxCLASS_PROPERTY: nSrchMask = _PROPERTY; break; + case SbxCLASS_OBJECT: nSrchMask = _OBJECT; break; + } + while( p->nArgs != -1 ) + { + if( ( p->nArgs & nSrchMask ) + && ( p->nHash == nHash ) + && ( rName.EqualsIgnoreCaseAscii( p->pName ) ) ) + { + bFound = TRUE; break; + } + nIndex += ( p->nArgs & _ARGSMASK ) + 1; + p = aMethods + nIndex; + } + if( bFound ) + { + // Args-Felder isolieren: + short nAccess = ( p->nArgs & _RWMASK ) >> 8; + short nType = ( p->nArgs & _TYPEMASK ); + if( p->nArgs & _CONST ) + nAccess |= SBX_CONST; + String aName = String::CreateFromAscii( p->pName ); + SbxClassType eCT = SbxCLASS_OBJECT; + if( nType & _PROPERTY ) + eCT = SbxCLASS_PROPERTY; + else if( nType & _METHOD ) + eCT = SbxCLASS_METHOD; + pVar = Make( aName, eCT, p->eType ); + pVar->SetUserData( nIndex + 1 ); + pVar->SetFlags( nAccess ); + } + } + return pVar; +} + +// SetModified muß bei der RTL abgklemmt werden +void SbiStdObject::SetModified( BOOL ) +{ +} + +// Aufruf einer Property oder Methode. + +void SbiStdObject::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType, + const SfxHint& rHint, const TypeId& rHintType ) + +{ + const SbxHint* pHint = PTR_CAST(SbxHint,&rHint); + if( pHint ) + { + SbxVariable* pVar = pHint->GetVar(); + SbxArray* pPar = pVar->GetParameters(); + ULONG t = pHint->GetId(); + USHORT nCallId = (USHORT) pVar->GetUserData(); + if( nCallId ) + { + if( t == SBX_HINT_INFOWANTED ) + pVar->SetInfo( GetInfo( (short) pVar->GetUserData() ) ); + else + { + BOOL bWrite = FALSE; + if( t == SBX_HINT_DATACHANGED ) + bWrite = TRUE; + if( t == SBX_HINT_DATAWANTED || bWrite ) + { + RtlCall p = (RtlCall) aMethods[ nCallId-1 ].pFunc; + SbxArrayRef rPar( pPar ); + if( !pPar ) + { + rPar = pPar = new SbxArray; + pPar->Put( pVar, 0 ); + } + p( (StarBASIC*) GetParent(), *pPar, bWrite ); + return; + } + } + } + SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType ); + } +} + +// Zusammenbau der Infostruktur fuer einzelne Elemente +// Falls nIdx = 0, nix erzeugen (sind Std-Props!) + +SbxInfo* SbiStdObject::GetInfo( short nIdx ) +{ + if( !nIdx ) + return NULL; + Methods* p = &aMethods[ --nIdx ]; + // Wenn mal eine Hilfedatei zur Verfuegung steht: + // SbxInfo* pInfo = new SbxInfo( Hilfedateiname, p->nHelpId ); + SbxInfo* pInfo = new SbxInfo; + short nPar = p->nArgs & _ARGSMASK; + for( short i = 0; i < nPar; i++ ) + { + p++; + String aName = String::CreateFromAscii( p->pName ); + USHORT nFlags = ( p->nArgs >> 8 ) & 0x03; + if( p->nArgs & _OPT ) + nFlags |= SBX_OPTIONAL; + pInfo->AddParam( aName, p->eType, nFlags ); + } + return pInfo; +} + |