xref: /trunk/main/basic/source/runtime/stdobj.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_basic.hxx"
30 
31 #include "runtime.hxx"
32 #include "stdobj.hxx"
33 #include <basic/sbstdobj.hxx>
34 #include "rtlproto.hxx"
35 #include "sbintern.hxx"
36 
37 // Das nArgs-Feld eines Tabelleneintrags ist wie folgt verschluesselt:
38 // Zur Zeit wird davon ausgegangen, dass Properties keine Parameter
39 // benoetigen!
40 
41 #define _ARGSMASK   0x007F  // Bis zu 127 Argumente
42 #define _COMPTMASK  0x0080  // Only valid in compatibility mode
43 #define _RWMASK     0x0F00  // Maske fuer R/W-Bits
44 #define _TYPEMASK   0xF000  // Maske fuer den Typ des Eintrags
45 
46 #define _READ       0x0100  // kann gelesen werden
47 #define _BWRITE     0x0200  // kann as Lvalue verwendet werden
48 #define _LVALUE     _BWRITE // kann as Lvalue verwendet werden
49 #define _READWRITE  0x0300  // beides
50 #define _OPT        0x0400  // Parameter ist optional
51 #define _CONST      0x0800  // Property ist const
52 #define _METHOD     0x3000  // Masken-Bits fuer eine Methode
53 #define _PROPERTY   0x4000  // Masken-Bit fuer eine Property
54 #define _OBJECT     0x8000  // Masken-Bit fuer ein Objekt
55                             // Kombination von oberen Bits:
56 #define _FUNCTION   0x1100  // Maske fuer Function
57 #define _LFUNCTION  0x1300  // Maske fuer Function, die auch als Lvalue geht
58 #define _SUB        0x2100  // Maske fuer Sub
59 #define _ROPROP     0x4100  // Maske Read Only-Property
60 #define _WOPROP     0x4200  // Maske Write Only-Property
61 #define _RWPROP     0x4300  // Maske Read/Write-Property
62 #define _CPROP      0x4900  // Maske fuer Konstante
63 
64 struct Methods {
65     const char* pName;      // Name des Eintrags
66     SbxDataType eType;      // Datentyp
67     short       nArgs;      // Argumente und Flags
68     RtlCall     pFunc;      // Function Pointer
69     sal_uInt16      nHash;      // Hashcode
70 };
71 
72 static Methods aMethods[] = {
73 
74 { "AboutStarBasic", SbxNULL,      1 | _FUNCTION, RTLNAME(AboutStarBasic),0  },
75   { "Name",         SbxSTRING, 0,NULL,0 },
76 { "Abs",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Abs),0             },
77   { "number",       SbxDOUBLE, 0,NULL,0 },
78 { "Array",          SbxOBJECT,        _FUNCTION, RTLNAME(Array),0           },
79 { "Asc",            SbxLONG,      1 | _FUNCTION, RTLNAME(Asc),0             },
80   { "string",       SbxSTRING, 0,NULL,0 },
81 { "AscW",           SbxLONG,      1 | _FUNCTION | _COMPTMASK, RTLNAME(Asc),0},
82   { "string",       SbxSTRING, 0,NULL,0 },
83 { "Atn",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Atn),0             },
84   { "number",       SbxDOUBLE, 0,NULL,0 },
85 { "ATTR_ARCHIVE",   SbxINTEGER,       _CPROP,    RTLNAME(ATTR_ARCHIVE),0    },
86 { "ATTR_DIRECTORY", SbxINTEGER,       _CPROP,    RTLNAME(ATTR_DIRECTORY),0  },
87 { "ATTR_HIDDEN",    SbxINTEGER,       _CPROP,    RTLNAME(ATTR_HIDDEN),0     },
88 { "ATTR_NORMAL",    SbxINTEGER,       _CPROP,    RTLNAME(ATTR_NORMAL),0     },
89 { "ATTR_READONLY",  SbxINTEGER,       _CPROP,    RTLNAME(ATTR_READONLY),0   },
90 { "ATTR_SYSTEM",    SbxINTEGER,       _CPROP,    RTLNAME(ATTR_SYSTEM),0     },
91 { "ATTR_VOLUME",    SbxINTEGER,       _CPROP,    RTLNAME(ATTR_VOLUME),0     },
92 
93 { "Beep",           SbxNULL,          _FUNCTION, RTLNAME(Beep),0            },
94 { "Blue",        SbxINTEGER,   1 | _FUNCTION, RTLNAME(Blue),0               },
95   { "RGB-Value",     SbxLONG, 0,NULL,0 },
96 
97 { "CallByName",     SbxVARIANT,   3 | _FUNCTION, RTLNAME(CallByName),0 },
98   { "Object",       SbxOBJECT,  0,NULL,0 },
99   { "ProcedureName",SbxSTRING,  0,NULL,0 },
100   { "CallType",     SbxINTEGER, 0,NULL,0 },
101 { "CBool",          SbxBOOL,      1 | _FUNCTION, RTLNAME(CBool),0           },
102   { "expression",   SbxVARIANT, 0,NULL,0 },
103 { "CByte",          SbxBYTE,      1 | _FUNCTION, RTLNAME(CByte),0           },
104   { "expression",   SbxVARIANT, 0,NULL,0 },
105 { "CCur",           SbxCURRENCY,  1 | _FUNCTION, RTLNAME(CCur),0            },
106   { "expression",   SbxVARIANT, 0,NULL,0 },
107 { "CDate",          SbxDATE,      1 | _FUNCTION, RTLNAME(CDate),0           },
108   { "expression",   SbxVARIANT, 0,NULL,0 },
109 { "CDateFromIso",   SbxDATE,      1 | _FUNCTION, RTLNAME(CDateFromIso),0    },
110   { "IsoDate",      SbxSTRING, 0,NULL,0 },
111 { "CDateToIso",     SbxSTRING,    1 | _FUNCTION, RTLNAME(CDateToIso),0      },
112   { "Date",         SbxDATE, 0,NULL,0 },
113 { "CDec",           SbxDECIMAL,   1 | _FUNCTION, RTLNAME(CDec),0            },
114   { "expression",   SbxVARIANT, 0,NULL,0 },
115 { "CDbl",           SbxDOUBLE,    1 | _FUNCTION, RTLNAME(CDbl),0            },
116   { "expression",   SbxVARIANT, 0,NULL,0 },
117 { "CF_BITMAP",      SbxINTEGER,       _CPROP,    RTLNAME(CF_BITMAP),0       },
118 { "CF_METAFILEPICT",SbxINTEGER,       _CPROP,    RTLNAME(CF_METAFILEPICT),0 },
119 { "CF_TEXT",        SbxINTEGER,       _CPROP,    RTLNAME(CF_TEXT),0         },
120 { "ChDir",          SbxNULL,      1 | _FUNCTION, RTLNAME(ChDir),0           },
121   { "string",       SbxSTRING, 0,NULL,0 },
122 { "ChDrive",        SbxNULL,      1 | _FUNCTION, RTLNAME(ChDrive),0         },
123   { "string",       SbxSTRING, 0,NULL,0 },
124 
125 { "Choose",         SbxVARIANT,   2 | _FUNCTION, RTLNAME(Choose),0          },
126   { "Index",        SbxINTEGER, 0,NULL,0 },
127   { "Expression",   SbxVARIANT, 0,NULL,0 },
128 
129 { "Chr",            SbxSTRING,    1 | _FUNCTION, RTLNAME(Chr),0             },
130   { "string",       SbxINTEGER, 0,NULL,0 },
131 { "ChrW",           SbxSTRING,    1 | _FUNCTION | _COMPTMASK, RTLNAME(ChrW),0},
132   { "string",       SbxINTEGER, 0,NULL,0 },
133 
134 { "CInt",           SbxINTEGER,   1 | _FUNCTION, RTLNAME(CInt),0            },
135   { "expression",   SbxVARIANT, 0,NULL,0 },
136 { "CLEAR_ALLTABS",  SbxINTEGER,       _CPROP,    RTLNAME(CLEAR_ALLTABS),0   },
137 { "CLEAR_TAB",      SbxINTEGER,       _CPROP,    RTLNAME(CLEAR_TAB),0       },
138 { "CLng",           SbxLONG,      1 | _FUNCTION, RTLNAME(CLng),0            },
139   { "expression",   SbxVARIANT, 0,NULL,0 },
140 { "CompatibilityMode",  SbxBOOL,  1 | _FUNCTION, RTLNAME(CompatibilityMode),0},
141   { "bEnable",      SbxBOOL, 0,NULL,0 },
142 { "ConvertFromUrl", SbxSTRING,    1 | _FUNCTION, RTLNAME(ConvertFromUrl),0  },
143   { "Url",          SbxSTRING, 0,NULL,0 },
144 { "ConvertToUrl",   SbxSTRING,    1 | _FUNCTION, RTLNAME(ConvertToUrl),0    },
145   { "SystemPath",   SbxSTRING, 0,NULL,0 },
146 { "Cos",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Cos),0             },
147   { "number",       SbxDOUBLE, 0,NULL,0 },
148 { "CreateObject",   SbxOBJECT,    1 | _FUNCTION, RTLNAME( CreateObject ),0  },
149   { "class",        SbxSTRING, 0,NULL,0 },
150 { "CaptureAssertions",  SbxNULL, 1 | _FUNCTION, RTLNAME(CaptureAssertions), 0 },
151   { "methodName",   SbxSTRING, 0, NULL, 0 },
152 { "CreateUnoListener",SbxOBJECT,   1 | _FUNCTION, RTLNAME( CreateUnoListener ),0 },
153   { "prefix",  SbxSTRING, 0,NULL,0 },
154   { "typename",  SbxSTRING, 0,NULL,0 },
155 { "CreateUnoDialog",SbxOBJECT,    2 | _FUNCTION, RTLNAME( CreateUnoDialog ),0 },
156   { "dialoglibrary",SbxOBJECT, 0,NULL,0 },
157   { "dialogname",   SbxSTRING, 0,NULL,0 },
158 { "CreateUnoService",SbxOBJECT,   1 | _FUNCTION, RTLNAME( CreateUnoService ),0 },
159   { "servicename",  SbxSTRING, 0,NULL,0 },
160 { "CreateUnoServiceWithArguments",SbxOBJECT,   2 | _FUNCTION, RTLNAME( CreateUnoServiceWithArguments ),0 },
161   { "servicename",  SbxSTRING, 0,NULL,0 },
162   { "arguments",  SbxARRAY, 0,NULL,0 },
163 { "CreateUnoStruct",SbxOBJECT,    1 | _FUNCTION, RTLNAME( CreateUnoStruct ),0 },
164   { "classname",    SbxSTRING, 0,NULL,0 },
165 { "CreateUnoValue", SbxOBJECT,    2 | _FUNCTION, RTLNAME( CreateUnoValue ),0 },
166   { "type",         SbxSTRING, 0,NULL,0 },
167   { "value",        SbxVARIANT, 0,NULL,0 },
168 { "CreatePropertySet",SbxOBJECT, 1 | _FUNCTION, RTLNAME( CreatePropertySet ),0 },
169   { "values",  SbxARRAY, 0,NULL,0 },
170 { "CSng",           SbxSINGLE,    1 | _FUNCTION, RTLNAME(CSng),0            },
171   { "expression",   SbxVARIANT, 0,NULL,0 },
172 { "CStr",           SbxSTRING,    1 | _FUNCTION, RTLNAME(CStr),0            },
173   { "expression",   SbxVARIANT, 0,NULL,0 },
174 { "CurDir",         SbxSTRING,    1 | _FUNCTION, RTLNAME(CurDir),0          },
175   { "string",       SbxSTRING, 0,NULL,0 },
176 { "CVar",           SbxVARIANT,   1 | _FUNCTION, RTLNAME(CVar),0            },
177   { "expression",   SbxVARIANT, 0,NULL,0 },
178 { "CVErr",          SbxVARIANT,   1 | _FUNCTION, RTLNAME(CVErr),0           },
179   { "expression",   SbxVARIANT, 0,NULL,0 },
180 
181 { "Date",           SbxDATE,          _LFUNCTION,RTLNAME(Date),0            },
182 { "DateAdd",        SbxDATE,      3 | _FUNCTION, RTLNAME(DateAdd),0         },
183   { "Interval",     SbxSTRING, 0,NULL,0 },
184   { "Number",       SbxLONG, 0,NULL,0 },
185   { "Date",         SbxDATE, 0,NULL,0 },
186 { "DateDiff",       SbxDOUBLE,    5 | _FUNCTION, RTLNAME(DateDiff),0        },
187   { "Interval",     SbxSTRING, 0,NULL,0 },
188   { "Date1",        SbxDATE, 0,NULL,0 },
189   { "Date2",        SbxDATE, 0,NULL,0 },
190   { "Firstdayofweek" , SbxINTEGER, _OPT,NULL,0 },
191   { "Firstweekofyear", SbxINTEGER, _OPT,NULL,0 },
192 { "DatePart",       SbxLONG,      4 | _FUNCTION, RTLNAME(DatePart),0        },
193   { "Interval",     SbxSTRING, 0,NULL,0 },
194   { "Date",         SbxDATE, 0,NULL,0 },
195   { "Firstdayofweek" , SbxINTEGER, _OPT, NULL,0 },
196   { "Firstweekofyear", SbxINTEGER, _OPT, NULL,0 },
197 { "DateSerial",     SbxDATE,      3 | _FUNCTION, RTLNAME(DateSerial),0      },
198   { "Year",         SbxINTEGER, 0,NULL,0 },
199   { "Month",        SbxINTEGER, 0,NULL,0 },
200   { "Day",          SbxINTEGER, 0,NULL,0 },
201 { "DateValue",      SbxDATE,      1 | _FUNCTION, RTLNAME(DateValue),0       },
202   { "String",       SbxSTRING, 0,NULL,0 },
203 { "Day",            SbxINTEGER,   1 | _FUNCTION, RTLNAME(Day),0             },
204   { "Date",         SbxDATE, 0,NULL,0 },
205 { "Ddeexecute",     SbxNULL,   2 | _FUNCTION, RTLNAME(DDEExecute),0         },
206   { "Channel",         SbxLONG, 0,NULL,0 },
207   { "Command",         SbxSTRING, 0,NULL,0 },
208 { "Ddeinitiate",    SbxINTEGER,   2 | _FUNCTION, RTLNAME(DDEInitiate),0     },
209   { "Application",     SbxSTRING, 0,NULL,0 },
210   { "Topic",           SbxSTRING, 0,NULL,0 },
211 { "Ddepoke",        SbxNULL,   3 | _FUNCTION, RTLNAME(DDEPoke),0            },
212   { "Channel",         SbxLONG, 0,NULL,0 },
213   { "Item",            SbxSTRING, 0,NULL,0 },
214   { "Data",            SbxSTRING, 0,NULL,0 },
215 { "Dderequest",     SbxSTRING,   2 | _FUNCTION, RTLNAME(DDERequest),0       },
216   { "Channel",         SbxLONG, 0,NULL,0 },
217   { "Item",            SbxSTRING, 0,NULL,0 },
218 { "Ddeterminate",   SbxNULL,   1 | _FUNCTION, RTLNAME(DDETerminate),0       },
219   { "Channel",         SbxLONG, 0,NULL,0 },
220 { "Ddeterminateall",   SbxNULL,   _FUNCTION, RTLNAME(DDETerminateAll),0     },
221 { "DimArray",       SbxOBJECT,    _FUNCTION, RTLNAME(DimArray),0            },
222 { "Dir",            SbxSTRING,    2 | _FUNCTION, RTLNAME(Dir),0             },
223   { "FileSpec",     SbxSTRING,        _OPT, NULL,0 },
224   { "attrmask",     SbxINTEGER,       _OPT, NULL,0 },
225 { "DoEvents",       SbxEMPTY,     _FUNCTION, RTLNAME(DoEvents),0            },
226 { "DumpAllObjects", SbxEMPTY,     2 | _SUB, RTLNAME(DumpAllObjects),0       },
227   { "FileSpec",     SbxSTRING, 0,NULL,0 },
228   { "DumpAll",      SbxINTEGER,       _OPT, NULL,0 },
229 
230 { "Empty",        SbxVARIANT,        _CPROP,    RTLNAME(Empty),0         },
231 { "EqualUnoObjects",SbxBOOL,      2 | _FUNCTION, RTLNAME(EqualUnoObjects),0 },
232   { "Variant",      SbxVARIANT, 0,NULL,0 },
233   { "Variant",      SbxVARIANT, 0,NULL,0 },
234 { "EnableReschedule",   SbxNULL,  1 | _FUNCTION, RTLNAME(EnableReschedule),0},
235   { "bEnable",      SbxBOOL, 0,NULL,0 },
236 { "Environ",            SbxSTRING,   1 | _FUNCTION, RTLNAME(Environ),0      },
237   { "Environmentstring",SbxSTRING, 0,NULL,0 },
238 { "EOF",            SbxBOOL,      1 | _FUNCTION, RTLNAME(EOF),0             },
239   { "Channel",      SbxINTEGER, 0,NULL,0 },
240 { "Erl",            SbxLONG,          _ROPROP,   RTLNAME( Erl ),0           },
241 { "Err",            SbxVARIANT,       _RWPROP,   RTLNAME( Err ),0           },
242 { "Error",          SbxSTRING,    1 | _FUNCTION, RTLNAME( Error ),0         },
243   { "code",         SbxLONG, 0,NULL,0 },
244 { "Exp",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Exp),0             },
245   { "number",       SbxDOUBLE, 0,NULL,0 },
246 
247 { "False",          SbxBOOL,          _CPROP,    RTLNAME(False),0           },
248 { "FileAttr",       SbxINTEGER,   2 | _FUNCTION, RTLNAME(FileAttr),0        },
249   { "Channel",      SbxINTEGER, 0,NULL,0 },
250   { "Attributes",   SbxINTEGER, 0,NULL,0 },
251 { "FileCopy",       SbxNULL,      2 | _FUNCTION, RTLNAME(FileCopy),0        },
252   { "Source",       SbxSTRING, 0,NULL,0 },
253   { "Destination",  SbxSTRING, 0,NULL,0 },
254 { "FileDateTime",   SbxSTRING,    1 | _FUNCTION, RTLNAME(FileDateTime),0    },
255   { "filename",     SbxSTRING, 0,NULL,0 },
256 { "FileExists",     SbxBOOL,   1 | _FUNCTION, RTLNAME(FileExists),0         },
257   { "filename",     SbxSTRING, 0,NULL,0 },
258 { "FileLen",        SbxLONG,      1 | _FUNCTION, RTLNAME(FileLen),0         },
259   { "filename",     SbxSTRING, 0,NULL,0 },
260 { "FindObject",     SbxOBJECT,    1 | _FUNCTION, RTLNAME(FindObject),0      },
261   { "Name",  SbxSTRING, 0,NULL,0 },
262 { "FindPropertyObject",   SbxOBJECT,      2 | _FUNCTION, RTLNAME(FindPropertyObject),0 },
263   { "Object",       SbxOBJECT, 0,NULL,0 },
264   { "Name",  SbxSTRING, 0,NULL,0 },
265 { "Fix",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Fix),0             },
266   { "number",       SbxDOUBLE, 0,NULL,0 },
267 { "Format",         SbxSTRING,    2 | _FUNCTION, RTLNAME(Format),0          },
268   { "expression",   SbxVARIANT, 0,NULL,0 },
269   { "format",       SbxSTRING,        _OPT, NULL,0 },
270 { "FormatDateTime", SbxSTRING,    2 | _FUNCTION | _COMPTMASK, RTLNAME(FormatDateTime),0 },
271   { "Date",         SbxDATE, 0,NULL,0 },
272   { "NamedFormat",  SbxINTEGER,        _OPT, NULL,0 },
273 { "FRAMEANCHORCHAR",        SbxINTEGER,       _CPROP,    RTLNAME(FRAMEANCHORCHAR),0 },
274 { "FRAMEANCHORPAGE",        SbxINTEGER,       _CPROP,    RTLNAME(FRAMEANCHORPAGE),0 },
275 { "FRAMEANCHORPARA",        SbxINTEGER,       _CPROP,    RTLNAME(FRAMEANCHORPARA),0 },
276 { "FreeFile",       SbxINTEGER,    _FUNCTION, RTLNAME(FreeFile),0           },
277 { "FreeLibrary",    SbxNULL,      1 | _FUNCTION, RTLNAME(FreeLibrary),0     },
278   { "Modulename",   SbxSTRING, 0,NULL,0 },
279 
280 { "Get",            SbxNULL,   3 | _FUNCTION, RTLNAME(Get),0                },
281   { "filenumber",   SbxINTEGER, 0,NULL,0 },
282   { "recordnumber", SbxLONG, 0,NULL,0 },
283   { "variablename", SbxVARIANT, 0,NULL,0 },
284 { "GetAttr",        SbxINTEGER,   1 | _FUNCTION, RTLNAME(GetAttr),0         },
285   { "filename",     SbxSTRING, 0,NULL,0 },
286 { "GetDefaultContext", SbxOBJECT, 0 | _FUNCTION, RTLNAME(GetDefaultContext),0 },
287 { "GetDialogZoomFactorX",  SbxDOUBLE,     _FUNCTION,RTLNAME(GetDialogZoomFactorX),0 },
288 { "GetDialogZoomFactorY",  SbxDOUBLE,     _FUNCTION,RTLNAME(GetDialogZoomFactorY),0 },
289 { "GetGUIType",  SbxINTEGER,     _FUNCTION,RTLNAME(GetGUIType),0            },
290 { "GetGUIVersion",  SbxLONG,     _FUNCTION,RTLNAME(GetGUIVersion),0         },
291 { "GetPathSeparator",  SbxSTRING,     _FUNCTION,RTLNAME(GetPathSeparator),0 },
292 { "GetProcessServiceManager", SbxOBJECT, 0 | _FUNCTION, RTLNAME(GetProcessServiceManager),0 },
293 { "GetSolarVersion",  SbxLONG,     _FUNCTION,RTLNAME(GetSolarVersion),0     },
294 { "GetSystemTicks",  SbxLONG,      _FUNCTION,RTLNAME(GetSystemTicks),0      },
295 { "GetSystemType",  SbxINTEGER,    _FUNCTION,RTLNAME(GetSystemType),0       },
296 { "GlobalScope",    SbxOBJECT,     _FUNCTION,RTLNAME(GlobalScope),0         },
297 { "Green",          SbxINTEGER,   1 | _FUNCTION, RTLNAME(Green),0           },
298   { "RGB-Value",     SbxLONG, 0,NULL,0 },
299 
300 { "HasUnoInterfaces",   SbxBOOL,  1 | _FUNCTION, RTLNAME(HasUnoInterfaces),0},
301   { "InterfaceName",SbxSTRING, 0,NULL,0 },
302 { "Hex",            SbxSTRING,    1 | _FUNCTION, RTLNAME(Hex),0             },
303   { "number",       SbxLONG, 0,NULL,0 },
304 { "Hour",           SbxINTEGER,   1 | _FUNCTION, RTLNAME(Hour),0            },
305   { "Date",         SbxDATE, 0,NULL,0 },
306 
307 { "IDABORT",        SbxINTEGER,       _CPROP,    RTLNAME(IDABORT),0         },
308 { "IDCANCEL",       SbxINTEGER,       _CPROP,    RTLNAME(IDCANCEL),0        },
309 { "IDNO",           SbxINTEGER,       _CPROP,    RTLNAME(IDNO),0            },
310 { "IDOK",           SbxINTEGER,       _CPROP,    RTLNAME(IDOK),0            },
311 { "IDRETRY",        SbxINTEGER,       _CPROP,    RTLNAME(IDRETRY),0         },
312 { "IDYES",          SbxINTEGER,       _CPROP,    RTLNAME(IDYES),0           },
313 
314 { "Iif",            SbxVARIANT,   3 | _FUNCTION, RTLNAME(Iif),0             },
315   { "Bool",         SbxBOOL, 0,NULL,0 },
316   { "Variant1",     SbxVARIANT, 0,NULL,0 },
317   { "Variant2",     SbxVARIANT, 0,NULL,0 },
318 
319 { "Input",          SbxSTRING,    2 | _FUNCTION | _COMPTMASK, RTLNAME(Input),0},
320   { "Number",       SbxLONG, 0,NULL,0 },
321   { "FileNumber",   SbxLONG, 0,NULL,0 },
322 { "InputBox",       SbxSTRING,    5 | _FUNCTION, RTLNAME(InputBox),0        },
323   { "Prompt",       SbxSTRING, 0,NULL,0 },
324   { "Title",        SbxSTRING,        _OPT, NULL,0 },
325   { "Default",      SbxSTRING,        _OPT, NULL,0 },
326   { "XPosTwips",    SbxLONG,          _OPT, NULL,0 },
327   { "YPosTwips",    SbxLONG,          _OPT, NULL,0 },
328 { "InStr",          SbxLONG,      4 | _FUNCTION, RTLNAME(InStr),0           },
329   { "Start",        SbxSTRING,        _OPT, NULL,0 },
330   { "String1",      SbxSTRING, 0,NULL,0 },
331   { "String2",      SbxSTRING, 0,NULL,0 },
332   { "Compare",      SbxINTEGER,       _OPT, NULL,0 },
333 { "InStrRev",       SbxLONG,      4 | _FUNCTION | _COMPTMASK, RTLNAME(InStrRev),0},
334   { "String1",      SbxSTRING, 0,NULL,0 },
335   { "String2",      SbxSTRING, 0,NULL,0 },
336   { "Start",        SbxSTRING,        _OPT, NULL,0 },
337   { "Compare",      SbxINTEGER,       _OPT, NULL,0 },
338 { "Int",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Int),0             },
339   { "number",       SbxDOUBLE, 0,NULL,0 },
340 { "IsArray",        SbxBOOL,      1 | _FUNCTION, RTLNAME(IsArray),0         },
341   { "Variant",      SbxVARIANT, 0,NULL,0 },
342 { "IsDate",         SbxBOOL,      1 | _FUNCTION, RTLNAME(IsDate),0          },
343   { "Variant",      SbxVARIANT, 0,NULL,0 },
344 { "IsEmpty",        SbxBOOL,      1 | _FUNCTION, RTLNAME(IsEmpty),0         },
345   { "Variant",      SbxVARIANT, 0,NULL,0 },
346 { "IsError",        SbxBOOL,      1 | _FUNCTION, RTLNAME(IsError),0         },
347   { "Variant",      SbxVARIANT, 0,NULL,0 },
348 { "IsMissing",        SbxBOOL,      1 | _FUNCTION, RTLNAME(IsMissing),0     },
349   { "Variant",      SbxVARIANT, 0,NULL,0 },
350 { "IsNull",         SbxBOOL,      1 | _FUNCTION, RTLNAME(IsNull),0          },
351   { "Variant",      SbxVARIANT, 0,NULL,0 },
352 { "IsNumeric",      SbxBOOL,      1 | _FUNCTION, RTLNAME(IsNumeric),0       },
353   { "Variant",      SbxVARIANT, 0,NULL,0 },
354 { "IsObject",       SbxBOOL,      1 | _FUNCTION, RTLNAME(IsObject),0        },
355   { "Variant",      SbxVARIANT, 0,NULL,0 },
356 { "IsUnoStruct",    SbxBOOL,      1 | _FUNCTION, RTLNAME(IsUnoStruct),0     },
357   { "Variant",      SbxVARIANT, 0,NULL,0 },
358 { "Join",           SbxSTRING,      2 | _FUNCTION, RTLNAME(Join),0          },
359   { "list",         SbxOBJECT, 0,NULL,0 },
360   { "delimiter",    SbxSTRING, 0,NULL,0 },
361 { "Kill",           SbxNULL,      1 | _FUNCTION, RTLNAME(Kill),0            },
362   { "filespec",     SbxSTRING, 0,NULL,0 },
363 { "LBound",         SbxLONG,      1 | _FUNCTION, RTLNAME(LBound),0          },
364   { "Variant",      SbxVARIANT, 0,NULL,0 },
365 { "LCase",          SbxSTRING,    1 | _FUNCTION, RTLNAME(LCase),0           },
366   { "string",       SbxSTRING, 0,NULL,0 },
367 { "Left",           SbxSTRING,    2 | _FUNCTION, RTLNAME(Left),0            },
368   { "String",       SbxSTRING, 0,NULL,0 },
369   { "Count",        SbxLONG, 0,NULL,0 },
370 { "Len",            SbxLONG,      1 | _FUNCTION, RTLNAME(Len),0             },
371   { "StringOrVariant", SbxVARIANT, 0,NULL,0 },
372 { "LenB",           SbxLONG,      1 | _FUNCTION, RTLNAME(Len),0             },
373   { "StringOrVariant", SbxVARIANT, 0,NULL,0 },
374 { "Load",           SbxNULL,      1 | _FUNCTION, RTLNAME(Load),0            },
375   { "object",       SbxOBJECT, 0,NULL,0 },
376 { "LoadPicture",    SbxOBJECT,    1 | _FUNCTION, RTLNAME(LoadPicture),0     },
377   { "string",       SbxSTRING, 0,NULL,0 },
378 { "Loc",            SbxLONG,      1 | _FUNCTION, RTLNAME(Loc),0             },
379   { "Channel",      SbxINTEGER, 0,NULL,0 },
380 { "Lof",            SbxLONG,      1 | _FUNCTION, RTLNAME(Lof),0             },
381   { "Channel",      SbxINTEGER, 0,NULL,0 },
382 { "Log",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Log),0             },
383   { "number",       SbxDOUBLE, 0,NULL,0 },
384 { "LTrim",          SbxSTRING,    1 | _FUNCTION, RTLNAME(LTrim),0           },
385   { "string",       SbxSTRING, 0,NULL,0 },
386 
387 { "MB_ABORTRETRYIGNORE", SbxINTEGER,  _CPROP,    RTLNAME(MB_ABORTRETRYIGNORE),0},
388 { "MB_APPLMODAL",   SbxINTEGER,       _CPROP,    RTLNAME(MB_APPLMODAL),0    },
389 { "MB_DEFBUTTON1",  SbxINTEGER,       _CPROP,    RTLNAME(MB_DEFBUTTON1),0   },
390 { "MB_DEFBUTTON2",  SbxINTEGER,       _CPROP,    RTLNAME(MB_DEFBUTTON2),0   },
391 { "MB_DEFBUTTON3",  SbxINTEGER,       _CPROP,    RTLNAME(MB_DEFBUTTON3),0   },
392 { "MB_ICONEXCLAMATION", SbxINTEGER,   _CPROP,    RTLNAME(MB_ICONEXCLAMATION),0},
393 { "MB_ICONINFORMATION", SbxINTEGER,   _CPROP,    RTLNAME(MB_ICONINFORMATION),0},
394 { "MB_ICONQUESTION",SbxINTEGER,       _CPROP,    RTLNAME(MB_ICONQUESTION),0 },
395 { "MB_ICONSTOP",    SbxINTEGER,       _CPROP,    RTLNAME(MB_ICONSTOP),0     },
396 { "MB_OK",          SbxINTEGER,       _CPROP,    RTLNAME(MB_OK),0           },
397 { "MB_OKCANCEL",    SbxINTEGER,       _CPROP,    RTLNAME(MB_OKCANCEL),0     },
398 { "MB_RETRYCANCEL", SbxINTEGER,       _CPROP,    RTLNAME(MB_RETRYCANCEL),0  },
399 { "MB_SYSTEMMODAL", SbxINTEGER,       _CPROP,    RTLNAME(MB_SYSTEMMODAL),0  },
400 { "MB_YESNO",       SbxINTEGER,       _CPROP,    RTLNAME(MB_YESNO),0        },
401 { "MB_YESNOCANCEL", SbxINTEGER,       _CPROP,    RTLNAME(MB_YESNOCANCEL),0  },
402 
403 { "Me",             SbxOBJECT,    0 | _FUNCTION | _COMPTMASK, RTLNAME(Me),0 },
404 { "Mid",            SbxSTRING,    3 | _LFUNCTION,RTLNAME(Mid),0             },
405   { "String",       SbxSTRING, 0,NULL,0 },
406   { "StartPos",     SbxLONG, 0,NULL,0 },
407   { "Length",       SbxLONG,          _OPT, NULL,0 },
408 { "Minute",         SbxINTEGER,   1 | _FUNCTION, RTLNAME(Minute),0          },
409   { "Date",         SbxDATE, 0,NULL,0 },
410 { "MkDir",          SbxNULL,      1 | _FUNCTION, RTLNAME(MkDir),0           },
411   { "pathname",     SbxSTRING, 0,NULL,0 },
412 { "Month",          SbxINTEGER,   1 | _FUNCTION, RTLNAME(Month),0           },
413   { "Date",         SbxDATE, 0,NULL,0 },
414 { "MonthName",      SbxSTRING,    2 | _FUNCTION | _COMPTMASK, RTLNAME(MonthName),0 },
415   { "Month",        SbxINTEGER, 0,NULL,0 },
416   { "Abbreviate",   SbxBOOL,          _OPT, NULL,0 },
417 { "MsgBox",         SbxINTEGER,    5 | _FUNCTION, RTLNAME(MsgBox),0         },
418   { "Prompt",       SbxSTRING, 0,NULL,0 },
419   { "Buttons",      SbxINTEGER,       _OPT, NULL,0 },
420   { "Title",        SbxSTRING,        _OPT, NULL,0 },
421   { "Helpfile",     SbxSTRING,        _OPT, NULL,0 },
422   { "Context",      SbxINTEGER,       _OPT, NULL,0 },
423 
424 { "Nothing",        SbxOBJECT,        _CPROP,    RTLNAME(Nothing),0         },
425 { "Now",            SbxDATE,          _FUNCTION, RTLNAME(Now),0             },
426 { "Null",           SbxNULL,          _CPROP,    RTLNAME(Null),0            },
427 
428 { "Oct",            SbxSTRING,    1 | _FUNCTION, RTLNAME(Oct),0             },
429   { "number",       SbxLONG, 0,NULL,0 },
430 
431 { "Partition",      SbxSTRING,    4 | _FUNCTION, RTLNAME(Partition),0       },
432   { "number",       SbxLONG,    0,NULL,0 },
433   { "start",        SbxLONG,    0,NULL,0 },
434   { "stop",         SbxLONG,    0,NULL,0 },
435   { "interval",     SbxLONG,    0,NULL,0 },
436 { "Pi",             SbxDOUBLE,        _CPROP,    RTLNAME(PI),0              },
437 { "Put",            SbxNULL,   3 | _FUNCTION, RTLNAME(Put),0                },
438   { "filenumber",   SbxINTEGER, 0,NULL,0 },
439   { "recordnumber", SbxLONG, 0,NULL,0 },
440   { "variablename", SbxVARIANT, 0,NULL,0 },
441 
442 { "QBColor",        SbxLONG,      1 | _FUNCTION, RTLNAME(QBColor),0         },
443   { "number",       SbxINTEGER, 0,NULL,0 },
444 
445 { "Randomize",      SbxNULL,      1 | _FUNCTION, RTLNAME(Randomize),0       },
446   { "Number",       SbxDOUBLE,        _OPT, NULL,0 },
447 { "Red",        SbxINTEGER,   1 | _FUNCTION, RTLNAME(Red),0                 },
448   { "RGB-Value",     SbxLONG, 0,NULL,0 },
449 { "Reset",          SbxNULL,      0 | _FUNCTION, RTLNAME(Reset),0           },
450 { "ResolvePath",    SbxSTRING,    1 | _FUNCTION, RTLNAME(ResolvePath),0     },
451   { "Path",         SbxSTRING, 0,NULL,0 },
452 { "RGB",            SbxLONG,      3 | _FUNCTION, RTLNAME(RGB),0             },
453   { "Red",          SbxINTEGER, 0,NULL,0 },
454   { "Green",        SbxINTEGER, 0,NULL,0 },
455   { "Blue",         SbxINTEGER, 0,NULL,0 },
456 { "Replace",        SbxSTRING,    6 | _FUNCTION, RTLNAME(Replace),0         },
457   { "Expression",   SbxSTRING, 0,NULL,0 },
458   { "Find",         SbxSTRING, 0,NULL,0 },
459   { "Replace",      SbxSTRING, 0,NULL,0 },
460   { "Start",        SbxINTEGER,     _OPT, NULL,0 },
461   { "Count",        SbxINTEGER,     _OPT, NULL,0 },
462   { "Compare",      SbxINTEGER,     _OPT, NULL,0 },
463 { "Right",          SbxSTRING,    2 | _FUNCTION, RTLNAME(Right),0           },
464   { "String",       SbxSTRING, 0,NULL,0 },
465   { "Count",        SbxLONG, 0,NULL,0 },
466 { "RmDir",          SbxNULL,      1 | _FUNCTION, RTLNAME(RmDir),0           },
467   { "pathname",     SbxSTRING, 0,NULL,0 },
468 { "Round",          SbxDOUBLE,    2 | _FUNCTION | _COMPTMASK, RTLNAME(Round),0},
469   { "Expression",   SbxDOUBLE, 0,NULL,0 },
470   { "Numdecimalplaces", SbxINTEGER,   _OPT, NULL,0 },
471 { "Rnd",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Rnd),0             },
472   { "Number",       SbxDOUBLE,        _OPT, NULL,0 },
473 { "RTL",            SbxOBJECT,    0 | _FUNCTION | _COMPTMASK, RTLNAME(RTL),0},
474 { "RTrim",          SbxSTRING,    1 | _FUNCTION, RTLNAME(RTrim),0           },
475   { "string",       SbxSTRING, 0,NULL,0 },
476 
477 { "SavePicture",    SbxNULL,      2 | _FUNCTION, RTLNAME(SavePicture),0     },
478   { "object",       SbxOBJECT, 0,NULL,0 },
479   { "string",       SbxSTRING, 0,NULL,0 },
480 { "Second",         SbxINTEGER,   1 | _FUNCTION, RTLNAME(Second),0          },
481   { "Date",         SbxDATE, 0,NULL,0 },
482 { "Seek",           SbxLONG,      1 | _FUNCTION, RTLNAME(Seek),0            },
483   { "Channel",      SbxINTEGER, 0,NULL,0 },
484 { "SendKeys",       SbxNULL,      2 | _FUNCTION, RTLNAME(SendKeys),0        },
485   { "String",       SbxSTRING, 0,NULL,0 },
486   { "Wait",         SbxBOOL,          _OPT, NULL,0 },
487 { "SetAttr",        SbxNULL,      2 | _FUNCTION, RTLNAME(SetAttr),0         },
488   { "File"  ,       SbxSTRING, 0,NULL,0 },
489   { "Attributes",   SbxINTEGER, 0,NULL,0 },
490 { "SET_OFF",        SbxINTEGER,       _CPROP,    RTLNAME(SET_OFF),0         },
491 { "SET_ON",         SbxINTEGER,       _CPROP,    RTLNAME(SET_ON),0          },
492 { "SET_TAB",        SbxINTEGER,       _CPROP,    RTLNAME(SET_TAB),0         },
493 { "Sgn",            SbxINTEGER,   1 | _FUNCTION, RTLNAME(Sgn),0             },
494   { "number",       SbxDOUBLE, 0,NULL,0 },
495 { "Shell",          SbxLONG,      2 | _FUNCTION, RTLNAME(Shell),0           },
496   { "Commandstring",SbxSTRING, 0,NULL,0 },
497   { "WindowStyle",  SbxINTEGER,       _OPT, NULL,0 },
498 { "Sin",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Sin),0             },
499   { "number",       SbxDOUBLE, 0,NULL,0 },
500 { "Space",          SbxSTRING,      1 | _FUNCTION, RTLNAME(Space),0         },
501   { "string",       SbxLONG, 0,NULL,0 },
502 { "Spc",            SbxSTRING,      1 | _FUNCTION, RTLNAME(Spc),0           },
503   { "Count",        SbxLONG, 0,NULL,0 },
504 { "Split",          SbxOBJECT,      3 | _FUNCTION, RTLNAME(Split),0         },
505   { "expression",   SbxSTRING, 0,NULL,0 },
506   { "delimiter",    SbxSTRING, 0,NULL,0 },
507   { "count",        SbxLONG, 0,NULL,0 },
508 { "Sqr",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Sqr),0             },
509   { "number",       SbxDOUBLE, 0,NULL,0 },
510 { "Str",            SbxSTRING,    1 | _FUNCTION, RTLNAME(Str),0             },
511   { "number",       SbxDOUBLE, 0,NULL,0 },
512 { "StrComp",        SbxINTEGER,   3 | _FUNCTION, RTLNAME(StrComp),0         },
513   { "String1",      SbxSTRING, 0,NULL,0 },
514   { "String2",      SbxSTRING, 0,NULL,0 },
515   { "Compare",      SbxINTEGER,       _OPT, NULL,0 },
516 { "StrConv",        SbxOBJECT,   3 | _FUNCTION, RTLNAME(StrConv),0          },
517   { "String",       SbxSTRING, 0,NULL,0 },
518   { "Conversion",   SbxSTRING, 0,NULL,0 },
519   { "LCID",         SbxINTEGER, _OPT,NULL,0 },
520 { "String",         SbxSTRING,    2 | _FUNCTION, RTLNAME(String),0          },
521   { "Count",        SbxLONG, 0,NULL,0 },
522   { "Filler",       SbxVARIANT, 0,NULL,0 },
523 { "StrReverse",     SbxSTRING,    1 | _FUNCTION | _COMPTMASK, RTLNAME(StrReverse),0 },
524   { "String1",      SbxSTRING, 0,NULL,0 },
525 { "Switch",         SbxVARIANT,   2 | _FUNCTION, RTLNAME(Switch),0          },
526   { "Expression",   SbxVARIANT, 0,NULL,0 },
527   { "Value",        SbxVARIANT, 0,NULL,0 },
528 
529 { "Tan",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Tan),0             },
530   { "number",       SbxDOUBLE, 0,NULL,0 },
531 { "Time",           SbxVARIANT,       _LFUNCTION,RTLNAME(Time),0            },
532 { "Timer",          SbxDATE,          _FUNCTION, RTLNAME(Timer),0           },
533 { "TimeSerial",     SbxDATE,      3 | _FUNCTION, RTLNAME(TimeSerial),0      },
534   { "Hour",         SbxLONG, 0,NULL,0 },
535   { "Minute",       SbxLONG, 0,NULL,0 },
536   { "Second",       SbxLONG, 0,NULL,0 },
537 { "TimeValue",      SbxDATE,      1 | _FUNCTION, RTLNAME(TimeValue),0       },
538   { "String",       SbxSTRING, 0,NULL,0 },
539 { "TOGGLE",         SbxINTEGER,       _CPROP,    RTLNAME(TOGGLE),0          },
540 #ifdef DBG_TRACE_BASIC
541 { "TraceCommand",   SbxNULL,      1 | _FUNCTION, RTLNAME(TraceCommand),0 },
542   { "Command",      SbxSTRING,  0,NULL,0 },
543 #endif
544 { "Trim",           SbxSTRING,    1 | _FUNCTION, RTLNAME(Trim),0            },
545   { "String",       SbxSTRING, 0,NULL,0 },
546 { "True",           SbxBOOL,          _CPROP,    RTLNAME(True),0            },
547 { "TwipsPerPixelX", SbxLONG,          _FUNCTION, RTLNAME(TwipsPerPixelX),0  },
548 { "TwipsPerPixelY", SbxLONG,          _FUNCTION, RTLNAME(TwipsPerPixelY),0  },
549 
550 { "TYP_AUTHORFLD",          SbxINTEGER,       _CPROP,    RTLNAME(TYP_AUTHORFLD),0       },
551 { "TYP_CHAPTERFLD",         SbxINTEGER,       _CPROP,    RTLNAME(TYP_CHAPTERFLD),0      },
552 { "TYP_CONDTXTFLD",         SbxINTEGER,       _CPROP,    RTLNAME(TYP_CONDTXTFLD),0      },
553 { "TYP_DATEFLD",            SbxINTEGER,       _CPROP,    RTLNAME(TYP_DATEFLD),0         },
554 { "TYP_DBFLD",              SbxINTEGER,       _CPROP,    RTLNAME(TYP_DBFLD),0           },
555 { "TYP_DBNAMEFLD",          SbxINTEGER,       _CPROP,    RTLNAME(TYP_DBNAMEFLD),0       },
556 { "TYP_DBNEXTSETFLD",       SbxINTEGER,       _CPROP,    RTLNAME(TYP_DBNEXTSETFLD),0    },
557 { "TYP_DBNUMSETFLD",        SbxINTEGER,       _CPROP,    RTLNAME(TYP_DBNUMSETFLD),0     },
558 { "TYP_DBSETNUMBERFLD",     SbxINTEGER,       _CPROP,    RTLNAME(TYP_DBSETNUMBERFLD),0  },
559 { "TYP_DDEFLD",             SbxINTEGER,       _CPROP,    RTLNAME(TYP_DDEFLD),0          },
560 { "TYP_DOCINFOFLD",         SbxINTEGER,       _CPROP,    RTLNAME(TYP_DOCINFOFLD),0      },
561 { "TYP_DOCSTATFLD",         SbxINTEGER,       _CPROP,    RTLNAME(TYP_DOCSTATFLD),0      },
562 { "TYP_EXTUSERFLD",         SbxINTEGER,       _CPROP,    RTLNAME(TYP_EXTUSERFLD),0      },
563 { "TYP_FILENAMEFLD",        SbxINTEGER,       _CPROP,    RTLNAME(TYP_FILENAMEFLD),0     },
564 { "TYP_FIXDATEFLD",         SbxINTEGER,       _CPROP,    RTLNAME(TYP_FIXDATEFLD),0      },
565 { "TYP_FIXTIMEFLD",         SbxINTEGER,       _CPROP,    RTLNAME(TYP_FIXTIMEFLD),0      },
566 { "TYP_FORMELFLD",          SbxINTEGER,       _CPROP,    RTLNAME(TYP_FORMELFLD),0       },
567 { "TYP_GETFLD",             SbxINTEGER,       _CPROP,    RTLNAME(TYP_GETFLD),0          },
568 { "TYP_GETREFFLD",          SbxINTEGER,       _CPROP,    RTLNAME(TYP_GETREFFLD),0       },
569 { "TYP_GETREFPAGEFLD",      SbxINTEGER,       _CPROP,    RTLNAME(TYP_GETREFPAGEFLD),0   },
570 { "TYP_HIDDENPARAFLD",      SbxINTEGER,       _CPROP,    RTLNAME(TYP_HIDDENPARAFLD),0   },
571 { "TYP_HIDDENTXTFLD",       SbxINTEGER,       _CPROP,    RTLNAME(TYP_HIDDENTXTFLD),0    },
572 { "TYP_INPUTFLD",           SbxINTEGER,       _CPROP,    RTLNAME(TYP_INPUTFLD),0        },
573 { "TYP_INTERNETFLD",        SbxINTEGER,       _CPROP,    RTLNAME(TYP_INTERNETFLD),0     },
574 { "TYP_JUMPEDITFLD",        SbxINTEGER,       _CPROP,    RTLNAME(TYP_JUMPEDITFLD),0     },
575 { "TYP_MACROFLD",           SbxINTEGER,       _CPROP,    RTLNAME(TYP_MACROFLD),0        },
576 { "TYP_NEXTPAGEFLD",        SbxINTEGER,       _CPROP,    RTLNAME(TYP_NEXTPAGEFLD),0     },
577 { "TYP_PAGENUMBERFLD",      SbxINTEGER,       _CPROP,    RTLNAME(TYP_PAGENUMBERFLD),0   },
578 { "TYP_POSTITFLD",          SbxINTEGER,       _CPROP,    RTLNAME(TYP_POSTITFLD),0       },
579 { "TYP_PREVPAGEFLD",        SbxINTEGER,       _CPROP,    RTLNAME(TYP_PREVPAGEFLD),0     },
580 { "TYP_SEQFLD",             SbxINTEGER,       _CPROP,    RTLNAME(TYP_SEQFLD),0          },
581 { "TYP_SETFLD",             SbxINTEGER,       _CPROP,    RTLNAME(TYP_SETFLD),0          },
582 { "TYP_SETINPFLD",          SbxINTEGER,       _CPROP,    RTLNAME(TYP_SETINPFLD),0       },
583 { "TYP_SETREFFLD",          SbxINTEGER,       _CPROP,    RTLNAME(TYP_SETREFFLD),0       },
584 { "TYP_SETREFPAGEFLD",      SbxINTEGER,       _CPROP,    RTLNAME(TYP_SETREFPAGEFLD),0   },
585 { "TYP_TEMPLNAMEFLD",           SbxINTEGER,       _CPROP,    RTLNAME(TYP_TEMPLNAMEFLD),0},
586 { "TYP_TIMEFLD",        SbxINTEGER,       _CPROP,    RTLNAME(TYP_TIMEFLD),0             },
587 { "TYP_USERFLD",        SbxINTEGER,       _CPROP,    RTLNAME(TYP_USERFLD),0             },
588 { "TYP_USRINPFLD",          SbxINTEGER,       _CPROP,    RTLNAME(TYP_USRINPFLD),0       },
589 
590 { "TypeLen",        SbxINTEGER,    1 | _FUNCTION, RTLNAME(TypeLen),0        },
591   { "Var",          SbxVARIANT, 0,NULL,0 },
592 { "TypeName",       SbxSTRING,    1 | _FUNCTION, RTLNAME(TypeName),0        },
593   { "Var",          SbxVARIANT, 0,NULL,0 },
594 
595 { "UBound",         SbxLONG,      1 | _FUNCTION, RTLNAME(UBound),0          },
596   { "Var",          SbxVARIANT, 0,NULL,0 },
597 { "UCase",          SbxSTRING,    1 | _FUNCTION, RTLNAME(UCase),0           },
598   { "String",       SbxSTRING, 0,NULL,0 },
599 { "Unload",         SbxNULL,      1 | _FUNCTION, RTLNAME(Unload),0          },
600   { "Dialog",       SbxOBJECT, 0,NULL,0 },
601 
602 { "Val",            SbxDOUBLE,    1 | _FUNCTION, RTLNAME(Val),0             },
603   { "String",       SbxSTRING, 0,NULL,0 },
604 { "VarType",        SbxINTEGER,   1 | _FUNCTION, RTLNAME(VarType),0         },
605   { "Var",          SbxVARIANT, 0,NULL,0 },
606 { "V_EMPTY",        SbxINTEGER,       _CPROP,    RTLNAME(V_EMPTY),0         },
607 { "V_NULL",         SbxINTEGER,       _CPROP,    RTLNAME(V_NULL),0          },
608 { "V_INTEGER",      SbxINTEGER,       _CPROP,    RTLNAME(V_INTEGER),0       },
609 { "V_LONG",         SbxINTEGER,       _CPROP,    RTLNAME(V_LONG),0          },
610 { "V_SINGLE",       SbxINTEGER,       _CPROP,    RTLNAME(V_SINGLE),0        },
611 { "V_DOUBLE",       SbxINTEGER,       _CPROP,    RTLNAME(V_DOUBLE),0        },
612 { "V_CURRENCY",     SbxINTEGER,       _CPROP,    RTLNAME(V_CURRENCY),0      },
613 { "V_DATE",         SbxINTEGER,       _CPROP,    RTLNAME(V_DATE),0          },
614 { "V_STRING",       SbxINTEGER,       _CPROP,    RTLNAME(V_STRING),0        },
615 
616 { "Wait",           SbxNULL,      1 | _FUNCTION, RTLNAME(Wait),0            },
617   { "Milliseconds", SbxLONG, 0,NULL,0 },
618 //#i64882#
619 { "WaitUntil",          SbxNULL,      1 | _FUNCTION, RTLNAME(WaitUntil),0      },
620   { "Date", SbxDOUBLE, 0,NULL,0 },
621 { "Weekday",        SbxINTEGER,   2 | _FUNCTION, RTLNAME(Weekday),0         },
622   { "Date",         SbxDATE, 0,NULL,0 },
623   { "Firstdayofweek", SbxINTEGER, _OPT, NULL,0 },
624 { "WeekdayName",    SbxSTRING,    3 | _FUNCTION | _COMPTMASK, RTLNAME(WeekdayName),0 },
625   { "Weekday",      SbxINTEGER, 0,NULL,0 },
626   { "Abbreviate",   SbxBOOL,      _OPT, NULL,0 },
627   { "Firstdayofweek", SbxINTEGER, _OPT, NULL,0 },
628 { "Year",           SbxINTEGER,   1 | _FUNCTION, RTLNAME(Year),0            },
629   { "Date",         SbxDATE, 0,NULL,0 },
630 
631 { NULL,             SbxNULL,     -1,NULL,0 }};  // Tabellenende
632 
633 SbiStdObject::SbiStdObject( const String& r, StarBASIC* pb ) : SbxObject( r )
634 {
635     // Muessen wir die Hashcodes initialisieren?
636     Methods* p = aMethods;
637     if( !p->nHash )
638       while( p->nArgs != -1 )
639     {
640         String aName_ = String::CreateFromAscii( p->pName );
641         p->nHash = SbxVariable::MakeHashCode( aName_ );
642         p += ( p->nArgs & _ARGSMASK ) + 1;
643     }
644 
645     // #i92642: Remove default properties
646     Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_DONTCARE );
647     Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Parent") ), SbxCLASS_DONTCARE );
648 
649     SetParent( pb );
650 
651     pStdFactory = new SbStdFactory;
652     SbxBase::AddFactory( pStdFactory );
653 
654     Insert( new SbStdClipboard );
655 }
656 
657 SbiStdObject::~SbiStdObject()
658 {
659     SbxBase::RemoveFactory( pStdFactory );
660     delete pStdFactory;
661 }
662 
663 // Suche nach einem Element:
664 // Hier wird linear durch die Methodentabelle gegangen, bis eine
665 // passende Methode gefunden wurde. Auf Grund der Bits im nArgs-Feld
666 // wird dann die passende Instanz eines SbxObjElement generiert.
667 // Wenn die Methode/Property nicht gefunden wurde, nur NULL ohne
668 // Fehlercode zurueckliefern, da so auch eine ganze Chain von
669 // Objekten nach der Methode/Property befragt werden kann.
670 
671 SbxVariable* SbiStdObject::Find( const String& rName, SbxClassType t )
672 {
673     // Bereits eingetragen?
674     SbxVariable* pVar = SbxObject::Find( rName, t );
675     if( !pVar )
676     {
677         // sonst suchen
678         sal_uInt16 nHash_ = SbxVariable::MakeHashCode( rName );
679         Methods* p = aMethods;
680         sal_Bool bFound = sal_False;
681         short nIndex = 0;
682         sal_uInt16 nSrchMask = _TYPEMASK;
683         switch( t )
684         {
685             case SbxCLASS_METHOD:   nSrchMask = _METHOD; break;
686             case SbxCLASS_PROPERTY: nSrchMask = _PROPERTY; break;
687             case SbxCLASS_OBJECT:   nSrchMask = _OBJECT; break;
688             default: break;
689         }
690         while( p->nArgs != -1 )
691         {
692             if( ( p->nArgs & nSrchMask )
693              && ( p->nHash == nHash_ )
694              && ( rName.EqualsIgnoreCaseAscii( p->pName ) ) )
695             {
696                 bFound = sal_True;
697                 if( p->nArgs & _COMPTMASK )
698                 {
699                     SbiInstance* pInst = pINST;
700                     if( !pInst || !pInst->IsCompatibility() )
701                         bFound = sal_False;
702                 }
703                 break;
704             }
705             nIndex += ( p->nArgs & _ARGSMASK ) + 1;
706             p = aMethods + nIndex;
707         }
708 
709         if( bFound )
710         {
711             // Args-Felder isolieren:
712             short nAccess = ( p->nArgs & _RWMASK ) >> 8;
713             short nType   = ( p->nArgs & _TYPEMASK );
714             if( p->nArgs & _CONST )
715                 nAccess |= SBX_CONST;
716             String aName_ = String::CreateFromAscii( p->pName );
717             SbxClassType eCT = SbxCLASS_OBJECT;
718             if( nType & _PROPERTY )
719                 eCT = SbxCLASS_PROPERTY;
720             else if( nType & _METHOD )
721                 eCT = SbxCLASS_METHOD;
722             pVar = Make( aName_, eCT, p->eType );
723             pVar->SetUserData( nIndex + 1 );
724             pVar->SetFlags( nAccess );
725         }
726     }
727     return pVar;
728 }
729 
730 // SetModified mu� bei der RTL abgklemmt werden
731 void SbiStdObject::SetModified( sal_Bool )
732 {
733 }
734 
735 // Aufruf einer Property oder Methode.
736 
737 void SbiStdObject::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
738                              const SfxHint& rHint, const TypeId& rHintType )
739 
740 {
741     const SbxHint* pHint = PTR_CAST(SbxHint,&rHint);
742     if( pHint )
743     {
744         SbxVariable* pVar = pHint->GetVar();
745         SbxArray* pPar_ = pVar->GetParameters();
746         sal_uIntPtr t = pHint->GetId();
747         sal_uInt16 nCallId = (sal_uInt16) pVar->GetUserData();
748         if( nCallId )
749         {
750             if( t == SBX_HINT_INFOWANTED )
751                 pVar->SetInfo( GetInfo( (short) pVar->GetUserData() ) );
752             else
753             {
754                 sal_Bool bWrite = sal_False;
755                 if( t == SBX_HINT_DATACHANGED )
756                     bWrite = sal_True;
757                 if( t == SBX_HINT_DATAWANTED || bWrite )
758                 {
759                     RtlCall p = (RtlCall) aMethods[ nCallId-1 ].pFunc;
760                     SbxArrayRef rPar( pPar_ );
761                     if( !pPar_ )
762                     {
763                         rPar = pPar_ = new SbxArray;
764                         pPar_->Put( pVar, 0 );
765                     }
766                     p( (StarBASIC*) GetParent(), *pPar_, bWrite );
767                     return;
768                 }
769             }
770         }
771         SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
772     }
773 }
774 
775 // Zusammenbau der Infostruktur fuer einzelne Elemente
776 // Falls nIdx = 0, nix erzeugen (sind Std-Props!)
777 
778 SbxInfo* SbiStdObject::GetInfo( short nIdx )
779 {
780     if( !nIdx )
781         return NULL;
782     Methods* p = &aMethods[ --nIdx ];
783     // Wenn mal eine Hilfedatei zur Verfuegung steht:
784     // SbxInfo* pInfo_ = new SbxInfo( Hilfedateiname, p->nHelpId );
785     SbxInfo* pInfo_ = new SbxInfo;
786     short nPar = p->nArgs & _ARGSMASK;
787     for( short i = 0; i < nPar; i++ )
788     {
789         p++;
790         String aName_ = String::CreateFromAscii( p->pName );
791         sal_uInt16 nFlags_ = ( p->nArgs >> 8 ) & 0x03;
792         if( p->nArgs & _OPT )
793             nFlags_ |= SBX_OPTIONAL;
794         pInfo_->AddParam( aName_, p->eType, nFlags_ );
795     }
796     return pInfo_;
797 }
798 
799