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

  1. /***********************************************************************
  2.  
  3.                                       CSDB Library, Version 1.6.b 
  4.                                          Released: March 2nd 1995 
  5.  
  6.        BASE class from which many database classes are
  7.        derived.
  8.  
  9.                                            Copyright(c) 1994,1995 
  10.                                                            Combis 
  11.                                                   The Netherlands 
  12. ***********************************************************************/
  13.  
  14. #ifndef __CSBASE_H
  15. #define __CSBASE_H
  16.  
  17. #include "stdio.h"
  18.  
  19. #ifndef __CSTOOLS_H
  20. #include "cstools.h"
  21. #endif
  22.  
  23. #ifndef __CSEDSTR_H
  24. #include "csedstr.h"
  25. #endif
  26.  
  27.  
  28. #define CS_CLID_VRAM        1
  29. #define CS_CLID_BTREE        2
  30. #define CS_CLID_VBASE        3
  31. #define CS_CLID_VBAXE        4
  32. #define CS_CLID_OLAY        5
  33. #define CS_CLID_DLAY        6
  34. #define CS_CLID_OLAYd        CS_CLID_DLAY
  35. #define CS_CLID_TBASE        7
  36. #define CS_CLID_RBASE        8
  37. #define CS_CLID_PAGE           11
  38. #define CS_CLID_BTREEb           12
  39. #define CS_CLID_BTREEi           13
  40. #define CS_CLID_BTREEc           14
  41. #define CS_CLID_BTREEl           15
  42. #define CS_CLID_BTREEf           16
  43. #define CS_CLID_BTREEd           17
  44. #define CS_CLID_BTREEa           18
  45. #define CS_CLID_VBASEi           19
  46. #define CS_CLID_VBASEd           20
  47.  
  48.  
  49. int cs_db_type(CSCHAR *name,U32 &fi_ID, U16 &cl_ID);
  50. U32 cs_fi_type(CSCHAR *name);
  51. U16 cs_cl_type(CSCHAR *name);
  52.  
  53.  
  54.  
  55. class VBAXE;
  56.  
  57.  
  58. /**************************************************************************/
  59. class BASE
  60. {
  61.  
  62. friend VBAXE;
  63.  
  64. protected:
  65.  
  66.    typedef struct
  67.    {
  68.      U32  CSLIB;
  69.      U32  ID;               // ID of file layout.
  70.      S16  class_id;           // Class name identifier.
  71.      U32  version;           // Version of the class.
  72.      S16  locked;           // Database file locked.
  73.      S8   date[14];           // Date of compilation.
  74.      S8   time[10];           // Time of compilation.
  75.      S16  compiler;           // Compiler name.
  76.      S32  creat_d;           // Date of creation
  77.      S32  creat_t;           // Time of creation
  78.      S32  updat_d;           // Date of last update
  79.      S32  updat_t;           // Time of last update
  80.      S32  user_data;           // Amount of user-data appended.
  81.      U16  headpagesize;        // Size of header page.
  82.      U32  numpage;           // PAGE number of pages.
  83.      U32  pc_empty;           // PAGE first empty page
  84.      U32  pn_empty;           // PAGE number of empty pages.
  85.      U16  page_foot;           // PAGE size of page-footer.
  86.      U16  lenpage;           // PAGE size of page.
  87.      U32  numrec;           // TBASE number of records
  88.      U16  rec_foot;           // TBASE size of record-footer.
  89.      U16  lenrec;           // TBASE size of record.
  90.      U16  recpage;           // TBASE number of records on a page.
  91.      union
  92.      {
  93.        struct
  94.        {
  95.       U16  vb_maxlen;      // VBASE naximum record length.
  96.       U32  vb_numrec;      // VBASE number of records.
  97.       U32  vb_nip;           // VBASE number of index pages.
  98.       U32  vb_edc_page;    // VBASE page number of empty data chains.
  99.       S16  vb_rel_shrink;  // VBASE relocate record when shrunk?
  100.        } VBASE;
  101.        struct
  102.        {
  103.       U32  avl_emp_pag;    // AVLd first empty page.
  104.       U32  avl_emp_off;    // AVLd first empty offset.
  105.       U16  avl_emp_amo;    // AVLd first empty amount.
  106.       U16  avl_emp_las;    // AVLd empty last in chain.
  107.       U32  avl_anc_pag;    // AVLd anchor page.
  108.       U32  avl_anc_off;    // AVLd anchor offset.
  109.       U32  ola_page;       // OLAY last page.
  110.       U32  ola_nr_empty;   // OLAY number of empty pages.
  111.       S32  ola_pos;        // OLAY pos of last byte.
  112.       S32  ola_empty;      // OLAY chain of empty ola-pages.
  113.       S32  ola_first_page; // OLAY first page-number.
  114.        } OLAY;
  115.        struct
  116.        {
  117.       U16  btr_datalen;    // BTREE data length
  118.       U16  btr_keylen;     // BTREE key length
  119.       S32  btr_empty;      // BTREE empty block chain
  120.       U16  btr_imnk;       // BTREE index degree
  121.       U16  btr_dmnk;       // BTREE data degree
  122.       S32  btr_nrkey;      // BTREE number of keys
  123.       S32  btr_root;       // BTREE root node
  124.       U16  btr_levels;     // BTREE number of layers
  125.       U16  btr_mulkey;     // BTREE multiple keys allowed
  126.       U32  btr_mk_emp;     // BTREE multiple keys empty data chain.
  127.        } BTREE;
  128.        struct
  129.        {
  130.       U16  vr_maxlen;      // VRAM maximum length of allocation.
  131.       U32  vr_number;      // VRAM number of allocations.
  132.       U32  vr_nedc;        // VRAM number of empty data chains.
  133.       U32  vr_edc_page;    // VRAM page Number of empty data chains.
  134.       U32  vr_root;        // VRAM root VPOI.
  135.       S16  vr_relocate;    // VRAM relocate when possible.
  136.        } VRAM;
  137.      } cl;
  138.    } db_header;
  139.  
  140.  
  141.    db_header *head;
  142.  
  143.    U16 is_open;
  144.    U32 numpage;
  145.    U16 lenpage;
  146.    U16 page_foot;
  147.    STR db_name;
  148.  
  149. protected:
  150.  
  151.    void set_page_size(U16 t);
  152.    void init_vars(void);
  153.    void init_defaults(void);
  154.  
  155. public:
  156.  
  157.    CSCHAR *e_name(void)       { return (CSCHAR *)db_name; }
  158.    void name(CSCHAR *s)       { db_name=s; }
  159.    void define(void);
  160.    void save(int updated);
  161.    void close(int updated)      { save(updated); }
  162.  
  163.    int    set_open(int FT)      { return is_open=FT; }
  164.  
  165. public:
  166.    BASE(void);
  167.    ~BASE(void);
  168.  
  169. //////////////////////// Definition //////////////////////////////////////////
  170.    void page_size(U16 t)      { set_page_size(t); }
  171.    U16    page_size(void)       { return lenpage;   }
  172.    U16    foot_size(void)       { return page_foot; }
  173.    void foot_size(int size)      { page_foot=size;   }
  174.  
  175. //////////////////////// Number of Pages /////////////////////////////////////
  176.    long num_page(void)          { return numpage; }
  177.    void set_num_page(long n)      { numpage=n; }
  178.  
  179.  
  180. ////////////////////////// Miscellaneous ///////////////////////////////////////
  181.    U16    page_free(void)       { return page_size()-foot_size(); }
  182.    void empty(void);
  183.    void zap(void);
  184.    int    already_open(void)      { return is_open; }
  185.    virtual int class_ID(void)=0;
  186.  
  187.  
  188. // Made public to support the program generator.
  189.    long sj_updated(void)      { return head->updat_d; }
  190.    long sj_created(void)      { return head->creat_d; }
  191.  
  192.  
  193. };
  194.  
  195.  
  196. #endif
  197.