diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2022-12-07 13:17:14 +0100 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2022-12-07 13:17:14 +0100 |
commit | 4875a3dd9b183dcd2256e2abfc4ccf7484c233b4 (patch) | |
tree | 0abbea881ded030851014ffdd60fbf71fead8f65 /xbase64/xbdbf.h | |
parent | daf17154bf13139d9375f48525d19d6aaba08155 (diff) |
New upstream version 4.0.2upstream/4.0.2
Diffstat (limited to 'xbase64/xbdbf.h')
-rwxr-xr-x | xbase64/xbdbf.h | 533 |
1 files changed, 0 insertions, 533 deletions
diff --git a/xbase64/xbdbf.h b/xbase64/xbdbf.h deleted file mode 100755 index ce28e9a..0000000 --- a/xbase64/xbdbf.h +++ /dev/null @@ -1,533 +0,0 @@ -/* xbdbf.h - - Xbase64 project source code - - This file contains the Class definition for a xbDBF object. - - Copyright (C) 1997,2003 Gary A Kunkel - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - - Contact: - - Email: - - xdb-devel@lists.sourceforge.net - xdb-users@lists.sourceforge.net - - - Regular Mail: - - XBase Support - 149C South Main St - Keller Texas, 76248 - USA - -*/ - -#ifndef __XB_DBF_H__ -#define __XB_DBF_H__ - -#ifdef __GNU LesserG__ -#pragma interface -#endif - -#ifdef __WIN32__ -#include <xbase64/xbwincfg.h> -#else -#include <xbase64/xbconfig.h> -#endif - -#include <xbase64/xbtypes.h> -#include <xbase64/xbdate.h> -#include <xbase64/xbfile.h> - -#include <iostream> -#include <stdio.h> - -/*! \file xbdbf.h -*/ - -#if defined(XB_INDEX_ANY) - class XBDLLEXPORT xbIndex; - class XBDLLEXPORT xbNdx; - class XBDLLEXPORT xbNtx; -#endif - -/*****************************/ -/* Field Types */ - -#define XB_CHAR_FLD 'C' -#define XB_LOGICAL_FLD 'L' -#define XB_NUMERIC_FLD 'N' -#define XB_DATE_FLD 'D' -#define XB_MEMO_FLD 'M' -#define XB_FLOAT_FLD 'F' - -/*****************************/ -/* File Status Codes */ - -#define XB_CLOSED 0 -#define XB_OPEN 1 -#define XB_UPDATED 2 - -/*****************************/ -/* Other defines */ - -#define XB_OVERLAY 1 -#define XB_DONTOVERLAY 0 - -#define XB_CHAREOF '\x1A' /* end of DBF */ -#define XB_CHARHDR '\x0D' /* header terminator */ - -//! Used to define the fields in a database (DBF file). -/*! - Generally one would define an xbSchema array to be passed - to xbDbf::CreateDatabase() to define the fields in the database. - - For example, one might create a declaration as follows: - - \code - xbSchema MyRecord[] = - { - { "FIRSTNAME", XB_CHAR_FLD, 15, 0 }, - { "LASTNAME", XB_CHAR_FLD, 20, 0 }, - { "BIRTHDATE", XB_DATE_FLD, 8, 0 }, - { "AMOUNT", XB_NUMERIC_FLD, 9, 2 }, - { "SWITCH", XB_LOGICAL_FLD, 1, 0 }, - { "FLOAT1", XB_FLOAT_FLD, 9, 2 }, - { "FLOAT2", XB_FLOAT_FLD, 9, 1 }, - { "FLOAT3", XB_FLOAT_FLD, 9, 2 }, - { "FLOAT4", XB_FLOAT_FLD, 9, 3 }, - { "MEMO1", XB_MEMO_FLD, 10, 0 }, - { "ZIPCODE", XB_NUMERIC_FLD, 5, 0 }, - { "",0,0,0 } - }; - \endcode - - Note that the last xbSchema in an array must be a "null" entry like the - one above: - - \code - { "",0,0,0 } - \endcode - - To indicate the end of the array. -*/ -struct XBDLLEXPORT xbSchema { - char FieldName[11]; - char Type; -// xbUShort FieldLen; /* does not work */ -// xbUShort NoOfDecs; /* does not work */ - unsigned char FieldLen; /* fields are stored as one byte on record*/ - unsigned char NoOfDecs; -}; - -//! Defines a field in an XBase file header (DBF file header) -/*! - This structure is only used internally by the xbDbf class. -*/ -struct XBDLLEXPORT xbSchemaRec { - char FieldName[11]; - char Type; /* field type */ - char *Address; /* pointer to field in record buffer 1 */ -// xbUShort FieldLen; /* does not work */ -// xbUShort NoOfDecs; /* does not work */ - unsigned char FieldLen; /* fields are stored as one byte on record */ - unsigned char NoOfDecs; - char *Address2; /* pointer to field in record buffer 2 */ - char *fp; /* pointer to null terminated buffer for field */ - /* see method GetString */ - xbShort LongFieldLen; /* to handle long field lengths */ -}; - -//! xbIxList struct -/*! - Internal use only. -*/ -struct XBDLLEXPORT xbIxList { - xbIxList * NextIx; - xbString IxName; -#if defined(XB_INDEX_ANY) - xbIndex * index; - xbShort Unique; - xbShort KeyUpdated; -#endif -}; - -//! xbMH struct -/*! - Internal use only. -*/ - -#ifdef XB_MEMO_FIELDS -struct XBDLLEXPORT xbMH{ /* memo header */ - xbLong NextBlock; /* pointer to next block to write */ - char FileName[8]; /* name of dbt file */ - char Version; /* not sure */ - xbShort BlockSize; /* memo file block size */ -}; -#endif - -//! xbDbf class -/*! - The xbDbf class encapsulates an xbase DBF database file. It includes - all dbf access, field access, and locking methods. -*/ -class XBDLLEXPORT xbDbf : protected xbFile{ - -public: - xbDbf( xbXBase * ); - virtual ~xbDbf(); - - xbXBase *xbase; /* linkage to main base class */ - -/* datafile methods */ -#if defined(XB_INDEX_ANY) - xbShort AddIndexToIxList(xbIndex *, const char *IndexName); - xbShort RemoveIndexFromIxList( xbIndex * ); -#endif - xbShort AppendRecord(); - xbShort BlankRecord(); - xbShort CloseDatabase( xbBool deleteIndexes = 0 ); - xbShort CopyDbfStructure( const char *, xbShort ); - xbShort CreateDatabase( const char * Name, xbSchema *, xbShort Overlay ); - //! Delete all records - /*! - */ - xbShort DeleteAllRecords() { return DeleteAll(0); } - xbShort DeleteRecord(); -#ifdef XBASE_DEBUG - xbShort DumpHeader( xbShort ); -#endif - xbShort DumpRecord( xbULong ); - //! Return number of fields - /*! - */ - xbLong FieldCount() { return NoOfFields; } - //! Return Dbf name - /*! - */ - const xbString& GetDbfName() { return GetFileName(); } - //! Return status - /*! - */ - xbShort GetDbfStatus() { return DbfStatus; } - xbShort GetFirstRecord(); - xbShort GetLastRecord(); - xbShort GetNextRecord(); - xbShort GetPrevRecord(); - //! Return current record number - /*! - */ - xbLong GetCurRecNo() { return CurRec; } - xbShort GetRecord( xbULong ); - //! Return a pointer to the record buffer - /*! - */ - char * GetRecordBuf() { return RecBuf; } - //! Return record length - /*! - */ - xbShort GetRecordLen() { return RecordLen; } - xbShort NameSuffixMissing( xbShort, const char * ); - xbLong GetRecCnt() { return NoOfRecords(); } - xbLong NoOfRecords(); - xbLong PhysicalNoOfRecords(); - xbShort OpenDatabase( const char * ); - xbShort PackDatabase(xbShort LockWaitOption, - void (*packStatusFunc)(xbLong itemNum, xbLong numItems) = 0, - void (*indexStatusFunc)(xbLong itemNum, xbLong numItems) = 0); - xbShort PutRecord(); // Put record to current position - xbShort PutRecord(xbULong); - xbShort RebuildAllIndices( - void (*statusFunc)(xbLong itemNum, xbLong numItems) = 0); - xbShort RecordDeleted(); - //! Set number of records to zero???? - /*! - */ - void ResetNoOfRecs() { NoOfRecs = 0L; } - xbShort SetVersion( xbShort ); - //! Undelete all records - /*! - */ - xbShort UndeleteAllRecords() { return DeleteAll(1); } - xbShort UndeleteRecord(); - xbShort Zap( xbShort ); - -/* field methods */ - const char *GetField(xbShort FieldNo) const; // Using internal static buffer - const char *GetField(const char *Name) const; - xbShort GetField( xbShort FieldNo, char *Buf) const; - xbShort GetRawField( xbShort FieldNo, char *Buf) const; - xbShort GetField( xbShort FieldNo, char *Buf, xbShort RecBufSw) const; - xbShort GetField( const char *Name, char *Buf) const; - xbShort GetRawField(const char *Name, char *Buf) const; - xbShort GetField( const char *Name, char *Buf, xbShort RecBufSw) const; - xbShort GetField(xbShort FieldNo, xbString&, xbShort RecBufSw ) const; - xbShort GetFieldDecimal( xbShort ); - xbShort GetFieldLen( xbShort ); - char * GetFieldName( xbShort ); - xbShort GetFieldNo( const char * FieldName ) const; - char GetFieldType( xbShort FieldNo ) const; - xbShort GetLogicalField( xbShort FieldNo ); - xbShort GetLogicalField( const char * FieldName ); - char * GetStringField( xbShort FieldNo ); - char * GetStringField( const char * FieldName ); - xbShort PutField( xbShort, const char * ); - xbShort PutRawField( xbShort FieldNo, const char *buf ); - xbShort PutField( const char *Name, const char *buf); - xbShort PutRawField( const char *Name, const char *buf ); - xbShort ValidLogicalData( const char * ); - xbShort ValidNumericData( const char * ); - - xbLong GetLongField( const char *FieldName) const; - xbLong GetLongField( const xbShort FieldNo) const; - xbShort PutLongField( const xbShort, const xbLong ); - xbShort PutLongField( const char *, const xbLong); - - xbFloat GetFloatField( const char * FieldName ); - xbFloat GetFloatField( xbShort FieldNo ); - xbShort PutFloatField( const char *, const xbFloat); - xbShort PutFloatField( const xbShort, const xbFloat); - - xbDouble GetDoubleField( const char *); - xbDouble GetDoubleField( xbShort, xbShort RecBufSw = 0); - xbShort PutDoubleField( const char *, xbDouble); - xbShort PutDoubleField( const xbShort, xbDouble); - -#ifdef XB_LOCKING_ON - xbShort GetLockMode() { return LockMode; } - xbShort SetLockMode( xbShort ); -// xbShort OpenXbLockFile(); -// xbShort GetTableLockCnt() { return TableLockCnt; } -// xbShort LockIndex( xbShort LockType ); /* for XB_XBASE_LOCK_MODE */ - int GetDbfFileNo() { return fileno( fp ); } - int GetMemoFileNo() { return fileno( mfp ); } - -#ifdef XB_MEMO_FIELDS -// xbShort GetMemoLockCnt() { return MemoLockCnt; } -#endif - -/* - xbShort LockTable( xbShort LockType ); - xbShort LockXbaseTable( xbShort LockType ); - xbShort LockClipperTable( xbShort LockType ); - xbShort LockFoxproTable( xbShort LockType ); - xbShort LockDbaseTable( xbShort LockType ); - - xbShort LockRecord( xbShort LockType, xbULong RecNo, xbULong RecCnt ); - xbShort LockXbaseRecord( xbShort LockType, xbULong RecNo, xbULong RecCnt ); - xbShort LockClipperRecord( - xbShort LockType, xbULong RecNo, xbULong RecCnt ); - xbShort LockFoxproRecord( xbShort LockType, xbULong RecNo, xbULong RecCnt ); - xbShort LockDbaseRecord( xbShort LockType, xbULong RecNo, xbULong RecCnt ); - - xbShort LockDatabase( xbShort, xbShort, xbULong ); - xbShort ExclusiveLock( xbShort ); - xbShort ExclusiveUnlock(); - xbShort LockDatabase( xbShort cmd, xbULong recNo ) { return 0; } -*/ - -#ifndef HAVE_FCNTL - xbShort UnixToDosLockCommand( xbShort WaitOption, - xbShort LockType ) const; -#endif - -#else - xbShort LockDatabase( xbShort, xbShort, xbLong ) - { return XB_NO_ERROR; } - xbShort ExclusiveLock( xbShort ) { return XB_NO_ERROR; }; - xbShort ExclusiveUnlock() { return XB_NO_ERROR; }; -#endif - - //! Turn autolock on - /*! - */ - void AutoLockOn() { AutoLock = 1; } - //! Turn autolock off - /*! - */ - void AutoLockOff() { AutoLock = 0; } - //! Return whether or not autolocking is on or off - /*! - */ - xbShort GetAutoLock() { return AutoLock; } - -#ifdef XB_MEMO_FIELDS - xbShort GetMemoField( xbShort FieldNo, xbLong len, - char * Buf, xbShort LockOption ); - xbLong GetMemoFieldLen( xbShort FieldNo ); - xbShort GetFPTField( xbShort FieldNo, xbLong len, - char * Buf, xbShort LockOption ); - xbLong GetFPTFieldLen( xbShort FieldNo ); - xbShort UpdateMemoData( xbShort FieldNo, xbLong len, - const char * Buf, xbShort LockOption ); - xbShort MemoFieldExists( xbShort FieldNo ) const; - xbShort LockMemoFile( xbShort WaitOption, xbShort LockType ); - - xbShort MemoFieldsPresent() const; - xbLong CalcLastDataBlock(); - xbShort FindBlockSetInChain( xbLong BlocksNeeded, xbLong - LastDataBlock, xbLong & Location, xbLong &PreviousNode ); - xbShort GetBlockSetFromChain( xbLong BlocksNeeded, xbLong - Location, xbLong PreviousNode ); - xbString & GetDbtName() { return MemofileName; } - -#ifdef XBASE_DEBUG - xbShort DumpMemoFreeChain(); - void DumpMemoHeader() const; - void DumpMemoBlock() const; -#endif -#endif - - //! Turn on "real" deletes - /*! - This should be done before creating a database (with - xbDbf::CreateDatatabase()) and thereafter before opening - a database with xbDbfCreateDatabase(). - - You cannot "turn on" real deletes once a database has been created - and records added. - */ - void RealDeleteOn() { RealDelete = 1; if(fp) ReadHeader(1); } - /*! Turn off "real" deletes - */ - void RealDeleteOff() { RealDelete = 0; if(fp) ReadHeader(1); } - //! Return whether "real" deletes are on or off - /*! - Use this to determine if "real deletes" are being used with -the database. - */ - xbShort GetRealDelete() { return RealDelete; } - -#if defined(XB_INDEX_ANY) - xbShort IndexCount(); - xbIndex *GetIndex(xbShort indexNum); -#endif - - void Flush(); - virtual const char* GetExtWithDot( bool lower ); - - private: - - xbShort DeleteAll( xbShort ); - void InitVars(); - xbShort PackDatafiles(void (*statusFunc)(xbLong itemNum, xbLong numItems) = 0); - xbShort ReadHeader( xbShort ); - xbShort WriteHeader( xbShort ); - -#ifdef XB_MEMO_FIELDS - xbShort AddMemoData( xbShort FieldNo, xbLong Len, const char * Buf ); - xbShort CreateMemoFile(); - xbShort DeleteMemoField( xbShort FieldNo ); - xbShort GetDbtHeader( xbShort Option ); - xbShort GetMemoBlockSize() { return MemoHeader.BlockSize; } - xbShort OpenMemoFile(); - xbShort OpenFPTFile(); - xbShort PutMemoData( xbLong StartBlock, xbLong BlocksNeeded, - xbLong Len, const char * Buf ); - xbShort ReadMemoBlock( xbLong BlockNo, xbShort Option); - xbShort SetMemoBlockSize( xbShort ); - xbShort UpdateHeadNextNode() const; - xbShort WriteMemoBlock( xbLong BlockNo, xbShort Option ); - xbShort IsType3Dbt() const { return( Version==(char)0x83 ? 1:0 ); } - xbShort IsType4Dbt() const - {return (( Version==(char)0x8B || Version==(char)0x8E ) ? 1:0 );} - xbShort CreateUniqueDbfName( xbString &, xbString & ); -#endif - - -// xbString DatabaseName; - xbShort XFV; /* xBASE file version */ - xbShort NoOfFields; - char DbfStatus; /* 0 = closed - 1 = open - 2 = updates pending */ - FILE *fp; /* file pointer */ - xbSchemaRec *SchemaPtr; /* Pointer to field data */ - char *RecBuf; /* Pointer to record buffer */ - char *RecBuf2; /* Pointer to original rec buf */ - -#ifdef XB_MEMO_FIELDS - xbString MemofileName; /* memo file name */ - FILE *mfp; /* memo file pointer */ - void *mbb; /* memo block buffer */ - xbMH MemoHeader; /* memo header structure */ - xbShort mfield1; /* memo block field one FF */ - xbShort MStartPos; /* memo start pos of data */ - xbLong MFieldLen; /* memo length of data */ - xbLong NextFreeBlock; /* next free block in free chain */ - xbLong FreeBlockCnt; /* count of free blocks this set */ - xbLong MNextBlockNo; /* free block chain */ - xbLong MNoOfFreeBlocks; /* free block chain */ - xbLong CurMemoBlockNo; /* Current block no loaded */ -#endif - -/* Next seven variables are read directly off the database header */ -/* Don't change the order of the following seven items */ - char Version; - char UpdateYY; - char UpdateMM; - char UpdateDD; -// xbLong NoOfRecs; -// xbShort HeaderLen; -// xbShort RecordLen; - - xbULong NoOfRecs; - xbUShort HeaderLen; - xbUShort RecordLen; - -//#ifdef XB_REAL_DELETE - xbULong FirstFreeRec; - xbULong RealNumRecs; -//#endif - -// xbIxList * MdxList; - xbIxList * NdxList; - xbIxList * FreeIxList; - xbULong CurRec; /* Current record or zero */ - xbShort AutoLock; /* Auto update option 0 = off */ - -//#ifdef XB_REAL_DELETE - xbShort RealDelete; /* real delete option 0 = off */ -//#endif - -#ifdef XB_LOCKING_ON - FILE *xblfh; /* xbase lock file pointer for xbase locking */ - xbShort LockMode; /* lock mode for this table */ - xbString lfn; /* xbase lock file name for xbase locking */ - xbShort TableLockCnt; /* number of table locks */ - xbShort IndexLockCnt; /* no of index locks XB_XBASE_LOCK_MODE only */ - -#ifdef XB_MEMO_FIELDS - xbShort MemoLockCnt; /* number of memo file locks */ -#endif - - /* old locking stuff */ - xbShort CurLockType; /* current type of file lock */ - xbShort CurLockCount; /* number of current file locks */ - xbULong CurLockedRecNo; /* currently locked record no */ - xbShort CurRecLockType; /* current type of rec lock held (F_RDLOCK or F_WRLCK) */ - xbShort CurRecLockCount; /* number of current record locks */ - xbShort CurMemoLockType; /* current type of memo lock */ - xbShort CurMemoLockCount; /* number of current memo locks */ -#endif - -}; -#endif // __XB_DBF_H__ - - |