Files
sibo-playground/code/SIBOSDK/include/p_dbf.h
T

113 lines
5.6 KiB
C
Raw Normal View History

2026-07-06 18:01:36 +01:00
/* HEADER - P_DBF.H
Copyright (C) Psion PLC 1991-92
VER DATE BY DESCRIPTION
===== ======== === ===========
1.00F 26/04/90 NSM First relase
1.10F 07/07/92 NSM Second release
1.11F 31/08/23 AB #ifndef fix
*/
#ifndef P_DBF_H
#define P_DBF_H
#include <stdepoc.h>
#define DbfMaxRecords 0xfffe /* 0-fffd,1-fffe for OPL with ffff at eof */
#define DbfRecordTypeMask 0xf000 /* Top nibble of header word */
#define DbfRecordLengthMask 0x0fff /* Bottom 12 bits of header word */
#define DbfFieldTypeWord 0
#define DbfFieldTypeLong 1
#define DbfFieldTypeDouble 2
#define DbfFieldTypeString 3
#define DbfFindAllStrings -1 /* for nStrings parameter to DbfFindRead */
#define DbfFindBackwards 0x0000
#define DbfFindForwards 0x0100
#define DbfFindLast 0x0200
#define DbfFindFirst 0x0300
#define DbfFindCaseIndependent 0x0000
#define DbfFindCaseDependent 0x1000
#define DbfCopyFromHandle 0
#define DbfCopyToHandle 1
#define DbfStateCopyAbort -2 /* for DbfCopyFile only */
#define DbfStateOpenNoIndex -2 /* for DbfOpen only */
#define DbfStateDisabled -1
#define DbfStateStart 0
#define DbfStateScanBuffer 1
#define DbfStateGetBuffer 2
#define DbfStateFinished 3
#define DbfHeaderNameSize 16
#define DbfHeaderLength 22 /* Length of header without F.I.R */
#define DbfMaxFirLength 32 /* 32 bytes */
#define DbfMinBufferSize 512 /* Minimum buffer size */
#define DbfMaxBufferSize 16384 /* Maximum buffer size */
#define DbfMaxRecordLength 4094 /* Maximum record length,not inc. header */
#define DbfRecordTypeFir 2 /* Record type for Field Information Record */
#define DbfRecordTypeDesc 3 /* Record type for 'descriptive' record */
#define DbfRecordTypeAll 15 /* Record type to match all records (except erased) */
typedef struct
{
unsigned char fileType[DbfHeaderNameSize]; /* Name of the file type */
unsigned short int createVersion; /* software version used to create file */
unsigned short int dataStart; /* Offset in file for start of data */
unsigned short int needVersion; /* minimum software version needed to handle this file */
unsigned short int firHeader;
unsigned char fir[DbfMaxFirLength];
} DbfHeader;
typedef struct
{
unsigned short int header; /* Record header word */
unsigned char data[2]; /* Data follows... */
} DbfRecord;
typedef struct
{
void **pFcb; /* the address of the fcb */
char *fName; /* the file name */
unsigned int mode; /* the mode */
DbfHeader *pHead; /* the address of the header */
} DbfOpenArgs;
#ifdef __cplusplus
extern "C" {
#endif
#pragma save, call(reg_param=>(bx,dx),reg_saved=>(cx,si,di,EPOC_SAVE))
extern int DbfFileSize(void *pHandle,unsigned long int *pos);
#pragma call(reg_param=>(di,bx,si,dx,cx,ax),reg_saved=>(bx,cx,dx,si,di,EPOC_SAVE))
extern int DbfQuickOpen(int *pState,DbfOpenArgs *pArgs,unsigned char *buffer,unsigned int length,unsigned int type);
extern int DbfCopyFile(unsigned int *state,void *sHandle,const char *targetName,unsigned int targetMode,unsigned int type,int dir);
extern int DbfEraseRead(int *state,void *pHandle,unsigned short int *pOffset);
extern int DbfCompress(unsigned int *state,void *pHandle);
#pragma call(reg_param=>(di,bx,si,cx,dx,ax),reg_saved=>(bx,cx,dx,si,di,EPOC_SAVE))
extern int DbfFindRead(unsigned int *state,void *pHandle,const void *buffer,unsigned int length,unsigned int findMode,unsigned int nStrings,unsigned short int *pOffset);
#pragma call(reg_param=>(di,bx,cx),reg_saved=>(bx,cx,dx,si,di,EPOC_SAVE))
extern int DbfUpdate(int *state,void *pHandle,unsigned int length);
#pragma call(reg_param=>(bx,cx,si),reg_saved=>(bx,cx,dx,si,di,EPOC_SAVE))
extern int DbfAbsRead(void *pHandle,unsigned int record,unsigned short int *pOffset);
extern int DbfAppend(void *pHandle,unsigned int length);
extern int DbfFlush(void *pHandle);
extern int DbfClose(void *pHandle);
extern unsigned int DbfDescRecordRead(void *pHandle);
extern int DbfDescRecordWrite(void *pHandle,unsigned int length);
#pragma call(reg_param=>(bx,cx,si,di),reg_saved=>(bx,cx,si,di,EPOC_SAVE))
extern int DbfAbsReadSense(void *pHandle,unsigned int record,unsigned short int *pOffset,unsigned long int *pPos);
#pragma call(reg_param=>(bx,si),reg_saved=>(cx,dx,di,EPOC_SAVE))
extern int DbfNextRead(void *pHandle,unsigned short int *pOffset);
extern int DbfBackRead(void *pHandle,unsigned short int *pOffset);
extern int DbfFirstRead(void *pHandle,unsigned short int *pOffset);
extern int DbfLastRead(void *pHandle,unsigned short int *pOffset);
#pragma call(reg_param=>(ax,bx,si,cx),reg_saved=>(bx,cx,dx,si,di,EPOC_SAVE))
extern int DbfExtHeaderRead(unsigned int x,void *pHandle,void *buffer,unsigned int len);
extern int DbfExtHeaderWrite(unsigned int x,void *pHandle,const void *buffer,unsigned int len);
#pragma call(reg_param=>(bx,si),reg_saved=>(bx,cx,dx,si,di,EPOC_SAVE),inline=>on)
static unsigned int DbfVersion(void)={0xb4,0x0a,0xcd,0xd8};
static void DbfTrash(void *pHandle)={0xb4,0x03,0xcd,0xd8};
static unsigned int DbfSense(void *pHandle)={0xb4,0x15,0xcd,0xd8};
static unsigned int DbfCount(void *pHandle)={0xb4,0x16,0xcd,0xd8};
static int DbfCopyDown(void *pHandle,unsigned int offset)={0xb4,0x04,0xcd,0xd8};
#pragma restore
extern int cdecl DbfFindReadField(unsigned int *state,void *pHandle,const void *buffer,unsigned int length,unsigned int findMode,unsigned int nStrings,unsigned short int *pOffset,unsigned int startStr);
extern int cdecl DbfOpen(int *state,void **pHandle,const char *name,unsigned int mode,
DbfHeader *header,unsigned char *buffer,unsigned int length,unsigned int type);
#ifdef __cplusplus
}
#endif
#endif // P_DBF_H