home *** CD-ROM | disk | FTP | other *** search
- /*************************************************
- ** **
- ** 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)