static void hb_gt_cgi_Exit( PHB_GT pGT ) { PHB_GTCGI pGTCGI; HB_TRACE( HB_TR_DEBUG, ( "hb_gt_cgi_Exit(%p)", ( void * ) pGT ) ); HB_GTSELF_REFRESH( pGT ); pGTCGI = HB_GTCGI_GET( pGT ); HB_GTSUPER_EXIT( pGT ); if( pGTCGI ) { /* update cursor position on exit */ if( pGTCGI->iLastCol > 0 ) hb_gt_cgi_newLine( pGTCGI ); #ifndef HB_GT_CGI_RAWOUTPUT if( pGTCGI->iLineBufSize > 0 ) hb_xfree( pGTCGI->sLineBuf ); #endif if( pGTCGI->szCrLf ) hb_xfree( pGTCGI->szCrLf ); hb_xfree( pGTCGI ); } }
static void hb_gt_cgi_conPos( PHB_GTCGI pGTCGI, int iRow, int iCol ) { int iLineFeed = 0, iSpace = 0; if( pGTCGI->iRow != iRow ) { iLineFeed = pGTCGI->iRow < iRow ? iRow - pGTCGI->iRow : 1; } else if( pGTCGI->iCol > iCol ) { iLineFeed = 1; iSpace = iCol; } else if( pGTCGI->iCol < iCol ) { iSpace = iCol - pGTCGI->iCol; } if( iSpace > 0 ) { char * buffer = ( char * ) hb_xgrab( iSpace ); memset( buffer, ' ', iSpace ); hb_gt_cgi_termOut( pGTCGI, buffer, iSpace ); hb_xfree( buffer ); } while( --iLineFeed >= 0 ) hb_gt_cgi_newLine( pGTCGI ); pGTCGI->iRow = iRow; pGTCGI->iCol = iCol; }
static void hb_gt_cgi_Exit( PHB_GT pGT ) { PHB_GTCGI pGTCGI; HB_TRACE( HB_TR_DEBUG, ( "hb_gt_cgi_Exit(%p)", pGT ) ); HB_GTSELF_REFRESH( pGT ); pGTCGI = HB_GTCGI_GET( pGT ); HB_GTSUPER_EXIT( pGT ); if( pGTCGI ) { #if defined( HB_OS_WIN ) && ! defined( HB_OS_WIN_CE ) if( IsValidCodePage( CP_UTF8 ) ) SetConsoleOutputCP( pGTCGI->uiOldCP ); #endif /* update cursor position on exit */ if( pGTCGI->iLastCol > 0 ) hb_gt_cgi_newLine( pGTCGI ); #ifndef HB_GT_CGI_RAWOUTPUT if( pGTCGI->iLineBufSize > 0 ) hb_xfree( pGTCGI->sLineBuf ); #endif if( pGTCGI->szCrLf ) hb_xfree( pGTCGI->szCrLf ); hb_xfree( pGTCGI ); } }
static void hb_gt_cgi_Redraw( PHB_GT pGT, int iRow, int iCol, int iSize ) { int iColor; HB_BYTE bAttr; HB_USHORT usChar; int iLineFeed, iHeight, iWidth, iLen; PHB_GTCGI pGTCGI; HB_TRACE( HB_TR_DEBUG, ( "hb_gt_cgi_Redraw(%p,%d,%d,%d)", ( void * ) pGT, iRow, iCol, iSize ) ); pGTCGI = HB_GTCGI_GET( pGT ); HB_GTSELF_GETSIZE( pGT, &iHeight, &iWidth ); iLineFeed = iLen = 0; if( pGTCGI->iRow != iRow ) { iLineFeed = pGTCGI->iRow < iRow ? iRow - pGTCGI->iRow : 1; pGTCGI->iLastCol = pGTCGI->iCol = iCol = 0; iSize = iWidth; } else if( pGTCGI->iCol < iCol ) { iSize += iCol - pGTCGI->iCol; iCol = pGTCGI->iCol; } else if( pGTCGI->iCol > iCol ) { iLineFeed = 1; iCol = pGTCGI->iCol = pGTCGI->iLastCol = 0; iSize = iWidth; } while( iSize > 0 && iCol + iSize > pGTCGI->iLastCol && HB_GTSELF_GETSCRCHAR( pGT, iRow, iCol + iSize - 1, &iColor, &bAttr, &usChar ) ) { if( usChar != ' ' ) break; --iSize; } if( iSize > 0 ) { PHB_CODEPAGE cdpTerm = HB_GTSELF_TERMCP( pGT ); int iIndex = 0; while( --iLineFeed >= 0 ) hb_gt_cgi_newLine( pGTCGI ); pGTCGI->iRow = iRow; while( iLen < iSize ) { if( ! HB_GTSELF_GETSCRCHAR( pGT, iRow, iCol, &iColor, &bAttr, &usChar ) ) break; iIndex += ( int ) hb_cdpTextPutU16( cdpTerm, pGTCGI->sLineBuf + iIndex, pGTCGI->iLineBufSize - iIndex, usChar ); ++iLen; ++iCol; } if( iIndex ) { hb_gt_cgi_termOut( pGTCGI, pGTCGI->sLineBuf, iIndex ); pGTCGI->iCol = iCol; if( pGTCGI->iCol > pGTCGI->iLastCol ) pGTCGI->iLastCol = pGTCGI->iCol; } } }