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:
Przemysław Czerpak
2013-09-19 09:52:39 +02:00
parent 4843c4f3f8
commit ff6d11c1d5
3 changed files with 68 additions and 8 deletions

View File

@@ -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

View File

@@ -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 );

View File

@@ -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 );