home *** CD-ROM | disk | FTP | other *** search
- /* (c)Copyright Sequiter Software Inc., 1987-1990. All rights reserved.
-
- d4buf_clear()
- */
-
- #include "d4all.h"
-
- extern BASE * v4base ;
- extern int v4last_base ;
-
- int d4buf_clear( BASE *base_ptr, int i_buf )
- {
- BASE_BUF *buf ;
-
- if ( d4buf_flush( base_ptr, i_buf ) < 0 ) return -1 ;
- buf = base_ptr->bufs + i_buf ;
- buf->start_rec = buf->end_rec = -1L ;
-
- return 0 ;
- }
-
- int d4buf_clear_base( int base_ref )
- {
- int i_buf ;
- BASE *base_ptr ;
-
- if ( base_ref < 0 ) return -1 ;
- base_ptr = v4base + base_ref ;
-
- if ( base_ptr->buffer_changed )
- if ( d4write( d4recno()) < 0 ) return -1 ;
-
- if ( base_ptr->n_bufs <= 0 ) return 0 ;
-
- for( i_buf =0; i_buf < base_ptr->n_bufs; i_buf++ )
- if ( d4buf_clear( base_ptr, i_buf) < 0 ) return -1 ;
-
- return 0 ;
- }
-
-
- int d4buf_clear_all()
- {
- int base_on ;
-
- for ( base_on = v4last_base; base_on >= 0; base_on = v4base[base_on].prev )
- if ( d4buf_clear_base( base_on ) < 0 ) return -1 ;
-
- return 0 ;
- }
-
-
- int d4buf_clear_lend( int change_status )
- {
- int base_on, base_last ;
-
- base_last = -2 ;
- for ( base_on = v4last_base; base_on >= 0; base_on = v4base[base_on].prev )
- {
- if ( ! v4base[base_on].buf_may_lend ) return base_last ;
- if ( d4buf_clear_base( base_on ) < 0 ) return -1 ;
- if ( change_status ) v4base[base_on].buf_status = 1 ;
- base_last = base_on ;
- }
-
- return base_last ;
- }
-
-
- void d4buf_return()
- {
- /* Return any buffers which have been lent. */
- int base_on ;
-
- for ( base_on = v4last_base; base_on >= 0; base_on = v4base[base_on].prev )
- if ( v4base[base_on].n_bufs > 0 )
- v4base[base_on].buf_status = 2 ;
- }
-
- int d4buf_clear_after( int base_ref )
- {
- int base_on ;
-
- if ( base_ref < 0 ) return 0 ;
-
- for ( base_on = v4base[base_ref].next; base_on >= 0; base_on = v4base[base_on].next )
- if ( d4buf_clear_base( base_on ) < 0 ) return -1 ;
-
- return 0 ;
- }
-