home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cslio205.zip / INCLUDE / CSPAGE.H < prev    next >
C/C++ Source or Header  |  1997-01-21  |  6KB  |  195 lines

  1. /***********************************************************************
  2.  
  3.                       CSDB Library, Free Evaluation Version 2.0.5 
  4.                                        Release: January 22th 1997 
  5.  
  6.        Foundation class.
  7.        Supplies buffered disk IO on a page-by-page
  8.        bases.
  9.  
  10.                                            Copyright(c) 1994-1997 
  11.                                                           ComBits 
  12.                                                   The Netherlands 
  13. ***********************************************************************/
  14.  
  15. #ifndef __CSPAGE_H
  16. #define __CSPAGE_H
  17.  
  18. #include "csbuff.h"
  19. #include "csbase.h"
  20.  
  21.  
  22. ////////////////////////////////////////////////////////////////////////////////
  23. ////////////////////////////////////////////////////////////////////////////////
  24.  
  25.  
  26. class PAGE: public BUFFER, public BASE
  27. {
  28.  
  29.  
  30. protected:
  31.    U32    pc_empty;   // Page Chain Empty
  32.    U32    pn_empty;   // Number of pages empty.
  33.    U16    ilock;        // Ignore lock bit.
  34.    void *sbp;        // SetvBuf Pointer.
  35.  
  36.  
  37. protected:
  38.  
  39.    int    hread(void *buf,int size);
  40.    int    hwrite(void *buf,int size);
  41.    int    close2(void);
  42.    int    user_2_data(void *buf,U32 amount);
  43.    int    data_2_user(void *buf,U32 amount);
  44.    void init_vars(void);
  45.    void init_defaults(void);
  46.    void init_allocs(void);
  47.    int    zap(void);
  48.    void emergency_exit(void);
  49.    U32    unfree_page(void);
  50.    void check_pq14(void);
  51.    virtual int check_id(U32 id);
  52.    virtual void set_id(void);
  53.  
  54.  
  55.  
  56. protected:
  57.  
  58. ///////////////////////// Compatibility ////////////////////////////////////
  59.  
  60.  
  61.  
  62. public:
  63.  
  64. // void name(csCHAR *s)       { BUFFER::name(s); BASE::name(s); }
  65.  
  66.  
  67. ////////////////////////////////////////////////////////////////////////////////
  68. ////////////////////////                ////////////////////////////
  69. ////////////////////////     P U B L I C        ////////////////////////////
  70. ////////////////////////                ////////////////////////////
  71. ////////////////////////////////////////////////////////////////////////////////
  72.  
  73.  
  74. public:
  75.    PAGE(void);
  76.    virtual
  77.   ~PAGE(void);
  78.  
  79.  
  80.  
  81. ///////////////////////// Error & Messages ///////////////////////////
  82.  
  83.    void    e_name(csCHAR *s)   { BUFFER::e_name(s); BASE::e_name(s); }
  84.    csCHAR *e_name(void)        { return BASE::e_name(); }
  85.  
  86.  
  87. //////////////////////// Definition //////////////////////////////////////////
  88. /* Inherited
  89.  
  90.    void page_size(U16 t)
  91.    U16    page_size(void)
  92.    U16    foot_size(void)
  93.    void foot_size(int size)   */
  94.  
  95.    int    define(csCHAR *name,U16 pagesize);
  96.    int    define(csCHAR *name)   { return define(name,lenpage); }
  97.  
  98.  
  99. //////////////////////// Buffering ///////////////////////////////////////////
  100. /* INHERITED
  101.    void number_buff_min(uint nr)
  102.    void number_buff_max(uint nr)
  103.    void number_buff(uint mini,uint maxi);
  104. */
  105.  
  106.  
  107. //////////////////////// Open & Close ////////////////////////////////////////
  108.  
  109.    int    read_only(void)     { return read_only(TRUE);  }
  110.    int    read_only(int ToF);
  111.  
  112.    int    is_read_only(void)  { return BASE::is_read_only(); }
  113.  
  114.    int    open(csCHAR *name,S16 kB=32);
  115.    int    close();
  116.  
  117.  
  118.    int    IsOpen(void)        { return BASE::IsOpen(); }
  119.    void IsOpen(int ToF)     { BASE::IsOpen(ToF);     }
  120.  
  121.  
  122.    int    setvbuf(U16 size);
  123.    int    save(void);
  124.    int    save_as(csCHAR *s);
  125.  
  126.  
  127. //////////////////////// Locate & Load Pages /////////////////////////////////
  128.  
  129.    csCHAR *locate_page_d(U32 page)  { return (csCHAR *)locate_buff_d(page); }
  130.    csCHAR *locate_page(U32 key,int prior,int rwl) { return (csCHAR *)locate_buff(key,prior,rwl); }
  131.    csCHAR *load_page(U32 page)        { return (csCHAR *)load_buff(page); }
  132.    csCHAR *load_page_d(U32 page)    { return (csCHAR *)load_buff_d(page); }
  133.    csCHAR *load_page_l(U32 page)    { return (csCHAR *)load_buff_l(page); }
  134.    csCHAR *load_page_ld(U32 page)   { return (csCHAR *)load_buff_ld(page); }
  135.    void *load_page(U32 key,int prior,int rwl)     { return (csCHAR *)load_buff(key,prior,rwl);  }
  136.    void locate_double(U32 r1,csCHAR* &p1,U32 r2,csCHAR* &p2);
  137.    void locate_double_d(U32 r1,csCHAR* &p1,U32 r2,csCHAR* &p2);
  138.  
  139.  
  140. //////////////////////// Read & Write Pages //////////////////////////////////
  141.  
  142.    void read_page( U32 l,void *p)  { memcpy(p,load_page(l),lenpage); }
  143.    void write_page( U32 l,void *p) { memcpy(locate_page_d(l),p,lenpage); }
  144.  
  145.  
  146. //////////////////////// New Pages ///////////////////////////////////////////
  147.  
  148.    U32    new_page(void)            { return ((pc_empty) ? unfree_page(): add_page()); }
  149.    U32    add_page(void);
  150.    void free_page(U32 num);
  151.    U32    nr_empty(void)            { return pn_empty; }
  152.  
  153.  
  154. //////////////////////// Number of Pages /////////////////////////////////////
  155. /* Inherited
  156.    U32 num_page(void) */
  157.    void set_num_page(U32 n)  { BASE::set_num_page(n); BUFFER::set_num_page(n); }
  158.  
  159. //////////////////////// Pages Status ////////////////////////////////////////
  160.  
  161.    int    is_dirty_page( U32 page)    { return BUFFER::is_dirty(page); }
  162.    void set_dirty_page(void *p    )   { BUFFER::dirty(p);    }
  163.    void set_dirty_page(U32 page)    { BUFFER::dirty(page); }
  164.    void reset_dirty_page(void *p)   { BUFFER::clean(p);    }
  165.    void reset_dirty_page(U32 page)  { BUFFER::clean(page); }
  166.  
  167. /* Inherited
  168.    void change_stat(void *page,int prior,int stat);
  169.    void change_stat(void *page,int prior);
  170.    int    priority(void *page);                          */
  171.  
  172. //////////////////////// Data in Header Page /////////////////////////////////
  173.    int    data_2_header(void * ptr,U16 length);
  174.    int    header_2_data(void * ptr,U16 length);
  175.    U16    max_data_in_header(void);
  176.  
  177. //////////////////////// Report Writing //////////////////////////////////////
  178.    int    report(csCHAR *name,int sub=1);
  179.    void report(FILE *f,int sub);
  180.  
  181. ////////////////////////// Miscellaneous ///////////////////////////////////////
  182. /* Inherited
  183.    U16    page_free(void)
  184.    int    background(void)
  185.    int    in_ram(U32 key);                      */
  186.    int    empty(void);
  187.  
  188.    virtual int class_ID(void)  { return 11; }
  189.  
  190.  
  191. };
  192.  
  193.  
  194. #endif
  195.