[Runtime] Updated XML comments

[Runtime] Updated XML comments

//
// Copyright (c) XSharp B.V.  All Rights Reserved.
// Licensed under the Apache License, Version 2.0.
// See License.txt in the project root for license information.
//
USING XSharp.RDD.Enums
USING XSharp.RDD.Support
/// Definition for the interface that each RDD must implement
/// <seealso cref="T:XSharp.RDD.Workarea"/>
INTERFACE XSharp.RDD.IRdd
	// Navigation
	/// Evaluate a code block for each row.
	/// <param name="info">object containing the information about which rows to visit.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD DbEval(info AS DbEvalInfo)		AS LOGIC

	/// Position the cursor to the first logical row.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoTop()							AS LOGIC

	/// Position the cursor to the last logical row.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoBottom()						AS LOGIC

	/// Position the cursor to a specific, physical row.
	/// <param name="nRec">The ONE based row number of the new cursor position.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoTo(nRec AS LONG)				AS LOGIC

	/// Position the cursor to a specific, physical identity.
	/// <param name="oRec">The ONE based row ID of the new cursor position.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoToId(oRec AS OBJECT)			AS LOGIC

	/// Position the cursor relative to its current position.
	/// <param name="nToSkip">The number of rows to skip.
    /// If this argument is positive, the cursor moves forward (toward the end-of-file).  If it is negative, the cursor moves backward (toward the beginning-of-file).</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Skip(nToSkip AS INT)				AS LOGIC

	/// Position the cursor, respecting scope and filter conditions.
	/// <param name="nToSkip">The number of rows to skip.  If this argument is positive,
    /// the cursor moves forward (toward the end-of-file).  If it is negative, the cursor moves backward (toward the beginning-of-file).</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SkipFilter(nToSkip AS INT)		AS LOGIC

	/// Position the cursor regardless of scope and filter conditions.
	/// <param name="nToSkip">The number of rows to skip.  If this argument is positive, the cursor moves forward (toward the end-of-file).  If it is negative, the cursor moves backward (toward the beginning-of-file).</param>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SkipRaw(nToSkip AS INT)			AS LOGIC

	/// Position the cursor relative to its current position within the current scope.
	/// <param name="nToSkip">The number of rows to skip.  If this argument is positive, the cursor moves forward (toward the end-of-file).  If it is negative, the cursor moves backward (toward the beginning-of-file).</param>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SkipScope(nToSkip AS INT)		AS LOGIC

	// Append and Delete
	/// Append a blank row and position the cursor to the new row.
	/// <param name="lReleaseLock">A flag that is TRUE if you want to clear all pending row locks before appending the new row and FALSE if you want to add the new row to the end of the current lock list.</param>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Append(lReleaseLock AS LOGIC)	AS LOGIC

	/// Mark the row at the current cursor position for deletion.
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Delete()							AS LOGIC

	/// Retrieve the RDD's record buffer as array of bytes.
    /// <returns>Record buffer of the RDD. This is the original buffer, so changing this buffer may cause corruption !</returns>
	METHOD GetRec()							AS BYTE[]

	/// Physically remove rows marked for deletion.
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Pack()							AS LOGIC

	/// Replace the row at the current cursor position with the contents of a byte array.
	/// <param name="aRec">The buffer containing the information that you want to write.</param>
	/// <note>The buffer should have at least the # of bytes that matches the current record size.</note>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD PutRec(aRec AS BYTE[])			AS LOGIC

	/// Remove the deletion marker from the row at the current cursor position.
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD Recall()							AS LOGIC

	/// Physically remove all rows from a table.
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD Zap()							AS LOGIC

	// Open and Close
	/// Close a table.
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Close() 							AS LOGIC

	/// Create a table.
	/// <param name="info">object describing the file to create.</param>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Create(info AS DbOpenInfo)		AS LOGIC

	/// Open a table.
	/// <param name="info">object describing the file to open.</param>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Open(info AS DbOpenInfo)			AS LOGIC

	// Filtering and Scoping
	/// Clear the active filter condition.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ClearFilter() 					AS LOGIC

	/// Clear the active locate condition.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ClearScope() 					AS LOGIC

	/// Goto the next record based on the corrent locate condition.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Continue()						AS LOGIC

	//METHOD CountScope(pOpt as PTR)		AS LONG
	/// Retrieve the active locate condition.
    /// <returns>The current scope information for the RDD.</returns>
	METHOD GetScope()						AS DbScopeInfo

	/// Set the filter condition.
    /// <param name="info">object containing the filter information.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SetFilter(info AS DbFilterInfo)	AS LOGIC

	/// Set the locate condition.
	/// <param name="info">object containing the scope information.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SetScope(info AS DbScopeInfo)	AS LOGIC

	// Fields
	/// Set the Number of Fields the AddField Method will add.
    /// <param name="fieldCount">Number of fields that will be added.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SetFieldExtent(fieldCount AS LONG ) AS LOGIC

	/// Add a column.
    /// <param name="info">RddFieldInfo object.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD AddField(info AS RddFieldInfo)	AS LOGIC

	/// Add columns defined in an array.
    /// <param name="aFields">Array of RddFieldInfo objects.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD CreateFields(aFields AS RddFieldInfo[]) AS LOGIC

	/// Return the ONE based field index for a field name.
    /// <param name="fieldName">The name of the field in the database file structure. When the name is not found it will also check for a field alias with this name.</param>
    /// <returns>The ONE based position of the field in the database file structure.</returns>
	METHOD FieldIndex(fieldName AS STRING)	AS LONG

	/// Retrieve and optionally change information about a column.
    /// <param name="nFldPos">The ONE based position of the field in the database file structure.</param>
    /// <param name="nOrdinal">Specifies the type of information.</param>
    /// <param name="oValue">If specified (not null), then this parameter is used to change the value of a setting.</param>
    /// <returns>The current value for the property indicated with <nOrdinal></returns>
	METHOD FieldInfo(nFldPos AS LONG, nOrdinal AS LONG, oValue AS OBJECT) AS OBJECT

	/// Retrieve a column name based on its ONE based column number.
	/// <param name="nFldPos">The ONE based position of the column whose name you want to obtain.</param>
    /// <returns>The name of the column.</returns>
	METHOD FieldName(nFldPos AS LONG)		AS STRING

	/// Retrieve the field information for a column based on its ONE based column number.
    /// <param name="nFldPos">The ONE based position of the column whose info you want to obtain.</param>
    /// <returns>The Field information for the specified field.</returns>
    METHOD GetField(nFldPos AS LONG) AS RddFieldInfo
	// Read & Write

    /// Get a value for the specified column.
	/// <param name="nFldPos">The ONE based position of the column whose value you want to obtain.</param>
    /// <returns>The value of the specified field.</returns>
	METHOD GetValue(nFldPos AS LONG)		AS OBJECT

    /// Get the value for a column and write (export) it to an external file.
	/// <param name="nFldPos">ONE based position for which the value should be retrieved.</param>
	/// <param name="fileName">Name of the file that needs to be written to.</param>
    /// <returns>TRUE when the operation succeeded. Otherwise FALSE to indicate a failure.</returns>
	METHOD GetValueFile(nFldPos AS LONG, fileName AS STRING) AS LOGIC

    /// Get the length of the for the specified column.
	/// <param name="nFldPos">ONE based position for which the length should be retrieved.</param>
    /// <returns>The length of the value of the specified field.</returns>
	METHOD GetValueLength(nFldPos AS LONG)	AS LONG

    /// Flush the changes to the table, its indexes and memo file.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD Flush() 							AS LOGIC

    /// Write the contents of a work area's memory to the data store (usually a disk).
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoCold()							AS LOGIC

	/// Mark a data buffer as hot, indicating that it needs to be written to the data store.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoHot()							AS LOGIC

	/// Write a value for a specified column
	/// <param name="nFldPos">ONE based position for which the value should be written.</param>
	/// <param name="oValue">New value that needs to written to the table this column.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD PutValue(nFldPos AS LONG, oValue AS OBJECT) AS LOGIC

	/// Read (Import) a value from an external file and write it to the specified column.
	/// <param name="nFldPos">ONE based position for which the value should be written.</param>
	/// <param name="fileName">Name of the file that needs to be read from.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD PutValueFile(nFldPos AS LONG, fileName AS STRING) AS LOGIC

	/// Discard all changes to the current record and reread the buffer from disk. When the current buffer is in Append mode then the server will move to the bottom of the file.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Refresh() 							AS LOGIC
	// Locking

	/// Add a newly appended row to the list of locked rows.
	/// <param name="uiMode">An enum value specifying the kind of lock to acquire.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD AppendLock(uiMode AS DbLockMode) AS LOGIC

	/// Lock or unlock the header of a database file.
	/// <param name="uiMode">An enum value specifying the kind of lock to acquire.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD HeaderLock(uiMode AS DbLockMode) AS LOGIC

	/// Perform a lock.
	/// <param name="uiMode">An object specifying the kind of lock to acquire.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Lock(uiMode REF DbLockInfo)		AS LOGIC

	/// Release locks.
	/// <param name="oRecId">The row number to unlock.  This argument is provided for drivers that support multiple row locks.  By convention, a value of zero indicates that all rows should be unlocked.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD UnLock(oRecId AS OBJECT)			AS LOGIC

	// Memo File Access
	/// Close the memo file
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD CloseMemFile() 					AS LOGIC

	/// Create the memo file
	/// <param name="info">object describing the file to create.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD CreateMemFile(info AS DbOpenInfo) AS LOGIC

	/// Open the memo file
	/// <param name="info">object describing the file to open.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OpenMemFile(info AS DbOpenInfo) 		AS LOGIC

	// Indexes

	/// Set the condition for the next Index Creation
    /// <param name="info">An object containing information for the order condition.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD OrderCondition(info AS DbOrderCondInfo) AS LOGIC

	/// Create a new index or tag.
	/// <param name="info">An object containing information for order creation.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD OrderCreate(info AS DbOrderCreateInfo) AS LOGIC

	/// Delete an index or tag.
	/// <param name="info">An object containing information about the order to remove.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OrderDestroy(info AS DbOrderInfo) AS LOGIC

	/// Retrieve information about an index.
	/// <param name="info">An object containing information about the order to retrieve the info for.</param>
	/// <param name="nOrdinal">Specifies the type of information to retrieve.</param>
    /// <returns>The requested value for the specified index.</returns>
	METHOD OrderInfo(nOrdinal AS DWORD, info AS DbOrderInfo) AS OBJECT

	/// Open an index file and add to the list of open indexes for the current Workarea.
	/// <param name="info">An object containing information about the orderlist (file)  to add.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OrderListAdd(info AS DbOrderInfo) AS LOGIC

	/// Close an index file and remove it from the list of open indexes for the current Workarea.
	/// <param name="info"></param>
	/// <param name="info">An object containing information about the orderlist (file) to delete.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OrderListDelete(info AS DbOrderInfo) AS LOGIC

	/// Set focus to another index in the list open indexes for the current Workarea.
	/// <param name="info">An object containing information about the order to select.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OrderListFocus(info AS DbOrderInfo) AS LOGIC

	/// Rebuild all indexes for the current Workarea.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OrderListRebuild() AS LOGIC

	/// Perform a seek operation on the current selected index for the current Workarea.
	/// <param name="info">An object containing containing the necessary seek information.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    /// <remarks>The result of the actial seek operation is stored in the Found property of the RDD and the EOF property.</remarks>
	METHOD Seek(info AS DbSeekInfo) AS LOGIC

	// Relations

	/// Report the initialization of a relation.
	/// <param name="info">An object containing information about the relation</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ChildEnd(info AS DbRelInfo)				AS LOGIC

	/// Report the initialization of a relation.
	/// <param name="info">An object containing information about the relation</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ChildStart(info AS DbRelInfo)			AS LOGIC

	/// Post a pending relational movement, indicating that the specified child work area has been affected by a parental movement.
	/// <param name="info">An object containing information about the relation</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ChildSync(info AS DbRelInfo)				AS LOGIC

	/// Clear relations.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ClearRel()								AS LOGIC

	/// Force all pending relational seeks to be performed.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ForceRel()								AS LOGIC

	/// Retrieve the logical number of a related work area.
	/// <param name="nRelNum">The ONE based relation number for which to obtain the logical number.</param>
    /// <returns>The area number of the relation.</returns>
	METHOD RelArea(nRelNum AS DWORD)					AS DWORD

	/// Evaluate a code block against the relation in a work area.
	/// <param name="info">An object containing information about the relation</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD RelEval(info AS DbRelInfo)				AS LOGIC

	/// Retrieve the key expression of a relation.
	/// <param name="nRelNum">The ONE based relation number for which to obtain the key expression. </param>
    /// <returns>The key expression of the relation.</returns>
	METHOD RelText(nRelNum AS DWORD)					AS STRING

	/// Set a relation.
	/// <param name="info">An object containing information about the relation</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SetRel(info AS DbRelInfo)				AS LOGIC

	/// Force relational movement in child work areas to synchronize them with the parent work area.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SyncChildren()							AS LOGIC

	// Bulk Operations
	/// Physically reorder a table.
	/// <param name="info">An object containing information about now to sort the table.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Sort(info AS DbSortInfo)					AS LOGIC

	/// Copy one or more rows from one work area to another.
	/// <param name="info">An object containing information about the transfer of data.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD Trans(info AS DbTransInfo) 				AS LOGIC

	/// Copy a single row from one work area to another.
	/// <param name="info">An object containing information about the transfer of data.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD TransRec(info AS DbTransInfo) 			AS LOGIC

	// Blob
	/// Retrieve information about a memo column.
    /// <param name="nOrdinal">Specifies the type of information.</param>
	METHOD BlobInfo(uiPos AS DWORD, nOrdinal AS DWORD) AS OBJECT

	// Codeblock Support
	/// Compile an expression.
	/// <param name="sBlock">The expression to compile.</param>

	METHOD Compile(sBlock AS STRING)				AS ICodeblock
	/// Evaluate a code block.
	/// <param name="sBlock">The code block to evaluate.</param>
	METHOD EvalBlock(oBlock AS ICodeblock)			AS OBJECT

	/// Retrieve and optionally change information about a work area.
    /// <param name="nOrdinal">Specifies the type of information.</param>
    /// <param name="oValue">If specified (not null), then this parameter is used to change the value of a setting.</param>

	METHOD Info(nOrdinal AS LONG, oValue AS OBJECT) AS OBJECT

	/// Retrieve and optionally change information about a row.
    /// <param name="nOrdinal">Specifies the type of information.</param>
    /// <param name="oRecid">If specified (not null), then this parameter is used to specify for which object to retrieve the info.</param>
    /// <param name="oValue">If specified (not null), then this parameter is used to change the value of a setting.</param>
	METHOD RecInfo( nOrdinal AS LONG, oRecID AS OBJECT, oNewValue AS OBJECT) AS OBJECT

	// Properties
	/// Retrieve the alias name.
	PROPERTY Alias 		AS STRING	GET SET
	/// Retrieve the Workarea number.
	PROPERTY Area		AS DWORD	GET SET
	/// Is the table at the logical beginning-of-file.
	PROPERTY BoF 		AS LOGIC	GET
	/// Is the current row deleted?
	PROPERTY Deleted 	AS LOGIC	GET
	/// Driver (RDD) name of the object.
    PROPERTY Driver     AS STRING	GET
	/// Is the table at the logical end-of-file.
    PROPERTY EoF 		AS LOGIC	GET
	/// Is the Workarea opened Exclusively
	PROPERTY Exclusive	AS LOGIC	GET
	/// The # of fields in the current Workarea.
	PROPERTY FieldCount AS LONG		GET
	/// The filter condition as a string.
	PROPERTY FilterText	AS STRING	GET
	/// The outcome of the last search operation.
	PROPERTY Found		AS LOGIC	GET SET
	/// The number of rows.
	PROPERTY RecCount	AS LONG		GET
	/// The row identifier at the current cursor position.
	PROPERTY RecId		AS OBJECT	GET		// Does not have to be numeric.
	/// The physical row identifier at the current cursor position.
	PROPERTY RecNo		AS LONG		GET
	/// Is the current Workarea opened Shared?
	PROPERTY Shared		AS LOGIC	GET

END INTERFACE

//
// Copyright (c) XSharp B.V.  All Rights Reserved.
// Licensed under the Apache License, Version 2.0.
// See License.txt in the project root for license information.
//
USING XSharp.RDD.Enums
USING XSharp.RDD.Support
/// Definition for the interface that each RDD must implement
/// <seealso cref="T:XSharp.RDD.Workarea"/>
INTERFACE XSharp.RDD.IRdd
	// Navigation
	/// Evaluate a code block for each row.
	/// <param name="info">object containing the information about which rows to visit.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD DbEval(info AS DbEvalInfo)		AS LOGIC

	/// Position the cursor to the first logical row.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoTop()							AS LOGIC

	/// Position the cursor to the last logical row.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoBottom()						AS LOGIC

	/// Position the cursor to a specific, physical row.
	/// <param name="nRec">The row number of the new cursor position.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoTo(nRec AS LONG)				AS LOGIC

	/// Position the cursor to a specific, physical identity.
	/// <param name="oRec">The row ID of the new cursor position.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoToId(oRec AS OBJECT)			AS LOGIC

	/// Position the cursor relative to its current position.
	/// <param name="nToSkip">The number of rows to skip.
    /// If this argument is positive, the cursor moves forward (toward the end-of-file).  If it is negative, the cursor moves backward (toward the beginning-of-file).</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Skip(nToSkip AS INT)				AS LOGIC

	/// Position the cursor, respecting scope and filter conditions.
	/// <param name="nToSkip">The number of rows to skip.  If this argument is positive,
    /// the cursor moves forward (toward the end-of-file).  If it is negative, the cursor moves backward (toward the beginning-of-file).</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SkipFilter(nToSkip AS INT)		AS LOGIC

	/// Position the cursor regardless of scope and filter conditions.
	/// <param name="nToSkip">The number of rows to skip.  If this argument is positive, the cursor moves forward (toward the end-of-file).  If it is negative, the cursor moves backward (toward the beginning-of-file).</param>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SkipRaw(nToSkip AS INT)			AS LOGIC

	/// Position the cursor relative to its current position within the current scope.
	/// <param name="nToSkip">The number of rows to skip.  If this argument is positive, the cursor moves forward (toward the end-of-file).  If it is negative, the cursor moves backward (toward the beginning-of-file).</param>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SkipScope(nToSkip AS INT)		AS LOGIC

	// Append and Delete
	/// Append a blank row and position the cursor to the new row.
	/// <param name="lReleaseLock">A flag that is TRUE if you want to clear all pending row locks before appending the new row and FALSE if you want to add the new row to the end of the current lock list.</param>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Append(lReleaseLock AS LOGIC)	AS LOGIC

	/// Mark the row at the current cursor position for deletion.
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Delete()							AS LOGIC

	/// Retrieve the RDD's record buffer as array of bytes.
    /// <returns>Record buffer of the RDD. This is the original buffer, so changing this buffer may cause corruption !</returns>
	METHOD GetRec()							AS BYTE[]

	/// Physically remove rows marked for deletion.
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Pack()							AS LOGIC

	/// Replace the row at the current cursor position with the contents of a byte array.
	/// <param name="aRec">The buffer containing the information that you want to write.</param>
	/// <note>The buffer should have at least the # of bytes that matches the current record size.</note>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD PutRec(aRec AS BYTE[])			AS LOGIC

	/// Remove the deletion marker from the row at the current cursor position.
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD Recall()							AS LOGIC

	/// Physically remove all rows from a table.
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD Zap()							AS LOGIC

	// Open and Close
	/// Close a table.
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Close() 							AS LOGIC

	/// Create a table.
	/// <param name="info">object describing the file to create.</param>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Create(info AS DbOpenInfo)		AS LOGIC

	/// Open a table.
	/// <param name="info">object describing the file to open.</param>
	/// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Open(info AS DbOpenInfo)			AS LOGIC

	// Filtering and Scoping
	/// Clear the active filter condition.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ClearFilter() 					AS LOGIC

	/// Clear the active locate condition.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ClearScope() 					AS LOGIC

	/// Goto the next record based on the corrent locate condition.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Continue()						AS LOGIC

	//METHOD CountScope(pOpt as PTR)		AS LONG
	/// Retrieve the active locate condition.
    /// <returns>The current scope information for the RDD.</returns>
	METHOD GetScope()						AS DbScopeInfo

	/// Set the filter condition.
    /// <param name="info">object containing the filter information.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SetFilter(info AS DbFilterInfo)	AS LOGIC

	/// Set the locate condition.
	/// <param name="info">object containing the scope information.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SetScope(info AS DbScopeInfo)	AS LOGIC

	// Fields
	/// Set the Number of Fields the AddField Method will add.
    /// <param name="fieldCount">Number of fields that will be added.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SetFieldExtent(fieldCount AS LONG ) AS LOGIC

	/// Add a column.
    /// <param name="info">RddFieldInfo object.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD AddField(info AS RddFieldInfo)	AS LOGIC

	/// Add columns defined in an array.
    /// <param name="aFields">Array of RddFieldInfo objects.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD CreateFields(aFields AS RddFieldInfo[]) AS LOGIC

	/// Return the ONE based field index for a field name.
    /// <param name="fieldName">The name of the field in the database file structure. When the name is not found it will also check for a field alias with this name.</param>
    /// <returns>The ONE based position of the field in the database file structure.</returns>
	METHOD FieldIndex(fieldName AS STRING)	AS LONG

	/// Retrieve and optionally change information about a column.
    /// <param name="nFldPos">The ONE based position of the field in the database file structure.</param>
    /// <param name="nOrdinal">Specifies the type of information.</param>
    /// <param name="oValue">If specified (not null), then this parameter is used to change the value of a setting.</param>
    /// <returns>The current value for the property indicated with <nOrdinal></returns>
	METHOD FieldInfo(nFldPos AS LONG, nOrdinal AS LONG, oValue AS OBJECT) AS OBJECT

	/// Retrieve a column name based on its ONE based column number.
	/// <param name="nFldPos">The ONE based position of the column whose name you want to obtain.</param>
    /// <returns>The name of the column.</returns>
	METHOD FieldName(nFldPos AS LONG)		AS STRING

	/// Retrieve the field information for a column based on its ONE based column number.
    /// <param name="nFldPos">The ONE based position of the column whose info you want to obtain.</param>
    /// <returns>The Field information for the specified field.</returns>
    METHOD GetField(nFldPos AS LONG) AS RddFieldInfo
	// Read & Write

    /// Get a value for the specified column.
	/// <param name="nFldPos">The ONE based position of the column whose value you want to obtain.</param>
    /// <returns>The value of the specified field.</returns>
	METHOD GetValue(nFldPos AS LONG)		AS OBJECT

    /// Get the value for a column and write (export) it to an external file.
	/// <param name="nFldPos">ONE based position for which the value should be retrieved.</param>
	/// <param name="fileName">Name of the file that needs to be written to.</param>
    /// <returns>TRUE when the operation succeeded. Otherwise FALSE to indicate a failure.</returns>
	METHOD GetValueFile(nFldPos AS LONG, fileName AS STRING) AS LOGIC

    /// Get the length of the for the specified column.
	/// <param name="nFldPos">ONE based position for which the length should be retrieved.</param>
    /// <returns>The length of the value of the specified field.</returns>
	METHOD GetValueLength(nFldPos AS LONG)	AS LONG

    /// Flush the changes to the table, its indexes and memo file.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD Flush() 							AS LOGIC

    /// Write the contents of a work area's memory to the data store (usually a disk).
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoCold()							AS LOGIC

	/// Mark a data buffer as hot, indicating that it needs to be written to the data store.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD GoHot()							AS LOGIC

	/// Write a value for a specified column
	/// <param name="nFldPos">ONE based position for which the value should be written.</param>
	/// <param name="oValue">New value that needs to written to the table this column.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD PutValue(nFldPos AS LONG, oValue AS OBJECT) AS LOGIC

	/// Read (Import) a value from an external file and write it to the specified column.
	/// <param name="nFldPos">ONE based position for which the value should be written.</param>
	/// <param name="fileName">Name of the file that needs to be read from.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD PutValueFile(nFldPos AS LONG, fileName AS STRING) AS LOGIC

	/// Discard all changes to the current record and reread the buffer from disk. When the current buffer is in Append mode then the server will move to the bottom of the file.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Refresh() 							AS LOGIC
	// Locking

	/// Add a newly appended row to the list of locked rows.
	/// <param name="uiMode">An enum value specifying the kind of lock to acquire.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD AppendLock(uiMode AS DbLockMode) AS LOGIC

	/// Lock or unlock the header of a database file.
	/// <param name="uiMode">An enum value specifying the kind of lock to acquire.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD HeaderLock(uiMode AS DbLockMode) AS LOGIC

	/// Perform a lock.
	/// <param name="uiMode">An object specifying the kind of lock to acquire.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Lock(uiMode REF DbLockInfo)		AS LOGIC

	/// Release locks.
	/// <param name="oRecId">The row number to unlock.  This argument is provided for drivers that support multiple row locks.  By convention, a value of zero indicates that all rows should be unlocked.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD UnLock(oRecId AS OBJECT)			AS LOGIC

	// Memo File Access
	/// Close the memo file
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD CloseMemFile() 					AS LOGIC

	/// Create the memo file
	/// <param name="info">object describing the file to create.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD CreateMemFile(info AS DbOpenInfo) AS LOGIC

	/// Open the memo file
	/// <param name="info">object describing the file to open.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OpenMemFile(info AS DbOpenInfo) 		AS LOGIC

	// Indexes

	/// Set the condition for the next Index Creation
    /// <param name="info">An object containing information for the order condition.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD OrderCondition(info AS DbOrderCondInfo) AS LOGIC

	/// Create a new index or tag.
	/// <param name="info">An object containing information for order creation.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD OrderCreate(info AS DbOrderCreateInfo) AS LOGIC

	/// Delete an index or tag.
	/// <param name="info">An object containing information about the order to remove.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OrderDestroy(info AS DbOrderInfo) AS LOGIC

	/// Retrieve information about an index.
	/// <param name="info">An object containing information about the order to retrieve the info for.</param>
	/// <param name="nOrdinal">Specifies the type of information to retrieve.</param>
    /// <returns>The requested value for the specified index.</returns>
	METHOD OrderInfo(nOrdinal AS DWORD, info AS DbOrderInfo) AS OBJECT

	/// Open an index file and add to the list of open indexes for the current Workarea.
	/// <param name="info">An object containing information about the orderlist (file)  to add.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OrderListAdd(info AS DbOrderInfo) AS LOGIC

	/// Close an index file and remove it from the list of open indexes for the current Workarea.
	/// <param name="info"></param>
	/// <param name="info">An object containing information about the orderlist (file) to delete.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OrderListDelete(info AS DbOrderInfo) AS LOGIC

	/// Set focus to another index in the list open indexes for the current Workarea.
	/// <param name="info">An object containing information about the order to select.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OrderListFocus(info AS DbOrderInfo) AS LOGIC

	/// Rebuild all indexes for the current Workarea.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD OrderListRebuild() AS LOGIC

	/// Perform a seek operation on the current selected index for the current Workarea.
	/// <param name="info">An object containing containing the necessary seek information.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    /// <remarks>The result of the actial seek operation is stored in the Found property of the RDD and the EOF property.</remarks>
	METHOD Seek(info AS DbSeekInfo) AS LOGIC

	// Relations

	/// Report the initialization of a relation.
	/// <param name="info">An object containing information about the relation</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ChildEnd(info AS DbRelInfo)				AS LOGIC

	/// Report the initialization of a relation.
	/// <param name="info">An object containing information about the relation</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ChildStart(info AS DbRelInfo)			AS LOGIC

	/// Post a pending relational movement, indicating that the specified child work area has been affected by a parental movement.
	/// <param name="info">An object containing information about the relation</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ChildSync(info AS DbRelInfo)				AS LOGIC

	/// Clear relations.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ClearRel()								AS LOGIC

	/// Force all pending relational seeks to be performed.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD ForceRel()								AS LOGIC

	/// Retrieve the logical number of a related work area.
	/// <param name="nRelNum">The ONE based relation number for which to obtain the logical number.</param>
    /// <returns>The area number of the relation.</returns>
	METHOD RelArea(nRelNum AS DWORD)					AS DWORD

	/// Evaluate a code block against the relation in a work area.
	/// <param name="info">An object containing information about the relation</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD RelEval(info AS DbRelInfo)				AS LOGIC

	/// Retrieve the key expression of a relation.
	/// <param name="nRelNum">The ONE based relation number for which to obtain the key expression. </param>
    /// <returns>The key expression of the relation.</returns>
	METHOD RelText(nRelNum AS DWORD)					AS STRING

	/// Set a relation.
	/// <param name="info">An object containing information about the relation</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SetRel(info AS DbRelInfo)				AS LOGIC

	/// Force relational movement in child work areas to synchronize them with the parent work area.
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD SyncChildren()							AS LOGIC

	// Bulk Operations
	/// Physically reorder a table.
	/// <param name="info">An object containing information about now to sort the table.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
	METHOD Sort(info AS DbSortInfo)					AS LOGIC

	/// Copy one or more rows from one work area to another.
	/// <param name="info">An object containing information about the transfer of data.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD Trans(info AS DbTransInfo) 				AS LOGIC

	/// Copy a single row from one work area to another.
	/// <param name="info">An object containing information about the transfer of data.</param>
    /// <returns><include file="CoreComments.xml" path="Comments/TrueOrFalse/*" /></returns>
    METHOD TransRec(info AS DbTransInfo) 			AS LOGIC

	// Blob
	/// Retrieve information about a memo column.
    /// <param name="nOrdinal">Specifies the type of information.</param>
	METHOD BlobInfo(uiPos AS DWORD, nOrdinal AS DWORD) AS OBJECT

	// Codeblock Support
	/// Compile an expression.
	/// <param name="sBlock">The expression to compile.</param>

	METHOD Compile(sBlock AS STRING)				AS ICodeblock
	/// Evaluate a code block.
	/// <param name="sBlock">The code block to evaluate.</param>
	METHOD EvalBlock(oBlock AS ICodeblock)			AS OBJECT

	/// Retrieve and optionally change information about a work area.
    /// <param name="nOrdinal">Specifies the type of information.</param>
    /// <param name="oValue">If specified (not null), then this parameter is used to change the value of a setting.</param>

	METHOD Info(nOrdinal AS LONG, oValue AS OBJECT) AS OBJECT

	/// Retrieve and optionally change information about a row.
    /// <param name="nOrdinal">Specifies the type of information.</param>
    /// <param name="oRecid">If specified (not null), then this parameter is used to specify for which object to retrieve the info.</param>
    /// <param name="oValue">If specified (not null), then this parameter is used to change the value of a setting.</param>
	METHOD RecInfo( nOrdinal AS LONG, oRecID AS OBJECT, oNewValue AS OBJECT) AS OBJECT

	// Properties
	/// Retrieve the alias name.
	PROPERTY Alias 		AS STRING	GET SET
	/// Retrieve the Workarea number.
	PROPERTY Area		AS DWORD	GET SET
	/// Is the table at the logical beginning-of-file.
	PROPERTY BoF 		AS LOGIC	GET
	/// Is the current row deleted?
	PROPERTY Deleted 	AS LOGIC	GET
	/// Driver (RDD) name of the object.
    PROPERTY Driver     AS STRING	GET
	/// Is the table at the logical end-of-file.
    PROPERTY EoF 		AS LOGIC	GET
	/// Is the Workarea opened Exclusively
	PROPERTY Exclusive	AS LOGIC	GET
	/// The # of fields in the current Workarea.
	PROPERTY FieldCount AS LONG		GET
	/// The filter condition as a string.
	PROPERTY FilterText	AS STRING	GET
	/// The outcome of the last search operation.
	PROPERTY Found		AS LOGIC	GET SET
	/// The number of rows.
	PROPERTY RecCount	AS LONG		GET
	/// The row identifier at the current cursor position.
	PROPERTY RecId		AS OBJECT	GET		// Does not have to be numeric.
	/// The physical row identifier at the current cursor position.
	PROPERTY RecNo		AS LONG		GET
	/// Is the current Workarea opened Shared?
	PROPERTY Shared		AS LOGIC	GET

END INTERFACE