*** empty log message ***

This commit is contained in:
Viktor Szakats
1999-07-31 05:14:36 +00:00
parent 1b81b29746
commit cb53f547d4
33 changed files with 1262 additions and 1052 deletions

View File

@@ -2,987 +2,12 @@
* $Id$
*/
/* CA-Cl*pper API Compatibility Header File */
/* DON'T USE THIS FILE FOR NEW HARBOUR C CODE */
#ifndef HB_RDD_API_
#define HB_RDD_API_
typedef PBYTE BYTEP;
typedef USHORT ERRCODE;
// RDD method return codes
#define SUCCESS 0
#define FAILURE 1
// Flags for DBTRANSINFO
#define DBTF_MATCH 0x0001
#define DBTF_PUTREC 0x0002
// Codes for Locking methods
#define DBLM_EXCLUSIVE 1
#define DBLM_MULTIPLE 2
#define DBLM_FILE 3
// Codes for SELF_ORDINFO()
#define DBOI_CONDITION 1 // Get the order condition
#define DBOI_EXPRESSION 2 // Get the order expression
#define DBOI_POSITION 3 // Get the order position
#define DBOI_RECNO 4 // Get the order record number
#define DBOI_NAME 5 // Get the order list name
#define DBOI_NUMBER 6 // Get the order list position
#define DBOI_BAGNAME 7 // Get the order Bag name
#define DBOI_BAGEXT 8 // Get the order Bag Extension
#define DBOI_INDEXEXT DBOI_BAGEXT
#define DBOI_INDEXNAME DBOI_BAGNAME
#define DBOI_ORDERCOUNT 9 // Get the number of orders in the index file
#define DBOI_FILEHANDLE 10 // Get the handle of the index file
#define DBOI_ISCOND 11 // Get the flag if the order has a for condition
#define DBOI_ISDESC 12 // Get the flag if the order is descending
#define DBOI_UNIQUE 13 // Get the flag if the order has the unique attribute set
// Codes for SELF_INFO()
#define DBI_ISDBF 1 // Logical: RDD support DBF file format?
#define DBI_CANPUTREC 2 // Logical: RDD support Putting Records?
#define DBI_GETHEADERSIZE 3 // Numeric: Get header size of the file
#define DBI_LASTUPDATE 4 // Date: Last date RDD file updated
#define DBI_GETDELIMITER 5 // String: Get default delimiter
#define DBI_SETDELIMITER 6 // String: Set default delimiter
#define DBI_GETRECSIZE 7 // Numeric: Get record size of the file
#define DBI_GETLOCKARRAY 8 // Array: Get an array of locked records
#define DBI_TABLEEXT 9 // String: Get table file extension
#define DBI_ISFLOCK 20 // Get file lock status
#define DBI_CHILDCOUNT 22 // Number of opened relations
#define DBI_FILEHANDLE 23 // Handle of opened file
#define DBI_BOF 26 // BOF flag - alternate to bof()
#define DBI_EOF 27 // EOF flag - alternate to eof()
#define DBI_DBFILTER 28 // Filter expression
#define DBI_FOUND 29 // FOUND flag - alternate to found
#define DBI_FCOUNT 30 // Number of fields
#define DBI_LOCKCOUNT 31 // Get record size of the file
#define DBI_VALIDBUFFER 32 // Is the current buffer valid
#define DBI_ALIAS 33 // Alias name of workarea
#define DBI_GETSCOPE 34 // Locate codeblock
#define DBI_LOCKOFFSET 35 // New locking offset
#define DBI_SHARED 36 // Gets/Sets the shared flag
#define DBI_MEMOEXT 37 // Gets/Sets the shared flag
#define DBI_MEMOHANDLE 38 // Dos handle for memo file
#define DBI_MEMOBLOCKSIZE 39 // Blocksize in memo files
#define DBI_DB_VERSION 101 // HOST driver Version
#define DBI_RDD_VERSION 102 // RDD version (current RDD)
#define DBI_USER 1000 // Start of user definable DBI_ values
// codes for SELF_RECINFO()
#define DBRI_DELETED 1
#define DBRI_LOCKED 2
#define DBRI_RECSIZE 3
#define DBRI_RECNO 4
#define DBRI_UPDATED 5
// codes for SELF_FIELDINFO()
#define DBS_NAME 1
#define DBS_TYPE 2
#define DBS_LEN 3
#define DBS_DEC 4
// codes for RawLock types
#define FILE_LOCK 1
#define FILE_UNLOCK 2
#define REC_LOCK 3
#define REC_UNLOCK 4
#define HEADER_LOCK 5
#define HEADER_UNLOCK 6
#define APPEND_LOCK 7
#define APPEND_UNLOCK 8
/*
* DBFIELDINFO
* -----------
* The field structure
*/
//typedef struct
//{
// BYTEP atomName; // Nombre de campo (s¡mbolo)
// USHORT uiType; // Tipo de campo
// USHORT typeExtended; // Tipo extendido de campo
// USHORT uiLen; // Logitud total del campo
// USHORT uiDec; // Lugares decimales para campos numricos
//} DBFIELDINFO;
//typedef DBFIELDINFO far * LPDBFIELDINFO;
/*
* DBOPENINFO
* ----------
* La estructura de los campos abiertos
*/
typedef struct
{
USHORT uiArea; // N£mero de  rea de trabajo del almacenamiento de datos
PBYTE abName; // El nombre cualificado del almacenamiento de campos
PBYTE atomAlias; // El nombre l¢gico del almacenamiento de campos
BOOL fShared; // Modo compartido del almacenamiento de campos
BOOL fReadonly; // Modo de s¢lo lectura del almacenamiento de campos
// FARP lpdbHeader; // Puntero a la cabecera del almacenamiento de campos
} DBOPENINFO, * DBOPENINFOP;
/*
* DBORDERCONDINFO
* ---------------
* La estructura de creaci¢n condicional de orden
*/
//typedef struct _DBORDERCONDINFO
//{
// BOOL fActive;
// BYTEP abFor;
// ITEM itmCobFor;
// ITEM itmCobWhile;
// ITEM itmCobEval;
// LONG lStep;
// LONG lStartRecno;
// LONG lNextCount;
// LONG lRecno;
// BOOL fRest;
// BOOL fDescending;
// BOOL fScoped;
// BOOL fAll;
// BOOL fAdditive;
// BOOL fUseCurrent;
// BOOL fCustom;
// BOOL fNoOptimize;
// FARP lpvCargo;
//} DBORDERCONDINFO;
//typedef DBORDERCONDINFO far * LPDBORDERCONDINFO;
/*
* DBORDERCREATE
* -------------
* La estructura de creaci¢n de orden
*/
//typedef struct
//{
// LPDBORDERCONDINFO lpdbOrdCondInfo; // Informaci¢n condicional
// BYTEP abBagName; // Nombre del contenedor de ¢rdenes
// BYTEP atomBagName; //
// ITEM itmOrder; //
// BOOL fUnique; // Indicador que determina si todas
// las claves con £nicas
// ITEM itmCobExpr; // Bloque de c¢digo conteniendo la
// expresi¢n clave
// ITEM abExpr; // Cadena conteniendo la expresi¢n clave
//} DBORDERCREATEINFO;
//typedef DBORDERCREATEINFO far * LPDBORDERCREATEINFO;
/*
* DBORDERINFO
* -----------
* La estructura de Set Index
*/
//typedef struct
//{
// ITEM atomBagName; // Nombre del contenedor de ¢rdenes
// ITEM itmOrder; // Nombre o n£mero de la orden
// ITEM itmCobExpr; // Bloque de c¢digo conteniendo la expresi¢n clave
// ITEM itmResult; // Resultado de la operaci¢n
// BOOL fAllTags; // Indicador de todos los tags a abrir
//} DBORDERINFO;
//typedef DBORDERINFO far * LPDBORDERINFO;
/*
* DBSCOPEINFO
* -----------
* La estructura de  mbito
*/
//typedef struct
//{
// ITEM itmCobFor; // Bloque de c¢digo representaci¢n de una cl usula FOR
// ITEM lpstrFor; // Cadena representaci¢n de una cl usula FOR
// ITEM itmCobWhile; // Bloque de c¢digo representaci¢n de una cl usula WHILE
// ITEM lpstrWhile; // Cadena representaci¢n de una cl usula WHILE
// ITEM lNext;
// ITEM itmRecID;
// ITEM fRest; // TRUE si se empieza desde el registro actual
// BOOL fIgnoreFilter;
// BOOL fIncludeDeleted;
// BOOL fLast;
// BOOL fIgnoreDuplicates;
//} DBSCOPEINFO;
//typedef DBSCOPEINFO far * LPDBSCOPEINFO;
/*
* DBFILTERINFO
* ------------
* La estructura de filtro
*/
//typedef struct
//{
// ITEM itmCobExpr; // Bloque representaci¢n de la expresi¢n FILTER
// ITEM abFilterText; // Cadena representaci¢n de la expresi¢n FILTER
// BOOL fFilter;
//} DBFILTERINFO;
//typedef DBFILTERINFO far * LPDBFILTERINFO;
/*
* DBRELINFO
* ------------
* La estrurcura de relaciones
*/
//typedef struct _DBRELINFO
//{
// ITEM itmCobExpr; // Bloque representaci¢n de la clave relacional SEEK
// ITEM abKey; // Cadena representaci¢n de la clave relacional SEEK
// struct _AREA far *lpaParent; // El padre de esta relaci¢n
// struct _AREA far *lpaChild; // Los hijos del padre
// struct _DBRELINFO far *lpdbriNext; // Siguiente hijo o padre
//} DBRELINFO;
//typedef DBRELINFO far * LPDBRELINFO;
/*
* DBEVALINFO
* ------------
* La estructura de evaluaci¢n
*
* Contiene la informaci¢n necesaria para la evaluaci¢n de un bloque
* en cada registro del  rea de trabajo
*/
//typedef struct
//{
// ITEM itmBlock; // El bloque a evaluar
// DBSCOPEINFO dbsci; // Ambito que limita la evaluaci¢n
//} DBEVALINFO;
//typedef DBEVALINFO far * LPDBEVALINFO;
/*
* DBTRANSITEM
* ------------
* La estructura de transferencia
*
* Define un elemento de transferencia simple (normalmente un campo)
* de una base de datos a otra; utilizada por DBTRANSINFO
*/
//typedef struct
//{
// USHORT uiSource; // N£mero de ¡ndice de campo del fuente
// USHORT uiDest; // N£mero de ¡ndice de campo del destino
//} DBTRANSITEM;
//typedef DBTRANSITEM far * LPDBTRANSITEM;
/*
* DBTRANSINFO
* ------------
* La estructura de transferenciaz
*
* Define una transferencia de elementos de datos global de un
*  rea de trabajo a otra
*/
//typedef struct
//{
// struct _AREA far *lpaSource; // Puntero al  rea de trabajo fuente
// struct _AREA far *lpaDest; // Puntero al  rea de trabajo destino
// DBSCOPEINFO dbsci; // Ambito de limitaci¢n de transferencia
// USHORT uiFlags; // Atributos de transferencia
// USHORT uiItemCount; // Contador de elementos
// LPDBTRANSITEM lpTransItems; // Matriz de elementos
//} DBTRANSINFO;
//typedef DBTRANSINFO far * LPDBTRANSINFO;
/*
* DBSORTITEM
* ----------
* La estructura de ordenaci¢n
*
* Una matriz de elementos que, juntos, indican el valor clave a
* utilizar al ordenar datos. El orden de la matriz determina el
* orden de la ordenaci¢n.
*/
//typedef struct
//{
// USHORT uiField; // Indice dentro de la estructura
// //  rea-de-trabajo->campos
// USHORT uiFlags; // Indicadores de ordenaci¢n
//} DBSORTITEM;
//typedef DBSORTITEM far * LPDBSORTITEM;
// Indicadores para DBSORTITEM
//#define SF_ASCEND 1
//#define SF_CASE 2
//#define SF_DESCEND 4
//#define SF_NUM 32
//#define SF_DOUBLE 64
//#define SF_LONG 128
/*
* DBSORTINFO
* ----------
* La estructura de ordenaci¢n
*
* Informaci¢n para la ordenaci¢n f¡sica en un  rea de trabajo
*/
//typedef struct
//{
// DBTRANSINFO dbtri; // Informaci¢n de transferencia del  rea de
// trabajo destino
// LPDBSORTITEM lpdbsItem; // Campos que componen los valores claves en
// la ordenaci¢n
// USHORT uiItemCount; // Contador de elementos
//} DBSORTINFO;
//typedef DBSORTINFO far * LPDBSORTINFO;
/*
* DBLOCKINFO
* ----------
* La estructura de bloqueozz
*
* Contiene informaci¢n de bloqueos de registro o fichero
*/
//typedef struct
//{
// ULONG itmRecID;
// USHORT uiMethod;
// BOOL fResult;
//} DBLOCKINFO;
//typedef DBLOCKINFO far * LPDBLOCKINFO;
/*
* FIELD
* -----
* La estructura de campos
*
* Esta es la unidad b sica de acceso a un  rea de trabajo
*/
//typedef struct _FIELD
//{
// USHORT uiType; // Tipo de campo
// USHORT uiTypeExtended; // Tipo de campo - extendido
// USHORT uiLen; // Longitud de campo
// USHORT uiDec; // Longitud de caracteres decimales
// USHORT uiArea; // Area en la que reside este campo
// FARP sym; // S¡mbolo que representa el campo
// struct _FIELD *lpfNext; // Siguiente campo de la lista
//} FIELD;
//typedef FIELD far * LPFIELD;
/*-----------------* Estructuras de  reas de trabajo *-------------------*/
/*
* WORKAREA
* --------
* La estructura del  rea de trabajo
*
* Informaci¢n para administrar el  rea de trabajo
*/
typedef struct _AREA
{
struct _RDDFUNCS * lprfsHost;
USHORT uiArea; // El n£mero asignado al  rea de trabajo
// FARP atomAlias; // Puntero al s¡mbolo alias de este  rea
// de trabajo
// USHORT uiFieldExtent; // N£mero total de campos asignados
// USHORT uiFieldCount; // N£mero total de campos utilizados
// LPFIELD lpFields; // Puntero a una matriz de campos
// FARP lpFieldExtents; // Puntero nulo para propiedades adicionales
// ITEM valResult; // Contenedor de resultados de m£ltiples usos
// BOOL fTop; // TRUE si "top"
// BOOL fBottom; // TRUE si "bottom"
// BOOL fBof; // TRUE si "bof"
// BOOL fEof; // TRUE si "eof"
// BOOL fFound; // TRUE si "found"
// DBSCOPEINFO dbsi; // Informaci¢n concerniente al £ltimo LOCATE
// DBFILTERINFO dbfi; // Filtro activo
// LPDBORDERCONDINFO lpdbOrdCondInfo;
// LPDBRELINFO lpdbRelations; // Relaciones padre/hijo utilizadas
// USHORT uiParents; // N£mero de padres en este  rea
// HANDLE heap;
// USHORT heapSize;
// USHORT rddID;
} AREA;
typedef AREA * LPAREA;
#ifndef AREAP
#define AREAP LPAREA
#endif
/*-----------------* Prototipos punto de entrada *---------------------*/
typedef USHORT ( * DBENTRYP_V )( AREAP area );
typedef USHORT ( * DBENTRYP_BP )( AREAP area, BOOL * param );
typedef USHORT ( * DBENTRYP_L )( AREAP area, LONG param );
typedef USHORT ( * DBENTRYP_I )( AREAP area, PHB_ITEM param );
typedef USHORT ( * DBENTRYP_SI )( AREAP area, USHORT index, PHB_ITEM param );
typedef USHORT ( * DBENTRYP_VP )( AREAP area, DBOPENINFOP param );
typedef USHORT ( * DBENTRYP_SP )( AREAP area, USHORT * param );
//typedef USHORT (far * DBENTRYP_S)(AREAP area, USHORT param);
//typedef USHORT (far * DBENTRYP_LP)(AREAP area, LONGP param);
//typedef USHORT (far * DBENTRYP_PP)(AREAP area, FARPP param);
//typedef USHORT (far * DBENTRYP_SVP)(AREAP area, USHORT index, FARP param);
//typedef USHORT (far * DBENTRYP_SVPB)(AREAP area, USHORT index, FARP param, USHORT mode);
//typedef USHORT (far * DBENTRYP_VPL)(AREAP area, FARP p1, LONG p2);
//typedef USHORT (far * DBENTRYP_VPLP)(AREAP area, FARP p1, LONGP p2);
//typedef USHORT (far * DBENTRYP_LSP)(AREAP area, LONG p1, USHORTP p2);
//typedef USHORT (far * DBENTRYP_SSI) (AREAP area, USHORT p1, USHORT p2, ITEM p3);
//typedef USHORT (far * DBENTRYP_ISI) (AREAP area, ITEM p1, USHORT p2, ITEM p3);
//typedef USHORT (far * DBENTRYP_VSP) (AREAP area, USHORT action, LONG lRecord);
/*-----------------* Tabla de mdotos virtuales *-------------------*/
typedef struct _RDDFUNCS
{
/* Mtodos de posicionamiento y desplazamiento */
DBENTRYP_BP bof;
DBENTRYP_BP eof;
DBENTRYP_BP found;
DBENTRYP_V goBottom;
DBENTRYP_L go;
// DBENTRYP_I goToId;
DBENTRYP_V goTop;
// DBENTRYP_SI seek;
DBENTRYP_L skip;
// DBENTRYP_L skipFilter; /* L */
// DBENTRYP_L skipRaw; /* L */
/* Manejo de datos */
// DBENTRYP_VP addField; /* VP */
// DBENTRYP_S append; /* S */
// DBENTRYP_I createFields; /* I */
// DBENTRYP_V deleterec; /* V */
// DBENTRYP_SP deleted; /* SP */
// DBENTRYP_SP fieldCount; /* SP */
// DBENTRYP_VP fieldDisplay; /* VP */
// DBENTRYP_SSI fieldInfo; /* SSI */
// DBENTRYP_SVP fieldName; /* SVP */
// DBENTRYP_V flush; /* V */
// DBENTRYP_PP getRec; /* PP */
// DBENTRYP_SI getValue; /* SI */
// DBENTRYP_SVP getVarLen; /* SVP */
// DBENTRYP_V goCold; /* V */
// DBENTRYP_V goHot; /* V */
// DBENTRYP_VP putRec; /* VP */
// DBENTRYP_SI putValue; /* SI */
// DBENTRYP_V recall; /* V */
// DBENTRYP_LP reccount; /* LP */
// DBENTRYP_ISI recInfo; /* ISI */
// DBENTRYP_I recno; /* I */
// DBENTRYP_S setFieldExtent; /* S */
/* Manejo de  reas de trabajo/bases de datos */
// DBENTRYP_VP alias; /* VP */
DBENTRYP_V close;
DBENTRYP_VP create;
// DBENTRYP_SI info; /* SI */
// DBENTRYP_V newarea; /* V */
DBENTRYP_VP open;
// DBENTRYP_V release; /* V */
DBENTRYP_SP structSize;
// DBENTRYP_VP sysName; /* VP */
// DBENTRYP_VP dbEval; /* VP */
// DBENTRYP_V pack; /* V */
// DBENTRYP_LSP packRec; /* LSP */
// DBENTRYP_VP sort; /* VP */
// DBENTRYP_VP trans; /* VP */
// DBENTRYP_VP transRec; /* VP */
// DBENTRYP_V zap; /* V */
/* Mtodos relacionales */
// DBENTRYP_VP childEnd; /* VP */
// DBENTRYP_VP childStart; /* VP */
// DBENTRYP_VP childSync; /* VP */
// DBENTRYP_V syncChildren; /* V */
// DBENTRYP_V clearRel; /* V */
// DBENTRYP_V forceRel; /* V */
// DBENTRYP_SVP relArea; /* SVP */
// DBENTRYP_VP relEval; /* VP */
// DBENTRYP_SVP relText; /* SVP */
// DBENTRYP_VP setRel; /* VP */
/* Manejo de ¢rdenes */
// DBENTRYP_VP orderListAdd; /* VP */
// DBENTRYP_V orderListClear; /* V */
// DBENTRYP_VP orderListDelete; /* VP */
// DBENTRYP_VP orderListFocus; /* VP */
// DBENTRYP_V orderListRebuild; /* V */
// DBENTRYP_VP orderCondition; /* VP */
// DBENTRYP_VP orderCreate; /* VP */
// DBENTRYP_VP orderDestroy; /* VP */
// DBENTRYP_SVP orderInfo; /* SVP */
/* Establecimiento de filtros y  mbitos */
// DBENTRYP_V clearFilter; /* V */
// DBENTRYP_V clearLocate; /* V */
// DBENTRYP_V clearScope; /* V */
// DBENTRYP_VPLP countScope; /* VPLP*/
// DBENTRYP_VP filterText; /* VP */
// DBENTRYP_SI scopeInfo; /* SI */
// DBENTRYP_VP setFilter; /* VP */
// DBENTRYP_VP setLocate; /* VP */
// DBENTRYP_VP setScope; /* VP */
// DBENTRYP_VPL skipScope; /* VPL */
/* Diversos */
// DBENTRYP_VP compile; /* VP */
// DBENTRYP_VP error; /* VP */
// DBENTRYP_I evalBlock; /* I */
/* Operaciones de red */
// DBENTRYP_VSP rawlock; /* VSP */
// DBENTRYP_VP lock; /* VP */
// DBENTRYP_L unlock; /* L */
/* Funciones de ficheros memo */
// DBENTRYP_V closeMemFile; /* V */
// DBENTRYP_VP createMemFile; /* VP */
// DBENTRYP_SVPB getValueFile; /* SVPB */
// DBENTRYP_VP openMemFile; /* VP */
// DBENTRYP_SVP putValueFile; /* SVP */
/* Manejo de cabeceras de ficheros de base de datos */
// DBENTRYP_V readDBHeader; /* V */
// DBENTRYP_V writeDBHeader; /* V */
/* Mtodos especiales y reservados */
// DBENTRYP_SVP whoCares; /* SVP */
} RDDFUNCS;
typedef RDDFUNCS * PRDDFUNCS;
#define RDDFUNCSCOUNT ( sizeof( RDDFUNCS ) / sizeof( DBENTRYP_V ) )
/*--------------------* SELF Methods *------------------------*/
/* Movement and positioning methods */
#define SELF_BOF(w, sp) ((*(w)->lprfsHost->bof)(w, sp))
#define SELF_EOF(w, sp) ((*(w)->lprfsHost->eof)(w, sp))
#define SELF_FOUND(w, sp) ((*(w)->lprfsHost->found)(w, sp))
#define SELF_GOTO(w, l) ((*(w)->lprfsHost->go)(w, l))
#define SELF_GOTOID(w, sp) ((*(w)->lprfsHost->goToId)(w, sp))
#define SELF_GOBOTTOM(w) ((*(w)->lprfsHost->goBottom)(w))
#define SELF_GOTOP(w) ((*(w)->lprfsHost->goTop)(w))
#define SELF_SEEK(w, i, v) ((*(w)->lprfsHost->seek)(w, i, v))
#define SELF_SKIP(w, l) ((*(w)->lprfsHost->skip)(w, l))
#define SELF_SKIPFILTER(w, l) ((*(w)->lprfsHost->skipFilter)(w, l))
#define SELF_SKIPRAW(w, l) ((*(w)->lprfsHost->skipRaw)(w, l))
/* Data management */
#define SELF_ADDFIELD(w, ip) ((*(w)->lprfsHost->addField)(w, ip))
#define SELF_APPEND(w,l) ((*(w)->lprfsHost->append)(w,l))
#define SELF_CREATEFIELDS(w, v) ((*(w)->lprfsHost->createFields)(w, v))
#define SELF_DELETE(w) ((*(w)->lprfsHost->deleterec)(w))
#define SELF_DELETED(w, sp) ((*(w)->lprfsHost->deleted)(w, sp))
#define SELF_FIELDCOUNT(w, sp) ((*(w)->lprfsHost->fieldCount)(w, sp))
#define SELF_FIELDDISPLAY(w, sp) ((*(w)->lprfsHost->fieldDisplay)(w, sp))
#define SELF_FIELDINFO(w,s1,s2,v) ((*(w)->lprfsHost->fieldInfo)(w,s1,s2,v))
#define SELF_FIELDNAME(w, i, bp) ((*(w)->lprfsHost->fieldName)(w, i, bp))
#define SELF_FLUSH(w) ((*(w)->lprfsHost->flush)(w))
#define SELF_GETREC(w, bpp) ((*(w)->lprfsHost->getRec)(w, bpp))
#define SELF_GETVALUE(w, i, v) ((*(w)->lprfsHost->getValue)(w, i, v))
#define SELF_GETVARLEN(w, i, lp) ((*(w)->lprfsHost->getVarLen)(w, i, lp))
#define SELF_GOCOLD(w) ((*(w)->lprfsHost->goCold)(w))
#define SELF_GOHOT(w) ((*(w)->lprfsHost->goHot)(w))
#define SELF_PUTVALUE(w, i, v) ((*(w)->lprfsHost->putValue)(w, i, v))
#define SELF_PUTREC(w, bp) ((*(w)->lprfsHost->putRec)(w, bp))
#define SELF_RECALL(w) ((*(w)->lprfsHost->recall)(w))
#define SELF_RECCOUNT(w, sp) ((*(w)->lprfsHost->reccount)(w, sp))
#define SELF_RECINFO(w,v1,i,v2) ((*(w)->lprfsHost->recInfo)(w,v1,i,v2))
#define SELF_RECNO(w, i) ((*(w)->lprfsHost->recno)(w, i))
#define SELF_SETFIELDEXTENT(w, s) ((*(w)->lprfsHost->setFieldExtent)(w, s))
/* WorkArea/Database management */
#define SELF_ALIAS(w, bp) ((*(w)->lprfsHost->alias)(w, bp))
#define SELF_CLOSE(w) ((*(w)->lprfsHost->close)(w))
#define SELF_CREATE(w, ip) ((*(w)->lprfsHost->create)(w, ip))
#define SELF_INFO(w, i, g) ((*(w)->lprfsHost->info)(w, i, g))
#define SELF_NEW(w) ((*(w)->lprfsHost->newarea)(w))
#define SELF_OPEN(w, ip) ((*(w)->lprfsHost->open)(w, ip))
#define SELF_RELEASE(w) ((*(w)->lprfsHost->release)(w))
#define SELF_STRUCTSIZE(w, sp) ((*(w)->lprfsHost->structSize)(w,sp))
#define SELF_SYSNAME(w, bp) ((*(w)->lprfsHost->sysName)(w, bp))
#define SELF_DBEVAL(w, ip) ((*(w)->lprfsHost->dbEval)(w, ip))
#define SELF_PACK(w) ((*(w)->lprfsHost->pack)(w))
#define SELF_PACKREC(w, l, sp) ((*(w)->lprfsHost->packRec)(w, l, sp))
#define SELF_SORT(w, ip) ((*(w)->lprfsHost->sort)(w, ip))
#define SELF_TRANS(w, ip) ((*(w)->lprfsHost->trans)(w, ip))
#define SELF_TRANSREC(w, ip) ((*(w)->lprfsHost->transRec)(w, ip))
#define SELF_ZAP(w) ((*(w)->lprfsHost->zap)(w))
/* Relational Methods */
#define SELF_CHILDEND(w, ip) ((*(w)->lprfsHost->childEnd)(w, ip))
#define SELF_CHILDSTART(w, ip) ((*(w)->lprfsHost->childStart)(w, ip))
#define SELF_CHILDSYNC(w, ip) ((*(w)->lprfsHost->childSync)(w, ip))
#define SELF_SYNCCHILDREN(w) ((*(w)->lprfsHost->syncChildren)(w))
#define SELF_CLEARREL(w) ((*(w)->lprfsHost->clearRel)(w))
#define SELF_FORCEREL(w) ((*(w)->lprfsHost->forceRel)(w))
#define SELF_RELAREA(w, s, sp) ((*(w)->lprfsHost->relArea)(w, s, sp))
#define SELF_RELEVAL(w, ip) ((*(w)->lprfsHost->relEval)(w, ip))
#define SELF_RELTEXT(w, s, bp) ((*(w)->lprfsHost->relText)(w, s, bp))
#define SELF_SETREL(w, ip) ((*(w)->lprfsHost->setRel)(w, ip))
/* Order Management */
#define SELF_ORDLSTADD(w, lp) ((*(w)->lprfsHost->orderListAdd)(w, lp))
#define SELF_ORDLSTDELETE(w, lp) ((*(w)->lprfsHost->orderListDelete)(w, lp))
#define SELF_ORDLSTFOCUS(w, lp) ((*(w)->lprfsHost->orderListFocus)(w,lp))
#define SELF_ORDLSTREBUILD(w) ((*(w)->lprfsHost->orderListRebuild)(w))
#define SELF_ORDLSTCLEAR(w) ((*(w)->lprfsHost->orderListClear)(w))
#define SELF_ORDSETCOND(w, ip) ((*(w)->lprfsHost->orderCondition)(w, ip))
#define SELF_ORDCREATE(w, ip) ((*(w)->lprfsHost->orderCreate)(w, ip))
#define SELF_ORDDESTROY(w, p) ((*(w)->lprfsHost->orderDestroy)(w, p))
#define SELF_ORDINFO(w, i, p) ((*(w)->lprfsHost->orderInfo)(w, i, p))
#define SELF_ORDEXPR(w, p) ((*(w)->lprfsHost->orderInfo)(w, DBOI_EXPRESSION, p))
#define SELF_ORDCOND(w, p) ((*(w)->lprfsHost->orderInfo)(w, DBOI_CONDITION, p))
#define SELF_ORDRECNO(w, p) ((*(w)->lprfsHost->orderInfo)(w, DBOI_RECNO, p))
#define SELF_ORDPOS(w, p) ((*(w)->lprfsHost->orderInfo)(w, DBOI_POSITION, p))
#define SELF_ORDNUMBER(w, p) ((*(w)->lprfsHost->orderInfo)(w, DBOI_NUMBER, p))
#define SELF_ORDNAME(w, p) ((*(w)->lprfsHost->orderInfo)(w, DBOI_NAME, p))
#define SELF_ORDBAGNAME(w, p) ((*(w)->lprfsHost->orderInfo)(w, DBOI_BAGNAME, p))
#define SELF_ORDBAGEXT(w, p) ((*(w)->lprfsHost->orderInfo)(w, DBOI_BAGEXT, p))
/* Filters and Scope Settings */
#define SELF_CLEARFILTER(w) ((*(w)->lprfsHost->clearFilter)(w))
#define SELF_CLEARLOCATE(w) ((*(w)->lprfsHost->clearLocate)(w))
#define SELF_CLEARSCOPE(w) ((*(w)->lprfsHost->clearScope)(w))
#define SELF_COUNTSCOPE(w,ip,lp) ((*(w)->lprfsHost->countScope)(w,ip,lp))
#define SELF_FILTERTEXT(w, bp) ((*(w)->lprfsHost->filterText)(w, bp))
#define SELF_SCOPEINFO(w,i,v) ((*(w)->lprfsHost->scopeInfo)(w,i,v))
#define SELF_SETFILTER(w, ip) ((*(w)->lprfsHost->setFilter)(w, ip))
#define SELF_SETLOCATE(w, ip) ((*(w)->lprfsHost->setLocate)(w, ip))
#define SELF_SETSCOPE(w, ip) ((*(w)->lprfsHost->setScope)(w, ip))
#define SELF_SKIPSCOPE(w, bp, l) ((*(w)->lprfsHost->skipScope)(w, bp, l))
/* Miscellaneous */
#define SELF_COMPILE(w, bp) ((*(w)->lprfsHost->compile)(w, bp))
#define SELF_ERROR(w, ip) ((*(w)->lprfsHost->error)(w, ip))
#define SELF_EVALBLOCK(w, v) ((*(w)->lprfsHost->evalBlock)(w, v))
/* Network operations */
#define SELF_GETLOCKS(w, g) ((*(w)->lprfsHost->info)(w, DBI_GETLOCKARRAY, g))
#define SELF_RAWLOCK(w, i, l) ((*(w)->lprfsHost->rawlock)(w, i, l))
#define SELF_LOCK(w, sp) ((*(w)->lprfsHost->lock)(w, sp))
#define SELF_UNLOCK(w, l) ((*(w)->lprfsHost->unlock)(w, l))
/* Memofile functions */
#define SELF_CLOSEMEMFILE(w) ((*(w)->lprfsHost->closeMemFile)(w))
#define SELF_CREATEMEMFILE(w,bp) ((*(w)->lprfsHost->createMemFile)(w,bp))
#define SELF_GETVALUEFILE(w,i,bp,b) ((*(w)->lprfsHost->getValueFile)(w,i,bp,b))
#define SELF_OPENMEMFILE(w,bp) ((*(w)->lprfsHost->openMemFile)(w,bp))
#define SELF_PUTVALUEFILE(w,i,bp) ((*(w)->lprfsHost->putValueFile)(w,i,bp))
/* Database file header handling */
#define SELF_READDBHEADER(w) ((*(w)->lprfsHost->readDBHeader)(w))
#define SELF_WRITEDBHEADER(w) ((*(w)->lprfsHost->writeDBHeader)(w))
/* Info operations */
#define SELF_RECSIZE(w, lp) ((*(w)->lprfsHost->info)(w, DBI_GETRECSIZE, lp))
#define SELF_HEADERSIZE(w, fp) ((*(w)->lprfsHost->info)(w, DBI_GETHEADERSIZE, fp))
#define SELF_LUPDATE(w, fp) ((*(w)->lprfsHost->info)(w, DBI_LASTUPDATE, fp ))
#define SELF_SETDELIM(w, fp) ((*(w)->lprfsHost->info)(w, DBI_SETDELIMITER, fp))
#define SELF_GETDELIM(w, fp) ((*(w)->lprfsHost->info)(w, DBI_GETDELIMITER, fp))
#define SELF_TABLEEXT(w, fp) ((*(w)->lprfsHost->info)(w, DBI_TABLEEXT, fp))
/*--------------------* Mtodos SUPER *------------------------*/
/* Mtodos de movimiento y posicionamiento */
//#define SUPER_BOF(w, sp) ((*(SUPERTABLE)->bof)(w, sp))
//#define SUPER_EOF(w, sp) ((*(SUPERTABLE)->eof)(w, sp))
//#define SUPER_FOUND(w, sp) ((*(SUPERTABLE)->found)(w, sp))
//#define SUPER_GOTO(w, l) ((*(SUPERTABLE)->go)(w, l))
//#define SUPER_GOTOID(w, sp) ((*(SUPERTABLE)->goToId)(w, sp))
//#define SUPER_GOBOTTOM(w) ((*(SUPERTABLE)->goBottom)(w))
//#define SUPER_GOTOP(w) ((*(SUPERTABLE)->goTop)(w))
//#define SUPER_SEEK(w, i, v) ((*(SUPERTABLE)->seek)(w, i, v))
//#define SUPER_SKIP(w, l) ((*(SUPERTABLE)->skip)(w, l))
//#define SUPER_SKIPFILTER(w, l) ((*(SUPERTABLE)->skipFilter)(w, l))
//#define SUPER_SKIPRAW(w, l) ((*(SUPERTABLE)->skipRaw)(w, l))
/* Manejo de datos */
//#define SUPER_ADDFIELD(w, ip) ((*(SUPERTABLE)->addField)(w, ip))
//#define SUPER_APPEND(w,l) ((*(SUPERTABLE)->append)(w,l))
//#define SUPER_CREATEFIELDS(w, v) ((*(SUPERTABLE)->createFields)(w, v))
//#define SUPER_DELETE(w) ((*(SUPERTABLE)->deleterec)(w))
//#define SUPER_DELETED(w, sp) ((*(SUPERTABLE)->deleted)(w, sp))
//#define SUPER_FIELDCOUNT(w, sp) ((*(SUPERTABLE)->fieldCount)(w, sp))
//#define SUPER_FIELDDISPLAY(w, sp) ((*(SUPERTABLE)->fieldDisplay)(w, sp))
//#define SUPER_FIELDINFO(w,s1,s2,v) ((*(SUPERTABLE)->fieldInfo)(w,s1,s2,v))
//#define SUPER_FIELDNAME(w, i, bp) ((*(SUPERTABLE)->fieldName)(w, i, bp))
//#define SUPER_FLUSH(w) ((*(SUPERTABLE)->flush)(w))
//#define SUPER_GETREC(w, bpp) ((*(SUPERTABLE)->getRec)(w, bpp))
//#define SUPER_GETVALUE(w, i, v) ((*(SUPERTABLE)->getValue)(w, i, v))
//#define SUPER_GETVARLEN(w, i, lp) ((*(SUPERTABLE)->getVarLen)(w, i, lp))
//#define SUPER_GOCOLD(w) ((*(SUPERTABLE)->goCold)(w))
//#define SUPER_GOHOT(w) ((*(SUPERTABLE)->goHot)(w))
//#define SUPER_PUTVALUE(w, i, v) ((*(SUPERTABLE)->putValue)(w, i, v))
//#define SUPER_PUTREC(w, bp) ((*(SUPERTABLE)->putRec)(w, bp))
//#define SUPER_RECALL(w) ((*(SUPERTABLE)->recall)(w))
//#define SUPER_RECCOUNT(w, sp) ((*(SUPERTABLE)->reccount)(w, sp))
//#define SUPER_RECINFO(w,v1,i,v2) ((*(SUPERTABLE)->recInfo)(w,v1,i,v2))
//#define SUPER_RECNO(w, sp) ((*(SUPERTABLE)->recno)(w, sp))
//#define SUPER_SETFIELDEXTENT(w, s) ((*(SUPERTABLE)->setFieldExtent)(w, s))
/* Manejo de  reas de trabajo/bases de datos */
//#define SUPER_ALIAS(w, bp) ((*(SUPERTABLE)->alias)(w, bp))
//#define SUPER_CLOSE(w) ((*(SUPERTABLE)->close)(w))
//#define SUPER_CREATE(w, ip) ((*(SUPERTABLE)->create)(w, ip))
//#define SUPER_INFO(w, i, g) ((*(SUPERTABLE)->info)(w, i, g))
//#define SUPER_NEW(w) ((*(SUPERTABLE)->newarea)(w))
//#define SUPER_OPEN(w, ip) ((*(SUPERTABLE)->open)(w, ip))
//#define SUPER_RELEASE(w) ((*(SUPERTABLE)->release)(w))
//#define SUPER_STRUCTSIZE(w, sp) ((*(SUPERTABLE)->structSize)(w, sp))
//#define SUPER_SYSNAME(w, bp) ((*(SUPERTABLE)->sysName)(w, bp))
//#define SUPER_DBEVAL(w, ip) ((*(SUPERTABLE)->dbEval)(w, ip))
//#define SUPER_PACK(w) ((*(SUPERTABLE)->pack)(w))
//#define SUPER_PACKREC(w, l, sp) ((*(SUPERTABLE)->packRec)(w, l, sp))
//#define SUPER_SORT(w, ip) ((*(SUPERTABLE)->sort)(w, ip))
//#define SUPER_TRANS(w, ip) ((*(SUPERTABLE)->trans)(w, ip))
//#define SUPER_TRANSREC(w, ip) ((*(SUPERTABLE)->transRec)(w, ip))
//#define SUPER_ZAP(w) ((*(SUPERTABLE)->zap)(w))
/* Mtodos relacionales */
//#define SUPER_CHILDEND(w, ip) ((*(SUPERTABLE)->childEnd)(w, ip))
//#define SUPER_CHILDSTART(w, ip) ((*(SUPERTABLE)->childStart)(w, ip))
//#define SUPER_CHILDSYNC(w, ip) ((*(SUPERTABLE)->childSync)(w, ip))
//#define SUPER_SYNCCHILDREN(w) ((*(SUPERTABLE)->syncChildren)(w))
//#define SUPER_CLEARREL(w) ((*(SUPERTABLE)->clearRel)(w))
//#define SUPER_FORCEREL(w) ((*(SUPERTABLE)->forceRel)(w))
//#define SUPER_RELAREA(w, s, sp) ((*(SUPERTABLE)->relArea)(w, s, sp))
//#define SUPER_RELEVAL(w, ip) ((*(SUPERTABLE)->relEval)(w, ip))
//#define SUPER_RELTEXT(w, s, bp) ((*(SUPERTABLE)->relText)(w, s, bp))
//#define SUPER_SETREL(w, ip) ((*(SUPERTABLE)->setRel)(w, ip))
/* Manejo de ¢rdenes */
//#define SUPER_ORDLSTADD(w, lp) ((*(SUPERTABLE)->orderListAdd)(w, lp))
//#define SUPER_ORDLSTDELETE(w, lp) ((*(SUPERTABLE)->orderListDelete)(w, lp))
//#define SUPER_ORDLSTFOCUS(w, lp) ((*(SUPERTABLE)->orderListFocus)(w, lp))
//#define SUPER_ORDLSTREBUILD(w) ((*(SUPERTABLE)->orderListRebuild)(w))
//#define SUPER_ORDLSTCLEAR(w) ((*(SUPERTABLE)->orderListClear)(w))
//#define SUPER_ORDSETCOND(w,ip) ((*(SUPERTABLE)->orderCondition)(w, ip))
//#define SUPER_ORDCREATE(w, ip) ((*(SUPERTABLE)->orderCreate)(w, ip))
//#define SUPER_ORDDELETE(w, ip) ((*(SUPERTABLE)->orderDelete)(w, ip))
//#define SUPER_ORDINFO(w, i, p) ((*(SUPERTABLE)->orderInfo)(w, i, p))
//#define SUPER_ORDEXPR(w, p) ((*(SUPERTABLE)->orderInfo)(w, DBOI_EXPRESSION, p))
//#define SUPER_ORDCOND(w, p) ((*(SUPERTABLE)->orderInfo)(w, DBOI_CONDITION, p))
//#define SUPER_ORDRECNO(w, p) ((*(SUPERTABLE)->orderInfo)(w, DBOI_RECNO, p))
//#define SUPER_ORDPOS(w, p) ((*(SUPERTABLE)->orderInfo)(w, DBOI_POSITION, p))
//#define SUPER_ORDNUMBER(w, p) ((*(SUPERTABLE)->orderInfo)(w, DBOI_NUMBER, p))
//#define SUPER_ORDNAME(w, p) ((*(SUPERTABLE)->orderInfo)(w, DBOI_NAME, p))
//#define SUPER_ORDBAGNAME(w, p) ((*(SUPERTABLE)->orderInfo)(w, DBOI_BAGNAME, p))
//#define SUPER_ORDBAGEXT(w, p) ((*(SUPERTABLE)->orderInfo)(w, DBOI_BAGEXT, p))
/* Establecimiento de filtros y  mbitos */
//#define SUPER_CLEARFILTER(w) ((*(SUPERTABLE)->clearFilter)(w))
//#define SUPER_CLEARLOCATE(w) ((*(SUPERTABLE)->clearLocate)(w))
//#define SUPER_CLEARSCOPE(w) ((*(SUPERTABLE)->clearScope)(w))
//#define SUPER_COUNTSCOPE(w,ip,lp) ((*(SUPERTABLE)->countScope)(w,ip,lp))
//#define SUPER_FILTERTEXT(w, bp) ((*(SUPERTABLE)->filterText)(w, bp))
//#define SUPER_SCOPEINFO(w,i,v) ((*(SUPERTABLE)->scopeInfo)(w,i,v))
//#define SUPER_SETFILTER(w, ip) ((*(SUPERTABLE)->setFilter)(w, ip))
//#define SUPER_SETLOCATE(w, ip) ((*(SUPERTABLE)->setLocate)(w, ip))
//#define SUPER_SETSCOPE(w, ip) ((*(SUPERTABLE)->setScope)(w, ip))
//#define SUPER_SKIPSCOPE(w, bp, l) ((*(SUPERTABLE)->skipScope)(w, bp, l))
/* Diversos */
//#define SUPER_COMPILE(w, bp) ((*(SUPERTABLE)->compile)(w, bp))
//#define SUPER_ERROR(w, ip) ((*(SUPERTABLE)->error)(w, ip))
//#define SUPER_EVALBLOCK(w, v) ((*(SUPERTABLE)->evalBlock)(w, v))
/* Operaciones de red */
//#define SUPER_GETLOCKS(w, g) ((*(SUPERTABLE)->info)(w, DBI_GETLOCKARRAY, g))
//#define SUPER_RAWLOCK(w, i, l) ((*(SUPERTABLE)->rawlock)(w, i, l))
//#define SUPER_LOCK(w, sp) ((*(SUPERTABLE)->lock)(w, sp))
//#define SUPER_UNLOCK(w) ((*(SUPERTABLE)->unlock)(w))
/* Funciones de ficheros memo */
//#define SUPER_CLOSEMEMFILE(w) ((*(SUPERTABLE)->closeMemFile)(w))
//#define SUPER_CREATEMEMFILE(w,bp) ((*(SUPERTABLE)->createMemFile)(w,bp))
//#define SUPER_GETVALUEFILE(w,i,bp,b) ((*(SUPERTABLE)->getValueFile)(w,i,bp,b))
//#define SUPER_OPENMEMFILE(w,bp) ((*(SUPERTABLE)->openMemFile)(w,bp))
//#define SUPER_PUTVALUEFILE(w,i,bp) ((*(SUPERTABLE)->putValueFile)(w,i,bp))
/* Manejo de cabeceras de ficheros de base de datos */
//#define SUPER_READDBHEADER(w) ((*(SUPERTABLE)->readDBHeader)(w))
//#define SUPER_WRITEDBHEADER(w) ((*(SUPERTABLE)->writeDBHeader)(w))
/* Operaciones Info */
//#define SUPER_RECSIZE(w, lp) ((*(SUPERTABLE)->info)(w, DBI_GETRECSIZE, lp))
//#define SUPER_HEADERSIZE(w, fp) ((*(SUPERTABLE)->info)(w, DBI_GETHEADERSIZE, fp))
//#define SUPER_LUPDATE(w, fp) ((*(SUPERTABLE)->info)(w, DBI_LASTUPDATE, fp ))
//#define SUPER_SETDELIM(w, fp) ((*(SUPERTABLE)->info)(w, DBI_SETDELIMITER, fp))
//#define SUPER_GETDELIM(w, fp) ((*(SUPERTABLE)->info)(w, DBI_GETDELIMITER, fp))
//#define SUPER_TABLEEXT(w, fp) ((*(SUPERTABLE)->info)(w, DBI_TABLEEXT, fp))
/*
* PROTOTYPES
* ----------
*/
ERRCODE hb_rddInherit( PRDDFUNCS pTable, PRDDFUNCS pSubTable, PRDDFUNCS pSuperTable, PBYTE szDrvName );
extern ERRCODE hb_rddDisinherit( BYTEP drvName );
extern USHORT hb_rddExtendType( USHORT fieldType );
extern USHORT hb_rddFieldType( USHORT extendType );
#include "rddapi.h"
#endif /* HB_RDD_API_ */