diff --git a/harbour/ChangeLog b/harbour/ChangeLog index d856229331..135cb2b7fb 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,26 @@ 2002-12-01 23:12 UTC+0100 Foo Bar */ +2004-02-14 05:33 UTC+0100 Viktor Szakats + + * include/hbapigt.h + * source/rtl/gt_tpl/gt_tpl.c + * source/rtl/gtwin/gtwin.c + * source/rtl/gtcgi/gtcgi.c + * source/rtl/gtcrs/gtcrs.c + * source/rtl/gtdos/gtdos.c + * source/rtl/gtos2/gtos2.c + * source/rtl/gtpca/gtpca.c + * source/rtl/gtsln/gtsln.c + * source/rtl/gtstd/gtstd.c + + Following low-level GT API functions added (for completeness): + hb_gt_GetCharAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyChar, BYTE * pbyAttr ); + "static hb_gt_xGetXY()" functionality copied where available. + * Parameter of previously added functions changed from USHORT to SHORT + (to support moving windows out of screen) + + "static hb_gt_xPutch()" code copied to hb_gt_PutCharAttr() where available. + ! Added bounds checking to GTWIN new functions. + 2004-02-14 04:28 UTC+0100 Viktor Szakats * include/hbapigt.h diff --git a/harbour/include/hbapigt.h b/harbour/include/hbapigt.h index 07725ad39e..6a719b66dc 100644 --- a/harbour/include/hbapigt.h +++ b/harbour/include/hbapigt.h @@ -243,11 +243,12 @@ extern BOOL hb_gt_PreExt( void ); extern BOOL hb_gt_PostExt( void ); extern BOOL hb_gt_Suspend( void ); /* suspend the terminal before the shell call */ extern BOOL hb_gt_Resume( void ); /* resume the terminal after the shell call */ -extern void hb_gt_PutCharAttr( USHORT uiRow, USHORT uiCol, BYTE byChar, BYTE byAttr ); -extern void hb_gt_PutChar( USHORT uiRow, USHORT uiCol, BYTE byChar ); -extern void hb_gt_PutAttr( USHORT uiRow, USHORT uiCol, BYTE byAttr ); -extern void hb_gt_GetChar( USHORT uiRow, USHORT uiCol, BYTE * pbyChar ); -extern void hb_gt_GetAttr( USHORT uiRow, USHORT uiCol, BYTE * pbyAttr ); +extern void hb_gt_PutCharAttr( SHORT uiRow, SHORT uiCol, BYTE byChar, BYTE byAttr ); +extern void hb_gt_PutChar( SHORT uiRow, SHORT uiCol, BYTE byChar ); +extern void hb_gt_PutAttr( SHORT uiRow, SHORT uiCol, BYTE byAttr ); +extern void hb_gt_GetCharAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyChar, BYTE * pbyAttr ); +extern void hb_gt_GetChar( SHORT uiRow, SHORT uiCol, BYTE * pbyChar ); +extern void hb_gt_GetAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyAttr ); extern void hb_gt_Puts( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE * pbyStr, ULONG ulLen ); extern void hb_gt_PutText( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE * pbySrc ); extern int hb_gt_ExtendedKeySupport( void ); diff --git a/harbour/source/rtl/gt_tpl/gt_tpl.c b/harbour/source/rtl/gt_tpl/gt_tpl.c index c4d9cb86b7..94dfea3394 100644 --- a/harbour/source/rtl/gt_tpl/gt_tpl.c +++ b/harbour/source/rtl/gt_tpl/gt_tpl.c @@ -263,60 +263,72 @@ static void hb_gt_xPutch( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE byChar ) HB_SYMBOL_UNUSED( ulLen ); } -void hb_gt_PutCharAttr( USHORT uiRow, USHORT uiCol, BYTE byChar, BYTE byAttr ) +void hb_gt_PutCharAttr( SHORT uiRow, SHORT uiCol, BYTE byChar, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); - HB_SYMBOL_UNUSED( byAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byChar ); + HB_SYMBOL_UNUSED( byAttr ); } -void hb_gt_PutChar( USHORT uiRow, USHORT uiCol, BYTE byChar ) +void hb_gt_PutChar( SHORT uiRow, SHORT uiCol, BYTE byChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byChar ); } -void hb_gt_PutAttr( USHORT uiRow, USHORT uiCol, BYTE byAttr ) +void hb_gt_PutAttr( SHORT uiRow, SHORT uiCol, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byAttr ); } -void hb_gt_GetChar( USHORT uiRow, USHORT uiCol, BYTE * pbyChar ) +void hb_gt_GetCharAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyChar, BYTE * pbyAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetCharAttr(%hu, %hu, %p, %p)", uiRow, uiCol, pbyChar, pbyAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( pbyAttr ); } -void hb_gt_GetAttr( USHORT uiRow, USHORT uiCol, BYTE * pbyAttr ) +void hb_gt_GetChar( SHORT uiRow, SHORT uiCol, BYTE * pbyChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); +} + +void hb_gt_GetAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyAttr ) +{ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + + /* TODO */ + + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyAttr ); } void hb_gt_Puts( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE * pbyStr, ULONG ulLen ) diff --git a/harbour/source/rtl/gtcgi/gtcgi.c b/harbour/source/rtl/gtcgi/gtcgi.c index 2ef5ecbe36..72df070905 100644 --- a/harbour/source/rtl/gtcgi/gtcgi.c +++ b/harbour/source/rtl/gtcgi/gtcgi.c @@ -261,60 +261,77 @@ static void hb_gt_xPutch( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE byChar ) hb_gt_AdjustPos( ( BYTE * ) szBuffer, 1 ); } -void hb_gt_PutCharAttr( USHORT uiRow, USHORT uiCol, BYTE byChar, BYTE byAttr ) +void hb_gt_PutCharAttr( SHORT uiRow, SHORT uiCol, BYTE byChar, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); + char szBuffer[ 2 ]; - /* TODO */ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); - HB_SYMBOL_UNUSED( byAttr ); + HB_SYMBOL_UNUSED( byAttr ); + + hb_gt_SetPos( uiRow, uiCol, HB_GT_SET_POS_BEFORE ); + + szBuffer[ 0 ] = byChar; + szBuffer[ 1 ] = '\0'; + out_stdout( szBuffer, 1 ); + + hb_gt_AdjustPos( ( BYTE * ) szBuffer, 1 ); } -void hb_gt_PutChar( USHORT uiRow, USHORT uiCol, BYTE byChar ) +void hb_gt_PutChar( SHORT uiRow, SHORT uiCol, BYTE byChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byChar ); } -void hb_gt_PutAttr( USHORT uiRow, USHORT uiCol, BYTE byAttr ) +void hb_gt_PutAttr( SHORT uiRow, SHORT uiCol, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byAttr ); } -void hb_gt_GetChar( USHORT uiRow, USHORT uiCol, BYTE * pbyChar ) +void hb_gt_GetCharAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyChar, BYTE * pbyAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetCharAttr(%hu, %hu, %p, %p)", uiRow, uiCol, pbyChar, pbyAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( pbyAttr ); } -void hb_gt_GetAttr( USHORT uiRow, USHORT uiCol, BYTE * pbyAttr ) +void hb_gt_GetChar( SHORT uiRow, SHORT uiCol, BYTE * pbyChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); +} + +void hb_gt_GetAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyAttr ) +{ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + + /* TODO */ + + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyAttr ); } void hb_gt_Puts( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE * pbyStr, ULONG ulLen ) diff --git a/harbour/source/rtl/gtcrs/gtcrs.c b/harbour/source/rtl/gtcrs/gtcrs.c index bf3b048501..9deb60e079 100644 --- a/harbour/source/rtl/gtcrs/gtcrs.c +++ b/harbour/source/rtl/gtcrs/gtcrs.c @@ -57,12 +57,6 @@ #include "hbinit.h" #include "hbapiitm.h" -/* -#define hb_gt_xPutch( uiRow, uiCol, byAttr, byChar ) \ - move( (uiRow), (uiCol) ); \ - addch( s_charmap_table[ (byChar) ] | s_alternate_char_set | s_color_table[ (byAttr) ] ); -*/ - /* static data */ static USHORT s_uiDispCount; @@ -325,60 +319,68 @@ static void hb_gt_xPutch( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE byChar ) addch( s_charmap_table[ byChar ] | s_alternate_char_set | s_color_table[ byAttr ] ); } -void hb_gt_PutCharAttr( USHORT uiRow, USHORT uiCol, BYTE byChar, BYTE byAttr ) +void hb_gt_PutCharAttr( SHORT uiRow, SHORT uiCol, BYTE byChar, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); - /* TODO */ - - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); - HB_SYMBOL_UNUSED( byAttr ); + move( uiRow, uiCol ); + addch( s_charmap_table[ byChar ] | s_alternate_char_set | s_color_table[ byAttr ] ); } -void hb_gt_PutChar( USHORT uiRow, USHORT uiCol, BYTE byChar ) +void hb_gt_PutChar( SHORT uiRow, SHORT uiCol, BYTE byChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byChar ); } -void hb_gt_PutAttr( USHORT uiRow, USHORT uiCol, BYTE byAttr ) +void hb_gt_PutAttr( SHORT uiRow, SHORT uiCol, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byAttr ); } -void hb_gt_GetChar( USHORT uiRow, USHORT uiCol, BYTE * pbyChar ) +void hb_gt_GetCharAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyChar, BYTE * pbyAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetCharAttr(%hu, %hu, %p, %p)", uiRow, uiCol, pbyChar, pbyAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( pbyAttr ); } -void hb_gt_GetAttr( USHORT uiRow, USHORT uiCol, BYTE * pbyAttr ) +void hb_gt_GetChar( SHORT uiRow, SHORT uiCol, BYTE * pbyChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); +} + +void hb_gt_GetAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyAttr ) +{ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + + /* TODO */ + + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyAttr ); } void hb_gt_Puts( USHORT uiRow, diff --git a/harbour/source/rtl/gtdos/gtdos.c b/harbour/source/rtl/gtdos/gtdos.c index 832fd45944..f70bb4f8ee 100644 --- a/harbour/source/rtl/gtdos/gtdos.c +++ b/harbour/source/rtl/gtdos/gtdos.c @@ -668,60 +668,93 @@ static void hb_gt_xPutch( USHORT cRow, USHORT cCol, BYTE attr, BYTE ch ) #endif } -void hb_gt_PutCharAttr( USHORT uiRow, USHORT uiCol, BYTE byChar, BYTE byAttr ) +void hb_gt_PutCharAttr( SHORT uiRow, SHORT uiCol, BYTE byChar, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); - /* TODO */ - - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); - HB_SYMBOL_UNUSED( byAttr ); +#if defined(__DJGPP__TEXT) + { + long ch_attr = ( byChar << 8 ) | byAttr; + puttext( uiCol + 1, uiRow + 1, uiCol + 1, uiRow + 1, &ch_attr ); + } +#elif defined(__DJGPP__) + { + ScreenPutChar( byChar, byAttr, uiCol, uiRow ); + } +#else + { + USHORT FAR * p = (USHORT FAR *) hb_gt_ScreenPtr( uiRow, uiCol ); + *p = (byAttr << 8) + byChar; + } +#endif } -void hb_gt_PutChar( USHORT uiRow, USHORT uiCol, BYTE byChar ) +void hb_gt_PutChar( SHORT uiRow, SHORT uiCol, BYTE byChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byChar ); } -void hb_gt_PutAttr( USHORT uiRow, USHORT uiCol, BYTE byAttr ) +void hb_gt_PutAttr( SHORT uiRow, SHORT uiCol, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byAttr ); } -void hb_gt_GetChar( USHORT uiRow, USHORT uiCol, BYTE * pbyChar ) +void hb_gt_GetCharAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyChar, BYTE * pbyAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetCharAttr(%hu, %hu, %p, %p)", uiRow, uiCol, pbyChar, pbyAttr)); - /* TODO */ - - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyChar ); +#if defined(__DJGPP__TEXT) + { + short ch_attr; + gettext( uiCol + 1, uiRow + 1, uiCol + 1, uiRow + 1, &ch_attr ); + *pbyChar = ch_attr >> 8; + *pbyAttr = ch_attr & 0xFF; + } +#elif defined(__DJGPP__) + { + ScreenGetChar( (int *) pbyChar, (int *) pbyAttr, uiCol, uiRow ); + } +#else + { + char FAR *p = hb_gt_ScreenPtr( uiRow, uiCol ); + *pbyChar = *p; + *pbyAttr = *( p + 1 ); + } +#endif } -void hb_gt_GetAttr( USHORT uiRow, USHORT uiCol, BYTE * pbyAttr ) +void hb_gt_GetChar( SHORT uiRow, SHORT uiCol, BYTE * pbyChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); +} + +void hb_gt_GetAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyAttr ) +{ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + + /* TODO */ + + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyAttr ); } void hb_gt_Puts( USHORT cRow, USHORT cCol, BYTE attr, BYTE *str, ULONG len ) diff --git a/harbour/source/rtl/gtos2/gtos2.c b/harbour/source/rtl/gtos2/gtos2.c index cdbc98e5b7..114965e201 100644 --- a/harbour/source/rtl/gtos2/gtos2.c +++ b/harbour/source/rtl/gtos2/gtos2.c @@ -688,60 +688,73 @@ static void hb_gt_xPutch( USHORT cRow, USHORT cCol, BYTE attr, BYTE ch ) } } -void hb_gt_PutCharAttr( USHORT uiRow, USHORT uiCol, BYTE byChar, BYTE byAttr ) +void hb_gt_PutCharAttr( SHORT uiRow, SHORT uiCol, BYTE byChar, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); - /* TODO */ + if (s_uiDispCount > 0){ + USHORT * p = (USHORT *) hb_gt_ScreenPtr( uiRow, uiCol ); + *p = (byAttr << 8) + byChar; - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); - HB_SYMBOL_UNUSED( byAttr ); + } else { + USHORT Cell = (byAttr << 8) + byChar; + VioWrtNCell((PBYTE) &Cell, 1, uiRow, uiCol, 0); + } } -void hb_gt_PutChar( USHORT uiRow, USHORT uiCol, BYTE byChar ) +void hb_gt_PutChar( SHORT uiRow, SHORT uiCol, BYTE byChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byChar ); } -void hb_gt_PutAttr( USHORT uiRow, USHORT uiCol, BYTE byAttr ) +void hb_gt_PutAttr( SHORT uiRow, SHORT uiCol, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byAttr ); } -void hb_gt_GetChar( USHORT uiRow, USHORT uiCol, BYTE * pbyChar ) +void hb_gt_GetCharAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyChar, BYTE * pbyAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); + char * p; - /* TODO */ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetCharAttr(%hu, %hu, %p, %p)", uiRow, uiCol, pbyChar, pbyAttr)); - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyChar ); + p = hb_gt_ScreenPtr( uiRow, uiCol ); + *pbyChar = *p; + *pbyAttr = *( p + 1 ); } -void hb_gt_GetAttr( USHORT uiRow, USHORT uiCol, BYTE * pbyAttr ) +void hb_gt_GetChar( SHORT uiRow, SHORT uiCol, BYTE * pbyChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); +} + +void hb_gt_GetAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyAttr ) +{ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + + /* TODO */ + + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyAttr ); } void hb_gt_Puts( USHORT usRow, USHORT usCol, BYTE attr, BYTE * str, ULONG len ) diff --git a/harbour/source/rtl/gtpca/gtpca.c b/harbour/source/rtl/gtpca/gtpca.c index ba95c7a690..e1b9ec9d8e 100644 --- a/harbour/source/rtl/gtpca/gtpca.c +++ b/harbour/source/rtl/gtpca/gtpca.c @@ -329,6 +329,7 @@ void hb_gt_SetCursorStyle( USHORT style ) static void hb_gt_xPutch( USHORT usRow, USHORT usCol, BYTE attr, BYTE byChar ) { char tmp[ 2 ]; + HB_TRACE(HB_TR_DEBUG, ("hb_gt_xPutch(%hu, %hu, %d, %i)", usRow, usCol, (int) attr, byChar)); /* TOFIX: add correct support for a single byte instead of a string @@ -348,60 +349,83 @@ static void hb_gt_xPutch( USHORT usRow, USHORT usCol, BYTE attr, BYTE byChar ) if( s_usCol > s_usMaxCol ) s_usCol = s_usMaxCol; } -void hb_gt_PutCharAttr( USHORT uiRow, USHORT uiCol, BYTE byChar, BYTE byAttr ) +void hb_gt_PutCharAttr( SHORT uiRow, SHORT uiCol, BYTE byChar, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); + char tmp[ 2 ]; - /* TODO */ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); - HB_SYMBOL_UNUSED( byAttr ); + /* TOFIX: add correct support for a single byte instead of a string + */ + tmp[ 0 ] = byChar; + tmp[ 1 ] = '\0'; + + /* Disable line wrap, set the new cursor position, send the string, then + enable line wrap (for OUTSTD() and OUTERR() ) */ + hb_gt_AnsiSetAttributes( byAttr ); + fprintf( stdout, "\x1B[=7l\x1B[%d;%dH%s\x1B[=7h", uiRow + 1, uiCol + 1, tmp ); + + /* Restore whatever used to be at the termination position */ + /* Update the cursor position */ + s_usRow = uiRow; + s_usCol = uiCol + 1; + if( s_usCol > s_usMaxCol ) s_usCol = s_usMaxCol; } -void hb_gt_PutChar( USHORT uiRow, USHORT uiCol, BYTE byChar ) +void hb_gt_PutChar( SHORT uiRow, SHORT uiCol, BYTE byChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byChar ); } -void hb_gt_PutAttr( USHORT uiRow, USHORT uiCol, BYTE byAttr ) +void hb_gt_PutAttr( SHORT uiRow, SHORT uiCol, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byAttr ); } -void hb_gt_GetChar( USHORT uiRow, USHORT uiCol, BYTE * pbyChar ) +void hb_gt_GetCharAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyChar, BYTE * pbyAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetCharAttr(%hu, %hu, %p, %p)", uiRow, uiCol, pbyChar, pbyAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( pbyAttr ); } -void hb_gt_GetAttr( USHORT uiRow, USHORT uiCol, BYTE * pbyAttr ) +void hb_gt_GetChar( SHORT uiRow, SHORT uiCol, BYTE * pbyChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); +} + +void hb_gt_GetAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyAttr ) +{ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + + /* TODO */ + + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyAttr ); } void hb_gt_Puts( USHORT usRow, USHORT usCol, BYTE attr, BYTE * str, ULONG len ) diff --git a/harbour/source/rtl/gtsln/gtsln.c b/harbour/source/rtl/gtsln/gtsln.c index e190f0536a..61fea2ffa5 100644 --- a/harbour/source/rtl/gtsln/gtsln.c +++ b/harbour/source/rtl/gtsln/gtsln.c @@ -511,60 +511,83 @@ static void hb_gt_xPutch( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE byChar ) /* *********************************************************************** */ -void hb_gt_PutCharAttr( USHORT uiRow, USHORT uiCol, BYTE byChar, BYTE byAttr ) +void hb_gt_PutCharAttr( SHORT uiRow, SHORT uiCol, BYTE byChar, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); + unsigned char Pos, Msk; + SLsmg_Char_Type SLchar, SLattr; - /* TODO */ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); - HB_SYMBOL_UNUSED( byAttr ); + Pos = ( unsigned char ) ( ( byChar & 0x7F ) >> 3 ); + Msk = ( unsigned char ) ( 1 << ( byChar & 0x07 ) ); + + /* build a Slang converted attribute - note we are clearing a high bit of color */ + SLattr = ( SLsmg_Char_Type )( ( ( byAttr - 7 ) & 0x7F ) << 8 ); + + /* this hack turns on Normal Char Set when we should draw a nation char. */ + if( s_bUse_Alt_Char_Hack || !( s_IsNationChar[ Pos ] & Msk ) ) + SLchar = s_convHighChars[ byChar ] | SLattr; /* build a Slang char */ + else + SLchar = ( SLsmg_Char_Type )byChar | SLattr; /* build a Slang char */ + + SLsmg_gotorc( uiRow, uiCol ); + SLsmg_write_raw( &SLchar, 1 ); } -void hb_gt_PutChar( USHORT uiRow, USHORT uiCol, BYTE byChar ) +void hb_gt_PutChar( SHORT uiRow, SHORT uiCol, BYTE byChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byChar ); } -void hb_gt_PutAttr( USHORT uiRow, USHORT uiCol, BYTE byAttr ) +void hb_gt_PutAttr( SHORT uiRow, SHORT uiCol, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byAttr ); } -void hb_gt_GetChar( USHORT uiRow, USHORT uiCol, BYTE * pbyChar ) +void hb_gt_GetCharAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyChar, BYTE * pbyAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetCharAttr(%hu, %hu, %p, %p)", uiRow, uiCol, pbyChar, pbyAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( pbyAttr ); } -void hb_gt_GetAttr( USHORT uiRow, USHORT uiCol, BYTE * pbyAttr ) +void hb_gt_GetChar( SHORT uiRow, SHORT uiCol, BYTE * pbyChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); +} + +void hb_gt_GetAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyAttr ) +{ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + + /* TODO */ + + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyAttr ); } void hb_gt_Puts( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE * pbyStr, ULONG ulLen ) diff --git a/harbour/source/rtl/gtstd/gtstd.c b/harbour/source/rtl/gtstd/gtstd.c index 95cee29ccb..b8b7c76722 100644 --- a/harbour/source/rtl/gtstd/gtstd.c +++ b/harbour/source/rtl/gtstd/gtstd.c @@ -388,60 +388,80 @@ static void hb_gt_xPutch( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE byChar ) hb_gt_AdjustPos( szBuffer, 1 ); } -void hb_gt_PutCharAttr( USHORT uiRow, USHORT uiCol, BYTE byChar, BYTE byAttr ) +void hb_gt_PutCharAttr( SHORT uiRow, SHORT uiCol, BYTE byChar, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); + BYTE szBuffer[ 2 ]; - /* TODO */ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); - HB_SYMBOL_UNUSED( byAttr ); + HB_SYMBOL_UNUSED( byAttr ); + + hb_gt_SetPos( uiRow, uiCol, HB_GT_SET_POS_BEFORE ); + + /* make the char into a string so it can be passed to AdjustPos + as well as being output */ + + szBuffer[ 0 ] = byChar; + szBuffer[ 1 ] = 0; + out_stdout( szBuffer, 1 ); + + hb_gt_AdjustPos( szBuffer, 1 ); } -void hb_gt_PutChar( USHORT uiRow, USHORT uiCol, BYTE byChar ) +void hb_gt_PutChar( SHORT uiRow, SHORT uiCol, BYTE byChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byChar ); } -void hb_gt_PutAttr( USHORT uiRow, USHORT uiCol, BYTE byAttr ) +void hb_gt_PutAttr( SHORT uiRow, SHORT uiCol, BYTE byAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( byAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( byAttr ); } -void hb_gt_GetChar( USHORT uiRow, USHORT uiCol, BYTE * pbyChar ) +void hb_gt_GetCharAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyChar, BYTE * pbyAttr ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetCharAttr(%hu, %hu, %p, %p)", uiRow, uiCol, pbyChar, pbyAttr)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); + HB_SYMBOL_UNUSED( pbyAttr ); } -void hb_gt_GetAttr( USHORT uiRow, USHORT uiCol, BYTE * pbyAttr ) +void hb_gt_GetChar( SHORT uiRow, SHORT uiCol, BYTE * pbyChar ) { - HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); - /* TODO */ + /* TODO */ - HB_SYMBOL_UNUSED( uiRow ); - HB_SYMBOL_UNUSED( uiCol ); - HB_SYMBOL_UNUSED( pbyAttr ); + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyChar ); +} + +void hb_gt_GetAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyAttr ) +{ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); + + /* TODO */ + + HB_SYMBOL_UNUSED( uiRow ); + HB_SYMBOL_UNUSED( uiCol ); + HB_SYMBOL_UNUSED( pbyAttr ); } void hb_gt_Puts( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE * pbyStr, ULONG ulLen ) diff --git a/harbour/source/rtl/gtwin/gtwin.c b/harbour/source/rtl/gtwin/gtwin.c index 43ddcff8af..6ac9d48a14 100644 --- a/harbour/source/rtl/gtwin/gtwin.c +++ b/harbour/source/rtl/gtwin/gtwin.c @@ -571,15 +571,35 @@ USHORT hb_gt_DispCount() /* *********************************************************************** */ -void hb_gt_PutCharAttr( USHORT uiRow, USHORT uiCol, BYTE byChar, BYTE byAttr ) +static void hb_gt_xPutch( USHORT usRow, USHORT usCol, BYTE byAttr, BYTE byChar ) { - ULONG i; + HB_TRACE(HB_TR_DEBUG, ("hb_gt_xPutch(%hu, %hu, %d, %i)", usRow, usCol, (int) byAttr, byChar)); + if ( s_pCharInfoScreen != NULL && + usRow < s_csbi.dwSize.Y && usCol < s_csbi.dwSize.X ) + { + int i = ( int ) ( usRow * s_csbi.dwSize.X + usCol ); + + s_pCharInfoScreen[i].Char.AsciiChar = ( CHAR ) byChar; + s_pCharInfoScreen[i].Attributes = ( WORD )( byAttr & 0xFF ); + + hb_gt_xUpdtSet( usRow, usCol, usRow, usCol ); + } +} + +/* *********************************************************************** */ + +void hb_gt_PutCharAttr( SHORT uiRow, SHORT uiCol, BYTE byChar, BYTE byAttr ) +{ HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutCharAttr(%hu, %hu, %i, %d)", uiRow, uiCol, byChar, (int) byAttr)); - if ( s_pCharInfoScreen != NULL ) + if ( s_pCharInfoScreen != NULL && + uiRow >= 0 && + uiCol >= 0 && + uiRow < s_csbi.dwSize.Y && + uiCol < s_csbi.dwSize.X ) { - i = (uiRow * s_csbi.dwSize.X) + uiCol; + ULONG i = (uiRow * s_csbi.dwSize.X) + uiCol; s_pCharInfoScreen[i].Char.AsciiChar = ( CHAR ) byChar; s_pCharInfoScreen[i].Attributes = ( WORD ) byAttr; hb_gt_xUpdtSet( uiRow, uiCol, uiRow, uiCol ); @@ -587,11 +607,15 @@ void hb_gt_PutCharAttr( USHORT uiRow, USHORT uiCol, BYTE byChar, BYTE byAttr ) } } -void hb_gt_PutChar( USHORT uiRow, USHORT uiCol, BYTE byChar ) +void hb_gt_PutChar( SHORT uiRow, SHORT uiCol, BYTE byChar ) { HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutChar(%hu, %hu, %i)", uiRow, uiCol, byChar)); - if ( s_pCharInfoScreen != NULL ) + if ( s_pCharInfoScreen != NULL && + uiRow >= 0 && + uiCol >= 0 && + uiRow < s_csbi.dwSize.Y && + uiCol < s_csbi.dwSize.X ) { s_pCharInfoScreen[(uiRow * s_csbi.dwSize.X) + uiCol].Char.AsciiChar = ( CHAR ) byChar; hb_gt_xUpdtSet( uiRow, uiCol, uiRow, uiCol ); @@ -599,11 +623,15 @@ void hb_gt_PutChar( USHORT uiRow, USHORT uiCol, BYTE byChar ) } } -void hb_gt_PutAttr( USHORT uiRow, USHORT uiCol, BYTE byAttr ) +void hb_gt_PutAttr( SHORT uiRow, SHORT uiCol, BYTE byAttr ) { HB_TRACE(HB_TR_DEBUG, ("hb_gt_PutAttr(%hu, %hu, %d)", uiRow, uiCol, (int) byAttr)); - if ( s_pCharInfoScreen != NULL ) + if ( s_pCharInfoScreen != NULL && + uiRow >= 0 && + uiCol >= 0 && + uiRow < s_csbi.dwSize.Y && + uiCol < s_csbi.dwSize.X ) { s_pCharInfoScreen[(uiRow * s_csbi.dwSize.X) + uiCol].Attributes = ( WORD ) byAttr; hb_gt_xUpdtSet( uiRow, uiCol, uiRow, uiCol ); @@ -611,18 +639,54 @@ void hb_gt_PutAttr( USHORT uiRow, USHORT uiCol, BYTE byAttr ) } } -void hb_gt_GetChar( USHORT uiRow, USHORT uiCol, BYTE * pbyChar ) +void hb_gt_GetCharAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyChar, BYTE * pbyAttr ) +{ + HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetCharAttr(%hu, %hu, %p, %p)", uiRow, uiCol, pbyChar, pbyAttr)); + + if ( s_pCharInfoScreen != NULL && + uiRow >= 0 && + uiCol >= 0 && + uiRow < s_csbi.dwSize.Y && + uiCol < s_csbi.dwSize.X ) + { + ULONG i = (uiRow * s_csbi.dwSize.X) + uiCol; + + *pbyAttr = ( BYTE ) ( s_pCharInfoScreen[i].Attributes & 0xFF ); + *pbyChar = ( BYTE ) s_pCharInfoScreen[i].Char.AsciiChar; + } + else + { + *pbyChar = 0; + *pbyAttr = 0; + } +} + +void hb_gt_GetChar( SHORT uiRow, SHORT uiCol, BYTE * pbyChar ) { HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetChar(%hu, %hu, %p)", uiRow, uiCol, pbyChar)); - *pbyChar = ( BYTE ) s_pCharInfoScreen[(uiRow * s_csbi.dwSize.X) + uiCol].Char.AsciiChar; + if ( s_pCharInfoScreen != NULL && + uiRow >= 0 && + uiCol >= 0 && + uiRow < s_csbi.dwSize.Y && + uiCol < s_csbi.dwSize.X ) + *pbyChar = ( BYTE ) s_pCharInfoScreen[(uiRow * s_csbi.dwSize.X) + uiCol].Char.AsciiChar; + else + *pbyChar = 0; } -void hb_gt_GetAttr( USHORT uiRow, USHORT uiCol, BYTE * pbyAttr ) +void hb_gt_GetAttr( SHORT uiRow, SHORT uiCol, BYTE * pbyAttr ) { HB_TRACE(HB_TR_DEBUG, ("hb_gt_GetAttr(%hu, %hu, %p)", uiRow, uiCol, pbyAttr)); - *pbyAttr = ( BYTE ) ( s_pCharInfoScreen[(uiRow * s_csbi.dwSize.X) + uiCol].Attributes & 0xFF ); + if ( s_pCharInfoScreen != NULL && + uiRow >= 0 && + uiCol >= 0 && + uiRow < s_csbi.dwSize.Y && + uiCol < s_csbi.dwSize.X ) + *pbyAttr = ( BYTE ) ( s_pCharInfoScreen[(uiRow * s_csbi.dwSize.X) + uiCol].Attributes & 0xFF ); + else + *pbyAttr = 0; } void hb_gt_Puts( USHORT usRow, USHORT usCol, BYTE byAttr, BYTE *pbyStr, ULONG ulLen ) @@ -962,24 +1026,6 @@ char * hb_gt_Version( void ) /* *********************************************************************** */ -static void hb_gt_xPutch( USHORT usRow, USHORT usCol, BYTE byAttr, BYTE byChar ) -{ - HB_TRACE(HB_TR_DEBUG, ("hb_gt_xPutch(%hu, %hu, %d, %i)", usRow, usCol, (int) byAttr, byChar)); - - if ( s_pCharInfoScreen != NULL && - usRow < s_csbi.dwSize.Y && usCol < s_csbi.dwSize.X ) - { - int i = ( int ) ( usRow * s_csbi.dwSize.X + usCol ); - - s_pCharInfoScreen[i].Char.AsciiChar = ( CHAR ) byChar; - s_pCharInfoScreen[i].Attributes = ( WORD )( byAttr & 0xFF ); - - hb_gt_xUpdtSet( usRow, usCol, usRow, usCol ); - } -} - -/* *********************************************************************** */ - USHORT hb_gt_Box( SHORT Top, SHORT Left, SHORT Bottom, SHORT Right, BYTE * szBox, BYTE byAttr ) {