static void hb_gt_std_Refresh( PHB_GT pGT ) { int iHeight, iWidth; PHB_GTSTD pGTSTD; HB_TRACE( HB_TR_DEBUG, ( "hb_gt_std_Refresh(%p)", pGT ) ); HB_GTSELF_GETSIZE( pGT, &iHeight, &iWidth ); pGTSTD = HB_GTSTD_GET( pGT ); if( pGTSTD->iLineBufSize == 0 ) { pGTSTD->sLineBuf = ( BYTE * ) hb_xgrab( iWidth ); pGTSTD->iLineBufSize = iWidth; } else if( pGTSTD->iLineBufSize != iWidth ) { pGTSTD->sLineBuf = ( BYTE * ) hb_xrealloc( pGTSTD->sLineBuf, iWidth ); pGTSTD->iLineBufSize = iWidth; } pGTSTD->fFullRedraw = FALSE; HB_GTSUPER_REFRESH( pGT ); if( pGTSTD->fFullRedraw ) { int i; if( pGTSTD->iRow < iHeight - 1 ) { for( i = pGTSTD->iRow + 1; i < iHeight; ++i ) hb_gt_std_DispLine( pGT, i ); } } }
static void hb_gt_std_Refresh( PHB_GT pGT ) { int iHeight, iSize; PHB_GTSTD pGTSTD; HB_TRACE( HB_TR_DEBUG, ( "hb_gt_std_Refresh(%p)", pGT ) ); pGTSTD = HB_GTSTD_GET( pGT ); HB_GTSELF_GETSIZE( pGT, &iHeight, &pGTSTD->iWidth ); iSize = pGTSTD->iWidth * HB_MAX_CHAR_LEN; if( pGTSTD->iLineBufSize != iSize ) { pGTSTD->sLineBuf = ( char * ) hb_xrealloc( pGTSTD->sLineBuf, iSize ); pGTSTD->iLineBufSize = iSize; } pGTSTD->fFullRedraw = HB_FALSE; HB_GTSUPER_REFRESH( pGT ); if( pGTSTD->fFullRedraw ) { int i; if( pGTSTD->iRow < iHeight - 1 ) { for( i = pGTSTD->iRow + 1; i < iHeight; ++i ) hb_gt_std_DispLine( pGT, i, 0, -1 ); } } }
static void hb_gt_std_Redraw( PHB_GT pGT, int iRow, int iCol, int iSize ) { BYTE bColor, bAttr; USHORT usChar; int iLineFeed, iBackSpace, iLen, iMin; PHB_GTSTD pGTSTD; HB_TRACE( HB_TR_DEBUG, ( "hb_gt_std_Redraw(%p,%d,%d,%d)", pGT, iRow, iCol, iSize ) ); iLineFeed = iBackSpace = 0; pGTSTD = HB_GTSTD_GET( pGT ); if( pGTSTD->iRow != iRow ) { iLineFeed = pGTSTD->iRow < iRow ? iRow - pGTSTD->iRow : 1; iCol = 0; iSize = pGTSTD->iLineBufSize; } else if( pGTSTD->iCol < iCol ) { iSize += iCol - pGTSTD->iCol; iCol = pGTSTD->iCol; } else if( pGTSTD->iCol > iCol ) { if( pGTSTD->fStdoutConsole && pGTSTD->iCol <= pGTSTD->iLineBufSize ) { iBackSpace = pGTSTD->iCol - iCol; if( iBackSpace > iSize ) iSize = iBackSpace; } else { iLineFeed = 1; iCol = 0; iSize = pGTSTD->iLineBufSize; } } iMin = iLineFeed > 0 || pGTSTD->iLastCol <= iCol ? 0 : pGTSTD->iLastCol - iCol; while( iSize > iMin && HB_GTSELF_GETSCRCHAR( pGT, iRow, iCol + iSize - 1, &bColor, &bAttr, &usChar ) ) { if( usChar != ' ' ) break; --iSize; } if( iSize > 0 ) { if( iLineFeed > 0 ) { /* * If you want to disable full screen redrawing in console (TTY) * output then comment out the 'if' block below, Druzus */ if( pGTSTD->fStdoutConsole ) { int i; if( pGTSTD->iRow > iRow ) { pGTSTD->iRow = -1; pGTSTD->fFullRedraw = TRUE; } for( i = pGTSTD->iRow + 1; i < iRow; ++i ) hb_gt_std_DispLine( pGT, i ); iLineFeed = 1; } do hb_gt_std_newLine( pGTSTD ); while( --iLineFeed ); pGTSTD->iLastCol = 0; } else if( iBackSpace > 0 ) { memset( pGTSTD->sLineBuf, HB_CHAR_BS, iBackSpace ); hb_gt_std_termOut( pGTSTD, pGTSTD->sLineBuf, iBackSpace ); } for( iLen = 0; iLen < iSize; ++iLen ) { if( !HB_GTSELF_GETSCRCHAR( pGT, iRow, iCol, &bColor, &bAttr, &usChar ) ) break; if( usChar < 32 || usChar == 127 ) usChar = '.'; pGTSTD->sLineBuf[ iLen ] = ( BYTE ) usChar; ++iCol; } if( iLen ) { #ifndef HB_CDP_SUPPORT_OFF if( pGTSTD->fDispTrans ) hb_cdpnTranslate( ( char * ) pGTSTD->sLineBuf, pGTSTD->cdpHost, pGTSTD->cdpTerm, iLen ); #endif hb_gt_std_termOut( pGTSTD, pGTSTD->sLineBuf, iLen ); } pGTSTD->iRow = iRow; pGTSTD->iCol = iCol; if( pGTSTD->iCol > pGTSTD->iLastCol ) pGTSTD->iLastCol = pGTSTD->iCol; } }
static void hb_gt_std_Redraw( PHB_GT pGT, int iRow, int iCol, int iSize ) { int iColor; HB_BYTE bAttr; HB_USHORT usChar; int iLineFeed, iBackSpace, iMin; PHB_GTSTD pGTSTD; HB_TRACE( HB_TR_DEBUG, ( "hb_gt_std_Redraw(%p,%d,%d,%d)", pGT, iRow, iCol, iSize ) ); iLineFeed = iBackSpace = 0; pGTSTD = HB_GTSTD_GET( pGT ); if( pGTSTD->iRow != iRow ) { iLineFeed = pGTSTD->iRow < iRow ? iRow - pGTSTD->iRow : 1; iCol = 0; iSize = pGTSTD->iWidth; } else if( pGTSTD->iCol < iCol ) { iSize += iCol - pGTSTD->iCol; iCol = pGTSTD->iCol; } else if( pGTSTD->iCol > iCol ) { if( pGTSTD->fStdoutConsole && pGTSTD->iCol <= pGTSTD->iWidth ) { iBackSpace = pGTSTD->iCol - iCol; if( iBackSpace > iSize ) iSize = iBackSpace; } else { iLineFeed = 1; iCol = 0; iSize = pGTSTD->iWidth; } } iMin = iLineFeed > 0 || pGTSTD->iLastCol <= iCol ? 0 : pGTSTD->iLastCol - iCol; while( iSize > iMin && HB_GTSELF_GETSCRCHAR( pGT, iRow, iCol + iSize - 1, &iColor, &bAttr, &usChar ) ) { if( usChar != ' ' ) break; --iSize; } if( iSize > 0 ) { if( iLineFeed > 0 ) { /* * If you want to disable full screen redrawing in console (TTY) * output then comment out the 'if' block below, Druzus */ if( pGTSTD->fStdoutConsole ) { int i; if( pGTSTD->iRow > iRow ) { pGTSTD->iRow = -1; pGTSTD->fFullRedraw = HB_TRUE; } for( i = pGTSTD->iRow + 1; i < iRow; ++i ) hb_gt_std_DispLine( pGT, i, 0, -1 ); iLineFeed = 1; } do { hb_gt_std_newLine( pGTSTD ); } while( --iLineFeed ); pGTSTD->iLastCol = 0; } else if( iBackSpace > 0 ) { memset( pGTSTD->sLineBuf, HB_CHAR_BS, iBackSpace ); hb_gt_std_termOut( pGTSTD, pGTSTD->sLineBuf, iBackSpace ); } hb_gt_std_DispLine( pGT, iRow, iCol, iSize ); } }