2013-09-19 09:52 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* src/rtl/hbgtcore.c
+ added support for GT parameters passed in //GT<NAME>
parameter after ":", i.e. //GT<NAME>:<params>
* src/rtl/gttrm/gttrm.c
+ added new parameters set in //GTTRM:<params>
1) "NOPOS" - inform GTTRM that terminal does not support
cursor position query: ESC [ 6 n
At startup GTTRM asks terminal about cursor position
and waits for answer for 2 seconds. If terminal doesn't
support it then it's unnecessary delay at application
startup.
2) "UTF8" or "UTF-8" - force UTF-8 terminal output
Useful when terminal does not support cursor position
query so it cannot be used to detect automatically
UTF-8 or ISO terminal mode.
3) "ISO" - force ISO terminal output
4) "XTERM", "LINUX", "PUTTY", "CONS" - force given terminal
type
f.e. working with Android Terminal Emulator it's good to use
//GTTRM:UTF8,NOPOS
because it still does not support cursor position query and
LANG variable is not set.
This commit is contained in:
@@ -10,6 +10,31 @@
|
||||
* Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment
|
||||
*/
|
||||
|
||||
2013-09-19 09:52 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
|
||||
* src/rtl/hbgtcore.c
|
||||
+ added support for GT parameters passed in //GT<NAME>
|
||||
parameter after ":", i.e. //GT<NAME>:<params>
|
||||
|
||||
* src/rtl/gttrm/gttrm.c
|
||||
+ added new parameters set in //GTTRM:<params>
|
||||
1) "NOPOS" - inform GTTRM that terminal does not support
|
||||
cursor position query: ESC [ 6 n
|
||||
At startup GTTRM asks terminal about cursor position
|
||||
and waits for answer for 2 seconds. If terminal doesn't
|
||||
support it then it's unnecessary delay at application
|
||||
startup.
|
||||
2) "UTF8" or "UTF-8" - force UTF-8 terminal output
|
||||
Useful when terminal does not support cursor position
|
||||
query so it cannot be used to detect automatically
|
||||
UTF-8 or ISO terminal mode.
|
||||
3) "ISO" - force ISO terminal output
|
||||
4) "XTERM", "LINUX", "PUTTY", "CONS" - force given terminal
|
||||
type
|
||||
f.e. working with Android Terminal Emulator it's good to use
|
||||
//GTTRM:UTF8,NOPOS
|
||||
because it still does not support cursor position query and
|
||||
LANG variable is not set.
|
||||
|
||||
2013-09-16 15:36 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
|
||||
* doc/pp_prg.txt
|
||||
! added missing REQUEST __WAIT in example code
|
||||
|
||||
@@ -2109,21 +2109,42 @@ static void hb_gt_trm_AnsiExit( PHB_GTTRM pTerm )
|
||||
/*
|
||||
* common functions
|
||||
*/
|
||||
static HB_BOOL hb_trm_Param( const char * pszParam )
|
||||
{
|
||||
HB_BOOL fResult = HB_FALSE;
|
||||
char * pszGtTrmParams = hb_cmdargString( "GTTRM" );
|
||||
|
||||
if( pszGtTrmParams )
|
||||
{
|
||||
fResult = strstr( hb_strupr( pszGtTrmParams ), pszParam ) != NULL;
|
||||
hb_xfree( pszGtTrmParams );
|
||||
}
|
||||
|
||||
return fResult;
|
||||
}
|
||||
|
||||
static HB_BOOL hb_trm_isUTF8( PHB_GTTRM pTerm )
|
||||
{
|
||||
HB_BOOL fUTF8 = HB_FALSE;
|
||||
char * szLang;
|
||||
|
||||
if( pTerm->fPosAnswer )
|
||||
{
|
||||
int iRow = 0, iCol = 0;
|
||||
HB_BOOL fSize;
|
||||
|
||||
hb_gt_trm_termOut( pTerm, "\005\r\303\255", 4 );
|
||||
fSize = pTerm->GetCursorPos( pTerm, &iRow, &iCol, "\r \r" );
|
||||
fUTF8 = pTerm->GetCursorPos( pTerm, &iRow, &iCol, "\r \r" ) &&
|
||||
iCol == 1;
|
||||
pTerm->iCol = 0;
|
||||
if( fSize )
|
||||
return iCol == 1;
|
||||
}
|
||||
|
||||
if( hb_trm_Param( "UTF8" ) || hb_trm_Param( "UTF-8" ) )
|
||||
return HB_TRUE;
|
||||
else if( hb_trm_Param( "ISO" ) )
|
||||
return HB_FALSE;
|
||||
else if( fUTF8 )
|
||||
return HB_TRUE;
|
||||
|
||||
szLang = getenv( "LANG" );
|
||||
return szLang && strstr( szLang, "UTF-8" ) != NULL;
|
||||
}
|
||||
@@ -2905,6 +2926,8 @@ static void hb_gt_trm_SetTerm( PHB_GTTRM pTerm )
|
||||
pTerm->iAttrMask = ~HB_GTTRM_ATTR_BOX;
|
||||
pTerm->terminal_ext = 0;
|
||||
pTerm->fAM = HB_FALSE;
|
||||
if( hb_trm_Param( "PUTTY" ) )
|
||||
pTerm->terminal_ext |= TERM_PUTTY;
|
||||
|
||||
szTerm = getenv( "HB_TERM" );
|
||||
if( szTerm == NULL || *szTerm == '\0' )
|
||||
@@ -2919,7 +2942,8 @@ static void hb_gt_trm_SetTerm( PHB_GTTRM pTerm )
|
||||
strstr( szTerm, "xterm" ) != NULL ||
|
||||
strncmp( szTerm, "rxvt", 4 ) == 0 ||
|
||||
strcmp( szTerm, "putty" ) == 0 ||
|
||||
strncmp( szTerm, "screen", 6 ) == 0 )
|
||||
strncmp( szTerm, "screen", 6 ) == 0 ||
|
||||
hb_trm_Param( "XTERM" ) )
|
||||
{
|
||||
pTerm->Init = hb_gt_trm_AnsiInit;
|
||||
pTerm->Exit = hb_gt_trm_AnsiExit;
|
||||
@@ -2937,7 +2961,8 @@ static void hb_gt_trm_SetTerm( PHB_GTTRM pTerm )
|
||||
}
|
||||
else if( strncmp( szTerm, "linux", 5 ) == 0 ||
|
||||
strcmp( szTerm, "tterm" ) == 0 ||
|
||||
strcmp( szTerm, "teraterm" ) == 0 )
|
||||
strcmp( szTerm, "teraterm" ) == 0 ||
|
||||
hb_trm_Param( "LINUX" ) )
|
||||
{
|
||||
pTerm->Init = hb_gt_trm_AnsiInit;
|
||||
pTerm->Exit = hb_gt_trm_AnsiExit;
|
||||
@@ -2953,7 +2978,8 @@ static void hb_gt_trm_SetTerm( PHB_GTTRM pTerm )
|
||||
pTerm->szAcsc = szExtAcsc;
|
||||
pTerm->terminal_type = TERM_LINUX;
|
||||
}
|
||||
else if( strncmp( szTerm, "cons", 4 ) == 0 )
|
||||
else if( strncmp( szTerm, "cons", 4 ) == 0 ||
|
||||
hb_trm_Param( "CONS" ) )
|
||||
{
|
||||
pTerm->Init = hb_gt_trm_AnsiInit;
|
||||
pTerm->Exit = hb_gt_trm_AnsiExit;
|
||||
@@ -2997,7 +3023,7 @@ static void hb_gt_trm_SetTerm( PHB_GTTRM pTerm )
|
||||
pTerm->hFileno = pTerm->hFilenoStdin;
|
||||
pTerm->fOutTTY = HB_TRUE;
|
||||
}
|
||||
pTerm->fPosAnswer = pTerm->fOutTTY;
|
||||
pTerm->fPosAnswer = pTerm->fOutTTY && ! hb_trm_Param( "NOPOS" );
|
||||
pTerm->fUTF8 = HB_FALSE;
|
||||
|
||||
hb_fsSetDevMode( pTerm->hFileno, FD_BINARY );
|
||||
|
||||
@@ -3876,7 +3876,16 @@ static HB_BOOL hb_gtTryInit( const char * szGtName, HB_BOOL fFree )
|
||||
if( szGtName )
|
||||
{
|
||||
if( hb_stackGetGT() == NULL )
|
||||
{
|
||||
if( fFree )
|
||||
{
|
||||
char * pszStr;
|
||||
if( ( pszStr = strchr( szGtName, ':' ) ) != NULL )
|
||||
* pszStr = '\0';
|
||||
}
|
||||
|
||||
hb_stackSetGT( hb_gtLoad( szGtName, NULL, NULL ) );
|
||||
}
|
||||
|
||||
if( fFree )
|
||||
hb_xfree( ( void * ) szGtName );
|
||||
|
||||
Reference in New Issue
Block a user