/************************************************* ** ** ** sc_base.h ** ** ** ** SoftC Database Library common header ** ** ** ** Copyright (C) 1988, 1989, 1990, 1991 by ** ** SoftC, Ltd. ** ** 16820 3rd St NE ** ** Ham Lake, MN 55304 ** ** (612) 434-6968 ** ** ** ** All rights reserved. ** *************************************************/ /********** * * Program Control Prototypes * **********/ int scdinit( int, int ); void scdterm( void ); /********** * * Defines * **********/ /* scdikfind, scdnkfind, scdckfind definitions */ #define SC_FIRST 1 /* find first key */ #define SC_EXACT 2 /* find exact key (uses record number) */ /* scdtrget, scdtrput definitions */ #define SC_CRUNCHNG 0 /* leave memo buffer unchanged */ #define SC_CRDELETE 0x100 /* delete soft carriage returns */ /* scdcopen, scddopen, scdiopen, scdnopen, scdtopen */ #define SC_RDWR 0 /* read/write access (default) */ #define SC_RDONLY 0x100 /* read only access */ #define SC_BUFFER 0 /* buffer disk writes in memory (default) */ #define SC_FLUSH 0x200 /* force all writes to disk */ #define SC_EXCLUDE 0 /* open file for exclusive use (default) */ #define SC_SHARED 0x400 /* open file for shared use */ /* scdcbfrsz, scddbfrsz, scdibfrsz, scdnbfrsz */ #define SC_SETSZ 0 /* set buffer size */ #define SC_GETSZ 1 /* get current buffer size */ /* scddrput, scdtrput */ #define SC_UPDATE 0x100 /* update existing record */ #define SC_ADD 0x200 /* append record at end of file */ /* scdccreate, scdicreate, scdncreate, scdmtnew */ #define SC_DESCEND 0x100 /* descending key order */ #define SC_UNIQUE 0x80 /* unique index keys */ #define SC_CKEY 'C' /* character type key */ #define SC_DKEY 'D' /* date type key */ #define SC_LKEY 'L' /* logical key type */ #define SC_NKEY 'N' /* numeric type key */ /* SoftC extended index file key types (scdncreate) */ #define SC_DBLKEY 1 /* double key */ #define SC_FLTKEY 2 /* float key */ #define SC_ULNGKEY 3 /* unsigned long key */ #define SC_LNGKEY 4 /* long key */ #define SC_USHTKEY 5 /* unsigned short key */ #define SC_SHTKEY 6 /* short key */ /* scdinit */ #define SC_USEXHNDL 1 /* allow more than 20 open files */ /********** * * Type Definitions * **********/ typedef struct { /* database field description */ char name[11]; /* field name */ char type; /* field type * 'c' or 'C' - character * 'd' or 'D' - date * 'f' or 'F' - floating point (binary) * 'l' or 'L' - logical * 't' or 'T' - true * 'f' or 'F' - false * 'y' or 'Y' - yes * 'n' or 'N' - no * '?' - uninitialized * 'n' or 'N' - floating point (bcd) */ int len; /* field width */ int decpl; /* decimal count */ } SC_FIELD; /* SoftC extended data file field types */ #define SC_SHORT_FLD 1 /* signed short integer (16 bits) */ #define SC_USHORT_FLD 2 /* unsigned short integer */ #define SC_LONG_FLD 3 /* signed long integer (32 bits) */ #define SC_ULONG_FLD 4 /* unsigned long integer */ #define SC_FLOAT_FLD 11 /* IEEE single real (32 bits) */ #define SC_MSFLT_FLD 12 /* Microsoft floating point (old) */ #define SC_DOUBLE_FLD 13 /* IEEE double real (64 bits) */ #define SC_MSDBL_FLD 14 /* Microsoft double (old) */ typedef struct { /* file open bit fields */ unsigned int isreadonly:1; /* read only - or - read/write (default) */ unsigned int isshareable:1; /* shared - or - single (default) */ unsigned int isunbuffered:1; /* no buffering - or - auto buffer (default) */ } SC_FLAGS; typedef struct { /* dBASE data file information packet */ char fname[80]; /* file name */ char style; /* file type (dBase3 or dBase4) */ char memo; /* memo file required */ char mdx; /* dBase4 .MDX file required (true or false) */ char trans; /* dBase4 transaction in process (true or false) */ char encrypt; /* dBase4 data file encrypted (true or false) */ char lockt; /* record/file/no lock */ unsigned long ladrs; /* beginning address of locked area */ unsigned long lsize; /* length of locked region */ SC_FLAGS flags; /* miscellaneous flags */ } SC_DBFINFO; /* SC_DBFINFO style flag */ #define SC_DB3 0 /* dBase3 type data file */ #define SC_DB4 1 /* dBase4 type data file */ #define SC_FP1 0x10 /* FoxPro1 type data file */ #define SC_DBL2 0x42 /* SoftC unique data file */ /* SC_DBFINFO memo flag */ #define SC_USEMEMO 1 /* memo file used */ #define SC_NOMEMO 0 /* no memo file required */ /* SC_DBFINFO lockt flag */ #define SC_DRECLCK 0x01 /* record lock active */ #define SC_DFILLCK 0x02 /* file lock active */ typedef struct { /* dBASE data file record information packet */ int reclen; /* record length in bytes */ int numflds; /* number of fields in record */ char *bfr; /* address of the record buffer */ } SC_DBFRINFO; typedef struct { /* dBASE memo file information packet */ char fname[80]; /* file name */ char style; /* file type (dBase3 or dBase4) */ SC_FLAGS flags; /* miscellaneous flags */ } SC_DBTINFO; typedef struct { /* FoxPro memo file information packet */ char fname[80]; /* file name */ SC_FLAGS flags; /* miscellaneous flags */ } SC_FPTINFO; typedef struct { /* dBASE index file information packet */ char fname[80]; /* file name */ char keytype; /* key type ('C' Character, 'N' Date/Numeric) */ char keylen; /* key length */ int exprlen; /* key expression length */ SC_FLAGS flags; /* miscellaneous flags */ } SC_NDXINFO; typedef struct { /* Clipper index file information packet */ char fname[80]; /* file name */ int keylen; /* key length */ int keydpl; /* number of decimal places in numeric keys */ int exprlen; /* key expression length */ SC_FLAGS flags; /* miscellaneous flags */ } SC_NTXINFO; typedef struct { /* FoxBASE index file information packet */ char fname[80]; /* file name */ char keytype; /* key type ('C' Character, 'N' Date/Numeric) */ char keylen; /* key length */ int exprlen; /* key expression length */ SC_FLAGS flags; /* miscellaneous flags */ } SC_IDXINFO; typedef struct { /* dBASE IV index file information packet */ char fname[80]; /* data file name */ int usedtags; /* number of tags in use */ SC_FLAGS flags; /* miscellaneous flags */ } SC_MDXINFO; typedef struct { /* dBASE IV tag information packet */ char tname[80]; /* tag file name */ char keytype; /* key type ('C' Character, 'D' Date, 'N' Numeric) */ char keylen; /* key length */ int exprlen; /* key expression length */ } SC_MDXTINFO; /********** * * dBASE Database File Manipulator Prototypes * **********/ int scddbfrsz( int, /* data file handle */ int *, /* I/O buffer length in records */ int ); /* set or get buffer length */ int scddbof( int ); /* file handle */ int scddclose( int ); /* file handle */ int scddcreate( char *, /* filename */ int, /* number of data fields */ SC_FIELD *, /* field description array */ int ); /* dBase version (3 or 4) */ int scddeof( int ); /* file handle */ int scddflush( int ); /* file handle */ int scddhget( int ); /* file handle */ int scddinfo( int, /* file handle */ SC_DBFINFO * ); /* file information & status */ int scddlock( int ); /* file handle */ int scddlud( int, /* file handle */ char *, /* last update date string */ int ); /* date string format */ int scddopenx( int *, /* file handle */ char *, /* filename */ int ); /* open mode & characteristics */ int scddpack( int *); /* data file handle */ int scddsize( int, /* file handle */ long * ); /* number of data records */ int scddunlock( int ); /* file handle */ /********** * * dBASE Database Field Manipulator Prototypes * **********/ int scddfgets( int, /* file handle */ int, /* field number */ char * ); /* buffer for field data */ int scddfget( int, /* file handle */ int, /* field number */ void * ); /* buffer for field data */ int scddfinfo( int, /* file handle */ int *, /* length of longest field */ SC_FIELD * ); /* field description array */ int scddfnam2no(int, /* file handle */ int *, /* field number */ char *); /* field name */ int scddfputs( int, /* file handle */ int, /* field number */ char * ); /* buffer for field data */ int scddfput( int, /* file handle */ int, /* field number */ void * ); /* buffer for field data */ /********** * * dBASE Database Record Manipulator Prototypes * **********/ int scddrclear( int ); /* file handle */ int scddrdel( int, /* file handle */ long ); /* record number to delete */ int scddrget( int, /* file handle */ long ); /* record number to read */ int scddrgetx( int, /* file handle */ char *, /* input buffer address */ long ); /* record number to read */ int scddrinfo( int, /* file handle */ SC_DBFRINFO * ); /* record info structure */ int scddrlock( int, /* file handle */ long ); /* record number to lock */ int scddrnum( int, /* file handle */ long * ); /* current data record number */ int scddrput ( int, /* file handle */ long *, /* record number */ int ); /* append or update record */ int scddrputx( int, /* file handle */ char *, /* output buffer address */ long *, /* record number */ int ); /* append or update record */ int scddrstat( int ); /* file handle */ int scddrundel( int, /* fiel handle */ long ); /* record number */ /********** * * dBase Memo File Manipulator Prototypes * **********/ int scdtclose( int ); /* file handle */ int scdtcreate( char * ); /* filename */ int scdtcreatex(char *, /* filename */ int, /* block size in 512 byte blocks */ int ); /* file format (dBASE 3/4) */ int scdthget( int ); /* file handle */ int scdtinfo( int, /* file handle */ SC_DBTINFO * ); /* file information and status */ int scdtopenx( int *, /* file handle */ char *, /* filename */ int ); /* open mode & characteristics */ int scdtpack( int, /* data file handle */ int *); /* memo file handle */ int scdtrget( int, /* file handle */ long, /* record number */ char **, /* buffer for record number */ int ); /* remove soft carriage returns? */ int scdtrput( int, /* file handle */ long *, /* record number */ char *, /* buffer for record data */ int ); /* insert soft carriage returns? */ /********** * * dBASE Index File Manipulators Prototypes * **********/ int scdnbfrsz( int, /* index file handle */ int *, /* buffer length in pages */ int ); /* set or get buffer length */ int scdnclose( int ); /* file handle */ int scdncreate( char *, /* filename */ int, /* index key type */ char *, /* key expression */ int ); /* key length */ int scdnexpr( int, /* file handle */ char * ); /* key expression */ int scdnflush( int ); /* file handle */ int scdnhget( int ); /* file handle */ int scdnindex( int, /* data file handle */ char *, /* new file name */ int, /* index key type */ char *, /* key expression */ int ); /* key length */ int scdninfo( int, /* file handle */ SC_NDXINFO * ); /* file information and status */ int scdnopenx( int *, /* file handle */ char *, /* filename */ int ); /* open mode and characteristics */ /********** * * dBASE Index Key Building Prototypes * **********/ int scdnkdate( double *, /* numeric date */ char *, /* date string */ int ); /* date string format type */ int scdnkmake( int, /* .DBF file handle */ int, /* .NDX file handle */ void ** ); /* index key */ /********** * * dBASE Index Key Manipulator Prototypes * **********/ int scdnkadd( int, /* file handle */ void *, /* key string */ long ); /* data record number */ int scdnkbot( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdnkcur( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdnkdel( int, /* file handle */ void *, /* key string */ long ); /* data record number */ int scdnkfind( int, /* file handle */ void *, /* key string */ long *, /* data record number */ int); /* exact match or first */ int scdnknext( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdnkprev( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdnktop( int, /* file handle */ void *, /* key string */ long *); /* data record number */ /********** * * Clipper Index File Manipulators Prototypes * **********/ int scdcbfrsz( int, /* index file handle */ int *, /* buffer length in pages */ int ); /* set or get buffer length */ int scdcclose( int ); /* file handle */ int scdccreate( char *, /* filename */ int, /* index key type */ char *, /* key expression */ int, /* key length */ int ); /* number of decimal places */ int scdcexpr( int, /* file handle */ char * ); /* key expression */ int scdcflush( int ); /* file handle */ int scdchget( int ); /* file handle */ int scdcindex( int, /* data file handle */ char *, /* new file name */ int, /* index key type */ char *, /* key expression */ int, /* key length */ int ); /* number of decimal places */ int scdcinfo( int, /* file handle */ SC_NTXINFO * ); /* file information and status */ int scdcopenx( int *, /* file handle */ char *, /* filename */ int ); /* open mode and characteristics */ /********** * * Clipper Index Key Building Prototypes * **********/ int scdckmake( int, /* .DBF file handle */ int, /* .NTX file handle */ void ** ); /* index key */ /********** * * Clipper Index Key Manipulator Prototypes * **********/ int scdckadd( int, /* file handle */ void *, /* key string */ long ); /* data record number */ int scdckbot( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdckcur( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdckdel( int, /* file handle */ void *, /* key string */ long ); /* data record number */ int scdckfind( int, /* file handle */ void *, /* key string */ long *, /* data record number */ int); /* exact match or first */ int scdcknext( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdckprev( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdcktop( int, /* file handle */ void *, /* key string */ long *); /* data record number */ /********** * * FoxBASE+/FoxPro Index File Manipulators Prototypes * **********/ int scdibfrsz( int, /* index file handle */ int *, /* buffer length in pages */ int ); /* set or get buffer length */ int scdiclose( int ); /* file handle */ int scdicreate( char *, /* filename */ int, /* index key type */ char *, /* key expression */ int ); /* key length */ int scdiexpr( int, /* file handle */ char * ); /* key expression */ int scdiflush( int ); /* file handle */ int scdihget( int ); /* file handle */ int scdiindex( int, /* data file handle */ char *, /* new file name */ int, /* index key type */ char *, /* key expression */ int ); /* key length */ int scdiinfo( int, /* file handle */ SC_IDXINFO * ); /* file information and status */ int scdiopenx( int *, /* file handle */ char *, /* filename */ int ); /* open mode and characteristics */ /********** * * FoxBASE+/FoxPro Index Key Building Prototypes * **********/ int scdikdate( char *, /* FoxBASE date */ char *, /* date string */ int ); /* date string format type */ int scdikmake( int, /* .DBF file handle */ int, /* .NTX file handle */ void ** ); /* index key */ int scdiknum( char *, /* FoxBASE double */ double ); /* C double */ /********** * * FoxBASE+/FoxPro Index Key Manipulator Prototypes * **********/ int scdikadd( int, /* file handle */ void *, /* key string */ long ); /* data record number */ int scdikbot( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdikcur( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdikdel( int, /* file handle */ void *, /* key string */ long ); /* data record number */ int scdikfind( int, /* file handle */ void *, /* key string */ long *, /* data record number */ int); /* exact match or first */ int scdiknext( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdikprev( int, /* file handle */ void *, /* key string */ long *); /* data record number */ int scdiktop( int, /* file handle */ void *, /* key string */ long *); /* data record number */ /********** * * FoxPro Memo File Manipulator Prototypes * **********/ int scdwclose( int ); /* file handle */ int scdwcreate( char *, /* filename */ int ); /* number of bytes per memo block */ int scdwinfo( int, /* file handle */ SC_FPTINFO * ); /* file information and status */ int scdwhget( int ); /* file handle */ int scdwopenx( int *, /* file handle */ char *, /* filename */ int ); /* open mode & characteristics */ int scdwpack( int, /* data file handle */ int *); /* memo file handle */ int scdwrget( int, /* file handle */ long, /* record number */ char ** ); /* buffer for record number */ int scdwrput( int, /* file handle */ long *, /* record number */ char *, /* buffer for record data */ int ); /* add/update switch */ /********** * * External Variables * **********/ extern int sc_date_style; /* date string format for scddfget/scddfput */ /********** * * Compatibility Definitions * **********/ #define scdfget(a,b,c) scddfget(a,b,c) #define scdfgetx(a,b,c,d) scddfget(a,b,c) #define scdfgets(a,b,c) scddfgets(a,b,c) #define scdfgetsx(a,b,c,d) scddfgets(a,b,c) #define scdfput(a,b,c) scddfput(a,b,c) #define scdfputx(a,b,c,d) scddfput(a,b,c) #define scdfputs(a,b,c) scddfputs(a,b,c) #define scdfputsx(a,b,c,d) scddfputs(a,b,c) #define scdfinfo(a,b,c) scddfinfo(a,b,c) #define scdfnam2no(a,b,c) scddfnam2no(a,b,c) #define scdrclear(a,b) scddrclear(a) #define scdrdel(a,b) scddrdel(a,b) #define scdrget(a,b) scddrgetx(a,NULL,b) #define scdrinfo(a,b,c,d,e) scddrinfo(a,b,c,d) #define scdrput(a,b,c) scddrputx(a,NULL,b,c) #define scdrundel(a,b) scddrundel(a,b) #define scdfgett(a,b,c) scdtrget(a,b,c,SC_CRDELETE) #define scdfgettx(a,b,c,d) scdtrget(a,b,c,d) #define scdfputt(a,b,c) scdtrput(a,b,c,66) #define scdfputtx(a,b,c,d) scdtrput(a,b,c,d) #define scdkadd(a,b,c) scdnkadd(a,b,c); #define scdkcur(a,b,c) scdnkcur(a,b,c); #define scdkdate(a,b) scdnkdate(a,b,SC_YMD) #define scdkdatex(a,b,c) scdnkdate(a,b,c) #define scdkdel(a,b,c) scdnkdel(a,b,c) #define scdkfind(a,b,c,d) scdnkfind(a,b,c,d) #define scdkfirst(a,b,c) scdnktop(a,b,c) #define scdklast(a,b,c) scdnkbot(a,b,c) #define scdkmake(a,b,c) scdnkmake(a,b,c) #define scdkmakex(a,b,c,d) scdnkmake(a,b,c) #define scdknext(a,b,c) scdnknext(a,b,c) #define scdkprev(a,b,c) scdnkprev(a,b,c) #define scdnopen(a,b) scdnopenx(a,b,SC_RDWR | SC_FLUSH | SC_EXCLUDE) #define scdpinfo(a,b) scdnbfrsz(a,b,SC_GETSZ) #define scdpnum(a,b) scdnbfrsz(a,b,SC_SETSZ) #define scdtopen(a,b) scdtopenx(a,b,SC_RDWR | SC_FLUSH | SC_EXCLUDE)