/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_basic.hxx"

#include "runtime.hxx"
#include "stdobj.hxx"
#include <basic/sbstdobj.hxx>
#include "rtlproto.hxx"
#include "sbintern.hxx"

// Das nArgs-Feld eines Tabelleneintrags ist wie folgt verschluesselt:
// Zur Zeit wird davon ausgegangen, dass Properties keine Parameter
// benoetigen!

#define _ARGSMASK   0x007F  // Bis zu 127 Argumente
#define _COMPTMASK  0x0080  // Only valid in compatibility mode
#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
	sal_uInt16		nHash;		// Hashcode
};

static Methods aMethods[] = {

{ "AboutStarBasic", SbxNULL,      1 | _FUNCTION, RTLNAME(AboutStarBasic),0  },
  { "Name",			SbxSTRING, 0,NULL,0 },
{ "Abs",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Abs),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },
{ "Array",			SbxOBJECT,        _FUNCTION, RTLNAME(Array),0	 	    },
{ "Asc",            SbxLONG,      1 | _FUNCTION, RTLNAME(Asc),0             },
  { "string",       SbxSTRING, 0,NULL,0 },
{ "AscW",           SbxLONG,      1 | _FUNCTION | _COMPTMASK, RTLNAME(Asc),0},
  { "string",       SbxSTRING, 0,NULL,0 },
{ "Atn",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Atn),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },
{ "ATTR_ARCHIVE",   SbxINTEGER,       _CPROP,    RTLNAME(ATTR_ARCHIVE),0    },
{ "ATTR_DIRECTORY", SbxINTEGER,       _CPROP,    RTLNAME(ATTR_DIRECTORY),0  },
{ "ATTR_HIDDEN",    SbxINTEGER,       _CPROP,    RTLNAME(ATTR_HIDDEN),0     },
{ "ATTR_NORMAL",    SbxINTEGER,       _CPROP,    RTLNAME(ATTR_NORMAL),0     },
{ "ATTR_READONLY",  SbxINTEGER,       _CPROP,    RTLNAME(ATTR_READONLY),0   },
{ "ATTR_SYSTEM",    SbxINTEGER,       _CPROP,    RTLNAME(ATTR_SYSTEM),0     },
{ "ATTR_VOLUME",    SbxINTEGER,       _CPROP,    RTLNAME(ATTR_VOLUME),0     },

{ "Beep",           SbxNULL,          _FUNCTION, RTLNAME(Beep),0            },
{ "Blue",        SbxINTEGER,   1 | _FUNCTION, RTLNAME(Blue),0               },
  { "RGB-Value",     SbxLONG, 0,NULL,0 },

{ "CallByName",     SbxVARIANT,	  3 | _FUNCTION, RTLNAME(CallByName),0 },
  { "Object",		SbxOBJECT,  0,NULL,0 },
  { "ProcedureName",SbxSTRING,  0,NULL,0 },
  { "CallType",     SbxINTEGER, 0,NULL,0 },
{ "CBool",          SbxBOOL,      1 | _FUNCTION, RTLNAME(CBool),0           },
  { "expression",   SbxVARIANT, 0,NULL,0 },
{ "CByte",          SbxBYTE,      1 | _FUNCTION, RTLNAME(CByte),0           },
  { "expression",   SbxVARIANT, 0,NULL,0 },
{ "CCur",           SbxCURRENCY,  1 | _FUNCTION, RTLNAME(CCur),0            },
  { "expression",   SbxVARIANT, 0,NULL,0 },
{ "CDate",          SbxDATE,      1 | _FUNCTION, RTLNAME(CDate),0           },
  { "expression",   SbxVARIANT, 0,NULL,0 },
{ "CDateFromIso",   SbxDATE,      1 | _FUNCTION, RTLNAME(CDateFromIso),0    },
  { "IsoDate",      SbxSTRING, 0,NULL,0 },
{ "CDateToIso",     SbxSTRING,    1 | _FUNCTION, RTLNAME(CDateToIso),0      },
  { "Date",         SbxDATE, 0,NULL,0 },
{ "CDec",           SbxDECIMAL,   1 | _FUNCTION, RTLNAME(CDec),0            },
  { "expression",   SbxVARIANT, 0,NULL,0 },
{ "CDbl",           SbxDOUBLE,    1 | _FUNCTION, RTLNAME(CDbl),0            },
  { "expression",   SbxVARIANT, 0,NULL,0 },
{ "CF_BITMAP",      SbxINTEGER,       _CPROP,    RTLNAME(CF_BITMAP),0       },
{ "CF_METAFILEPICT",SbxINTEGER,       _CPROP,    RTLNAME(CF_METAFILEPICT),0 },
{ "CF_TEXT",		SbxINTEGER,		  _CPROP,    RTLNAME(CF_TEXT),0         },
{ "ChDir",          SbxNULL,      1 | _FUNCTION, RTLNAME(ChDir),0           },
  { "string",       SbxSTRING, 0,NULL,0 },
{ "ChDrive",        SbxNULL,      1 | _FUNCTION, RTLNAME(ChDrive),0         },
  { "string",       SbxSTRING, 0,NULL,0 },

{ "Choose",			SbxVARIANT,   2 | _FUNCTION, RTLNAME(Choose),0			},
  { "Index",   		SbxINTEGER, 0,NULL,0 },
  { "Expression",   SbxVARIANT, 0,NULL,0 },

{ "Chr",            SbxSTRING,    1 | _FUNCTION, RTLNAME(Chr),0             },
  { "string",       SbxINTEGER, 0,NULL,0 },
{ "ChrW",           SbxSTRING,    1 | _FUNCTION | _COMPTMASK, RTLNAME(ChrW),0},
  { "string",       SbxINTEGER, 0,NULL,0 },

{ "CInt",           SbxINTEGER,   1 | _FUNCTION, RTLNAME(CInt),0            },
  { "expression",   SbxVARIANT, 0,NULL,0 },
{ "CLEAR_ALLTABS",  SbxINTEGER,       _CPROP,    RTLNAME(CLEAR_ALLTABS),0   },
{ "CLEAR_TAB",      SbxINTEGER,       _CPROP,    RTLNAME(CLEAR_TAB),0      	},
{ "CLng",           SbxLONG,      1 | _FUNCTION, RTLNAME(CLng),0            },
  { "expression",   SbxVARIANT, 0,NULL,0 },
{ "CompatibilityMode",	SbxBOOL,  1 | _FUNCTION, RTLNAME(CompatibilityMode),0},
  { "bEnable",		SbxBOOL, 0,NULL,0 },
{ "ConvertFromUrl", SbxSTRING,    1 | _FUNCTION, RTLNAME(ConvertFromUrl),0  },
  { "Url",          SbxSTRING, 0,NULL,0 },
{ "ConvertToUrl",   SbxSTRING,    1 | _FUNCTION, RTLNAME(ConvertToUrl),0    },
  { "SystemPath",   SbxSTRING, 0,NULL,0 },
{ "Cos",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Cos),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },
{ "CreateObject",   SbxOBJECT,    1 | _FUNCTION, RTLNAME( CreateObject ),0  },
  { "class",        SbxSTRING, 0,NULL,0 },
{ "CaptureAssertions",  SbxNULL, 1 | _FUNCTION, RTLNAME(CaptureAssertions), 0 },
  { "methodName",   SbxSTRING, 0, NULL, 0 },
{ "CreateUnoListener",SbxOBJECT,   1 | _FUNCTION, RTLNAME( CreateUnoListener ),0 },
  { "prefix",  SbxSTRING, 0,NULL,0 },
  { "typename",  SbxSTRING, 0,NULL,0 },
{ "CreateUnoDialog",SbxOBJECT,    2 | _FUNCTION, RTLNAME( CreateUnoDialog ),0 },
  { "dialoglibrary",SbxOBJECT, 0,NULL,0 },
  { "dialogname",   SbxSTRING, 0,NULL,0 },
{ "CreateUnoService",SbxOBJECT,   1 | _FUNCTION, RTLNAME( CreateUnoService ),0 },
  { "servicename",  SbxSTRING, 0,NULL,0 },
{ "CreateUnoServiceWithArguments",SbxOBJECT,   2 | _FUNCTION, RTLNAME( CreateUnoServiceWithArguments ),0 },
  { "servicename",  SbxSTRING, 0,NULL,0 },
  { "arguments",  SbxARRAY, 0,NULL,0 },
{ "CreateUnoStruct",SbxOBJECT,    1 | _FUNCTION, RTLNAME( CreateUnoStruct ),0 },
  { "classname",    SbxSTRING, 0,NULL,0 },
{ "CreateUnoValue", SbxOBJECT,    2 | _FUNCTION, RTLNAME( CreateUnoValue ),0 },
  { "type",         SbxSTRING, 0,NULL,0 },
  { "value",        SbxVARIANT, 0,NULL,0 },
{ "CreatePropertySet",SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreatePropertySet ),0 },
  { "values",  SbxARRAY, 0,NULL,0 },
{ "CSng",           SbxSINGLE,    1 | _FUNCTION, RTLNAME(CSng),0            },
  { "expression",   SbxVARIANT, 0,NULL,0 },
{ "CStr",           SbxSTRING,    1 | _FUNCTION, RTLNAME(CStr),0            },
  { "expression",   SbxVARIANT, 0,NULL,0 },
{ "CurDir",         SbxSTRING,    1 | _FUNCTION, RTLNAME(CurDir),0          },
  { "string",       SbxSTRING, 0,NULL,0 },
{ "CVar",           SbxVARIANT,   1 | _FUNCTION, RTLNAME(CVar),0            },
  { "expression",   SbxVARIANT, 0,NULL,0 },
{ "CVErr",          SbxVARIANT,   1 | _FUNCTION, RTLNAME(CVErr),0           },
  { "expression",   SbxVARIANT, 0,NULL,0 },

{ "Date",           SbxDATE,          _LFUNCTION,RTLNAME(Date),0            },
{ "DateAdd",        SbxDATE,	  3 | _FUNCTION, RTLNAME(DateAdd),0         },
  { "Interval",     SbxSTRING, 0,NULL,0 },
  { "Number",     	SbxLONG, 0,NULL,0 },
  { "Date",			SbxDATE, 0,NULL,0 },
{ "DateDiff",       SbxDOUBLE,    5 | _FUNCTION, RTLNAME(DateDiff),0        },
  { "Interval",     SbxSTRING, 0,NULL,0 },
  { "Date1",     	SbxDATE, 0,NULL,0 },
  { "Date2",		SbxDATE, 0,NULL,0 },
  { "Firstdayofweek" , SbxINTEGER, _OPT,NULL,0 },
  { "Firstweekofyear", SbxINTEGER, _OPT,NULL,0 },
{ "DatePart",       SbxLONG,      4 | _FUNCTION, RTLNAME(DatePart),0        },
  { "Interval",     SbxSTRING, 0,NULL,0 },
  { "Date",     	SbxDATE, 0,NULL,0 },
  { "Firstdayofweek" , SbxINTEGER, _OPT, NULL,0 },
  { "Firstweekofyear", SbxINTEGER, _OPT, NULL,0 },
{ "DateSerial",     SbxDATE,      3 | _FUNCTION, RTLNAME(DateSerial),0      },
  { "Year",         SbxINTEGER, 0,NULL,0 },
  { "Month",        SbxINTEGER, 0,NULL,0 },
  { "Day",          SbxINTEGER, 0,NULL,0 },
{ "DateValue",      SbxDATE,      1 | _FUNCTION, RTLNAME(DateValue),0       },
  { "String",       SbxSTRING, 0,NULL,0 },
{ "Day",            SbxINTEGER,   1 | _FUNCTION, RTLNAME(Day),0             },
  { "Date",         SbxDATE, 0,NULL,0 },
{ "Ddeexecute",     SbxNULL,   2 | _FUNCTION, RTLNAME(DDEExecute),0         },
  { "Channel",         SbxLONG, 0,NULL,0 },
  { "Command",         SbxSTRING, 0,NULL,0 },
{ "Ddeinitiate",    SbxINTEGER,   2 | _FUNCTION, RTLNAME(DDEInitiate),0     },
  { "Application",     SbxSTRING, 0,NULL,0 },
  { "Topic",           SbxSTRING, 0,NULL,0 },
{ "Ddepoke",    	SbxNULL,   3 | _FUNCTION, RTLNAME(DDEPoke),0            },
  { "Channel",         SbxLONG, 0,NULL,0 },
  { "Item",     	   SbxSTRING, 0,NULL,0 },
  { "Data",            SbxSTRING, 0,NULL,0 },
{ "Dderequest",     SbxSTRING,   2 | _FUNCTION, RTLNAME(DDERequest),0       },
  { "Channel",         SbxLONG, 0,NULL,0 },
  { "Item",            SbxSTRING, 0,NULL,0 },
{ "Ddeterminate",   SbxNULL,   1 | _FUNCTION, RTLNAME(DDETerminate),0       },
  { "Channel",         SbxLONG, 0,NULL,0 },
{ "Ddeterminateall",   SbxNULL,   _FUNCTION, RTLNAME(DDETerminateAll),0     },
{ "DimArray",		SbxOBJECT,    _FUNCTION, RTLNAME(DimArray),0			},
{ "Dir",            SbxSTRING,    2 | _FUNCTION, RTLNAME(Dir),0             },
  { "FileSpec",     SbxSTRING,        _OPT, NULL,0 },
  { "attrmask",     SbxINTEGER,       _OPT, NULL,0 },
{ "DoEvents",		SbxEMPTY,     _FUNCTION, RTLNAME(DoEvents),0			},
{ "DumpAllObjects", SbxEMPTY,     2 | _SUB, RTLNAME(DumpAllObjects),0       },
  { "FileSpec",     SbxSTRING, 0,NULL,0 },
  { "DumpAll",      SbxINTEGER,		  _OPT, NULL,0 },

{ "Empty",        SbxVARIANT,        _CPROP,    RTLNAME(Empty),0         },
{ "EqualUnoObjects",SbxBOOL,      2 | _FUNCTION, RTLNAME(EqualUnoObjects),0 },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
{ "EnableReschedule",	SbxNULL,  1 | _FUNCTION, RTLNAME(EnableReschedule),0},
  { "bEnable",		SbxBOOL, 0,NULL,0 },
{ "Environ",            SbxSTRING,   1 | _FUNCTION, RTLNAME(Environ),0      },
  { "Environmentstring",SbxSTRING, 0,NULL,0 },
{ "EOF",            SbxBOOL,      1 | _FUNCTION, RTLNAME(EOF),0             },
  { "Channel",      SbxINTEGER, 0,NULL,0 },
{ "Erl",            SbxLONG,          _ROPROP,   RTLNAME( Erl ),0           },
{ "Err",            SbxVARIANT,       _RWPROP,   RTLNAME( Err ),0           },
{ "Error",          SbxSTRING,    1 | _FUNCTION, RTLNAME( Error ),0         },
  { "code",         SbxLONG, 0,NULL,0 },
{ "Exp",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Exp),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },

{ "False",          SbxBOOL,          _CPROP,    RTLNAME(False),0           },
{ "FileAttr",       SbxINTEGER,   2 | _FUNCTION, RTLNAME(FileAttr),0        },
  { "Channel",      SbxINTEGER, 0,NULL,0 },
  { "Attributes",   SbxINTEGER, 0,NULL,0 },
{ "FileCopy",       SbxNULL,      2 | _FUNCTION, RTLNAME(FileCopy),0        },
  { "Source",       SbxSTRING, 0,NULL,0 },
  { "Destination",  SbxSTRING, 0,NULL,0 },
{ "FileDateTime",   SbxSTRING,    1 | _FUNCTION, RTLNAME(FileDateTime),0    },
  { "filename",     SbxSTRING, 0,NULL,0 },
{ "FileExists",     SbxBOOL,   1 | _FUNCTION, RTLNAME(FileExists),0         },
  { "filename",     SbxSTRING, 0,NULL,0 },
{ "FileLen",        SbxLONG,      1 | _FUNCTION, RTLNAME(FileLen),0         },
  { "filename",     SbxSTRING, 0,NULL,0 },
{ "FindObject",		SbxOBJECT,	  1 | _FUNCTION, RTLNAME(FindObject),0      },
  { "Name",  SbxSTRING, 0,NULL,0 },
{ "FindPropertyObject",   SbxOBJECT,	  2 | _FUNCTION, RTLNAME(FindPropertyObject),0 },
  { "Object",		SbxOBJECT, 0,NULL,0 },
  { "Name",  SbxSTRING, 0,NULL,0 },
{ "Fix",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Fix),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },
{ "Format",         SbxSTRING,    2 | _FUNCTION, RTLNAME(Format),0          },
  { "expression",   SbxVARIANT, 0,NULL,0 },
  { "format",       SbxSTRING,        _OPT, NULL,0 },
{ "FormatDateTime", SbxSTRING,    2 | _FUNCTION | _COMPTMASK, RTLNAME(FormatDateTime),0 },
  { "Date",         SbxDATE, 0,NULL,0 },
  { "NamedFormat",  SbxINTEGER,        _OPT, NULL,0 },
{ "FRAMEANCHORCHAR",   		SbxINTEGER,       _CPROP,    RTLNAME(FRAMEANCHORCHAR),0 },
{ "FRAMEANCHORPAGE",   		SbxINTEGER,       _CPROP,    RTLNAME(FRAMEANCHORPAGE),0 },
{ "FRAMEANCHORPARA",   		SbxINTEGER,       _CPROP,    RTLNAME(FRAMEANCHORPARA),0 },
{ "FreeFile",       SbxINTEGER,    _FUNCTION, RTLNAME(FreeFile),0           },
{ "FreeLibrary",    SbxNULL,      1 | _FUNCTION, RTLNAME(FreeLibrary),0     },
  { "Modulename",   SbxSTRING, 0,NULL,0 },

{ "Get",            SbxNULL,   3 | _FUNCTION, RTLNAME(Get),0                },
  { "filenumber",   SbxINTEGER, 0,NULL,0 },
  { "recordnumber", SbxLONG, 0,NULL,0 },
  { "variablename",	SbxVARIANT, 0,NULL,0 },
{ "GetAttr",        SbxINTEGER,   1 | _FUNCTION, RTLNAME(GetAttr),0         },
  { "filename",     SbxSTRING, 0,NULL,0 },
{ "GetDefaultContext", SbxOBJECT, 0 | _FUNCTION, RTLNAME(GetDefaultContext),0 },
{ "GetDialogZoomFactorX",  SbxDOUBLE,     _FUNCTION,RTLNAME(GetDialogZoomFactorX),0 },
{ "GetDialogZoomFactorY",  SbxDOUBLE,     _FUNCTION,RTLNAME(GetDialogZoomFactorY),0 },
{ "GetGUIType",  SbxINTEGER,     _FUNCTION,RTLNAME(GetGUIType),0            },
{ "GetGUIVersion",  SbxLONG,     _FUNCTION,RTLNAME(GetGUIVersion),0         },
{ "GetPathSeparator",  SbxSTRING,     _FUNCTION,RTLNAME(GetPathSeparator),0 },
{ "GetProcessServiceManager", SbxOBJECT, 0 | _FUNCTION, RTLNAME(GetProcessServiceManager),0 },
{ "GetSolarVersion",  SbxLONG,     _FUNCTION,RTLNAME(GetSolarVersion),0     },
{ "GetSystemTicks",  SbxLONG,      _FUNCTION,RTLNAME(GetSystemTicks),0      },
{ "GetSystemType",  SbxINTEGER,    _FUNCTION,RTLNAME(GetSystemType),0       },
{ "GlobalScope",    SbxOBJECT,     _FUNCTION,RTLNAME(GlobalScope),0         },
{ "Green",          SbxINTEGER,   1 | _FUNCTION, RTLNAME(Green),0           },
  { "RGB-Value",     SbxLONG, 0,NULL,0 },

{ "HasUnoInterfaces",	SbxBOOL,  1 | _FUNCTION, RTLNAME(HasUnoInterfaces),0},
  { "InterfaceName",SbxSTRING, 0,NULL,0 },
{ "Hex",            SbxSTRING,    1 | _FUNCTION, RTLNAME(Hex),0             },
  { "number",       SbxLONG, 0,NULL,0 },
{ "Hour",           SbxINTEGER,   1 | _FUNCTION, RTLNAME(Hour),0            },
  { "Date",         SbxDATE, 0,NULL,0 },

{ "IDABORT",   		SbxINTEGER,       _CPROP,    RTLNAME(IDABORT),0      	},
{ "IDCANCEL",   	SbxINTEGER,       _CPROP,    RTLNAME(IDCANCEL),0      	},
{ "IDNO",   		SbxINTEGER,       _CPROP,    RTLNAME(IDNO),0      		},
{ "IDOK",   		SbxINTEGER,       _CPROP,    RTLNAME(IDOK),0      		},
{ "IDRETRY",   		SbxINTEGER,       _CPROP,    RTLNAME(IDRETRY),0      	},
{ "IDYES",   		SbxINTEGER,       _CPROP,    RTLNAME(IDYES),0      		},

{ "Iif",            SbxVARIANT,   3 | _FUNCTION, RTLNAME(Iif),0             },
  { "Bool",      	SbxBOOL, 0,NULL,0 },
  { "Variant1",     SbxVARIANT, 0,NULL,0 },
  { "Variant2",     SbxVARIANT, 0,NULL,0 },

{ "Input",			SbxSTRING,    2 | _FUNCTION | _COMPTMASK, RTLNAME(Input),0},
  { "Number",       SbxLONG, 0,NULL,0 },
  { "FileNumber",   SbxLONG, 0,NULL,0 },
{ "InputBox",       SbxSTRING,    5 | _FUNCTION, RTLNAME(InputBox),0        },
  { "Prompt",       SbxSTRING, 0,NULL,0 },
  { "Title",        SbxSTRING,        _OPT, NULL,0 },
  { "Default",      SbxSTRING,        _OPT, NULL,0 },
  { "XPosTwips",    SbxLONG,          _OPT, NULL,0 },
  { "YPosTwips",    SbxLONG,          _OPT, NULL,0 },
{ "InStr",          SbxLONG,      4 | _FUNCTION, RTLNAME(InStr),0           },
  { "Start",        SbxSTRING,        _OPT, NULL,0 },
  { "String1",      SbxSTRING, 0,NULL,0 },
  { "String2",      SbxSTRING, 0,NULL,0 },
  { "Compare",      SbxINTEGER,       _OPT, NULL,0 },
{ "InStrRev",       SbxLONG,      4 | _FUNCTION | _COMPTMASK, RTLNAME(InStrRev),0},
  { "String1",      SbxSTRING, 0,NULL,0 },
  { "String2",      SbxSTRING, 0,NULL,0 },
  { "Start",        SbxSTRING,        _OPT, NULL,0 },
  { "Compare",      SbxINTEGER,       _OPT, NULL,0 },
{ "Int",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Int),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },
{ "IsArray",        SbxBOOL,      1 | _FUNCTION, RTLNAME(IsArray),0         },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
{ "IsDate",         SbxBOOL,      1 | _FUNCTION, RTLNAME(IsDate),0          },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
{ "IsEmpty",        SbxBOOL,      1 | _FUNCTION, RTLNAME(IsEmpty),0         },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
{ "IsError",        SbxBOOL,      1 | _FUNCTION, RTLNAME(IsError),0         },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
{ "IsMissing",        SbxBOOL,      1 | _FUNCTION, RTLNAME(IsMissing),0     },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
{ "IsNull",         SbxBOOL,      1 | _FUNCTION, RTLNAME(IsNull),0          },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
{ "IsNumeric",      SbxBOOL,      1 | _FUNCTION, RTLNAME(IsNumeric),0       },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
{ "IsObject",       SbxBOOL,      1 | _FUNCTION, RTLNAME(IsObject),0        },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
{ "IsUnoStruct",    SbxBOOL,      1 | _FUNCTION, RTLNAME(IsUnoStruct),0     },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
{ "Join",         	SbxSTRING,      2 | _FUNCTION, RTLNAME(Join),0          },
  { "list",			SbxOBJECT, 0,NULL,0 },
  { "delimiter",    SbxSTRING, 0,NULL,0 },
{ "Kill",           SbxNULL,      1 | _FUNCTION, RTLNAME(Kill),0            },
  { "filespec",     SbxSTRING, 0,NULL,0 },
{ "LBound",       	SbxLONG,      1 | _FUNCTION, RTLNAME(LBound),0          },
  { "Variant",      SbxVARIANT, 0,NULL,0 },
{ "LCase",          SbxSTRING,    1 | _FUNCTION, RTLNAME(LCase),0           },
  { "string",       SbxSTRING, 0,NULL,0 },
{ "Left",           SbxSTRING,    2 | _FUNCTION, RTLNAME(Left),0            },
  { "String",       SbxSTRING, 0,NULL,0 },
  { "Count",        SbxLONG, 0,NULL,0 },
{ "Len",            SbxLONG,      1 | _FUNCTION, RTLNAME(Len),0             },
  { "StringOrVariant", SbxVARIANT, 0,NULL,0 },
{ "LenB",           SbxLONG,      1 | _FUNCTION, RTLNAME(Len),0             },
  { "StringOrVariant", SbxVARIANT, 0,NULL,0 },
{ "Load",           SbxNULL,      1 | _FUNCTION, RTLNAME(Load),0            },
  { "object",       SbxOBJECT, 0,NULL,0 },
{ "LoadPicture",    SbxOBJECT,    1 | _FUNCTION, RTLNAME(LoadPicture),0     },
  { "string",       SbxSTRING, 0,NULL,0 },
{ "Loc",            SbxLONG,      1 | _FUNCTION, RTLNAME(Loc),0             },
  { "Channel",      SbxINTEGER, 0,NULL,0 },
{ "Lof",            SbxLONG,      1 | _FUNCTION, RTLNAME(Lof),0             },
  { "Channel",      SbxINTEGER, 0,NULL,0 },
{ "Log",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Log),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },
{ "LTrim",          SbxSTRING,    1 | _FUNCTION, RTLNAME(LTrim),0           },
  { "string",       SbxSTRING, 0,NULL,0 },

{ "MB_ABORTRETRYIGNORE", SbxINTEGER,  _CPROP,    RTLNAME(MB_ABORTRETRYIGNORE),0},
{ "MB_APPLMODAL",   SbxINTEGER,       _CPROP,    RTLNAME(MB_APPLMODAL),0    },
{ "MB_DEFBUTTON1",  SbxINTEGER,       _CPROP,    RTLNAME(MB_DEFBUTTON1),0   },
{ "MB_DEFBUTTON2",  SbxINTEGER,       _CPROP,    RTLNAME(MB_DEFBUTTON2),0   },
{ "MB_DEFBUTTON3",  SbxINTEGER,       _CPROP,    RTLNAME(MB_DEFBUTTON3),0   },
{ "MB_ICONEXCLAMATION", SbxINTEGER,   _CPROP,    RTLNAME(MB_ICONEXCLAMATION),0},
{ "MB_ICONINFORMATION", SbxINTEGER,   _CPROP,    RTLNAME(MB_ICONINFORMATION),0},
{ "MB_ICONQUESTION",SbxINTEGER,       _CPROP,    RTLNAME(MB_ICONQUESTION),0 },
{ "MB_ICONSTOP",   	SbxINTEGER,       _CPROP,    RTLNAME(MB_ICONSTOP),0     },
{ "MB_OK",   		SbxINTEGER,       _CPROP,    RTLNAME(MB_OK),0      		},
{ "MB_OKCANCEL",   	SbxINTEGER,       _CPROP,    RTLNAME(MB_OKCANCEL),0     },
{ "MB_RETRYCANCEL", SbxINTEGER,       _CPROP,    RTLNAME(MB_RETRYCANCEL),0  },
{ "MB_SYSTEMMODAL", SbxINTEGER,       _CPROP,    RTLNAME(MB_SYSTEMMODAL),0  },
{ "MB_YESNO",   	SbxINTEGER,       _CPROP,    RTLNAME(MB_YESNO),0      	},
{ "MB_YESNOCANCEL", SbxINTEGER,       _CPROP,    RTLNAME(MB_YESNOCANCEL),0  },

{ "Me",		        SbxOBJECT,    0 | _FUNCTION | _COMPTMASK, RTLNAME(Me),0 },
{ "Mid",            SbxSTRING,    3 | _LFUNCTION,RTLNAME(Mid),0             },
  { "String",       SbxSTRING, 0,NULL,0 },
  { "StartPos",     SbxLONG, 0,NULL,0 },
  { "Length",       SbxLONG,          _OPT, NULL,0 },
{ "Minute",         SbxINTEGER,   1 | _FUNCTION, RTLNAME(Minute),0          },
  { "Date",         SbxDATE, 0,NULL,0 },
{ "MkDir",          SbxNULL,      1 | _FUNCTION, RTLNAME(MkDir),0           },
  { "pathname",     SbxSTRING, 0,NULL,0 },
{ "Month",          SbxINTEGER,   1 | _FUNCTION, RTLNAME(Month),0           },
  { "Date",         SbxDATE, 0,NULL,0 },
{ "MonthName",      SbxSTRING,    2 | _FUNCTION | _COMPTMASK, RTLNAME(MonthName),0 },
  { "Month",        SbxINTEGER, 0,NULL,0 },
  { "Abbreviate",   SbxBOOL,          _OPT, NULL,0 },
{ "MsgBox",         SbxINTEGER,    5 | _FUNCTION, RTLNAME(MsgBox),0         },
  { "Prompt",       SbxSTRING, 0,NULL,0 },
  { "Buttons",      SbxINTEGER,       _OPT, NULL,0 },
  { "Title",        SbxSTRING,        _OPT, NULL,0 },
  { "Helpfile",     SbxSTRING,        _OPT, NULL,0 },
  { "Context",      SbxINTEGER,       _OPT, NULL,0 },

{ "Nothing",        SbxOBJECT,        _CPROP,    RTLNAME(Nothing),0         },
{ "Now",            SbxDATE,          _FUNCTION, RTLNAME(Now),0             },
{ "Null",			SbxNULL,          _CPROP,    RTLNAME(Null),0			},

{ "Oct",            SbxSTRING,    1 | _FUNCTION, RTLNAME(Oct),0             },
  { "number",       SbxLONG, 0,NULL,0 },

{ "Partition",      SbxSTRING,    4 | _FUNCTION, RTLNAME(Partition),0       },
  { "number",   	SbxLONG, 	0,NULL,0 },
  { "start",     	SbxLONG, 	0,NULL,0 },
  { "stop",  	    SbxLONG, 	0,NULL,0 },
  { "interval",     SbxLONG, 	0,NULL,0 },
{ "Pi",				SbxDOUBLE,		  _CPROP,    RTLNAME(PI),0		      	},
{ "Put",            SbxNULL,   3 | _FUNCTION, RTLNAME(Put),0                },
  { "filenumber",   SbxINTEGER, 0,NULL,0 },
  { "recordnumber", SbxLONG, 0,NULL,0 },
  { "variablename",	SbxVARIANT, 0,NULL,0 },

{ "QBColor",		SbxLONG,	  1 | _FUNCTION, RTLNAME(QBColor),0			},
  { "number",		SbxINTEGER, 0,NULL,0 },

{ "Randomize",      SbxNULL,      1 | _FUNCTION, RTLNAME(Randomize),0       },
  { "Number",       SbxDOUBLE,        _OPT, NULL,0 },
{ "Red",        SbxINTEGER,   1 | _FUNCTION, RTLNAME(Red),0                 },
  { "RGB-Value",     SbxLONG, 0,NULL,0 },
{ "Reset",          SbxNULL,      0 | _FUNCTION, RTLNAME(Reset),0           },
{ "ResolvePath",    SbxSTRING,    1 | _FUNCTION, RTLNAME(ResolvePath),0     },
  { "Path",         SbxSTRING, 0,NULL,0 },
{ "RGB",            SbxLONG,      3 | _FUNCTION, RTLNAME(RGB),0             },
  { "Red",       	SbxINTEGER, 0,NULL,0 },
  { "Green",       	SbxINTEGER, 0,NULL,0 },
  { "Blue",       	SbxINTEGER, 0,NULL,0 },
{ "Replace",        SbxSTRING,    6 | _FUNCTION, RTLNAME(Replace),0         },
  { "Expression",   SbxSTRING, 0,NULL,0 },
  { "Find",     	SbxSTRING, 0,NULL,0 },
  { "Replace",      SbxSTRING, 0,NULL,0 },
  { "Start",        SbxINTEGER, 	_OPT, NULL,0 },
  { "Count",        SbxINTEGER,		_OPT, NULL,0 },
  { "Compare",      SbxINTEGER,		_OPT, NULL,0 },
{ "Right",          SbxSTRING,    2 | _FUNCTION, RTLNAME(Right),0           },
  { "String",       SbxSTRING, 0,NULL,0 },
  { "Count",        SbxLONG, 0,NULL,0 },
{ "RmDir",          SbxNULL,      1 | _FUNCTION, RTLNAME(RmDir),0           },
  { "pathname",     SbxSTRING, 0,NULL,0 },
{ "Round",          SbxDOUBLE,    2 | _FUNCTION | _COMPTMASK, RTLNAME(Round),0},
  { "Expression",   SbxDOUBLE, 0,NULL,0 },
  { "Numdecimalplaces", SbxINTEGER,   _OPT, NULL,0 },
{ "Rnd",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Rnd),0             },
  { "Number",       SbxDOUBLE,        _OPT, NULL,0 },
{ "RTL",			SbxOBJECT,    0 | _FUNCTION | _COMPTMASK, RTLNAME(RTL),0},
{ "RTrim",          SbxSTRING,    1 | _FUNCTION, RTLNAME(RTrim),0           },
  { "string",       SbxSTRING, 0,NULL,0 },

{ "SavePicture",    SbxNULL,      2 | _FUNCTION, RTLNAME(SavePicture),0     },
  { "object",       SbxOBJECT, 0,NULL,0 },
  { "string",       SbxSTRING, 0,NULL,0 },
{ "Second",         SbxINTEGER,   1 | _FUNCTION, RTLNAME(Second),0          },
  { "Date",         SbxDATE, 0,NULL,0 },
{ "Seek",           SbxLONG,      1 | _FUNCTION, RTLNAME(Seek),0            },
  { "Channel",      SbxINTEGER, 0,NULL,0 },
{ "SendKeys",       SbxNULL,      2 | _FUNCTION, RTLNAME(SendKeys),0        },
  { "String",       SbxSTRING, 0,NULL,0 },
  { "Wait",         SbxBOOL,          _OPT, NULL,0 },
{ "SetAttr",        SbxNULL,      2 | _FUNCTION, RTLNAME(SetAttr),0         },
  { "File"  ,       SbxSTRING, 0,NULL,0 },
  { "Attributes",   SbxINTEGER, 0,NULL,0 },
{ "SET_OFF",   		SbxINTEGER,       _CPROP,    RTLNAME(SET_OFF),0      	},
{ "SET_ON",   		SbxINTEGER,       _CPROP,    RTLNAME(SET_ON),0      	},
{ "SET_TAB",   		SbxINTEGER,       _CPROP,    RTLNAME(SET_TAB),0      	},
{ "Sgn",            SbxINTEGER,   1 | _FUNCTION, RTLNAME(Sgn),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },
{ "Shell",          SbxLONG,      2 | _FUNCTION, RTLNAME(Shell),0           },
  { "Commandstring",SbxSTRING, 0,NULL,0 },
  { "WindowStyle",  SbxINTEGER,       _OPT, NULL,0 },
{ "Sin",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Sin),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },
{ "Space",          SbxSTRING,      1 | _FUNCTION, RTLNAME(Space),0         },
  { "string",       SbxLONG, 0,NULL,0 },
{ "Spc",          	SbxSTRING,      1 | _FUNCTION, RTLNAME(Spc),0           },
  { "Count",        SbxLONG, 0,NULL,0 },
{ "Split",         	SbxOBJECT,      3 | _FUNCTION, RTLNAME(Split),0         },
  { "expression",	SbxSTRING, 0,NULL,0 },
  { "delimiter",    SbxSTRING, 0,NULL,0 },
  { "count",	    SbxLONG, 0,NULL,0 },
{ "Sqr",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Sqr),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },
{ "Str",            SbxSTRING,    1 | _FUNCTION, RTLNAME(Str),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },
{ "StrComp",        SbxINTEGER,   3 | _FUNCTION, RTLNAME(StrComp),0         },
  { "String1",      SbxSTRING, 0,NULL,0 },
  { "String2",      SbxSTRING, 0,NULL,0 },
  { "Compare",      SbxINTEGER,       _OPT, NULL,0 },
{ "StrConv",        SbxOBJECT,   3 | _FUNCTION, RTLNAME(StrConv),0          },
  { "String",       SbxSTRING, 0,NULL,0 },
  { "Conversion",   SbxSTRING, 0,NULL,0 },
  { "LCID",			SbxINTEGER, _OPT,NULL,0 },
{ "String",         SbxSTRING,    2 | _FUNCTION, RTLNAME(String),0          },
  { "Count",        SbxLONG, 0,NULL,0 },
  { "Filler",       SbxVARIANT, 0,NULL,0 },
{ "StrReverse",     SbxSTRING,    1 | _FUNCTION | _COMPTMASK, RTLNAME(StrReverse),0 },
  { "String1",      SbxSTRING, 0,NULL,0 },
{ "Switch",			SbxVARIANT,   2 | _FUNCTION, RTLNAME(Switch),0			},
  { "Expression",   SbxVARIANT, 0,NULL,0 },
  { "Value",        SbxVARIANT, 0,NULL,0 },
{ "Tab",          	SbxSTRING,      1 | _FUNCTION, RTLNAME(Tab),0           },
{ "Tan",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Tan),0             },
  { "number",       SbxDOUBLE, 0,NULL,0 },
{ "Time",           SbxVARIANT,       _LFUNCTION,RTLNAME(Time),0            },
{ "Timer",          SbxDATE,          _FUNCTION, RTLNAME(Timer),0           },
{ "TimeSerial",     SbxDATE,      3 | _FUNCTION, RTLNAME(TimeSerial),0      },
  { "Hour",         SbxLONG, 0,NULL,0 },
  { "Minute",       SbxLONG, 0,NULL,0 },
  { "Second",       SbxLONG, 0,NULL,0 },
{ "TimeValue",      SbxDATE,      1 | _FUNCTION, RTLNAME(TimeValue),0       },
  { "String",       SbxSTRING, 0,NULL,0 },
{ "TOGGLE",   		SbxINTEGER,       _CPROP,    RTLNAME(TOGGLE),0      	},
#ifdef DBG_TRACE_BASIC
{ "TraceCommand",   SbxNULL,	  1 | _FUNCTION, RTLNAME(TraceCommand),0 },
  { "Command",		SbxSTRING,  0,NULL,0 },
#endif
{ "Trim",           SbxSTRING,    1 | _FUNCTION, RTLNAME(Trim),0            },
  { "String",       SbxSTRING, 0,NULL,0 },
{ "True",           SbxBOOL,          _CPROP,    RTLNAME(True),0            },
{ "TwipsPerPixelX", SbxLONG,          _FUNCTION, RTLNAME(TwipsPerPixelX),0  },
{ "TwipsPerPixelY", SbxLONG,          _FUNCTION, RTLNAME(TwipsPerPixelY),0  },

{ "TYP_AUTHORFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_AUTHORFLD),0      	},
{ "TYP_CHAPTERFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_CHAPTERFLD),0      },
{ "TYP_CONDTXTFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_CONDTXTFLD),0      },
{ "TYP_DATEFLD",   			SbxINTEGER,       _CPROP,    RTLNAME(TYP_DATEFLD),0      	},
{ "TYP_DBFLD",   			SbxINTEGER,       _CPROP,    RTLNAME(TYP_DBFLD),0      		},
{ "TYP_DBNAMEFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_DBNAMEFLD),0      	},
{ "TYP_DBNEXTSETFLD",		SbxINTEGER,       _CPROP,    RTLNAME(TYP_DBNEXTSETFLD),0	},
{ "TYP_DBNUMSETFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_DBNUMSETFLD),0     },
{ "TYP_DBSETNUMBERFLD",   	SbxINTEGER,       _CPROP,    RTLNAME(TYP_DBSETNUMBERFLD),0  },
{ "TYP_DDEFLD",   			SbxINTEGER,       _CPROP,    RTLNAME(TYP_DDEFLD),0      	},
{ "TYP_DOCINFOFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_DOCINFOFLD),0      },
{ "TYP_DOCSTATFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_DOCSTATFLD),0      },
{ "TYP_EXTUSERFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_EXTUSERFLD),0      },
{ "TYP_FILENAMEFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_FILENAMEFLD),0     },
{ "TYP_FIXDATEFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_FIXDATEFLD),0      },
{ "TYP_FIXTIMEFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_FIXTIMEFLD),0      },
{ "TYP_FORMELFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_FORMELFLD),0      	},
{ "TYP_GETFLD",   			SbxINTEGER,       _CPROP,    RTLNAME(TYP_GETFLD),0      	},
{ "TYP_GETREFFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_GETREFFLD),0      	},
{ "TYP_GETREFPAGEFLD",   	SbxINTEGER,       _CPROP,    RTLNAME(TYP_GETREFPAGEFLD),0   },
{ "TYP_HIDDENPARAFLD",   	SbxINTEGER,       _CPROP,    RTLNAME(TYP_HIDDENPARAFLD),0   },
{ "TYP_HIDDENTXTFLD",   	SbxINTEGER,       _CPROP,    RTLNAME(TYP_HIDDENTXTFLD),0    },
{ "TYP_INPUTFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_INPUTFLD),0      	},
{ "TYP_INTERNETFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_INTERNETFLD),0     },
{ "TYP_JUMPEDITFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_JUMPEDITFLD),0     },
{ "TYP_MACROFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_MACROFLD),0      	},
{ "TYP_NEXTPAGEFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_NEXTPAGEFLD),0     },
{ "TYP_PAGENUMBERFLD",   	SbxINTEGER,       _CPROP,    RTLNAME(TYP_PAGENUMBERFLD),0   },
{ "TYP_POSTITFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_POSTITFLD),0      	},
{ "TYP_PREVPAGEFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_PREVPAGEFLD),0     },
{ "TYP_SEQFLD",   			SbxINTEGER,       _CPROP,    RTLNAME(TYP_SEQFLD),0      	},
{ "TYP_SETFLD",   			SbxINTEGER,       _CPROP,    RTLNAME(TYP_SETFLD),0      	},
{ "TYP_SETINPFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_SETINPFLD),0      	},
{ "TYP_SETREFFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_SETREFFLD),0      	},
{ "TYP_SETREFPAGEFLD", 		SbxINTEGER,       _CPROP,    RTLNAME(TYP_SETREFPAGEFLD),0   },
{ "TYP_TEMPLNAMEFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_TEMPLNAMEFLD),0},
{ "TYP_TIMEFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_TIMEFLD),0    		  	},
{ "TYP_USERFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_USERFLD),0      		},
{ "TYP_USRINPFLD",   		SbxINTEGER,       _CPROP,    RTLNAME(TYP_USRINPFLD),0      	},

{ "TypeLen",       	SbxINTEGER,    1 | _FUNCTION, RTLNAME(TypeLen),0        },
  { "Var",          SbxVARIANT, 0,NULL,0 },
{ "TypeName",       SbxSTRING,    1 | _FUNCTION, RTLNAME(TypeName),0        },
  { "Var",          SbxVARIANT, 0,NULL,0 },

{ "UBound",         SbxLONG,      1 | _FUNCTION, RTLNAME(UBound),0          },
  { "Var",          SbxVARIANT, 0,NULL,0 },
{ "UCase",          SbxSTRING,    1 | _FUNCTION, RTLNAME(UCase),0           },
  { "String",       SbxSTRING, 0,NULL,0 },
{ "Unload",         SbxNULL,      1 | _FUNCTION, RTLNAME(Unload),0          },
  { "Dialog",       SbxOBJECT, 0,NULL,0 },

{ "Val",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Val),0             },
  { "String",       SbxSTRING, 0,NULL,0 },
{ "VarType",        SbxINTEGER,   1 | _FUNCTION, RTLNAME(VarType),0         },
  { "Var",          SbxVARIANT, 0,NULL,0 },
{ "V_EMPTY",        SbxINTEGER,       _CPROP,    RTLNAME(V_EMPTY),0         },
{ "V_NULL",         SbxINTEGER,       _CPROP,    RTLNAME(V_NULL),0          },
{ "V_INTEGER",      SbxINTEGER,       _CPROP,    RTLNAME(V_INTEGER),0       },
{ "V_LONG",         SbxINTEGER,       _CPROP,    RTLNAME(V_LONG),0          },
{ "V_SINGLE",       SbxINTEGER,       _CPROP,    RTLNAME(V_SINGLE),0        },
{ "V_DOUBLE",       SbxINTEGER,       _CPROP,    RTLNAME(V_DOUBLE),0        },
{ "V_CURRENCY",     SbxINTEGER,       _CPROP,    RTLNAME(V_CURRENCY),0      },
{ "V_DATE",         SbxINTEGER,       _CPROP,    RTLNAME(V_DATE),0          },
{ "V_STRING",       SbxINTEGER,       _CPROP,    RTLNAME(V_STRING),0        },

{ "Wait",        	SbxNULL,      1 | _FUNCTION, RTLNAME(Wait),0            },
  { "Milliseconds", SbxLONG, 0,NULL,0 },
//#i64882#
{ "WaitUntil",          SbxNULL,      1 | _FUNCTION, RTLNAME(WaitUntil),0      },
  { "Date", SbxDOUBLE, 0,NULL,0 },
{ "Weekday",        SbxINTEGER,   2 | _FUNCTION, RTLNAME(Weekday),0         },
  { "Date",         SbxDATE, 0,NULL,0 },
  { "Firstdayofweek", SbxINTEGER, _OPT, NULL,0 },
{ "WeekdayName",    SbxSTRING,    3 | _FUNCTION | _COMPTMASK, RTLNAME(WeekdayName),0 },
  { "Weekday",      SbxINTEGER, 0,NULL,0 },
  { "Abbreviate",   SbxBOOL,      _OPT, NULL,0 },
  { "Firstdayofweek", SbxINTEGER, _OPT, NULL,0 },
{ "Year",           SbxINTEGER,   1 | _FUNCTION, RTLNAME(Year),0            },
  { "Date",         SbxDATE, 0,NULL,0 },

{ NULL,             SbxNULL,     -1,NULL,0 }};  // 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;
	}

	// #i92642: Remove default properties
	Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_DONTCARE );
	Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Parent") ), SbxCLASS_DONTCARE );

	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
		sal_uInt16 nHash_ = SbxVariable::MakeHashCode( rName );
		Methods* p = aMethods;
		sal_Bool bFound = sal_False;
		short nIndex = 0;
		sal_uInt16 nSrchMask = _TYPEMASK;
		switch( t )
		{
			case SbxCLASS_METHOD:	nSrchMask = _METHOD; break;
			case SbxCLASS_PROPERTY:	nSrchMask = _PROPERTY; break;
			case SbxCLASS_OBJECT:	nSrchMask = _OBJECT; break;
			default: break;
		}
		while( p->nArgs != -1 )
		{
			if( ( p->nArgs & nSrchMask )
			 && ( p->nHash == nHash_ )
			 && ( rName.EqualsIgnoreCaseAscii( p->pName ) ) )
			{
				bFound = sal_True;
				if( p->nArgs & _COMPTMASK )
				{
					SbiInstance* pInst = pINST;
					if( !pInst || !pInst->IsCompatibility() )
						bFound = sal_False;
				}
				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, ( p->nArgs & _FUNCTION ) == _FUNCTION );
			pVar->SetUserData( nIndex + 1 );
			pVar->SetFlags( nAccess );
		}
	}
	return pVar;
}

// SetModified muك bei der RTL abgklemmt werden
void SbiStdObject::SetModified( sal_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();
		sal_uIntPtr t = pHint->GetId();
		sal_uInt16 nCallId = (sal_uInt16) pVar->GetUserData();
		if( nCallId )
		{
			if( t == SBX_HINT_INFOWANTED )
				pVar->SetInfo( GetInfo( (short) pVar->GetUserData() ) );
			else
			{
				sal_Bool bWrite = sal_False;
				if( t == SBX_HINT_DATACHANGED )
					bWrite = sal_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 );
		sal_uInt16 nFlags_ = ( p->nArgs >> 8 ) & 0x03;
		if( p->nArgs & _OPT )
			nFlags_ |= SBX_OPTIONAL;
		pInfo_->AddParam( aName_, p->eType, nFlags_ );
	}
	return pInfo_;
}