home *** CD-ROM | disk | FTP | other *** search
/ Resource for Source: C/C++ / Resource for Source - C-C++.iso / misc_src / cslib16b / include / cstbase.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-01  |  4.4 KB  |  139 lines

  1. /***********************************************************************
  2.  
  3.                                       CSDB Library, Version 1.6.b 
  4.                                          Released: March 2nd 1995 
  5.  
  6.        Header file of the TBASE class.
  7.        Database class for records with a fixed length.
  8.  
  9.                                            Copyright(c) 1994,1995 
  10.                                                            Combis 
  11.                                                   The Netherlands 
  12. ***********************************************************************/
  13.  
  14. #ifndef __CSTBASE_H
  15. #define __CSTBASE_H
  16.  
  17. #include <dir.h>
  18. #include <stdio.h>
  19. #include <string.h>
  20. #include <alloc.h>
  21. #include "cspage.h"
  22.  
  23.  
  24. class TBASE: public PAGE
  25. {
  26.  
  27. protected:
  28.  
  29.    U16    lenrec;
  30.    U16    recpage;
  31.    U16    rec_foot;
  32.    U16    len_rec_plus_foot;
  33.    S32    NUMREC;
  34.    S32    lrco;
  35.    S32    wrco;
  36.    S32    rrco;
  37.    S32    cur_rec;
  38.  
  39.  
  40. protected:
  41.  
  42.    void check_rec(S32  l);
  43.  
  44.    S32    r2p(S32  rec)     { return (1+(rec-1)/recpage); }
  45.    U16    oinp(S32  rec)     { return (((U16 )((rec-1)%recpage))*len_rec_plus_foot); }
  46.  
  47.    virtual void check_id(U32 id);
  48.    virtual void set_id(void);
  49.  
  50.    void init_defaults(void);
  51.    void init_vars(void);
  52.    void vars2head(void);
  53.    void head2vars(void);
  54.  
  55. ////////////////////////////////////////////////////////////////////////
  56. ////////////////////// PUBLIC FUNCTIONS ////////////////////////////////
  57. ////////////////////////////////////////////////////////////////////////
  58.  
  59. public:
  60.    TBASE(void);
  61.    ~TBASE(void);
  62.  
  63.  
  64. //////////////////////// Compatibility function ////////////////////////
  65.    void speed_option_121(void)     { smallest_page(); }
  66.  
  67.  
  68. //////////////////////// Definition //////////////////////////////////////////
  69.    void smallest_page(void)     { recpage=1; }
  70.    int    define(CSCHAR *name,U16  reclen);
  71.  
  72. //////////////////////// Open & Close ////////////////////////////////////////
  73.    int    open(CSCHAR *name,S16 kb=32);
  74.    int    open(void)           { return already_open(); }
  75.    int    close(void);
  76.    int    save(void);
  77.  
  78. //////////////////////// Locate, Read & Writes records    ///////////////////////
  79.    CSCHAR *locate_rec(S32  rec)  { lrco++; return load_page(r2p(rec))+oinp(rec); }
  80.    CSCHAR *locate_rec_d(S32  rec)  { lrco++; return load_page_d(r2p(rec))+oinp(rec); }
  81.    CSCHAR *locate_rec_l(S32  rec)  { lrco++; return load_page_l(r2p(rec))+oinp(rec); }
  82.    CSCHAR *locate_rec_ld(S32  rec) { lrco++; return load_page_ld(r2p(rec))+oinp(rec); }
  83.    void locate_double(S32  rec1,void *&d1,S32  rec2,void *&d2);
  84.    void locate_double_d(S32  rec1,void *&d1,S32  rec2,void *&d2);
  85.  
  86.    void read_rec(  S32    rec, void *d);
  87.    void write_rec( S32    rec, void *d);
  88.  
  89. //////////////////////// Add Records /////////////////////////////////////////
  90.    S32    append_rec(void *data);
  91.    S32    append_rec(void);
  92.  
  93. ////////////////////////// Deleting ////////////////////////////////////////////
  94.    void set_delet(S32  r,int tf);
  95.    void undelet(void *d)  { *((CSCHAR *)d+lengthrec())=0; }
  96.    void delet(void *d)      { *((CSCHAR *)d+lengthrec())=1; }
  97.    int    is_delet(void *d) { return *((CSCHAR *)d+lengthrec()); }
  98.  
  99.    int    is_delet(S32  l)  { return is_delet(locate_rec(l)); }
  100.    void delet(S32  r)      { set_delet(r,TRUE); }
  101.    void undelet(S32  r )  { set_delet(r,FALSE); }
  102.  
  103. //////////////////////// Number of Records ///////////////////////////////////
  104.    S32    numrec(void)      { return NUMREC; }
  105.    void set_numrec(S32    n){ NUMREC=n; set_num_page(r2p(n)); }
  106.    void dec_numrec(void ) { NUMREC--; }
  107.  
  108. ////////////////////////// Record Length ///////////////////////////////////////
  109.    U16    lengthrec(void)   { return lenrec; }
  110.  
  111. //////////////////////// Report Writing //////////////////////////////////////
  112.    int    report(CSCHAR *name,int sub=1);
  113.    void report(FILE *fipo,int sub);
  114.  
  115. ////////////////////////// Current /////////////////////////////////////////////
  116.  
  117.    S32    set_current(S32  rec) { return cur_rec=max(min(rec,numrec()),0); }
  118.    S32    current(void)     { return cur_rec; }
  119.    S32    skip(S32  delta) { S32    l=current(); return (set_current(l+delta)-l); }
  120.    S32    next(S32  delta) { return skip(delta); }
  121.    S32    prev(S32  delta) { return -skip(-delta); }
  122.  
  123.  
  124. ////////////////////////// Miscellaneous ///////////////////////////////////////
  125. /* Inherited
  126.    int    background(void)
  127. */
  128.    int pack(void);
  129.    int zap(void);
  130.    void info(void);
  131.    int empty(void);
  132.    virtual int class_ID(void)  { return CS_CLID_TBASE; }
  133.  
  134.  
  135.  
  136. };
  137.  
  138. #endif
  139.