home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c160 / 1.ddi / SOURCE / D4BUF_CL.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-22  |  2.0 KB  |  91 lines

  1. /*  (c)Copyright Sequiter Software Inc., 1987-1990.  All rights reserved.
  2.  
  3.     d4buf_clear()
  4. */
  5.  
  6. #include "d4all.h"
  7.  
  8. extern BASE *  v4base ;
  9. extern int     v4last_base ;
  10.  
  11. int  d4buf_clear( BASE *base_ptr, int i_buf )
  12. {
  13.    BASE_BUF *buf ;
  14.  
  15.    if ( d4buf_flush( base_ptr, i_buf ) < 0 )  return -1 ;
  16.    buf =  base_ptr->bufs + i_buf ;
  17.    buf->start_rec =  buf->end_rec = -1L ;
  18.  
  19.    return 0 ;
  20. }
  21.  
  22. int  d4buf_clear_base( int base_ref )
  23. {
  24.    int    i_buf ;
  25.    BASE  *base_ptr ;
  26.  
  27.    if ( base_ref < 0 )  return -1 ;
  28.    base_ptr =  v4base + base_ref ;
  29.  
  30.    if ( base_ptr->buffer_changed )
  31.       if ( d4write( d4recno()) < 0 )  return -1 ;
  32.  
  33.    if ( base_ptr->n_bufs <= 0 )  return 0 ;
  34.  
  35.    for( i_buf =0; i_buf < base_ptr->n_bufs; i_buf++ )
  36.       if ( d4buf_clear( base_ptr, i_buf) < 0 )  return -1 ;
  37.  
  38.    return 0 ;
  39. }
  40.  
  41.  
  42. int  d4buf_clear_all()
  43. {
  44.    int  base_on ;
  45.  
  46.    for ( base_on =  v4last_base; base_on >= 0; base_on = v4base[base_on].prev )
  47.        if ( d4buf_clear_base( base_on ) < 0 )  return -1 ;
  48.  
  49.    return 0 ;
  50. }
  51.  
  52.  
  53. int  d4buf_clear_lend( int change_status ) 
  54. {
  55.    int  base_on, base_last ;
  56.  
  57.    base_last = -2 ;
  58.    for ( base_on =  v4last_base; base_on >= 0; base_on = v4base[base_on].prev )
  59.    {
  60.       if ( ! v4base[base_on].buf_may_lend )  return base_last ;
  61.       if ( d4buf_clear_base( base_on ) < 0 )  return -1 ;
  62.       if ( change_status )  v4base[base_on].buf_status =  1 ;
  63.       base_last =  base_on ;
  64.    }
  65.  
  66.    return base_last ;
  67. }
  68.  
  69.   
  70. void  d4buf_return()
  71. {
  72.    /* Return any buffers which have been lent. */
  73.    int  base_on ;
  74.  
  75.    for ( base_on =  v4last_base; base_on >= 0; base_on = v4base[base_on].prev )
  76.       if ( v4base[base_on].n_bufs > 0 )   
  77.          v4base[base_on].buf_status =  2 ; 
  78. }
  79.  
  80. int  d4buf_clear_after( int base_ref )
  81. {
  82.    int  base_on ;
  83.  
  84.    if ( base_ref < 0 )  return 0 ;
  85.  
  86.    for ( base_on =  v4base[base_ref].next; base_on >= 0; base_on = v4base[base_on].next )
  87.       if ( d4buf_clear_base( base_on ) < 0 )  return -1 ;
  88.  
  89.    return 0 ;
  90. }
  91.