home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / CODE4-4.ZIP / HDR_EXMP.ZIP / INCLUDE.ZIP / D4BASE.H next >
Encoding:
C/C++ Source or Header  |  1989-10-14  |  11.8 KB  |  345 lines

  1. /*  d4base.h   (c)Copyright Sequiter Software Inc., 1987, 1988, 1989.  All rights reserved.  */
  2.  
  3. /*   FIELD */
  4.  
  5. typedef struct
  6. {
  7.     char    name[11] ;
  8.     char    type ;
  9.     short   width ;
  10.     short   decimals ;
  11.     short   offset ;
  12. }   FIELD ;
  13.  
  14.  
  15. /*   BASE */
  16.  
  17. typedef struct
  18. {
  19.    int     next ;            /* -1 flags last file in list */
  20.    int     prev ;            /* -1 flags first file in list */
  21.  
  22.    char    name[64] ;        /* full path file name */
  23.    int     dos_file ;
  24.    long    rec_lock ;        /*  Record Number Locked
  25.                                  0 if no specific record is locked */
  26.    int     file_lock ;       /*  0 Nothing Locked
  27.                                  1 File Locked
  28.                                  2 Record Count Bytes Locked */
  29.  
  30.    int     memo_file ;       /* Handle for Memo File */
  31.    int     memo_size ;       /* The memo file block size */
  32.  
  33.    /* Buffer Information */
  34.  
  35.    long    rec_num  ;        /* The record number; -1 for EOF */
  36.    int     buffer_len ;      /* The first character is the deletion flag */
  37.  
  38.    char   *old_buf ;         /* The original buffer must be kept for
  39.                               updating index files.  ie  finding the
  40.                               key which needs to be replaced */
  41.    char   *buffer  ;         /* The new_buf memory is allocated with the
  42.                               old_buf memory */
  43.  
  44.    int     num_fields ;      /* The number of data fields in the database */
  45.    FIELD  *fields ;          /* A pointer to the field information */
  46.  
  47.    int     index_ref ;       /* A reference to the last index file opened
  48.                                 for the database */
  49.    int     current_index ;   /* A reference to the index file actively used */
  50.  
  51.    int     filter_ref ;      /* The first filter reference for the database */
  52.    int     relate_ref ;    /* The first relation reference for the database */
  53.  
  54.    /* Database Header Information */
  55.  
  56.    char     version ;          /* 83H with .dbt, 03H without */
  57.    char     yy ;               /* Last Update */
  58.    char     mm ;
  59.    char     dd ;
  60.    long     num_recs ;         /* Generally not used by Code Base */
  61.    unsigned short  header_len; /* Header Length (Indicates # of fields) */
  62. }  BASE ;
  63.  
  64.  
  65.  
  66. /*    INDEX   */
  67.  
  68. typedef struct
  69. {
  70.    int     next ;
  71.    int     prev ;
  72.  
  73.    char    name[64] ;
  74.    int     dos_file ;
  75.    int     lock ;
  76.  
  77.    int     base_ref ;        /* The corresponding reference number for the
  78.                                 database */
  79.    char   *compile ;         /* A pseudo compiled version of the expression */
  80.  
  81.    int     block_ref ;       /* A reference to the current block of the index file */
  82.  
  83.    int     block_first ;     /* The first used memory block */
  84.    int     block_last ;      /* The last used memory block */
  85.    int     block_num ;         /* The number of blocks in the buffer chain */
  86.    int     block_max ;         /* The maximum number of blocks in the chain */
  87.  
  88.    char    i_type ;          /* 'C' - Character;  'N' - Numeric; 'D' -Date */
  89.  
  90.    /* Index File Header Information */
  91.  
  92.    #ifdef CLIPPER
  93.       short          old_version ;
  94.       long           virtual_eof ;   /* The next available file block */
  95.  
  96.       short          sign ;
  97.       short          version ;
  98.       long           root ;          /* Root Block */
  99.       long           eof ;           /* First Free Block Pointer */
  100.       short          group_len ;     /* Key Length + 2*sizeof(long) */
  101.       short          key_len ;       /* Key Length */
  102.       short          key_dec ;       /* Number of Decimals in Key */
  103.       short          keys_max ;      /* Maximum # of keys per block;  <= 100 */
  104.       short          keys_half ;     /* Maximum # of keys per half block */
  105.       char           expression[256];/* The index expression corresponding to the
  106.                                         database. */
  107.       short          unique   ;      /* TRUE if Unique */
  108.    #else
  109.       long           old_version ;
  110.  
  111.       long           root ;
  112.       long           eof  ;
  113.       long           version ;
  114.       short          key_len  ;
  115.       short          keys_max ;      /* Maximum # of keys per block;  <= 100 */
  116.       short          int_or_date ;   /* TRUE (1) if Numeric or Date Key */
  117.       short          group_len ;     /* key_len plus 8 increased to a multiple of 2 */
  118.       short          dummy ;                      
  119.       short          unique   ;      /* TRUE if Unique */
  120.       char           expression[256];/* The index expression corresponding to the
  121.                                         database. */
  122.    #endif
  123. }  INDEX ;
  124.  
  125.  
  126. typedef struct
  127. {
  128.    long  file_block ;
  129.    long  rec_num ;
  130.    char  value[ 512 - 3*sizeof(long) ] ;  /* The key size is variable */
  131. }  KEY ;
  132.  
  133.  
  134. typedef struct
  135. {
  136.    int   next ;
  137.    int   prev ;
  138.  
  139.    int   wrt ;         /* Must Write the Block */
  140.    long  file_block ;
  141.    int   key_on     ;  /* The current key.  Starts at 0.  -1 means none.
  142.                           num_keys+1 for key_on indicates EOF */
  143.  
  144.    /* Index File Block Format:
  145.  
  146.       Number of Keys
  147.  
  148.       Repeat for Each Key in Block -
  149.          Block Pointer  (Starting from 0)
  150.          Record Number
  151.          Key
  152.    */
  153.  
  154.    short num_keys ;
  155.  
  156.    #ifdef CLIPPER
  157.       short pointers[511] ;
  158.    #else
  159.       short dummy ;
  160.       KEY   key ;
  161.    #endif
  162.  
  163. }  BLOCK ;
  164.  
  165. #ifdef CLIPPER
  166.    #define  BLOCK_SIZE     1024
  167.    #define  MAX_KEY_SIZE    338
  168. #else  
  169.    #define  BLOCK_SIZE      512
  170.    #define  NULL_DATE   1.0E100
  171.    #define  MAX_KEY_SIZE    100
  172. #endif
  173.  
  174. #define  LOCK_START   1000000000L
  175.  
  176. extern   int    b4add( int, KEY *) ;
  177. extern   int    b4down( int, int) ;
  178. extern   int    b4get( int ) ;
  179. extern   KEY *  b4key( int) ;
  180. extern   int    b4leaf( int) ;
  181. extern   int    b4remove( int) ;
  182. extern   int    b4search( int, char *) ;
  183. extern   long   b4skip( int, long) ;
  184. extern   int    b4up( int) ;
  185. extern   int    b4write( int, int) ;
  186. extern   double c4atod( char *, int) ;
  187. extern   int    c4atoi( char *, int) ;
  188. extern   long   c4atol( char *, int) ;
  189. extern   char * c4dtoa( double, int, int) ;
  190. extern   int    c4dtok( int, double, char * ) ;
  191. extern   void   c4dt_dbf( char *, double *) ;
  192. extern   int    c4dt_index( char *, double *) ;
  193. extern   char * c4dt_format( char *, char *) ;
  194. extern   char * c4dt_unformat( char *, char *) ;
  195. extern   void   c4encode( char *, char *, char *, char *) ;
  196. extern   int    c4julian( int, int, int)       ;
  197. extern   void   c4key( char *, char *, char )  ;
  198. extern   char * c4ltoa( long, char *, int) ;
  199. extern   void   c4trim_n( char *, int ) ;
  200. extern   int    d4bottom( void ) ;
  201. extern   int    d4create( char *, int, FIELD *, int ) ;
  202. extern   int    d4close( void ) ;
  203. extern   int    d4close_all( void ) ;
  204. extern   int    d4delete( long) ;
  205. extern   int    d4deleted( void ) ;
  206. extern   int    d4go( long) ;
  207. extern   int    d4init( void ) ;
  208. extern   int    d4init_memory( int, int, int, int ) ;
  209. extern   int    d4lock( long, int) ;
  210. extern   int    d4pack( void ) ;
  211. extern   BASE * d4ptr( void ) ;
  212. extern   int    d4recall( long) ;
  213. extern   long   d4recno( void ) ;
  214. extern   long   d4reccount( void ) ;
  215. extern   int    d4ref( char *) ;
  216. extern   int    d4seek( void *) ;
  217. extern   int    d4select( int ) ;
  218. extern   int    d4skip( long) ;
  219. extern   int    d4top( void ) ;
  220. extern   int    d4unlock( long) ;
  221. extern   int    d4use( char * ) ;
  222. extern   int    d4use_excl( char * ) ;
  223. extern   int    d4write( long) ;
  224. extern   int    d4zap( long, long ) ;
  225. extern   void * e4eval( char *) ;
  226. extern   void * e4exec( char *) ;
  227. extern   char * e4name( char) ;
  228. extern   int    e4parse( char *, char **) ;
  229. extern   int    e4priority( char) ;
  230. extern   char   e4type( void ) ;
  231. extern   char * e4type_str( int) ;
  232. extern   int    e4type_error( char, int, int, int) ;
  233. extern   int    f4decimals( long) ;
  234. extern   char * f4name( long) ;
  235. extern   long   f4ref( char *) ;
  236. extern   long   f4j_ref( int ) ;
  237. extern   int    f4num_fields ( void ) ;
  238. extern   char * f4ptr( long) ;
  239. extern   void * f4record( void ) ;
  240. extern   int    f4record_width( void ) ;
  241. extern   int    f4replace( long, void *) ;
  242. extern   char * f4str( long) ;
  243. extern   int    f4true( long) ;
  244. extern   char   f4type( long) ;
  245. extern   double f4value( long) ;
  246. extern   int    f4width( long) ;
  247. extern   int    h4add( char **, int, int, int) ;
  248. extern   char * h4alloc( unsigned int) ;
  249. extern   char * h4alloc_try( unsigned int) ;
  250. extern   int    h4create( char **, int, int, int) ;
  251. extern   int    h4free( char **, int) ;
  252. extern   void   h4free_memory( void * ) ;
  253. extern   void   h4free_chain( char **, int ) ;
  254. extern   int    h4get( char **, int) ;
  255. extern   int    h4remove( char **, int) ;
  256. extern   int    i4add( int, char *, long) ;
  257. extern   int    i4bottom( int) ;
  258. extern   long   i4check( int) ;
  259. extern   int    i4close( int) ;
  260. extern   char * i4eval( int) ;
  261. extern   int    i4free( int ) ;
  262. extern   int    i4go( int, char *, long) ;
  263. extern   int    i4index( char *, char *, int, int) ;
  264. extern   int    i4keycmp( int, char *, char *) ;
  265. extern   int    i4lock( int, int) ;
  266. extern   int    i4open( char *) ;
  267. extern   int    i4ref( char *) ;
  268. extern   int    i4reindex( int ) ;
  269. extern   int    i4remove( int, char *, long) ;
  270. extern   int    i4seek( int, void *) ;
  271. extern   int    i4seek_ref( void ) ;
  272. extern   int    i4select( int) ;
  273. extern   long   i4skip( int, long) ;
  274. extern   int    i4top( int) ;
  275. extern   char   i4type( int) ;
  276. extern   int    i4unlock( int) ;
  277. extern   void   i4unselect( void ) ;
  278. extern   long * m4check( long ) ;
  279. extern   int    m4convert( char * ) ;
  280. extern   int    m4edit( long, long, char *, int ) ;
  281. extern   int    m4exist( long ) ;
  282. extern   int    m4read( long, long, char *, int ) ;
  283. extern   int    m4renamed( char * ) ;
  284. extern   int    m4write( long, long, char *, int ) ;
  285. extern   int    m3edit( long, long, char *, int ) ;
  286. extern   int    m3exist( long ) ;
  287. extern   int    m3read( long, long, char *, int ) ;
  288. extern   int    m3write( long, long, char *, int ) ;
  289. extern   int    u4file_first( char *, char * ) ;
  290. extern   int    u4file_next( char * ) ;
  291. extern   int    u4lock( int, long, long, int) ;
  292. extern   int    u4open( char *, int ) ;
  293. extern   int    u4name_char( char ) ;
  294. extern   void   u4name_full( char *, char *, char * ) ;
  295. extern   void   u4name_part( char *, char *, int, int ) ;
  296. extern   int    u4unlock( int, long, long ) ;
  297. extern   int    x4buffer( long, char *, unsigned int ) ;
  298. extern   void   x4buffer_copy( int, char * ) ;
  299. extern   int    x4blank( void ) ;
  300. extern   int    x4edit( void ) ;
  301. extern   int    x4filter( int (*)(void) ) ;
  302. extern   int    x4filter_pop( void ) ;
  303. extern   void   x4filter_reset( void ) ;
  304. extern   int    x4filter_do( void ) ;
  305. extern   int    x4list( void ) ;
  306. extern   int    x4relate( char *, int, int, long ) ;
  307. extern   int    x4relate_reset( void ) ;
  308. extern   int    x4relate_do( void ) ;
  309. extern   int    x4go( long ) ;
  310. extern   int    x4seek( char *) ;
  311. extern   int    x4skip( long ) ;
  312. extern   int    x4bottom( void ) ;
  313. extern   int    x4top( void ) ;
  314. extern   double x4sum( long ) ;
  315. extern   int    x4insert( long ) ;
  316. extern   int    x4replace( long, long, void * ) ;
  317.  
  318. #ifdef UNIX
  319.    extern long  filelength(int) ;
  320.    extern char *memmove( char *, char *, int ) ;
  321.    extern int   strnicmp( char *, char *, int ) ;
  322.    extern char *strupr( char *) ;
  323.    extern char *strlwr( char *) ;
  324.    extern char *ltoa( long, char *, int ) ;
  325.    extern char *itoa( int, char *, int ) ;
  326.    extern int   remove( char * ) ;
  327.    extern void  u4sort() ;
  328. #else
  329.    extern void  u4sort( void *, ... ) ;
  330.    extern int   u4error( int, char *, ... ) ;
  331. #endif
  332.  
  333. #ifdef TURBO
  334.    #ifndef _SIZE_T
  335.       #define _SIZE_T
  336.       typedef unsigned size_t ;
  337.    #endif
  338. #else
  339.    #ifndef _SIZE_T_DEFINED
  340.       #define _SIZE_T_DEFINED
  341.       typedef unsigned size_t ;
  342.    #endif
  343. #endif
  344.  
  345.