graphics.hlp (Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software, purely for historical purposes. If you're looking for up-to-date documentation, particularly for programming, you should not rely on the information found here, as it will be woefully out of date.
SCROLL.C
                                             Up Contents Index Back
────────────────────────────────────────────────────────────────────────────
 
/* SCROLL.C illustrates:
 *      _gettextwindow      _settextwindow      _scrolltextwindow
 *
 * See MODES.C for another use of _scrolltextwindow.
 */
 
#include <stdio.h>
#include <conio.h>
#include <graph.h>
 
void deleteline( void );
void insertline( void );
void status( char *msg );
 
void main()
{
    short row;
    char  buf[40];
 
    /* Set up screen for scrolling; put text window around scroll area. */
    _settextrows( 25 );
    _clearscreen( _GCLEARSCREEN );
    for( row = 1; row <= 25; row++ )
    {
        _settextposition( row, 1 );
        sprintf( buf, "Line %c             %2d", row + 'A' - 1, row );
        _outtext( buf );
    }
    getch();
    _settextwindow( 1, 1, 25, 10 );
 
    /* Delete some lines. */
    _settextposition( 11, 1 );
    for( row = 12; row < 20; row++ )
        deleteline();
    status( "Deleted 8 lines" );
 
    /* Insert some lines. */
    _settextposition( 5, 1 );
    for( row = 1; row < 6; row++ )
        insertline();
    status( "Inserted 5 lines" );
 
    /* Scroll up and down. */
    _scrolltextwindow( -7 );
    status( "Scrolled down 7 lines" );
    _scrolltextwindow( 5 );
    status( "Scrolled up 5 lines" );
    _setvideomode( _DEFAULTMODE );
}
 
/* Delete lines by scrolling them off the top of the current text window.
 * Save and restore original window.
 */
void deleteline()
{
    short left, top, right, bottom;
    struct rccoord rc;
 
    _gettextwindow( &top, &left, &bottom, &right );
    rc = _gettextposition();
    _settextwindow( rc.row, left, bottom, right );
    _scrolltextwindow( _GSCROLLUP );
    _settextwindow( top, left, bottom, right );
    _settextposition( rc.row, rc.col );
}
 
/* Insert some lines by scrolling in blank lines from the top of the
 * current text window. Save and restore original window.
 */
void insertline()
{
    short left, top, right, bottom;
    struct rccoord rc;
 
    _gettextwindow( &top, &left, &bottom, &right );
    rc = _gettextposition();
    _settextwindow( rc.row, left, bottom, right );
    _scrolltextwindow( _GSCROLLDOWN );
    _settextwindow( top, left, bottom, right );
    _settextposition( rc.row, rc.col );
}
 
/* Display and clear status in its own window. */
void status( char *msg )
{
    short left, top, right, bottom;
 
    _gettextwindow( &top, &left, &bottom, &right );
    _settextwindow( 1, 50, 2, 80 );
    _outtext( msg );
    getch();
    _clearscreen( _GWINDOW );
    _settextwindow( top, left, bottom, right );
}