19990916-14:20 GMT+1
This commit is contained in:
@@ -1,3 +1,46 @@
|
||||
19990916-14:20 GMT+1 Victor Szel <info@szelvesz.hu>
|
||||
|
||||
* source/rtl/mouse/*.*
|
||||
* Copyright text format change.
|
||||
* source/rtl/gt/*.c
|
||||
! Indentations, formatting errors corrected.
|
||||
! // comments change to /**/
|
||||
+ Copyright headers added.
|
||||
* source/rtl/inkey.c
|
||||
! // comments change to /**/
|
||||
* source/rtl/gt/gt_tpl.c
|
||||
! Fixed hb_gt_SetMode() return value type.
|
||||
* source/rtl/gtapi.c
|
||||
! hb_gtRepChar() will check for buffer overflow.
|
||||
* include/gtapi.h
|
||||
! Added hb_gt_Replicate() to GTAPI.H
|
||||
* Variable names revised, standardized.
|
||||
* source/rtl/errorapi.c
|
||||
* hb_errPutArgs() Now using Item API instead of Array API.
|
||||
|
||||
* source/rtl/console.c
|
||||
source/rtl/gtapi.c
|
||||
source/rtl/gt/*.c
|
||||
include/gtapi.h
|
||||
+ API functions made more Clipper compatible with some arg type changes:
|
||||
hb_gtBox() - Character parameter: char * -> BYTE *
|
||||
hb_gtRepChar() - USHORT character changed to BYTE, this is not completely
|
||||
Clipper compatible, but I've considered a bug to accept a character
|
||||
in an USHORT.
|
||||
hb_gtRest() - Buffer parameter: char * -> void *
|
||||
hb_gtSave() - Buffer parameter: char * -> void *
|
||||
hb_gtWrite*() - Character parameter: char * -> BYTE *
|
||||
* Some types changed in the low-level API.
|
||||
hb_gt_IsColor() - retval: int -> BOOL
|
||||
hb_gt_Get/SetCursorStyle() - int -> USHORT to match the high level API
|
||||
hb_gt_Puts() - char * -> BYTE *, int -> ULONG for the length.
|
||||
hb_gt_GetText() - char * -> BYTE *
|
||||
hb_gt_PutText() - char * -> BYTE *
|
||||
hb_gt_Replicate() - char -> BYTE, DWORD -> ULONG
|
||||
; IMHO later we should change all unsigned coordinate types to signed ones,
|
||||
so that we can have a better "virtual screen" support. All attribute
|
||||
types to a generic HB_ATTR, all characters to HB_CHAR.
|
||||
|
||||
19990916-11:15 GMT+1 Victor Szel <info@szelvesz.hu>
|
||||
|
||||
* source/vm/hvm.c
|
||||
|
||||
@@ -48,60 +48,61 @@
|
||||
|
||||
extern void hb_gtInit( void );
|
||||
extern void hb_gtExit( void );
|
||||
extern int hb_gtBox( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * fpBoxString );
|
||||
extern int hb_gtBox( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE * pbyBoxString );
|
||||
extern int hb_gtBoxD( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight );
|
||||
extern int hb_gtBoxS( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight );
|
||||
extern int hb_gtColorSelect( USHORT uiColorIndex );
|
||||
extern int hb_gtDispBegin( void );
|
||||
extern USHORT hb_gtDispCount( void );
|
||||
extern int hb_gtDispEnd( void );
|
||||
extern int hb_gtGetBlink( BOOL * bBlink );
|
||||
extern int hb_gtGetColorStr( char * fpColorString );
|
||||
extern int hb_gtGetCursor( USHORT * uipCursorShape );
|
||||
extern int hb_gtGetPos( USHORT * uipRow, USHORT * uipCol );
|
||||
extern int hb_gtGetBlink( BOOL * pbBlink );
|
||||
extern int hb_gtGetColorStr( char * pszColorString );
|
||||
extern int hb_gtGetCursor( USHORT * puiCursorShape );
|
||||
extern int hb_gtGetPos( USHORT * puiRow, USHORT * puiCol );
|
||||
extern BOOL hb_gtIsColor( void );
|
||||
extern USHORT hb_gtMaxCol( void );
|
||||
extern USHORT hb_gtMaxRow( void );
|
||||
extern int hb_gtPostExt( void );
|
||||
extern int hb_gtPreExt( void );
|
||||
extern int hb_gtRectSize( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, USHORT * uipBuffSize );
|
||||
extern int hb_gtRepChar( USHORT uiRow, USHORT uiCol, USHORT uiChar, USHORT uiCount );
|
||||
extern int hb_gtRest( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * vlpScrBuff );
|
||||
extern int hb_gtSave( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * vlpScrBuff );
|
||||
extern int hb_gtScrDim( USHORT * uipHeight, USHORT * uipWidth );
|
||||
extern int hb_gtRectSize( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, USHORT * puiBuffSize );
|
||||
extern int hb_gtRepChar( USHORT uiRow, USHORT uiCol, BYTE byChar, USHORT uiCount );
|
||||
extern int hb_gtRest( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, void * pScrBuff );
|
||||
extern int hb_gtSave( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, void * pScrBuff );
|
||||
extern int hb_gtScrDim( USHORT * puiHeight, USHORT * puiWidth );
|
||||
extern int hb_gtScroll( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, SHORT iRows, SHORT iCols );
|
||||
extern int hb_gtSetBlink( BOOL bBlink );
|
||||
extern int hb_gtSetColorStr( char * fpColorString );
|
||||
extern int hb_gtSetColorStr( char * pszColorString );
|
||||
extern int hb_gtSetCursor( USHORT uiCursorShape );
|
||||
extern int hb_gtSetMode( USHORT uiRows, USHORT uiCols );
|
||||
extern int hb_gtSetPos( USHORT uiRow, USHORT uiCol );
|
||||
extern int hb_gtSetSnowFlag( BOOL bNoSnow );
|
||||
extern int hb_gtWrite( char * fpStr, ULONG length );
|
||||
extern int hb_gtWriteAt( USHORT uiRow, USHORT uiCol, char * fpStr, ULONG length );
|
||||
extern int hb_gtWriteCon( char * fpStr, ULONG length );
|
||||
extern int hb_gtWrite( BYTE * pbyStr, ULONG ulLen );
|
||||
extern int hb_gtWriteAt( USHORT uiRow, USHORT uiCol, BYTE * pbyStr, ULONG ulLen );
|
||||
extern int hb_gtWriteCon( BYTE * pbyStr, ULONG ulLen );
|
||||
|
||||
/* Private interface listed below. these are common to all platforms */
|
||||
|
||||
extern void hb_gt_Init( void );
|
||||
extern int hb_gt_IsColor( void );
|
||||
extern BOOL hb_gt_IsColor( void );
|
||||
extern void hb_gt_Done( void );
|
||||
extern USHORT hb_gt_GetScreenWidth( void );
|
||||
extern USHORT hb_gt_GetScreenHeight( void );
|
||||
extern void hb_gt_SetPos( USHORT cRow, USHORT cCol );
|
||||
extern void hb_gt_SetPos( USHORT uiRow, USHORT uiCol );
|
||||
extern USHORT hb_gt_Col( void );
|
||||
extern USHORT hb_gt_Row( void );
|
||||
extern void hb_gt_Scroll( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE attr, SHORT vert, SHORT horiz );
|
||||
extern void hb_gt_SetCursorStyle( int style );
|
||||
extern int hb_gt_GetCursorStyle( void );
|
||||
extern void hb_gt_Puts( USHORT cRow, USHORT cCol, BYTE attr, char *str, int len );
|
||||
extern void hb_gt_GetText( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, char *dest );
|
||||
extern void hb_gt_PutText( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, char *srce );
|
||||
extern void hb_gt_SetAttribute( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE attr );
|
||||
extern void hb_gt_DrawShadow( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE attr );
|
||||
extern void hb_gt_Scroll( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE byAttr, SHORT iRows, SHORT iCols );
|
||||
extern void hb_gt_SetCursorStyle( USHORT uiCursorShape );
|
||||
extern USHORT hb_gt_GetCursorStyle( void );
|
||||
extern void hb_gt_Puts( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE * pbyStr, ULONG ulLen );
|
||||
extern void hb_gt_GetText( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE * pbyDst );
|
||||
extern void hb_gt_PutText( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE * pbySrc );
|
||||
extern void hb_gt_SetAttribute( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE byAttr );
|
||||
extern void hb_gt_DrawShadow( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE byAttr );
|
||||
extern void hb_gt_DispBegin( void );
|
||||
extern void hb_gt_DispEnd( void );
|
||||
extern BOOL hb_gt_SetMode( USHORT uiRows, USHORT uiCols );
|
||||
extern BOOL hb_gt_GetBlink( void );
|
||||
extern void hb_gt_SetBlink( BOOL bBlink );
|
||||
extern void hb_gt_Replicate( BYTE byChar, ULONG ulLen );
|
||||
|
||||
#endif /* HB_GTAPI_H_ */
|
||||
|
||||
@@ -1019,7 +1019,7 @@ HARBOUR HB_SAVESCREEN( void )
|
||||
#ifdef HARBOUR_USE_GTAPI
|
||||
USHORT uiX;
|
||||
USHORT uiCoords[ 4 ];
|
||||
char * pBuffer;
|
||||
void * pBuffer;
|
||||
|
||||
uiCoords[ 0 ] = 0;
|
||||
uiCoords[ 1 ] = 0;
|
||||
@@ -1031,10 +1031,10 @@ HARBOUR HB_SAVESCREEN( void )
|
||||
uiCoords[ uiX - 1 ] = hb_parni( uiX );
|
||||
|
||||
hb_gtRectSize( uiCoords[ 0 ], uiCoords[ 1 ], uiCoords[ 2 ], uiCoords[ 3 ], &uiX );
|
||||
pBuffer = ( char * ) hb_xgrab( uiX );
|
||||
pBuffer = hb_xgrab( uiX );
|
||||
hb_gtSave( uiCoords[ 0 ], uiCoords[ 1 ], uiCoords[ 2 ], uiCoords[ 3 ], pBuffer );
|
||||
hb_retclen( pBuffer, uiX );
|
||||
hb_xfree( ( void * ) pBuffer );
|
||||
hb_xfree( pBuffer );
|
||||
#else
|
||||
hb_retc( "" );
|
||||
#endif
|
||||
@@ -1058,7 +1058,7 @@ HARBOUR HB_RESTSCREEN( void )
|
||||
uiCoords[ uiX - 1 ] = hb_parni( uiX );
|
||||
|
||||
hb_gtRest( uiCoords[ 0 ], uiCoords[ 1 ], uiCoords[ 2 ], uiCoords[ 3 ],
|
||||
hb_parc( 5 ) );
|
||||
( void * ) hb_parc( 5 ) );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -504,17 +504,15 @@ PHB_ITEM hb_errPutFlags( PHB_ITEM pError, USHORT uiFlags )
|
||||
|
||||
PHB_ITEM hb_errPutArgs( PHB_ITEM pError, USHORT uiArgCount, ... )
|
||||
{
|
||||
PHB_ITEM pArray = hb_itemNew( NULL );
|
||||
PHB_ITEM pArray = hb_itemArrayNew( uiArgCount );
|
||||
USHORT uiArgPos;
|
||||
va_list va;
|
||||
|
||||
/* Build the array from the passed arguments. */
|
||||
|
||||
hb_arrayNew( pArray, uiArgCount );
|
||||
|
||||
va_start( va, uiArgCount );
|
||||
for( uiArgPos = 1; uiArgPos <= uiArgCount; uiArgPos++ )
|
||||
hb_arraySet( pArray, uiArgPos, va_arg( va, PHB_ITEM ) );
|
||||
hb_itemArrayPut( pArray, uiArgPos, va_arg( va, PHB_ITEM ) );
|
||||
va_end( va );
|
||||
|
||||
/* Assign the new array to the object data item. */
|
||||
@@ -524,6 +522,8 @@ PHB_ITEM hb_errPutArgs( PHB_ITEM pError, USHORT uiArgCount, ... )
|
||||
hb_vmPush( pArray );
|
||||
hb_vmDo( 1 );
|
||||
|
||||
hb_itemRelease( pArray );
|
||||
|
||||
return pError;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,150 +3,172 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* GT_TPL.C: Video subsystem template.
|
||||
* Harbour Project source code:
|
||||
* Video subsystem template
|
||||
*
|
||||
* Copyright 1999 {list of individual authors and e-mail addresses}
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version, with one exception:
|
||||
*
|
||||
* The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
* and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
* an executable, this does not by itself cause the resulting executable
|
||||
* to be covered by the GNU General Public License. Your use of that
|
||||
* executable is in no way restricted on account of linking the HRL
|
||||
* and/or HVM code into it.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
* their web site at http://www.gnu.org/).
|
||||
*
|
||||
* User programs should never call this layer directly!
|
||||
*/
|
||||
|
||||
/* NOTE: User programs should never call this layer directly! */
|
||||
|
||||
/* TODO: include any standard headers here */
|
||||
|
||||
#include "gtapi.h"
|
||||
|
||||
void hb_gt_Init(void)
|
||||
void hb_gt_Init( void )
|
||||
{
|
||||
/* TODO: Is anything required to initialize the video subsystem? */
|
||||
/* TODO: Is anything required to initialize the video subsystem? */
|
||||
}
|
||||
|
||||
void hb_gt_Done(void)
|
||||
void hb_gt_Done( void )
|
||||
{
|
||||
/* TODO: */
|
||||
/* TODO: */
|
||||
}
|
||||
|
||||
int hb_gt_IsColor(void)
|
||||
BOOL hb_gt_IsColor( void )
|
||||
{
|
||||
/* TODO: How to detect this? */
|
||||
return 1;
|
||||
/* TODO: How to detect this? */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
char hb_gt_GetScreenWidth(void)
|
||||
USHORT hb_gt_GetScreenWidth( void )
|
||||
{
|
||||
/* TODO: How many columns on screen? */
|
||||
return (char)0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
char hb_gt_GetScreenHeight(void)
|
||||
USHORT hb_gt_GetScreenHeight( void )
|
||||
{
|
||||
/* TODO: How many rows on screen? */
|
||||
return (char)0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hb_gt_SetPos(char x, char y)
|
||||
void hb_gt_SetPos( USHORT uiRow, USHORT uiCol )
|
||||
{
|
||||
/* TODO: How to reposition the cursor? */
|
||||
}
|
||||
|
||||
char hb_gt_Col(void)
|
||||
USHORT hb_gt_Col( void )
|
||||
{
|
||||
/* TODO: What Column is the cursor on? */
|
||||
return 0;
|
||||
}
|
||||
|
||||
char hb_gt_Row(void)
|
||||
USHORT hb_gt_Row( void )
|
||||
{
|
||||
/* TODO: What Row is the cursor on? */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void hb_gt_GetCursorSize(char *start, char *end)
|
||||
static void hb_gt_GetCursorSize( char * start, char * end )
|
||||
{
|
||||
/* TODO: if your system supports the concept of cursor scan lines,
|
||||
/* TODO: if your system supports the concept of cursor scan lines,
|
||||
fill this in - otherwise, you need some way to detect the
|
||||
size of the current screen cursor. */
|
||||
*start = 0;
|
||||
*end = 0;
|
||||
*start = 0;
|
||||
*end = 0;
|
||||
}
|
||||
|
||||
int hb_gt_GetCursorStyle(void)
|
||||
USHORT hb_gt_GetCursorStyle( void )
|
||||
{
|
||||
/* TODO: What shape is the cursor? */
|
||||
int rc=0;
|
||||
USHORT rc = 0;
|
||||
/*
|
||||
char start, end
|
||||
if ( !visible )
|
||||
{
|
||||
rc=SC_NONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
char start, end;
|
||||
if( !visible )
|
||||
{
|
||||
rc = SC_NONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
*/
|
||||
/* example from the dos driver */
|
||||
/* example from the dos driver */
|
||||
/*
|
||||
hb_gt_GetCursorSize( &start, &end )
|
||||
if((start == 32) && (end == 32))
|
||||
{
|
||||
rc=SC_NONE;
|
||||
}
|
||||
else if((start == 6) && (end == 7))
|
||||
{
|
||||
rc=SC_NORMAL;
|
||||
}
|
||||
else if((start == 4) && (end == 7))
|
||||
{
|
||||
rc=SC_INSERT;
|
||||
}
|
||||
else if((start == 0) && (end == 7))
|
||||
{
|
||||
rc=SC_SPECIAL1;
|
||||
}
|
||||
else if((start == 0) && (end == 3))
|
||||
{
|
||||
rc=SC_SPECIAL2;
|
||||
}
|
||||
}
|
||||
hb_gt_GetCursorSize( &start, &end )
|
||||
|
||||
if( ( start == 32 ) && ( end == 32 ) )
|
||||
rc = SC_NONE;
|
||||
|
||||
else if( ( start == 6 ) && ( end == 7 ) )
|
||||
rc = SC_NORMAL;
|
||||
|
||||
else if( ( start == 4 ) && ( end == 7 ) )
|
||||
rc = SC_INSERT;
|
||||
|
||||
else if( ( start == 0 ) && ( end == 7 ) )
|
||||
rc = SC_SPECIAL1;
|
||||
|
||||
else if( ( start == 0 ) && ( end == 3 ) )
|
||||
rc = SC_SPECIAL2;
|
||||
}
|
||||
*/
|
||||
return(rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
void hb_gt_SetCursorStyle(int style)
|
||||
void hb_gt_SetCursorStyle( USHORT uiStyle )
|
||||
{
|
||||
/* TODO: How to set the shape of the cursor? */
|
||||
/* see ..\..\..\tests\working\cursrtst.prg for an explanation */
|
||||
switch(style)
|
||||
{
|
||||
case SC_NONE:
|
||||
/* TODO: turn it off */
|
||||
break;
|
||||
switch( uiStyle )
|
||||
{
|
||||
case SC_NONE:
|
||||
/* TODO: turn it off */
|
||||
break;
|
||||
|
||||
case SC_NORMAL:
|
||||
break;
|
||||
case SC_NORMAL:
|
||||
break;
|
||||
|
||||
case SC_INSERT:
|
||||
break;
|
||||
case SC_INSERT:
|
||||
break;
|
||||
|
||||
case SC_SPECIAL1:
|
||||
break;
|
||||
case SC_SPECIAL1:
|
||||
break;
|
||||
|
||||
case SC_SPECIAL2:
|
||||
break;
|
||||
case SC_SPECIAL2:
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_Puts(char x, char y, char attr, char *str, int len)
|
||||
void hb_gt_Puts( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE * pbyStr, ULONG ulLen )
|
||||
{
|
||||
}
|
||||
|
||||
void hb_gt_GetText(char x1, char y1, char x2, char y2, char *dest)
|
||||
void hb_gt_GetText( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE * pbyDst )
|
||||
{
|
||||
}
|
||||
|
||||
void hb_gt_PutText(char x1, char y1, char x2, char y2, char *srce)
|
||||
void hb_gt_PutText( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE * pbySrc )
|
||||
{
|
||||
}
|
||||
|
||||
void hb_gt_SetAttribute( char cTop, char cLeft, char cBottom, char cRight, char attribute )
|
||||
void hb_gt_SetAttribute( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE byAttr )
|
||||
{
|
||||
/* TODO: we want to take a screen that is say bright white on blue,
|
||||
and change the attributes only for a section of the screen
|
||||
@@ -154,16 +176,16 @@ void hb_gt_SetAttribute( char cTop, char cLeft, char cBottom, char cRight, char
|
||||
*/
|
||||
}
|
||||
|
||||
void hb_gt_DrawShadow( char cTop, char cLeft, char cBottom, char cRight, char attribute )
|
||||
void hb_gt_DrawShadow( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE byAttr )
|
||||
{
|
||||
/* TODO: similar to above - see gtwin.c for an idea */
|
||||
}
|
||||
|
||||
void hb_gt_Scroll( char cTop, char cLeft, char cBottom, char cRight, char attribute, char vert, char horiz )
|
||||
void hb_gt_Scroll( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE byAttr, SHORT iRows, SHORT iCols )
|
||||
{
|
||||
}
|
||||
|
||||
void hb_gt_DispBegin(void)
|
||||
void hb_gt_DispBegin( void )
|
||||
{
|
||||
/* TODO: Is there a way to change screen buffers?
|
||||
ie: can we write somewhere without it going to the screen
|
||||
@@ -177,12 +199,12 @@ void hb_gt_DispEnd()
|
||||
/* TODO: here we flush the buffer, and restore normal screen writes */
|
||||
}
|
||||
|
||||
void hb_gt_SetMode( USHORT uiRows, USHORT uiCols )
|
||||
BOOL hb_gt_SetMode( USHORT uiRows, USHORT uiCols )
|
||||
{
|
||||
/* TODO: How to change the size of the screen? */
|
||||
}
|
||||
|
||||
void hb_gt_Replicate( char c, DWORD nLength )
|
||||
void hb_gt_Replicate( BYTE byChar, ULONG ulLen )
|
||||
{
|
||||
/* TODO: this will write character c nlength times to the screen.
|
||||
Note that it is not used yet
|
||||
@@ -194,7 +216,7 @@ void hb_gt_Replicate( char c, DWORD nLength )
|
||||
|
||||
BOOL hb_gt_GetBlink()
|
||||
{
|
||||
/* TODO: under dos, the background 'intensity' bit can be switched
|
||||
/* TODO: under dos, the background 'intensity' bit can be switched
|
||||
from intensity to 'blinking'
|
||||
does this work under your platform?
|
||||
*/
|
||||
|
||||
@@ -3,462 +3,487 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTDOS.C: Video subsystem for DOS compilers.
|
||||
* Harbour Project source code:
|
||||
* Video subsystem for DOS compilers
|
||||
*
|
||||
* Copyright 1999 {list of individual authors and e-mail addresses}
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version, with one exception:
|
||||
*
|
||||
* The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
* and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
* an executable, this does not by itself cause the resulting executable
|
||||
* to be covered by the GNU General Public License. Your use of that
|
||||
* executable is in no way restricted on account of linking the HRL
|
||||
* and/or HVM code into it.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
* their web site at http://www.gnu.org/).
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This module is based on VIDMGR by Andrew Clarke and modified for
|
||||
* the Harbour project
|
||||
*
|
||||
* User programs should never call this layer directly!
|
||||
*/
|
||||
|
||||
/* NOTE: User programs should never call this layer directly! */
|
||||
|
||||
#include <string.h>
|
||||
#include <dos.h>
|
||||
#include "gtapi.h"
|
||||
|
||||
#if defined(__POWERC) || (defined(__TURBOC__) && !defined(__BORLANDC__)) || \
|
||||
(defined(__ZTC__) && !defined(__SC__))
|
||||
#define FAR far
|
||||
(defined(__ZTC__) && !defined(__SC__))
|
||||
#define FAR far
|
||||
#elif (defined(__MSDOS__) || defined(MSDOS) || defined(DOS)) && !defined(__DJGPP__)
|
||||
#define FAR _far
|
||||
#define FAR _far
|
||||
#else
|
||||
#define FAR
|
||||
#define FAR
|
||||
#endif
|
||||
|
||||
#ifdef __DJGPP__
|
||||
#include <conio.h>
|
||||
#include <sys/farptr.h>
|
||||
#include <conio.h>
|
||||
#include <sys/farptr.h>
|
||||
#else
|
||||
#ifndef MK_FP
|
||||
#define MK_FP(seg,off) \
|
||||
((void FAR *)(((unsigned long)(seg) << 16)|(unsigned)(off)))
|
||||
#endif
|
||||
#ifndef MK_FP
|
||||
#define MK_FP( seg, off ) \
|
||||
((void FAR *)(((unsigned long)(seg) << 16)|(unsigned)(off)))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static void hb_gt_xGetXY(USHORT cRow, USHORT cCol, BYTE *attr, char *ch);
|
||||
static void hb_gt_xPutch(USHORT cRow, USHORT cCol, BYTE attr, char ch);
|
||||
static void hb_gt_xGetXY( USHORT cRow, USHORT cCol, BYTE * attr, BYTE * ch );
|
||||
static void hb_gt_xPutch( USHORT cRow, USHORT cCol, BYTE attr, BYTE ch );
|
||||
|
||||
static char hb_gt_GetScreenMode(void);
|
||||
static void hb_gt_SetCursorSize(char start, char end);
|
||||
static void hb_gt_GetCursorSize(char *start, char *end);
|
||||
static char hb_gt_GetScreenMode( void );
|
||||
static void hb_gt_SetCursorSize( char start, char end );
|
||||
static void hb_gt_GetCursorSize( char * start, char * end );
|
||||
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
#define FAR
|
||||
#define FAR
|
||||
#endif
|
||||
#ifndef __DJGPP__
|
||||
static char FAR *scrnPtr;
|
||||
static char FAR *scrnStealth;
|
||||
static char FAR *hb_gt_ScreenAddress(void);
|
||||
static char FAR * scrnPtr;
|
||||
static char FAR * scrnStealth;
|
||||
static char FAR * hb_gt_ScreenAddress( void );
|
||||
#endif
|
||||
|
||||
void hb_gt_Init(void)
|
||||
void hb_gt_Init( void )
|
||||
{
|
||||
#ifdef __DJGPP__
|
||||
gppconio_init();
|
||||
#else
|
||||
scrnStealth = (char *)-1;
|
||||
scrnStealth = ( char * ) -1;
|
||||
scrnPtr = hb_gt_ScreenAddress();
|
||||
#endif
|
||||
}
|
||||
|
||||
void hb_gt_Done(void)
|
||||
void hb_gt_Done( void )
|
||||
{
|
||||
}
|
||||
|
||||
int hb_gt_IsColor(void)
|
||||
BOOL hb_gt_IsColor( void )
|
||||
{
|
||||
return hb_gt_GetScreenMode() != 7;
|
||||
return hb_gt_GetScreenMode() != 7;
|
||||
}
|
||||
|
||||
#ifndef __DJGPP__
|
||||
static char FAR *hb_gt_ScreenAddress()
|
||||
static char FAR * hb_gt_ScreenAddress()
|
||||
{
|
||||
char FAR *ptr;
|
||||
char FAR * ptr;
|
||||
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
if (hb_gt_IsColor())
|
||||
{
|
||||
ptr = (char *)(0xB800 << 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr = (char *)(0xB000 << 4);
|
||||
}
|
||||
#else
|
||||
if (hb_gt_IsColor())
|
||||
{
|
||||
ptr = (char FAR *)MK_FP(0xB800, 0x0000);
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr = (char FAR *)MK_FP(0xB000, 0x0000);
|
||||
}
|
||||
#endif
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
if( hb_gt_IsColor() )
|
||||
{
|
||||
ptr = ( char * ) ( 0xB800 << 4 );
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr = ( char * )( 0xB000 << 4 );
|
||||
}
|
||||
#else
|
||||
if( hb_gt_IsColor() )
|
||||
{
|
||||
ptr = ( char FAR * ) MK_FP( 0xB800, 0x0000 );
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr = ( char FAR * ) MK_FP( 0xB000, 0x0000 );
|
||||
}
|
||||
#endif
|
||||
|
||||
return ptr;
|
||||
return ptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef __DJGPP__
|
||||
char FAR *hb_gt_ScreenPtr(USHORT cRow, USHORT cCol)
|
||||
char FAR * hb_gt_ScreenPtr( USHORT cRow, USHORT cCol )
|
||||
{
|
||||
return scrnPtr + (cRow * hb_gt_GetScreenWidth() * 2) + (cCol * 2);
|
||||
return scrnPtr + ( cRow * hb_gt_GetScreenWidth() * 2 ) + ( cCol * 2 );
|
||||
}
|
||||
#endif
|
||||
|
||||
static char hb_gt_GetScreenMode(void)
|
||||
static char hb_gt_GetScreenMode( void )
|
||||
{
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
return *((char *)0x0449);
|
||||
return *( ( char * ) 0x0449 );
|
||||
#elif defined(__DJGPP__)
|
||||
return _farpeekb( 0x0040, 0x0049 );
|
||||
return _farpeekb( 0x0040, 0x0049 );
|
||||
#else
|
||||
return *((char FAR *)MK_FP(0x0040, 0x0049));
|
||||
return *( ( char FAR * ) MK_FP( 0x0040, 0x0049 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
USHORT hb_gt_GetScreenWidth(void)
|
||||
USHORT hb_gt_GetScreenWidth( void )
|
||||
{
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
return (USHORT)*((char *)0x044a);
|
||||
return ( USHORT ) *( ( char * ) 0x044A );
|
||||
#elif defined(__DJGPP__)
|
||||
return (USHORT)_farpeekb( 0x0040, 0x004a );
|
||||
return ( USHORT ) _farpeekb( 0x0040, 0x004A );
|
||||
#else
|
||||
return (USHORT)*((char FAR *)MK_FP(0x0040, 0x004a));
|
||||
return ( USHORT ) *( ( char FAR * ) MK_FP( 0x0040, 0x004A ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
USHORT hb_gt_GetScreenHeight(void)
|
||||
USHORT hb_gt_GetScreenHeight( void )
|
||||
{
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
return (USHORT)(char)(*((char *)0x0484) + 1);
|
||||
return ( USHORT ) ( char ) ( *( ( char * ) 0x0484 ) + 1 );
|
||||
#elif defined(__DJGPP__)
|
||||
return (USHORT)_farpeekb( 0x0040, 0x0084 ) + 1;
|
||||
return ( USHORT ) _farpeekb( 0x0040, 0x0084 ) + 1;
|
||||
#else
|
||||
return (USHORT)((char)(*((char FAR *)MK_FP(0x0040, 0x0084)) + 1));
|
||||
return ( USHORT ) ( ( char ) ( *( ( char FAR * ) MK_FP( 0x0040, 0x0084 ) ) + 1 ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
void hb_gt_SetPos(USHORT usRow, USHORT usCol)
|
||||
void hb_gt_SetPos( USHORT usRow, USHORT usCol )
|
||||
{
|
||||
#if defined(__TURBOC__)
|
||||
BYTE cRow, cCol;
|
||||
BYTE cRow, cCol;
|
||||
|
||||
cRow = (BYTE)usRow;
|
||||
cCol = (BYTE)usCol;
|
||||
cRow = ( BYTE ) usRow;
|
||||
cCol = ( BYTE ) usCol;
|
||||
|
||||
_AH = 0x02;
|
||||
_BH = 0;
|
||||
_DH = cRow;
|
||||
_DL = cCol;
|
||||
geninterrupt(0x10);
|
||||
_AH = 0x02;
|
||||
_BH = 0;
|
||||
_DH = cRow;
|
||||
_DL = cCol;
|
||||
geninterrupt( 0x10 );
|
||||
#else
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x02;
|
||||
regs.h.bh = 0;
|
||||
regs.h.dh = (BYTE)(usRow);
|
||||
regs.h.dl = (BYTE)(usCol);
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x02;
|
||||
regs.h.bh = 0;
|
||||
regs.h.dh = ( BYTE ) usRow;
|
||||
regs.h.dl = ( BYTE ) usCol;
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
int386(0x10, ®s, ®s);
|
||||
int386( 0x10, ®s, ®s );
|
||||
#else
|
||||
int86(0x10, ®s, ®s);
|
||||
int86( 0x10, ®s, ®s );
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
static void hb_gt_SetCursorSize(char start, char end)
|
||||
static void hb_gt_SetCursorSize( char start, char end )
|
||||
{
|
||||
#if defined(__TURBOC__)
|
||||
_AH = 0x01;
|
||||
_CH = start;
|
||||
_CL = end;
|
||||
geninterrupt(0x10);
|
||||
_AH = 0x01;
|
||||
_CH = start;
|
||||
_CL = end;
|
||||
geninterrupt( 0x10 );
|
||||
#else
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x01;
|
||||
regs.h.ch = start;
|
||||
regs.h.cl = end;
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x01;
|
||||
regs.h.ch = start;
|
||||
regs.h.cl = end;
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
int386(0x10, ®s, ®s);
|
||||
int386( 0x10, ®s, ®s );
|
||||
#else
|
||||
int86(0x10, ®s, ®s);
|
||||
int86( 0x10, ®s, ®s );
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
static void hb_gt_GetCursorSize(char *start, char *end)
|
||||
static void hb_gt_GetCursorSize( char * start, char *end )
|
||||
{
|
||||
#if defined(__TURBOC__)
|
||||
_AH = 0x03;
|
||||
_BH = 0;
|
||||
geninterrupt(0x10);
|
||||
*start = _CH;
|
||||
*end = _CL;
|
||||
_AH = 0x03;
|
||||
_BH = 0;
|
||||
geninterrupt( 0x10 );
|
||||
*start = _CH;
|
||||
*end = _CL;
|
||||
#else
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x03;
|
||||
regs.h.bh = 0;
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x03;
|
||||
regs.h.bh = 0;
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
int386(0x10, ®s, ®s);
|
||||
int386( 0x10, ®s, ®s );
|
||||
#else
|
||||
int86(0x10, ®s, ®s);
|
||||
int86( 0x10, ®s, ®s );
|
||||
#endif
|
||||
*start = regs.h.ch;
|
||||
*end = regs.h.cl;
|
||||
*start = regs.h.ch;
|
||||
*end = regs.h.cl;
|
||||
#endif
|
||||
}
|
||||
|
||||
int hb_gt_GetCursorStyle(void)
|
||||
USHORT hb_gt_GetCursorStyle( void )
|
||||
{
|
||||
char start, end;
|
||||
int rc;
|
||||
char start, end;
|
||||
int rc;
|
||||
|
||||
hb_gt_GetCursorSize(&start, &end);
|
||||
hb_gt_GetCursorSize( &start, &end );
|
||||
|
||||
if((start == 32) && (end == 32))
|
||||
{
|
||||
rc=SC_NONE;
|
||||
}
|
||||
else if((start == 6) && (end == 7))
|
||||
{
|
||||
rc=SC_NORMAL;
|
||||
}
|
||||
else if((start == 4) && (end == 7))
|
||||
{
|
||||
rc=SC_INSERT;
|
||||
}
|
||||
else if((start == 0) && (end == 7))
|
||||
{
|
||||
rc=SC_SPECIAL1;
|
||||
}
|
||||
else if((start == 0) && (end == 3))
|
||||
{
|
||||
rc=SC_SPECIAL2;
|
||||
}
|
||||
else
|
||||
{
|
||||
rc=SC_NONE;
|
||||
}
|
||||
if( ( start == 32 ) && ( end == 32 ) )
|
||||
rc = SC_NONE;
|
||||
|
||||
return(rc);
|
||||
else if( ( start == 6 ) && ( end == 7 ) )
|
||||
rc = SC_NORMAL;
|
||||
|
||||
else if( ( start == 4 ) && ( end == 7 ) )
|
||||
rc = SC_INSERT;
|
||||
|
||||
else if( ( start == 0 ) && ( end == 7 ) )
|
||||
rc = SC_SPECIAL1;
|
||||
|
||||
else if( ( start == 0 ) && ( end == 3 ) )
|
||||
rc = SC_SPECIAL2;
|
||||
|
||||
else
|
||||
rc = SC_NONE;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void hb_gt_SetCursorStyle(int style)
|
||||
void hb_gt_SetCursorStyle( USHORT style )
|
||||
{
|
||||
switch(style)
|
||||
{
|
||||
case SC_NONE:
|
||||
hb_gt_SetCursorSize(32, 32);
|
||||
break;
|
||||
switch( style )
|
||||
{
|
||||
case SC_NONE:
|
||||
hb_gt_SetCursorSize( 32, 32 );
|
||||
break;
|
||||
|
||||
case SC_NORMAL:
|
||||
hb_gt_SetCursorSize(6, 7);
|
||||
break;
|
||||
case SC_NORMAL:
|
||||
hb_gt_SetCursorSize( 6, 7 );
|
||||
break;
|
||||
|
||||
case SC_INSERT:
|
||||
hb_gt_SetCursorSize(4, 7);
|
||||
break;
|
||||
case SC_INSERT:
|
||||
hb_gt_SetCursorSize( 4, 7 );
|
||||
break;
|
||||
|
||||
case SC_SPECIAL1:
|
||||
hb_gt_SetCursorSize(0, 7);
|
||||
break;
|
||||
case SC_SPECIAL1:
|
||||
hb_gt_SetCursorSize( 0, 7 );
|
||||
break;
|
||||
|
||||
case SC_SPECIAL2:
|
||||
hb_gt_SetCursorSize(0, 3);
|
||||
break;
|
||||
case SC_SPECIAL2:
|
||||
hb_gt_SetCursorSize( 0, 3 );
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void hb_gt_xGetXY(USHORT cRow, USHORT cCol, BYTE *attr, char *ch)
|
||||
static void hb_gt_xGetXY( USHORT cRow, USHORT cCol, BYTE * attr, BYTE * ch )
|
||||
{
|
||||
#ifdef __DJGPP__
|
||||
short ch_attr;
|
||||
gettext( cCol + 1, cRow + 1, cCol + 1, cRow + 1, &ch_attr );
|
||||
*ch = ch_attr >> 8;
|
||||
*attr = ch_attr & 0xFF;
|
||||
///printf("\r\nhb_gt_xGetXY(): row == %d, col = %d, char = %d, attr = %d", cRow, cCol, *ch, *attr );
|
||||
short ch_attr;
|
||||
gettext( cCol + 1, cRow + 1, cCol + 1, cRow + 1, &ch_attr );
|
||||
*ch = ch_attr >> 8;
|
||||
*attr = ch_attr & 0xFF;
|
||||
|
||||
/* printf("\r\nhb_gt_xGetXY(): row == %d, col = %d, char = %d, attr = %d", cRow, cCol, *ch, *attr ); */
|
||||
#else
|
||||
char FAR *p;
|
||||
p = hb_gt_ScreenPtr(cRow, cCol);
|
||||
*ch = *p;
|
||||
*attr = *(p + 1);
|
||||
char FAR *p;
|
||||
p = hb_gt_ScreenPtr( cRow, cCol );
|
||||
*ch = *p;
|
||||
*attr = *( p + 1 );
|
||||
#endif
|
||||
}
|
||||
|
||||
void hb_gt_xPutch(USHORT cRow, USHORT cCol, BYTE attr, char ch)
|
||||
void hb_gt_xPutch( USHORT cRow, USHORT cCol, BYTE attr, BYTE ch )
|
||||
{
|
||||
#ifdef __DJGPP__
|
||||
long ch_attr = ( ch << 8 ) | attr;
|
||||
///printf("\r\nhb_gt_xPutch(): row == %d, col = %d, char = %d, attr = %d", cRow, cCol, ch, attr );
|
||||
puttext( cCol + 1, cRow + 1, cCol + 1, cRow + 1, &ch_attr );
|
||||
long ch_attr = ( ch << 8 ) | attr;
|
||||
/* printf("\r\nhb_gt_xPutch(): row == %d, col = %d, char = %d, attr = %d", cRow, cCol, ch, attr ); */
|
||||
puttext( cCol + 1, cRow + 1, cCol + 1, cRow + 1, &ch_attr );
|
||||
#else
|
||||
char FAR *p;
|
||||
p = hb_gt_ScreenPtr(cRow, cCol);
|
||||
*p = ch;
|
||||
*(p + 1) = attr;
|
||||
char FAR * p;
|
||||
p = hb_gt_ScreenPtr( cRow, cCol );
|
||||
*p = ch;
|
||||
*( p + 1 ) = attr;
|
||||
#endif
|
||||
}
|
||||
|
||||
void hb_gt_Puts(USHORT cRow, USHORT cCol, BYTE attr, char *str, int len)
|
||||
void hb_gt_Puts( USHORT cRow, USHORT cCol, BYTE attr, BYTE *str, ULONG len )
|
||||
{
|
||||
#ifdef __DJGPP__
|
||||
int i = len;
|
||||
int bottom, left = cCol, right, top = cRow;
|
||||
int width = hb_gt_GetScreenWidth();
|
||||
char * ch_attr, * ptr;
|
||||
///printf("\r\nhb_gt_Puts(): row == %d, col = %d, attr = %d, len = %d", cRow, cCol, attr, len );
|
||||
ptr = ch_attr = hb_xgrab( i * 2 );
|
||||
while( i-- )
|
||||
{
|
||||
///printf("+");
|
||||
*ptr++ = *str++;
|
||||
///printf("-");
|
||||
*ptr++ = attr;
|
||||
}
|
||||
i = len - 1; /* We want end position, not next cursor position */
|
||||
right = left;
|
||||
bottom = top;
|
||||
if (right + i > width - 1)
|
||||
{
|
||||
/* Calculate end row position and the remainder size for the end column adjust */
|
||||
bottom += (i / width);
|
||||
i = i % width;
|
||||
}
|
||||
right += i;
|
||||
if (right > width - 1)
|
||||
{
|
||||
/* Column movement overflows into next row */
|
||||
bottom++;
|
||||
right -= width;
|
||||
}
|
||||
///printf("\r\nhb_gt_Puts(): puttext( %d,%d, %d,%d )", left + 1, top + 1, right + 1, bottom + 1 );
|
||||
puttext( left + 1, top + 1, right + 1, bottom + 1, ch_attr );
|
||||
hb_xfree( ch_attr );
|
||||
int i = ( int ) len;
|
||||
int bottom, left = cCol, right, top = cRow;
|
||||
int width = hb_gt_GetScreenWidth();
|
||||
BYTE * ch_attr, * ptr;
|
||||
/* printf("\r\nhb_gt_Puts(): row == %d, col = %d, attr = %d, len = %d", cRow, cCol, attr, len ); */
|
||||
ptr = ch_attr = hb_xgrab( i * 2 );
|
||||
while( i-- )
|
||||
{
|
||||
/* printf("+"); */
|
||||
*ptr++ = *str++;
|
||||
/* printf("-"); */
|
||||
*ptr++ = attr;
|
||||
}
|
||||
i = len - 1; /* We want end position, not next cursor position */
|
||||
right = left;
|
||||
bottom = top;
|
||||
if( right + i > width - 1 )
|
||||
{
|
||||
/* Calculate end row position and the remainder size for the end column adjust */
|
||||
bottom += ( i / width );
|
||||
i = i % width;
|
||||
}
|
||||
right += i;
|
||||
if( right > width - 1 )
|
||||
{
|
||||
/* Column movement overflows into next row */
|
||||
bottom++;
|
||||
right -= width;
|
||||
}
|
||||
/* printf("\r\nhb_gt_Puts(): puttext( %d,%d, %d,%d )", left + 1, top + 1, right + 1, bottom + 1 ); */
|
||||
puttext( left + 1, top + 1, right + 1, bottom + 1, ch_attr );
|
||||
hb_xfree( ch_attr );
|
||||
#else
|
||||
char FAR *p;
|
||||
int i;
|
||||
p = hb_gt_ScreenPtr( cRow, cCol );
|
||||
for(i=0; i<len; i++)
|
||||
{
|
||||
*p++ = *str++;
|
||||
*p++ = attr;
|
||||
}
|
||||
char FAR *p;
|
||||
int i;
|
||||
p = hb_gt_ScreenPtr( cRow, cCol );
|
||||
for( i = 0; i < len; i++ )
|
||||
{
|
||||
*p++ = *str++;
|
||||
*p++ = attr;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void hb_gt_GetText(USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, char *dest)
|
||||
void hb_gt_GetText( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE * dest )
|
||||
{
|
||||
#ifdef __DJGPP__
|
||||
gettext( usLeft + 1, usTop + 1, usRight + 1, usBottom + 1, dest );
|
||||
gettext( usLeft + 1, usTop + 1, usRight + 1, usBottom + 1, dest );
|
||||
#else
|
||||
USHORT x, y;
|
||||
USHORT x, y;
|
||||
|
||||
for (y = usTop; y <= usBottom; y++ )
|
||||
{
|
||||
for (x = usLeft; x <= usRight; x++)
|
||||
{
|
||||
hb_gt_xGetXY(y, x, dest + 1, dest);
|
||||
dest += 2;
|
||||
}
|
||||
}
|
||||
for( y = usTop; y <= usBottom; y++ )
|
||||
{
|
||||
for( x = usLeft; x <= usRight; x++ )
|
||||
{
|
||||
hb_gt_xGetXY( y, x, dest + 1, dest );
|
||||
dest += 2;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void hb_gt_PutText(USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, char *srce)
|
||||
void hb_gt_PutText( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE * srce )
|
||||
{
|
||||
#ifdef __DJGPP__
|
||||
puttext( usLeft + 1, usTop + 1, usRight + 1, usBottom + 1, srce );
|
||||
puttext( usLeft + 1, usTop + 1, usRight + 1, usBottom + 1, srce );
|
||||
#else
|
||||
USHORT x, y;
|
||||
USHORT x, y;
|
||||
|
||||
for (y = usTop; y <= usBottom; y++)
|
||||
{
|
||||
for (x = usLeft; x <= usRight; x++)
|
||||
{
|
||||
hb_gt_xPutch(y, x, *(srce + 1), *srce);
|
||||
srce += 2;
|
||||
}
|
||||
}
|
||||
for( y = usTop; y <= usBottom; y++ )
|
||||
{
|
||||
for( x = usLeft; x <= usRight; x++ )
|
||||
{
|
||||
hb_gt_xPutch( y, x, *( srce + 1 ), *srce );
|
||||
srce += 2;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void hb_gt_SetAttribute( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE attr )
|
||||
{
|
||||
USHORT x, y;
|
||||
BYTE scratchattr;
|
||||
char ch;
|
||||
USHORT x, y;
|
||||
|
||||
for (y = usTop; y <= usBottom; y++)
|
||||
{
|
||||
for (x = usLeft; x <= usRight; x++)
|
||||
{
|
||||
hb_gt_xGetXY( y, x, &scratchattr, &ch );
|
||||
hb_gt_xPutch( y, x, attr, ch);
|
||||
}
|
||||
}
|
||||
for( y = usTop; y <= usBottom; y++ )
|
||||
{
|
||||
BYTE scratchattr;
|
||||
BYTE ch;
|
||||
|
||||
for( x = usLeft; x <= usRight; x++ )
|
||||
{
|
||||
hb_gt_xGetXY( y, x, &scratchattr, &ch );
|
||||
hb_gt_xPutch( y, x, attr, ch );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_DrawShadow( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE attr )
|
||||
{
|
||||
USHORT x, y;
|
||||
BYTE scratchattr;
|
||||
char ch;
|
||||
USHORT x, y;
|
||||
|
||||
for (y = usTop; y <= usBottom; y++)
|
||||
{
|
||||
for( y = usTop; y <= usBottom; y++ )
|
||||
{
|
||||
BYTE scratchattr;
|
||||
BYTE ch;
|
||||
|
||||
hb_gt_xGetXY( y, usRight, &scratchattr, &ch );
|
||||
hb_gt_xPutch( y, usRight, attr, ch);
|
||||
|
||||
if( y == usBottom )
|
||||
for (x = usLeft; x <= usRight; x++)
|
||||
{
|
||||
hb_gt_xGetXY( y, x, &scratchattr, &ch );
|
||||
hb_gt_xPutch( y, x, attr, ch );
|
||||
}
|
||||
hb_gt_xGetXY( y, usRight, &scratchattr, &ch );
|
||||
hb_gt_xPutch( y, usRight, attr, ch );
|
||||
|
||||
}
|
||||
if( y == usBottom )
|
||||
{
|
||||
for( x = usLeft; x <= usRight; x++ )
|
||||
{
|
||||
hb_gt_xGetXY( y, x, &scratchattr, &ch );
|
||||
hb_gt_xPutch( y, x, attr, ch );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
USHORT hb_gt_Col(void)
|
||||
USHORT hb_gt_Col( void )
|
||||
{
|
||||
#if defined(__TURBOC__)
|
||||
_AH = 0x03;
|
||||
_BH = 0;
|
||||
geninterrupt(0x10);
|
||||
return _DL;
|
||||
_AH = 0x03;
|
||||
_BH = 0;
|
||||
geninterrupt( 0x10 );
|
||||
return _DL;
|
||||
#else
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x03;
|
||||
regs.h.bh = 0;
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x03;
|
||||
regs.h.bh = 0;
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
int386(0x10, ®s, ®s);
|
||||
int386( 0x10, ®s, ®s );
|
||||
#else
|
||||
int86(0x10, ®s, ®s);
|
||||
int86( 0x10, ®s, ®s );
|
||||
#endif
|
||||
return regs.h.dl;
|
||||
return regs.h.dl;
|
||||
#endif
|
||||
}
|
||||
|
||||
USHORT hb_gt_Row(void)
|
||||
USHORT hb_gt_Row( void )
|
||||
{
|
||||
#if defined(__TURBOC__)
|
||||
_AH = 0x03;
|
||||
_BH = 0;
|
||||
geninterrupt(0x10);
|
||||
return _DH;
|
||||
_AH = 0x03;
|
||||
_BH = 0;
|
||||
geninterrupt( 0x10 );
|
||||
return _DH;
|
||||
#else
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x03;
|
||||
regs.h.bh = 0;
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x03;
|
||||
regs.h.bh = 0;
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
int386(0x10, ®s, ®s);
|
||||
int386( 0x10, ®s, ®s );
|
||||
#else
|
||||
int86(0x10, ®s, ®s);
|
||||
int86( 0x10, ®s, ®s );
|
||||
#endif
|
||||
return regs.h.dh;
|
||||
return regs.h.dh;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -467,7 +492,7 @@ void hb_gt_Scroll( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight,
|
||||
int iRows = sVert, iCols = sHoriz;
|
||||
|
||||
USHORT usRow, usCol;
|
||||
int uiSize; /* gtRectSize returns int */
|
||||
USHORT uiSize; /* gtRectSize returns int */
|
||||
int iLength = ( usRight - usLeft ) + 1;
|
||||
int iCount, iColOld, iColNew, iColSize;
|
||||
|
||||
@@ -485,13 +510,13 @@ void hb_gt_Scroll( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight,
|
||||
if( iCols >= 0 )
|
||||
{
|
||||
iColOld += iCols;
|
||||
iColSize = (int) (usRight - usLeft);
|
||||
iColSize = ( int ) ( usRight - usLeft );
|
||||
iColSize -= iCols;
|
||||
}
|
||||
else
|
||||
{
|
||||
iColNew -= iCols;
|
||||
iColSize = (int) (usRight - usLeft);
|
||||
iColSize = ( int ) ( usRight - usLeft );
|
||||
iColSize += iCols;
|
||||
}
|
||||
|
||||
@@ -510,7 +535,7 @@ void hb_gt_Scroll( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight,
|
||||
hb_gt_GetText( iRowPos, iColOld, iRowPos, iColOld + iColSize, fpBuff );
|
||||
|
||||
/* Write the scrolled text to the current row */
|
||||
hb_gt_PutText ( iCount, iColNew, iCount, iColNew + iColSize, fpBuff );
|
||||
hb_gt_PutText( iCount, iColNew, iCount, iColNew + iColSize, fpBuff );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -521,86 +546,87 @@ void hb_gt_Scroll( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight,
|
||||
hb_gtSetPos( usRow, usCol );
|
||||
}
|
||||
|
||||
void hb_gt_DispBegin(void)
|
||||
void hb_gt_DispBegin( void )
|
||||
{
|
||||
/* ptucker */
|
||||
#ifndef __DJGPP__
|
||||
if( hb_gtDispCount() == 1 )
|
||||
{
|
||||
char FAR *ptr;
|
||||
ULONG nSize;
|
||||
if( hb_gtDispCount() == 1 )
|
||||
{
|
||||
char FAR * ptr;
|
||||
ULONG nSize;
|
||||
|
||||
nSize = hb_gt_GetScreenWidth() * hb_gt_GetScreenHeight() * 2;
|
||||
nSize = hb_gt_GetScreenWidth() * hb_gt_GetScreenHeight() * 2;
|
||||
|
||||
ptr = scrnPtr;
|
||||
if( (scrnPtr = scrnStealth) == (char *)-1)
|
||||
scrnPtr = (char FAR *)hb_xgrab( nSize );
|
||||
scrnStealth = ptr;
|
||||
memcpy( (void *)scrnPtr, (void *)ptr, nSize );
|
||||
}
|
||||
ptr = scrnPtr;
|
||||
if( ( scrnPtr = scrnStealth ) == ( char * ) -1 )
|
||||
scrnPtr = ( char FAR * ) hb_xgrab( nSize );
|
||||
scrnStealth = ptr;
|
||||
memcpy( ( void * ) scrnPtr, ( void * ) ptr, nSize );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void hb_gt_DispEnd(void)
|
||||
void hb_gt_DispEnd( void )
|
||||
{
|
||||
/* ptucker */
|
||||
#ifndef __DJGPP__
|
||||
if( hb_gtDispCount() == 1 )
|
||||
{
|
||||
char FAR *ptr;
|
||||
ULONG nSize;
|
||||
if( hb_gtDispCount() == 1 )
|
||||
{
|
||||
char FAR * ptr;
|
||||
ULONG nSize;
|
||||
|
||||
nSize = hb_gt_GetScreenWidth() * hb_gt_GetScreenHeight() * 2;
|
||||
nSize = hb_gt_GetScreenWidth() * hb_gt_GetScreenHeight() * 2;
|
||||
|
||||
ptr = scrnPtr;
|
||||
scrnPtr = scrnStealth;
|
||||
scrnStealth = ptr;
|
||||
memcpy( (void *)scrnPtr, (void *)ptr, nSize );
|
||||
}
|
||||
ptr = scrnPtr;
|
||||
scrnPtr = scrnStealth;
|
||||
scrnStealth = ptr;
|
||||
memcpy( ( void * ) scrnPtr, ( void * )ptr, nSize );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
BOOL hb_gt_SetMode( USHORT usRows, USHORT usCols )
|
||||
{
|
||||
usRows=usCols=0;
|
||||
HB_SYMBOL_UNUSED( usRows );
|
||||
HB_SYMBOL_UNUSED( usCols );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hb_gt_Replicate(char c, DWORD nLength)
|
||||
void hb_gt_Replicate( BYTE c, ULONG nLength )
|
||||
{
|
||||
c= ' ';
|
||||
c = ' ';
|
||||
nLength = 0;
|
||||
|
||||
}
|
||||
|
||||
BOOL hb_gt_GetBlink()
|
||||
{
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
return *((char *)0x0465) & 0x10;
|
||||
return *( ( char * ) 0x0465 ) & 0x10;
|
||||
#elif defined(__DJGPP__)
|
||||
return _farpeekb( 0x0040, 0x0065 ) & 0x10;
|
||||
return _farpeekb( 0x0040, 0x0065 ) & 0x10;
|
||||
#else
|
||||
return *((char FAR *)MK_FP(0x0040, 0x0065)) &0x10;
|
||||
return *( ( char FAR * ) MK_FP( 0x0040, 0x0065 ) ) &0x10;
|
||||
#endif
|
||||
}
|
||||
|
||||
void hb_gt_SetBlink( BOOL bBlink )
|
||||
{
|
||||
#if defined(__TURBOC__)
|
||||
_AX = 0x1003;
|
||||
_BX = bBlink;
|
||||
geninterrupt(0x10);
|
||||
return;
|
||||
_AX = 0x1003;
|
||||
_BX = bBlink;
|
||||
geninterrupt( 0x10 );
|
||||
return;
|
||||
#else
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x10;
|
||||
regs.h.al = 0x03;
|
||||
regs.h.bh = 0;
|
||||
regs.h.bl = bBlink;
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x10;
|
||||
regs.h.al = 0x03;
|
||||
regs.h.bh = 0;
|
||||
regs.h.bl = bBlink;
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
int386(0x10, ®s, ®s);
|
||||
int386( 0x10, ®s, ®s );
|
||||
#else
|
||||
int86(0x10, ®s, ®s);
|
||||
int86( 0x10, ®s, ®s );
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -3,14 +3,43 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTOS2.C: Video subsystem for OS/2 compilers.
|
||||
* Harbour Project source code:
|
||||
* Video subsystem for OS/2 compilers
|
||||
*
|
||||
* Copyright 1999 {list of individual authors and e-mail addresses}
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version, with one exception:
|
||||
*
|
||||
* The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
* and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
* an executable, this does not by itself cause the resulting executable
|
||||
* to be covered by the GNU General Public License. Your use of that
|
||||
* executable is in no way restricted on account of linking the HRL
|
||||
* and/or HVM code into it.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
* their web site at http://www.gnu.org/).
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This module is partially based on VIDMGR by Andrew Clarke and modified
|
||||
* for the Harbour project
|
||||
*
|
||||
* User programs should never call this layer directly!
|
||||
*/
|
||||
|
||||
/* NOTE: User programs should never call this layer directly! */
|
||||
|
||||
#define INCL_VIO
|
||||
#define INCL_NOPMAPI
|
||||
|
||||
@@ -18,67 +47,69 @@
|
||||
#include <os2.h>
|
||||
#include "gtapi.h"
|
||||
|
||||
static char hb_gt_GetCellSize(void);
|
||||
static void hb_gt_SetCursorSize(char start, char end, int visible);
|
||||
static void hb_gt_GetCursorSize(char *start, char *end);
|
||||
static char hb_gt_GetCellSize( void );
|
||||
static void hb_gt_SetCursorSize( char start, char end, int visible );
|
||||
/*
|
||||
static void hb_gt_GetCursorSize( char * start, char * end );
|
||||
*/
|
||||
|
||||
void hb_gt_Init(void)
|
||||
void hb_gt_Init( void )
|
||||
{
|
||||
/* TODO: Is anything required to initialize the video subsystem? */
|
||||
/* TODO: Is anything required to initialize the video subsystem? */
|
||||
}
|
||||
|
||||
void hb_gt_Done(void)
|
||||
void hb_gt_Done( void )
|
||||
{
|
||||
/* TODO: */
|
||||
/* TODO: */
|
||||
}
|
||||
|
||||
int hb_gt_IsColor(void)
|
||||
BOOL hb_gt_IsColor( void )
|
||||
{
|
||||
/* Chen Kedem <niki@actcom.co.il> */
|
||||
VIOMODEINFO vi;
|
||||
VIOMODEINFO vi;
|
||||
|
||||
vi.cb = sizeof(VIOMODEINFO);
|
||||
VioGetMode(&vi, 0);
|
||||
return (vi.fbType); /* 0 = monochrom-compatible mode */
|
||||
vi.cb = sizeof( VIOMODEINFO );
|
||||
VioGetMode( &vi, 0 );
|
||||
return vi.fbType != 0; /* 0 = monochrom-compatible mode */
|
||||
}
|
||||
|
||||
char hb_gt_GetScreenWidth(void)
|
||||
USHORT hb_gt_GetScreenWidth( void )
|
||||
{
|
||||
VIOMODEINFO vi;
|
||||
VIOMODEINFO vi;
|
||||
|
||||
vi.cb = sizeof(VIOMODEINFO);
|
||||
VioGetMode(&vi, 0);
|
||||
return vi.col;
|
||||
vi.cb = sizeof( VIOMODEINFO );
|
||||
VioGetMode( &vi, 0 );
|
||||
return vi.col;
|
||||
}
|
||||
|
||||
char hb_gt_GetScreenHeight(void)
|
||||
USHORT hb_gt_GetScreenHeight( void )
|
||||
{
|
||||
VIOMODEINFO vi;
|
||||
VIOMODEINFO vi;
|
||||
|
||||
vi.cb = sizeof(VIOMODEINFO);
|
||||
VioGetMode(&vi, 0);
|
||||
return vi.row;
|
||||
vi.cb = sizeof( VIOMODEINFO );
|
||||
VioGetMode( &vi, 0 );
|
||||
return vi.row;
|
||||
}
|
||||
|
||||
void hb_gt_SetPos(USHORT nRow, USHORT nCol)
|
||||
void hb_gt_SetPos( USHORT uiRow, USHORT uiCol )
|
||||
{
|
||||
VioSetCurPos(nRow, nCol, 0);
|
||||
VioSetCurPos( uiRow, uiCol, 0 );
|
||||
}
|
||||
|
||||
USHORT hb_gt_Row(void)
|
||||
USHORT hb_gt_Row( void )
|
||||
{
|
||||
USHORT x, y;
|
||||
USHORT x, y;
|
||||
|
||||
VioGetCurPos(&y, &x, 0);
|
||||
return y;
|
||||
VioGetCurPos( &y, &x, 0 );
|
||||
return y;
|
||||
}
|
||||
|
||||
USHORT hb_gt_Col(void)
|
||||
USHORT hb_gt_Col( void )
|
||||
{
|
||||
USHORT x, y;
|
||||
USHORT x, y;
|
||||
|
||||
VioGetCurPos(&y, &x, 0);
|
||||
return x;
|
||||
VioGetCurPos( &y, &x, 0 );
|
||||
return x;
|
||||
}
|
||||
|
||||
|
||||
@@ -86,26 +117,26 @@ void hb_gt_Scroll( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight,
|
||||
{
|
||||
/* Chen Kedem <niki@actcom.co.il> */
|
||||
|
||||
BYTE bCell[ 2 ]; /* character/attribute pair */
|
||||
BYTE bCell[ 2 ]; /* character/attribute pair */
|
||||
|
||||
if( sVert > 128 ) sVert = sVert - 256;
|
||||
if( sHoriz > 128 ) sHoriz = sHoriz - 256;
|
||||
bCell [ 0 ] = ' ';
|
||||
bCell [ 1 ] = attr;
|
||||
if ( (sVert | sHoriz) == 0 ) /* both zero, clear region */
|
||||
VioScrollUp ( usTop, usLeft, usBottom, usRight, 0xFFFF, bCell, 0 );
|
||||
else
|
||||
{
|
||||
if ( sVert > 0 ) /* scroll up */
|
||||
VioScrollUp ( usTop, usLeft, usBottom, usRight, sVert, bCell, 0 );
|
||||
else if ( sVert < 0 ) /* scroll down */
|
||||
VioScrollDn ( usTop, usLeft, usBottom, usRight, -sVert, bCell, 0 );
|
||||
if( sVert > 128 ) sVert = sVert - 256;
|
||||
if( sHoriz > 128 ) sHoriz = sHoriz - 256;
|
||||
bCell [ 0 ] = ' ';
|
||||
bCell [ 1 ] = attr;
|
||||
if( ( sVert | sHoriz ) == 0 ) /* both zero, clear region */
|
||||
VioScrollUp ( usTop, usLeft, usBottom, usRight, 0xFFFF, bCell, 0 );
|
||||
else
|
||||
{
|
||||
if( sVert > 0 ) /* scroll up */
|
||||
VioScrollUp ( usTop, usLeft, usBottom, usRight, sVert, bCell, 0 );
|
||||
else if( sVert < 0 ) /* scroll down */
|
||||
VioScrollDn ( usTop, usLeft, usBottom, usRight, -sVert, bCell, 0 );
|
||||
|
||||
if ( sHoriz > 0 ) /* scroll left */
|
||||
VioScrollLf ( usTop, usLeft, usBottom, usRight, sHoriz, bCell, 0 );
|
||||
else if ( sHoriz < 0 ) /* scroll right */
|
||||
VioScrollRt ( usTop, usLeft, usBottom, usRight, -sHoriz, bCell, 0 );
|
||||
}
|
||||
if( sHoriz > 0 ) /* scroll left */
|
||||
VioScrollLf ( usTop, usLeft, usBottom, usRight, sHoriz, bCell, 0 );
|
||||
else if( sHoriz < 0 ) /* scroll right */
|
||||
VioScrollRt ( usTop, usLeft, usBottom, usRight, -sHoriz, bCell, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
/* QUESTION: not been used, do we need this function ? */
|
||||
@@ -113,147 +144,138 @@ void hb_gt_Scroll( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight,
|
||||
as that function is written below, we don't need this */
|
||||
|
||||
/*
|
||||
static void hb_gt_GetCursorSize(char *start, char *end)
|
||||
static void hb_gt_GetCursorSize( char * start, char * end )
|
||||
{
|
||||
VIOCURSORINFO vi;
|
||||
VIOCURSORINFO vi;
|
||||
|
||||
VioGetCurType(&vi, 0);
|
||||
*start = vi.yStart;
|
||||
*end = vi.cEnd;
|
||||
VioGetCurType( &vi, 0 );
|
||||
*start = vi.yStart;
|
||||
*end = vi.cEnd;
|
||||
}
|
||||
*/
|
||||
|
||||
static void hb_gt_SetCursorSize(char start, char end, int visible)
|
||||
static void hb_gt_SetCursorSize( char start, char end, int visible )
|
||||
{
|
||||
/* Chen Kedem <niki@actcom.co.il> */
|
||||
VIOCURSORINFO vi;
|
||||
VIOCURSORINFO vi;
|
||||
|
||||
vi.yStart = start;
|
||||
vi.cEnd = end;
|
||||
vi.cx = 0;
|
||||
vi.attr = ( visible ? 0 : -1 );
|
||||
VioSetCurType(&vi, 0);
|
||||
vi.yStart = start;
|
||||
vi.cEnd = end;
|
||||
vi.cx = 0;
|
||||
vi.attr = ( visible ? 0 : -1 );
|
||||
VioSetCurType( &vi, 0 );
|
||||
}
|
||||
|
||||
static char hb_gt_GetCellSize()
|
||||
{
|
||||
/* Chen Kedem <niki@actcom.co.il> */
|
||||
char rc ;
|
||||
char rc ;
|
||||
|
||||
VIOMODEINFO vi;
|
||||
vi.cb = sizeof(VIOMODEINFO);
|
||||
VioGetMode(&vi, 0);
|
||||
rc = (char)(vi.row ? (vi.vres / vi.row)-1 : 0 );
|
||||
return rc;
|
||||
VIOMODEINFO vi;
|
||||
vi.cb = sizeof( VIOMODEINFO );
|
||||
VioGetMode( &vi, 0 );
|
||||
rc = ( char )( vi.row ? ( vi.vres / vi.row ) - 1 : 0 );
|
||||
return rc;
|
||||
}
|
||||
|
||||
int hb_gt_GetCursorStyle(void)
|
||||
USHORT hb_gt_GetCursorStyle( void )
|
||||
{
|
||||
/* Chen Kedem <niki@actcom.co.il> */
|
||||
int rc;
|
||||
char cellsize;
|
||||
VIOCURSORINFO vi;
|
||||
int rc;
|
||||
char cellsize;
|
||||
VIOCURSORINFO vi;
|
||||
|
||||
VioGetCurType(&vi, 0);
|
||||
VioGetCurType( &vi, 0 );
|
||||
|
||||
if ( vi.attr )
|
||||
{
|
||||
rc=SC_NONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
cellsize = hb_gt_GetCellSize();
|
||||
if( vi.attr )
|
||||
rc = SC_NONE;
|
||||
else
|
||||
{
|
||||
cellsize = hb_gt_GetCellSize();
|
||||
|
||||
if ( vi.yStart == 0 && vi.cEnd == 0 )
|
||||
{
|
||||
rc=SC_NONE;
|
||||
}
|
||||
else if ( ( vi.yStart == cellsize-1 || vi.yStart == cellsize-2 ) && vi.cEnd == cellsize )
|
||||
{
|
||||
rc=SC_NORMAL;
|
||||
}
|
||||
else if ( vi.yStart == cellsize/2 && vi.cEnd == cellsize )
|
||||
{
|
||||
rc=SC_INSERT;
|
||||
}
|
||||
else if ( vi.yStart == 0 && vi.cEnd == cellsize )
|
||||
{
|
||||
rc=SC_SPECIAL1;
|
||||
}
|
||||
else if ( vi.yStart == 0 && vi.cEnd == cellsize/2 )
|
||||
{
|
||||
rc=SC_SPECIAL2;
|
||||
}
|
||||
else
|
||||
{
|
||||
rc=SC_NONE;
|
||||
}
|
||||
}
|
||||
if( vi.yStart == 0 && vi.cEnd == 0 )
|
||||
rc = SC_NONE;
|
||||
|
||||
return(rc);
|
||||
else if( ( vi.yStart == cellsize - 1 || vi.yStart == cellsize - 2 ) && vi.cEnd == cellsize )
|
||||
rc = SC_NORMAL;
|
||||
|
||||
else if( vi.yStart == cellsize / 2 && vi.cEnd == cellsize )
|
||||
rc = SC_INSERT;
|
||||
|
||||
else if( vi.yStart == 0 && vi.cEnd == cellsize )
|
||||
rc = SC_SPECIAL1;
|
||||
|
||||
else if( vi.yStart == 0 && vi.cEnd == cellsize / 2 )
|
||||
rc = SC_SPECIAL2;
|
||||
|
||||
else
|
||||
rc = SC_NONE;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void hb_gt_SetCursorStyle(int style)
|
||||
void hb_gt_SetCursorStyle( USHORT style )
|
||||
{
|
||||
/* Chen Kedem <niki@actcom.co.il> */
|
||||
char cellsize;
|
||||
VIOCURSORINFO vi;
|
||||
char cellsize;
|
||||
VIOCURSORINFO vi;
|
||||
|
||||
cellsize = hb_gt_GetCellSize();
|
||||
switch(style)
|
||||
{
|
||||
case SC_NONE:
|
||||
hb_gt_SetCursorSize( 0, 0, 0);
|
||||
break;
|
||||
cellsize = hb_gt_GetCellSize();
|
||||
switch( style )
|
||||
{
|
||||
case SC_NONE:
|
||||
hb_gt_SetCursorSize( 0, 0, 0 );
|
||||
break;
|
||||
|
||||
case SC_NORMAL:
|
||||
hb_gt_SetCursorSize(cellsize-1, cellsize, 1);
|
||||
break;
|
||||
case SC_NORMAL:
|
||||
hb_gt_SetCursorSize( cellsize - 1, cellsize, 1 );
|
||||
break;
|
||||
|
||||
case SC_INSERT:
|
||||
hb_gt_SetCursorSize(cellsize/2, cellsize, 1);
|
||||
break;
|
||||
case SC_INSERT:
|
||||
hb_gt_SetCursorSize( cellsize / 2, cellsize, 1 );
|
||||
break;
|
||||
|
||||
case SC_SPECIAL1:
|
||||
hb_gt_SetCursorSize(0, cellsize, 1);
|
||||
break;
|
||||
case SC_SPECIAL1:
|
||||
hb_gt_SetCursorSize( 0, cellsize, 1 );
|
||||
break;
|
||||
|
||||
case SC_SPECIAL2:
|
||||
hb_gt_SetCursorSize(0, cellsize/2, 1);
|
||||
break;
|
||||
case SC_SPECIAL2:
|
||||
hb_gt_SetCursorSize( 0, cellsize / 2, 1 );
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_Puts(USHORT usRow, USHORT usCol, BYTE attr, char *str, int len)
|
||||
void hb_gt_Puts( USHORT usRow, USHORT usCol, BYTE attr, BYTE * str, ULONG len )
|
||||
{
|
||||
VioWrtCharStrAtt(str, (USHORT) len, usRow, usCol, (BYTE *) &attr, 0);
|
||||
VioWrtCharStrAtt( ( char * ) str, ( USHORT ) len, usRow, usCol, ( BYTE * ) &attr, 0 );
|
||||
}
|
||||
|
||||
void hb_gt_GetText(USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, char *dest)
|
||||
void hb_gt_GetText( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE *dest )
|
||||
{
|
||||
USHORT width, y;
|
||||
USHORT width, y;
|
||||
|
||||
width = (USHORT) ((usRight - usLeft + 1) * 2);
|
||||
for (y = usTop; y <= usBottom; y++)
|
||||
{
|
||||
VioReadCellStr((BYTE *) dest, &width, y, usLeft, 0);
|
||||
dest += width;
|
||||
}
|
||||
width = ( USHORT ) ( ( usRight - usLeft + 1 ) * 2 );
|
||||
for( y = usTop; y <= usBottom; y++ )
|
||||
{
|
||||
VioReadCellStr( dest, &width, y, usLeft, 0 );
|
||||
dest += width;
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_PutText(USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, char *srce)
|
||||
void hb_gt_PutText( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE *srce )
|
||||
{
|
||||
USHORT width, y;
|
||||
USHORT width, y;
|
||||
|
||||
width = (USHORT) ((usRight - usLeft + 1) * 2);
|
||||
for (y = usTop; y <= usBottom; y++)
|
||||
{
|
||||
VioWrtCellStr((BYTE *) srce, width, y, usLeft, 0);
|
||||
srce += width;
|
||||
}
|
||||
width = ( USHORT ) ( ( usRight - usLeft + 1 ) * 2 );
|
||||
for( y = usTop; y <= usBottom; y++ )
|
||||
{
|
||||
VioWrtCellStr( srce, width, y, usLeft, 0 );
|
||||
srce += width;
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_SetAttribute( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE attr )
|
||||
@@ -263,27 +285,27 @@ void hb_gt_SetAttribute( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT us
|
||||
TODO: work with DispBegin DispEnd
|
||||
*/
|
||||
|
||||
USHORT width, y
|
||||
USHORT width, y
|
||||
|
||||
/*
|
||||
assume top level check that coordinate are all valid and fall
|
||||
within visible screen, else if width cannot be fit on current line
|
||||
it is going to warp to the next line
|
||||
*/
|
||||
width = (USHORT) (usRight - usLeft + 1);
|
||||
for (y = usTop; y <= usBottom; y++)
|
||||
VioWrtNAttr( &attr, width, y, usLeft, 0);
|
||||
width = ( USHORT ) ( usRight - usLeft + 1 );
|
||||
for( y = usTop; y <= usBottom; y++ )
|
||||
VioWrtNAttr( &attr, width, y, usLeft, 0 );
|
||||
}
|
||||
|
||||
void hb_gt_DrawShadow( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE attr )
|
||||
{
|
||||
/* Chen Kedem <niki@actcom.co.il> */
|
||||
|
||||
hb_gt_SetAttribute( usBottom+1, usLeft+1, usBottom+1, usRight+1, attr );
|
||||
hb_gt_SetAttribute( usTop+1, usRight+1, usBottom+1, usRight+1, attr );
|
||||
hb_gt_SetAttribute( usBottom + 1, usLeft + 1, usBottom + 1, usRight + 1, attr );
|
||||
hb_gt_SetAttribute( usTop + 1, usRight + 1, usBottom + 1, usRight + 1, attr );
|
||||
}
|
||||
|
||||
void hb_gt_DispBegin(void)
|
||||
void hb_gt_DispBegin( void )
|
||||
{
|
||||
/* TODO: Is there a way to change screen buffers?
|
||||
ie: can we write somewhere without it going to the screen
|
||||
@@ -292,32 +314,31 @@ void hb_gt_DispBegin(void)
|
||||
*/
|
||||
}
|
||||
|
||||
void hb_gt_DispEnd(void)
|
||||
void hb_gt_DispEnd( void )
|
||||
{
|
||||
/* TODO: here we flush the buffer, and restore normal screen writes */
|
||||
}
|
||||
|
||||
BOOL hb_gt_SetMode( USHORT uiRows, USHORT uiCols )
|
||||
{
|
||||
VIOMODEINFO vi;
|
||||
VIOMODEINFO vi;
|
||||
|
||||
VioGetMode(&vi, 0); /* fill structure with current settings */
|
||||
vi.row = uiRows;
|
||||
vi.col = uiCols;
|
||||
return (BOOL)VioSetMode(&vi, 0); /* 0 = Ok, other = Fail */
|
||||
VioGetMode( &vi, 0 ); /* fill structure with current settings */
|
||||
vi.row = uiRows;
|
||||
vi.col = uiCols;
|
||||
return ( BOOL ) VioSetMode( &vi, 0 ); /* 0 = Ok, other = Fail */
|
||||
}
|
||||
|
||||
void hb_gt_Replicate(char c, ULONG nLength)
|
||||
void hb_gt_Replicate( BYTE c, ULONG ulLen )
|
||||
{
|
||||
/* TODO: this will write character c nlength times to the screen.
|
||||
Note that it is not used yet
|
||||
If there is no native function that supports this, it is
|
||||
already handled in a generic way by higher level functions.
|
||||
*/
|
||||
|
||||
c= ' ';
|
||||
nLength = 0;
|
||||
/* TODO: this will write character c nlength times to the screen.
|
||||
Note that it is not used yet
|
||||
If there is no native function that supports this, it is
|
||||
already handled in a generic way by higher level functions.
|
||||
*/
|
||||
|
||||
c = ' ';
|
||||
ulLen = 0;
|
||||
}
|
||||
|
||||
BOOL hb_gt_GetBlink()
|
||||
@@ -325,10 +346,10 @@ BOOL hb_gt_GetBlink()
|
||||
/* Chen Kedem <niki@actcom.co.il> */
|
||||
VIOINTENSITY vi;
|
||||
|
||||
vi.cb = sizeof(VIOINTENSITY); /* 6 */
|
||||
vi.cb = sizeof( VIOINTENSITY ); /* 6 */
|
||||
vi.type = 2; /* get intensity/blink toggle */
|
||||
VioGetState(&vi, 0);
|
||||
return (vi.fs == 0); /* 0 = blink, 1 = intens */
|
||||
VioGetState( &vi, 0 );
|
||||
return ( vi.fs == 0 ); /* 0 = blink, 1 = intens */
|
||||
}
|
||||
|
||||
void hb_gt_SetBlink( BOOL bBlink )
|
||||
@@ -336,8 +357,8 @@ void hb_gt_SetBlink( BOOL bBlink )
|
||||
/* Chen Kedem <niki@actcom.co.il> */
|
||||
VIOINTENSITY vi;
|
||||
|
||||
vi.cb = sizeof(VIOINTENSITY); /* 6 */
|
||||
vi.cb = sizeof( VIOINTENSITY ); /* 6 */
|
||||
vi.type = 2; /* set intensity/blink toggle */
|
||||
vi.fs = (bBlink ? 0 : 1); /* 0 = blink, 1 = intens */
|
||||
VioSetState(&vi, 0);
|
||||
vi.fs = ( bBlink ? 0 : 1 ); /* 0 = blink, 1 = intens */
|
||||
VioSetState( &vi, 0 );
|
||||
}
|
||||
|
||||
@@ -3,14 +3,43 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTWIN.C: Video subsystem for Windows 95/NT compilers.
|
||||
* Harbour Project source code:
|
||||
* Video subsystem for Win32 compilers
|
||||
*
|
||||
* Copyright 1999 {list of individual authors and e-mail addresses}
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version, with one exception:
|
||||
*
|
||||
* The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
* and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
* an executable, this does not by itself cause the resulting executable
|
||||
* to be covered by the GNU General Public License. Your use of that
|
||||
* executable is in no way restricted on account of linking the HRL
|
||||
* and/or HVM code into it.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
* their web site at http://www.gnu.org/).
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Portions of this module are based (somewhat) on VIDMGR by
|
||||
* Andrew Clarke and modified for the Harbour project
|
||||
*
|
||||
* User programs should never call this layer directly!
|
||||
*/
|
||||
|
||||
/* NOTE: User programs should never call this layer directly! */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -25,7 +54,7 @@
|
||||
|
||||
#if ! defined(__GNUC__)
|
||||
#ifdef __CYGWIN__
|
||||
typedef WORD far *LPWORD;
|
||||
typedef WORD far * LPWORD;
|
||||
#endif
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
@@ -49,407 +78,403 @@ static HANDLE HCursor; /* When DispBegin is in effect, all cursor related
|
||||
#define HB_LOG 0
|
||||
|
||||
#if (defined(HB_LOG) && (HB_LOG != 0))
|
||||
static FILE* flog = 0;
|
||||
static FILE * flog = 0;
|
||||
int line = 0;
|
||||
#define LOG(x) \
|
||||
do { \
|
||||
flog = fopen("c:/tmp/gt.log", "a"); \
|
||||
fprintf(flog, "%5d> GT: %s\n", line++, x); \
|
||||
fflush(flog); \
|
||||
fclose(flog); \
|
||||
} while (0)
|
||||
do
|
||||
{ \
|
||||
flog = fopen( "c:/tmp/gt.log", "a" ); \
|
||||
fprintf( flog, "%5d> GT: %s\n", line++, x ); \
|
||||
fflush( flog ); \
|
||||
fclose( flog ); \
|
||||
} while ( 0 )
|
||||
#else
|
||||
#define LOG(x)
|
||||
#endif /* #if (defined(HB_LOG) && (HB_LOG != 0)) */
|
||||
|
||||
void hb_gt_Init(void)
|
||||
void hb_gt_Init( void )
|
||||
{
|
||||
LOG("Initializing");
|
||||
HInput = GetStdHandle(STD_INPUT_HANDLE);
|
||||
HOriginal = HOutput = HCursor = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
LOG( "Initializing" );
|
||||
HInput = GetStdHandle( STD_INPUT_HANDLE );
|
||||
HOriginal = HOutput = HCursor = GetStdHandle( STD_OUTPUT_HANDLE );
|
||||
}
|
||||
|
||||
void hb_gt_Done(void)
|
||||
void hb_gt_Done( void )
|
||||
{
|
||||
if( HOutput != HOriginal )
|
||||
{
|
||||
/* ptucker */
|
||||
/* because the current screen may not be the one that was active
|
||||
when the app started, we need to restore that screen and update
|
||||
it with the current image before quitting.
|
||||
*/
|
||||
/* easy fix ;-) */
|
||||
hb_gtDispBegin(); /* must use these versions ! */
|
||||
hb_gtDispEnd();
|
||||
|
||||
}
|
||||
CloseHandle(HInput);
|
||||
HInput = INVALID_HANDLE_VALUE;
|
||||
CloseHandle(HOutput);
|
||||
HOutput = INVALID_HANDLE_VALUE;
|
||||
if( HStealth != INVALID_HANDLE_VALUE )
|
||||
{
|
||||
CloseHandle(HStealth);
|
||||
HStealth = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
LOG("Ending");
|
||||
if( HOutput != HOriginal )
|
||||
{
|
||||
/* ptucker */
|
||||
/* because the current screen may not be the one that was active
|
||||
when the app started, we need to restore that screen and update
|
||||
it with the current image before quitting.
|
||||
*/
|
||||
/* easy fix ;-) */
|
||||
hb_gtDispBegin(); /* must use these versions ! */
|
||||
hb_gtDispEnd();
|
||||
}
|
||||
CloseHandle( HInput );
|
||||
HInput = INVALID_HANDLE_VALUE;
|
||||
CloseHandle( HOutput );
|
||||
HOutput = INVALID_HANDLE_VALUE;
|
||||
if( HStealth != INVALID_HANDLE_VALUE )
|
||||
{
|
||||
CloseHandle( HStealth );
|
||||
HStealth = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
LOG( "Ending" );
|
||||
}
|
||||
|
||||
int hb_gt_IsColor(void)
|
||||
BOOL hb_gt_IsColor( void )
|
||||
{
|
||||
/* TODO: need to call something to do this instead of returning TRUE */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
USHORT hb_gt_GetScreenWidth(void)
|
||||
USHORT hb_gt_GetScreenWidth( void )
|
||||
{
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
|
||||
LOG("GetScreenWidth");
|
||||
GetConsoleScreenBufferInfo(HOutput, &csbi);
|
||||
/* return csbi.dwMaximumWindowSize.X; */
|
||||
/* return max(csbi.srWindow.Right - csbi.srWindow.Left +1,40); */
|
||||
return max(csbi.dwSize.X,40);
|
||||
LOG( "GetScreenWidth" );
|
||||
GetConsoleScreenBufferInfo( HOutput, &csbi );
|
||||
/* return csbi.dwMaximumWindowSize.X; */
|
||||
/* return max( csbi.srWindow.Right - csbi.srWindow.Left + 1, 40 ); */
|
||||
return max( csbi.dwSize.X, 40 );
|
||||
}
|
||||
|
||||
USHORT hb_gt_GetScreenHeight(void)
|
||||
USHORT hb_gt_GetScreenHeight( void )
|
||||
{
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
|
||||
LOG("GetScreenHeight");
|
||||
GetConsoleScreenBufferInfo(HOutput, &csbi);
|
||||
/* return csbi.dwMaximumWindowSize.Y; */
|
||||
/* return max(csbi.srWindow.Bottom - csbi.srWindow.Top +1,25); */
|
||||
return max(csbi.dwSize.Y,25);
|
||||
LOG( "GetScreenHeight" );
|
||||
GetConsoleScreenBufferInfo( HOutput, &csbi );
|
||||
/* return csbi.dwMaximumWindowSize.Y; */
|
||||
/* return max( csbi.srWindow.Bottom - csbi.srWindow.Top + 1, 25 ); */
|
||||
return max( csbi.dwSize.Y, 25 );
|
||||
}
|
||||
|
||||
void hb_gt_SetPos(USHORT cRow, USHORT cCol)
|
||||
void hb_gt_SetPos( USHORT cRow, USHORT cCol )
|
||||
{
|
||||
COORD dwCursorPosition;
|
||||
COORD dwCursorPosition;
|
||||
|
||||
LOG("GotoXY");
|
||||
dwCursorPosition.X = (SHORT) (cCol);
|
||||
dwCursorPosition.Y = (SHORT) (cRow);
|
||||
LOG(".. Calling SetConsoleCursorPosition()");
|
||||
SetConsoleCursorPosition(HCursor, dwCursorPosition);
|
||||
LOG(".. Called SetConsoleCursorPosition()");
|
||||
LOG( "GotoXY" );
|
||||
dwCursorPosition.X = ( SHORT ) cCol;
|
||||
dwCursorPosition.Y = ( SHORT ) cRow;
|
||||
LOG( ".. Calling SetConsoleCursorPosition()" );
|
||||
SetConsoleCursorPosition( HCursor, dwCursorPosition );
|
||||
LOG( ".. Called SetConsoleCursorPosition()" );
|
||||
}
|
||||
|
||||
int hb_gt_GetCursorStyle(void)
|
||||
USHORT hb_gt_GetCursorStyle( void )
|
||||
{
|
||||
CONSOLE_CURSOR_INFO cci;
|
||||
int rc;
|
||||
CONSOLE_CURSOR_INFO cci;
|
||||
int rc;
|
||||
|
||||
LOG("GetCursorStyle");
|
||||
GetConsoleCursorInfo(HCursor, &cci);
|
||||
LOG( "GetCursorStyle" );
|
||||
GetConsoleCursorInfo( HCursor, &cci );
|
||||
|
||||
if(!cci.bVisible)
|
||||
{
|
||||
rc=SC_NONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(cci.dwSize)
|
||||
{
|
||||
case 50:
|
||||
rc=SC_INSERT; /* half block in clipper */
|
||||
break;
|
||||
if( ! cci.bVisible )
|
||||
{
|
||||
rc = SC_NONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch( cci.dwSize )
|
||||
{
|
||||
case 50:
|
||||
rc = SC_INSERT; /* half block in clipper */
|
||||
break;
|
||||
|
||||
case 99:
|
||||
rc=SC_SPECIAL1; /* full block in clipper */
|
||||
break;
|
||||
case 99:
|
||||
rc = SC_SPECIAL1; /* full block in clipper */
|
||||
break;
|
||||
|
||||
case 66:
|
||||
rc=SC_SPECIAL2; /* upper half block in clipper */
|
||||
break;
|
||||
/* TODO: cannot tell if the block is upper or lower for cursor */
|
||||
/* Answer: Supposed to be upper third, but ms don't support it. */
|
||||
case 66:
|
||||
rc = SC_SPECIAL2; /* upper half block in clipper */
|
||||
break;
|
||||
/* TODO: cannot tell if the block is upper or lower for cursor */
|
||||
/* Answer: Supposed to be upper third, but ms don't support it. */
|
||||
|
||||
default:
|
||||
rc=SC_NORMAL; /* anything else, we'll call it normal */
|
||||
break;
|
||||
}
|
||||
}
|
||||
default:
|
||||
rc = SC_NORMAL; /* anything else, we'll call it normal */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return(rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
void hb_gt_SetCursorStyle(int style)
|
||||
void hb_gt_SetCursorStyle( USHORT style )
|
||||
{
|
||||
CONSOLE_CURSOR_INFO cci;
|
||||
CONSOLE_CURSOR_INFO cci;
|
||||
|
||||
LOG("SetCursorStyle");
|
||||
GetConsoleCursorInfo(HCursor, &cci);
|
||||
cci.bVisible = 1; /* always visible unless explicitly request off */
|
||||
switch (style)
|
||||
{
|
||||
case SC_NONE:
|
||||
cci.bVisible = 0;
|
||||
break;
|
||||
LOG( "SetCursorStyle" );
|
||||
GetConsoleCursorInfo( HCursor, &cci );
|
||||
cci.bVisible = 1; /* always visible unless explicitly request off */
|
||||
switch( style )
|
||||
{
|
||||
case SC_NONE:
|
||||
cci.bVisible = 0;
|
||||
break;
|
||||
|
||||
case SC_INSERT:
|
||||
cci.dwSize = 50;
|
||||
break;
|
||||
case SC_INSERT:
|
||||
cci.dwSize = 50;
|
||||
break;
|
||||
|
||||
case SC_SPECIAL1:
|
||||
cci.dwSize = 99;
|
||||
break;
|
||||
|
||||
case SC_SPECIAL2:
|
||||
cci.dwSize = 66;
|
||||
/* In their infinite wisdom, MS doesn't support cursors that
|
||||
don't start at the bottom of the cell */
|
||||
break;
|
||||
case SC_NORMAL:
|
||||
default: /* traps for invalid values */
|
||||
cci.dwSize = 25; /* this was 12, but when used in full screen dos window
|
||||
cursor state is erratic - doesn't turn off, etc. */
|
||||
break;
|
||||
|
||||
}
|
||||
SetConsoleCursorInfo(HCursor, &cci);
|
||||
case SC_SPECIAL1:
|
||||
cci.dwSize = 99;
|
||||
break;
|
||||
|
||||
case SC_SPECIAL2:
|
||||
cci.dwSize = 66;
|
||||
/* In their infinite wisdom, MS doesn't support cursors that
|
||||
don't start at the bottom of the cell */
|
||||
break;
|
||||
case SC_NORMAL:
|
||||
default: /* traps for invalid values */
|
||||
cci.dwSize = 25; /* this was 12, but when used in full screen dos window
|
||||
cursor state is erratic - doesn't turn off, etc. */
|
||||
break;
|
||||
}
|
||||
SetConsoleCursorInfo( HCursor, &cci );
|
||||
}
|
||||
|
||||
void hb_gt_Puts(USHORT cRow, USHORT cCol, BYTE attr, char *str, int len)
|
||||
void hb_gt_Puts( USHORT cRow, USHORT cCol, BYTE attr, BYTE *str, ULONG len )
|
||||
{
|
||||
DWORD dwlen;
|
||||
COORD coord;
|
||||
DWORD dwlen;
|
||||
COORD coord;
|
||||
|
||||
LOG("Puts");
|
||||
coord.X = (DWORD) (cCol);
|
||||
coord.Y = (DWORD) (cRow);
|
||||
WriteConsoleOutputCharacterA(HOutput, str, (DWORD)len, coord, &dwlen);
|
||||
FillConsoleOutputAttribute(HOutput, (WORD)(attr&0xff), (DWORD)len, coord, &dwlen);
|
||||
LOG( "Puts" );
|
||||
coord.X = ( DWORD ) cCol;
|
||||
coord.Y = ( DWORD ) cRow;
|
||||
WriteConsoleOutputCharacterA( HOutput, str, ( DWORD ) len, coord, &dwlen );
|
||||
FillConsoleOutputAttribute( HOutput, ( WORD )( attr & 0xFF ), ( DWORD ) len, coord, &dwlen );
|
||||
}
|
||||
|
||||
void hb_gt_GetText(USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, char *dest)
|
||||
void hb_gt_GetText( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE * dest )
|
||||
{
|
||||
DWORD len;
|
||||
COORD coord;
|
||||
LPWORD pwattr;
|
||||
char * pstr;
|
||||
USHORT width, i, y;
|
||||
DWORD len;
|
||||
COORD coord;
|
||||
LPWORD pwattr;
|
||||
BYTE * pstr;
|
||||
USHORT width, i, y;
|
||||
|
||||
LOG("GetText");
|
||||
width = (usRight - usLeft + 1);
|
||||
pwattr = (LPWORD) hb_xgrab(width * sizeof(*pwattr));
|
||||
if (!pwattr)
|
||||
{
|
||||
LOG( "GetText" );
|
||||
width = ( usRight - usLeft + 1 );
|
||||
pwattr = ( LPWORD ) hb_xgrab( width * sizeof( *pwattr ) );
|
||||
if( ! pwattr )
|
||||
{
|
||||
return;
|
||||
}
|
||||
pstr = (char *)hb_xgrab(width);
|
||||
if (!pstr)
|
||||
{
|
||||
hb_xfree(pwattr);
|
||||
}
|
||||
pstr = ( BYTE * ) hb_xgrab( width );
|
||||
if( ! pstr )
|
||||
{
|
||||
hb_xfree( pwattr );
|
||||
return;
|
||||
}
|
||||
for (y = usTop; y <= usBottom; y++)
|
||||
{
|
||||
coord.X = (DWORD) (usLeft);
|
||||
coord.Y = (DWORD) (y);
|
||||
ReadConsoleOutputCharacterA(HOutput, pstr, width, coord, &len);
|
||||
ReadConsoleOutputAttribute(HOutput, pwattr, width, coord, &len);
|
||||
for (i = 0; i < width; i++)
|
||||
{
|
||||
*dest = *(pstr + i);
|
||||
dest++;
|
||||
*dest = (char)*(pwattr + i)&0xff;
|
||||
dest++;
|
||||
}
|
||||
}
|
||||
hb_xfree(pwattr);
|
||||
hb_xfree(pstr);
|
||||
}
|
||||
for( y = usTop; y <= usBottom; y++ )
|
||||
{
|
||||
coord.X = ( DWORD ) usLeft;
|
||||
coord.Y = ( DWORD ) y;
|
||||
ReadConsoleOutputCharacterA( HOutput, pstr, width, coord, &len );
|
||||
ReadConsoleOutputAttribute( HOutput, pwattr, width, coord, &len );
|
||||
for( i = 0; i < width; i++ )
|
||||
{
|
||||
*dest = *( pstr + i );
|
||||
dest++;
|
||||
*dest = ( BYTE ) *( pwattr + i ) & 0xFF;
|
||||
dest++;
|
||||
}
|
||||
}
|
||||
hb_xfree( pwattr );
|
||||
hb_xfree( pstr );
|
||||
}
|
||||
|
||||
void hb_gt_PutText(USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, char *srce)
|
||||
void hb_gt_PutText( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE * srce )
|
||||
{
|
||||
DWORD len;
|
||||
COORD coord;
|
||||
LPWORD pwattr;
|
||||
char *pstr;
|
||||
USHORT width, i, y;
|
||||
DWORD len;
|
||||
COORD coord;
|
||||
LPWORD pwattr;
|
||||
BYTE * pstr;
|
||||
USHORT width, i, y;
|
||||
|
||||
LOG("PutText");
|
||||
width = (usRight - usLeft + 1);
|
||||
pwattr = (LPWORD) hb_xgrab(width * sizeof(*pwattr));
|
||||
if (!pwattr)
|
||||
{
|
||||
LOG( "PutText") ;
|
||||
width = ( usRight - usLeft + 1 );
|
||||
pwattr = ( LPWORD ) hb_xgrab( width * sizeof( *pwattr ) );
|
||||
if( ! pwattr )
|
||||
{
|
||||
return;
|
||||
}
|
||||
pstr = (char *)hb_xgrab(width);
|
||||
if (!pstr)
|
||||
{
|
||||
hb_xfree(pwattr);
|
||||
}
|
||||
pstr = ( BYTE * ) hb_xgrab( width );
|
||||
if( ! pstr )
|
||||
{
|
||||
hb_xfree( pwattr );
|
||||
return;
|
||||
}
|
||||
for (y = usTop; y <= usBottom; y++)
|
||||
{
|
||||
for (i = 0; i < width; i++)
|
||||
{
|
||||
*(pstr + i) = *srce;
|
||||
srce++;
|
||||
*(pwattr + i) = ((WORD)((unsigned char)*srce)&0xff);
|
||||
srce++;
|
||||
}
|
||||
coord.X = (DWORD) (usLeft);
|
||||
coord.Y = (DWORD) (y);
|
||||
WriteConsoleOutputAttribute(HOutput, pwattr, width, coord, &len);
|
||||
WriteConsoleOutputCharacterA(HOutput, pstr, width, coord, &len);
|
||||
}
|
||||
hb_xfree(pwattr);
|
||||
hb_xfree(pstr);
|
||||
}
|
||||
for( y = usTop; y <= usBottom; y++ )
|
||||
{
|
||||
for( i = 0; i < width; i++ )
|
||||
{
|
||||
*( pstr + i ) = *srce;
|
||||
srce++;
|
||||
*( pwattr + i ) = ( ( WORD )( ( BYTE ) *srce ) & 0xFF );
|
||||
srce++;
|
||||
}
|
||||
coord.X = ( DWORD ) usLeft;
|
||||
coord.Y = ( DWORD ) y;
|
||||
WriteConsoleOutputAttribute( HOutput, pwattr, width, coord, &len );
|
||||
WriteConsoleOutputCharacterA( HOutput, pstr, width, coord, &len );
|
||||
}
|
||||
hb_xfree( pwattr );
|
||||
hb_xfree( pstr );
|
||||
}
|
||||
|
||||
void hb_gt_SetAttribute( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE attr )
|
||||
{
|
||||
/* ptucker */
|
||||
|
||||
DWORD len;
|
||||
COORD coord;
|
||||
USHORT width, y;
|
||||
DWORD len;
|
||||
COORD coord;
|
||||
USHORT width, y;
|
||||
|
||||
width = (usRight - usLeft + 1);
|
||||
width = ( usRight - usLeft + 1 );
|
||||
|
||||
coord.X = (DWORD) (usLeft);
|
||||
|
||||
for (y = usTop; y <= usBottom; y++)
|
||||
{
|
||||
coord.Y = y;
|
||||
FillConsoleOutputAttribute(HOutput, (WORD)(attr&0xff), width, coord, &len);
|
||||
}
|
||||
coord.X = ( DWORD ) usLeft;
|
||||
|
||||
for( y = usTop; y <= usBottom; y++ )
|
||||
{
|
||||
coord.Y = y;
|
||||
FillConsoleOutputAttribute( HOutput, ( WORD )( attr & 0xFF ), width, coord, &len );
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_DrawShadow( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE attr )
|
||||
{
|
||||
/* ptucker */
|
||||
|
||||
DWORD len;
|
||||
COORD coord;
|
||||
USHORT width;
|
||||
DWORD len;
|
||||
COORD coord;
|
||||
USHORT width;
|
||||
|
||||
width = (usRight - usLeft + 1);
|
||||
width = ( usRight - usLeft + 1 );
|
||||
|
||||
coord.X = (DWORD) (usLeft);
|
||||
coord.Y = (DWORD) (usBottom);
|
||||
|
||||
FillConsoleOutputAttribute(HOutput, (WORD)(attr&0xff), width, coord, &len);
|
||||
hb_gt_SetAttribute( usTop, usRight, usBottom, usRight, attr );
|
||||
coord.X = ( DWORD ) usLeft;
|
||||
coord.Y = ( DWORD ) usBottom;
|
||||
|
||||
FillConsoleOutputAttribute( HOutput, ( WORD )( attr & 0xFF ), width, coord, &len );
|
||||
hb_gt_SetAttribute( usTop, usRight, usBottom, usRight, attr );
|
||||
}
|
||||
|
||||
USHORT hb_gt_Col(void)
|
||||
USHORT hb_gt_Col( void )
|
||||
{
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
|
||||
LOG("WhereX");
|
||||
GetConsoleScreenBufferInfo(HCursor, &csbi);
|
||||
return csbi.dwCursorPosition.X;
|
||||
LOG( "WhereX" );
|
||||
GetConsoleScreenBufferInfo( HCursor, &csbi );
|
||||
return csbi.dwCursorPosition.X;
|
||||
}
|
||||
|
||||
USHORT hb_gt_Row(void)
|
||||
USHORT hb_gt_Row( void )
|
||||
{
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
|
||||
LOG("WhereY");
|
||||
GetConsoleScreenBufferInfo(HCursor, &csbi);
|
||||
return csbi.dwCursorPosition.Y;
|
||||
LOG( "WhereY" );
|
||||
GetConsoleScreenBufferInfo( HCursor, &csbi );
|
||||
return csbi.dwCursorPosition.Y;
|
||||
}
|
||||
|
||||
void hb_gt_Scroll( USHORT usTop, USHORT usLeft, USHORT usBottom, USHORT usRight, BYTE attr, SHORT sVert, SHORT sHoriz )
|
||||
{
|
||||
/* ptucker */
|
||||
|
||||
SMALL_RECT Source, Clip;
|
||||
COORD Target;
|
||||
CHAR_INFO FillChar;
|
||||
SMALL_RECT Source, Clip;
|
||||
COORD Target;
|
||||
CHAR_INFO FillChar;
|
||||
|
||||
Source.Top = usTop;
|
||||
Source.Left = usLeft;
|
||||
Source.Bottom = usBottom;
|
||||
Source.Right = usRight;
|
||||
Source.Top = usTop;
|
||||
Source.Left = usLeft;
|
||||
Source.Bottom = usBottom;
|
||||
Source.Right = usRight;
|
||||
|
||||
memcpy( &Clip, &Source, sizeof(Clip) );
|
||||
memcpy( &Clip, &Source, sizeof( Clip ) );
|
||||
|
||||
if( (sHoriz | sVert) == 0 ) /* both zero? */
|
||||
{
|
||||
Target.Y = usBottom+1; /* set outside the clipping region */
|
||||
Target.X = usRight+1;
|
||||
}
|
||||
else
|
||||
{
|
||||
Target.Y = usTop-sVert;
|
||||
Target.X = usLeft-sHoriz;
|
||||
}
|
||||
FillChar.Char.AsciiChar = ' ';
|
||||
FillChar.Attributes = (WORD)(attr&0xff);
|
||||
if( ( sHoriz | sVert ) == 0 ) /* both zero? */
|
||||
{
|
||||
Target.Y = usBottom+1; /* set outside the clipping region */
|
||||
Target.X = usRight+1;
|
||||
}
|
||||
else
|
||||
{
|
||||
Target.Y = usTop-sVert;
|
||||
Target.X = usLeft-sHoriz;
|
||||
}
|
||||
FillChar.Char.AsciiChar = ' ';
|
||||
FillChar.Attributes = ( WORD )( attr & 0xFF );
|
||||
|
||||
ScrollConsoleScreenBuffer(HOutput, &Source, &Clip, Target, &FillChar);
|
||||
ScrollConsoleScreenBuffer( HOutput, &Source, &Clip, Target, &FillChar );
|
||||
}
|
||||
|
||||
void hb_gt_DispBegin(void)
|
||||
void hb_gt_DispBegin( void )
|
||||
{
|
||||
/* ptucker */
|
||||
if( hb_gtDispCount() == 1 )
|
||||
{
|
||||
COORD coDest = {0, 0};
|
||||
COORD coBuf; /* the size of the buffer to read into */
|
||||
CHAR_INFO *pCharInfo; /* buffer to store info from ReadConsoleOutput */
|
||||
SMALL_RECT srWin; /* source rectangle to read from */
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
if( hb_gtDispCount() == 1 )
|
||||
{
|
||||
COORD coDest = { 0, 0 };
|
||||
COORD coBuf; /* the size of the buffer to read into */
|
||||
CHAR_INFO * pCharInfo; /* buffer to store info from ReadConsoleOutput */
|
||||
SMALL_RECT srWin; /* source rectangle to read from */
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
|
||||
GetConsoleScreenBufferInfo(HCursor, &csbi);
|
||||
srWin.Top = srWin.Left = 0;
|
||||
srWin.Bottom = (coBuf.Y = csbi.dwSize.Y) -1;
|
||||
srWin.Right = (coBuf.X = csbi.dwSize.X) -1;
|
||||
GetConsoleScreenBufferInfo( HCursor, &csbi );
|
||||
srWin.Top = srWin.Left = 0;
|
||||
srWin.Bottom = ( coBuf.Y = csbi.dwSize.Y ) - 1;
|
||||
srWin.Right = ( coBuf.X = csbi.dwSize.X ) - 1;
|
||||
|
||||
/* allocate a buffer for the screen rectangle */
|
||||
pCharInfo = (CHAR_INFO *)hb_xgrab(coBuf.Y * coBuf.X * sizeof(CHAR_INFO));
|
||||
/* allocate a buffer for the screen rectangle */
|
||||
pCharInfo = ( CHAR_INFO * ) hb_xgrab( coBuf.Y * coBuf.X * sizeof( CHAR_INFO ) );
|
||||
|
||||
/* read the screen rectangle into the buffer */
|
||||
ReadConsoleOutput(HOutput, /* current screen handle */
|
||||
pCharInfo, /* transfer area */
|
||||
coBuf, /* size of destination buffer */
|
||||
coDest, /* upper-left cell to write data to */
|
||||
&srWin); /* screen buffer rectangle to read from */
|
||||
/* read the screen rectangle into the buffer */
|
||||
ReadConsoleOutput( HOutput, /* current screen handle */
|
||||
pCharInfo, /* transfer area */
|
||||
coBuf, /* size of destination buffer */
|
||||
coDest, /* upper-left cell to write data to */
|
||||
&srWin ); /* screen buffer rectangle to read from */
|
||||
|
||||
if( HStealth == INVALID_HANDLE_VALUE )
|
||||
{
|
||||
HStealth = CreateConsoleScreenBuffer(
|
||||
GENERIC_READ | GENERIC_WRITE, /* Access flag */
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, /* Buffer share mode */
|
||||
NULL, /* Security attribute */
|
||||
CONSOLE_TEXTMODE_BUFFER, /* Type of buffer */
|
||||
NULL); /* reserved */
|
||||
if( HStealth == INVALID_HANDLE_VALUE )
|
||||
{
|
||||
HStealth = CreateConsoleScreenBuffer(
|
||||
GENERIC_READ | GENERIC_WRITE, /* Access flag */
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, /* Buffer share mode */
|
||||
NULL, /* Security attribute */
|
||||
CONSOLE_TEXTMODE_BUFFER, /* Type of buffer */
|
||||
NULL ); /* reserved */
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
hb_gt_SetScreenBuffer( HStealth, HOutput );
|
||||
hb_gt_SetScreenBuffer( HStealth, HOutput );
|
||||
|
||||
HOutput = HStealth;
|
||||
WriteConsoleOutput(HOutput, /* output handle */
|
||||
pCharInfo, /* data to write */
|
||||
coBuf, /* col/row size of source buffer */
|
||||
coDest, /* upper-left cell to write data from in src */
|
||||
&srWin); /* screen buffer rect to write data to */
|
||||
HOutput = HStealth;
|
||||
WriteConsoleOutput( HOutput, /* output handle */
|
||||
pCharInfo, /* data to write */
|
||||
coBuf, /* col/row size of source buffer */
|
||||
coDest, /* upper-left cell to write data from in src */
|
||||
&srWin ); /* screen buffer rect to write data to */
|
||||
|
||||
hb_xfree(pCharInfo);
|
||||
}
|
||||
hb_xfree( pCharInfo );
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_DispEnd(void)
|
||||
void hb_gt_DispEnd( void )
|
||||
{
|
||||
/* ptucker */
|
||||
|
||||
if( hb_gtDispCount() == 1 )
|
||||
{
|
||||
HANDLE htmp = HStealth;
|
||||
if( hb_gtDispCount() == 1 )
|
||||
{
|
||||
HANDLE htmp = HStealth;
|
||||
|
||||
HStealth = HCursor;
|
||||
hb_gt_DispBegin();
|
||||
HStealth = htmp;
|
||||
}
|
||||
HStealth = HCursor;
|
||||
hb_gt_DispBegin();
|
||||
HStealth = htmp;
|
||||
}
|
||||
}
|
||||
|
||||
static BOOL hb_gt_SetScreenBuffer( HANDLE HNew, HANDLE HOld )
|
||||
@@ -457,72 +482,72 @@ static BOOL hb_gt_SetScreenBuffer( HANDLE HNew, HANDLE HOld )
|
||||
/* ptucker */
|
||||
|
||||
/* set a new buffer to have the same characteristics as an existing buffer */
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
SMALL_RECT srWin;
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
SMALL_RECT srWin;
|
||||
|
||||
GetConsoleScreenBufferInfo(HOld, &csbi);
|
||||
GetConsoleScreenBufferInfo( HOld, &csbi );
|
||||
|
||||
/* new console window size and scroll position */
|
||||
srWin.Top = srWin.Left = 0;
|
||||
srWin.Bottom = csbi.dwSize.Y - 1;
|
||||
srWin.Right = csbi.dwSize.X - 1;
|
||||
/* new console window size and scroll position */
|
||||
srWin.Top = srWin.Left = 0;
|
||||
srWin.Bottom = csbi.dwSize.Y - 1;
|
||||
srWin.Right = csbi.dwSize.X - 1;
|
||||
|
||||
SetConsoleScreenBufferSize(HNew, csbi.dwSize);
|
||||
SetConsoleWindowInfo(HNew, TRUE, &csbi.srWindow);
|
||||
SetConsoleWindowInfo(HNew, FALSE, &srWin);
|
||||
SetConsoleScreenBufferSize( HNew, csbi.dwSize );
|
||||
SetConsoleWindowInfo( HNew, TRUE, &csbi.srWindow );
|
||||
SetConsoleWindowInfo( HNew, FALSE, &srWin );
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL hb_gt_SetMode( USHORT uiRows, USHORT uiCols )
|
||||
{
|
||||
/* ptucker */
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
SMALL_RECT srWin;
|
||||
COORD coBuf;
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
SMALL_RECT srWin;
|
||||
COORD coBuf;
|
||||
|
||||
GetConsoleScreenBufferInfo(HOutput, &csbi);
|
||||
coBuf = GetLargestConsoleWindowSize(HOutput);
|
||||
GetConsoleScreenBufferInfo( HOutput, &csbi );
|
||||
coBuf = GetLargestConsoleWindowSize( HOutput );
|
||||
|
||||
/* new console window size and scroll position */
|
||||
srWin.Top = srWin.Left = 0;
|
||||
srWin.Bottom = (SHORT) (min(uiRows, coBuf.Y) - 1);
|
||||
srWin.Right = (SHORT) (min(uiCols, coBuf.X) - 1);
|
||||
/* new console window size and scroll position */
|
||||
srWin.Top = srWin.Left = 0;
|
||||
srWin.Bottom = ( SHORT ) ( min( uiRows, coBuf.Y ) - 1 );
|
||||
srWin.Right = ( SHORT ) ( min( uiCols, coBuf.X ) - 1 );
|
||||
|
||||
/* new console buffer size */
|
||||
coBuf.Y = uiRows;
|
||||
coBuf.X = uiCols;
|
||||
/* new console buffer size */
|
||||
coBuf.Y = uiRows;
|
||||
coBuf.X = uiCols;
|
||||
|
||||
/* if the current buffer is larger than what we want, resize the */
|
||||
/* console window first, then the buffer */
|
||||
if ((DWORD) csbi.dwSize.X * csbi.dwSize.Y > (DWORD) uiCols * uiRows )
|
||||
{
|
||||
SetConsoleWindowInfo(HOutput, TRUE, &srWin);
|
||||
SetConsoleScreenBufferSize(HOutput, coBuf);
|
||||
}
|
||||
else if ((DWORD) csbi.dwSize.X * csbi.dwSize.Y < (DWORD) uiCols * uiRows )
|
||||
{
|
||||
SetConsoleScreenBufferSize(HOutput, coBuf);
|
||||
SetConsoleWindowInfo(HOutput, TRUE, &srWin);
|
||||
}
|
||||
return 0;
|
||||
/* if the current buffer is larger than what we want, resize the */
|
||||
/* console window first, then the buffer */
|
||||
if( ( DWORD ) csbi.dwSize.X * csbi.dwSize.Y > ( DWORD ) uiCols * uiRows )
|
||||
{
|
||||
SetConsoleWindowInfo( HOutput, TRUE, &srWin );
|
||||
SetConsoleScreenBufferSize( HOutput, coBuf );
|
||||
}
|
||||
else if( ( DWORD ) csbi.dwSize.X * csbi.dwSize.Y < ( DWORD ) uiCols * uiRows )
|
||||
{
|
||||
SetConsoleScreenBufferSize( HOutput, coBuf );
|
||||
SetConsoleWindowInfo( HOutput, TRUE, &srWin );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hb_gt_Replicate(char c, DWORD nLength)
|
||||
void hb_gt_Replicate( BYTE c, ULONG ulLength )
|
||||
{
|
||||
|
||||
/* ptucker */
|
||||
COORD coBuf = {0,0};
|
||||
DWORD nWritten;
|
||||
COORD coBuf = { 0, 0 };
|
||||
DWORD dwWritten;
|
||||
|
||||
/* TODO: later... */
|
||||
FillConsoleOutputCharacter(
|
||||
HOutput, /* handle to screen buffer */
|
||||
c, /* character to write */
|
||||
nLength, /* number of cells to write */
|
||||
coBuf, /* coordinates of first cell */
|
||||
&nWritten /* receives actual number written */
|
||||
);
|
||||
FillConsoleOutputCharacter(
|
||||
HOutput, /* handle to screen buffer */
|
||||
c, /* character to write */
|
||||
( DWORD ) ulLength, /* number of cells to write */
|
||||
coBuf, /* coordinates of first cell */
|
||||
&dwWritten /* receives actual number written */
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@@ -542,14 +567,14 @@ void hb_gt_DebugScreen( BOOL activate )
|
||||
{
|
||||
if( HDOutput == INVALID_HANDLE_VALUE )
|
||||
{
|
||||
HDOutput = CreateConsoleScreenBuffer(
|
||||
GENERIC_READ | GENERIC_WRITE, /* Access flag */
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, /* Buffer share mode */
|
||||
NULL, /* Security attribute */
|
||||
CONSOLE_TEXTMODE_BUFFER, /* Type of buffer */
|
||||
NULL); /* reserved */
|
||||
HDOutput = CreateConsoleScreenBuffer(
|
||||
GENERIC_READ | GENERIC_WRITE, /* Access flag */
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, /* Buffer share mode */
|
||||
NULL, /* Security attribute */
|
||||
CONSOLE_TEXTMODE_BUFFER, /* Type of buffer */
|
||||
NULL ); /* reserved */
|
||||
|
||||
hb_gt_SetScreenBuffer( HDOutput, HOutput );
|
||||
hb_gt_SetScreenBuffer( HDOutput, HOutput );
|
||||
}
|
||||
HOsave = HOutput;
|
||||
HOutput = HCursor = HDOutput;
|
||||
|
||||
@@ -107,10 +107,10 @@ void hb_gtExit( void )
|
||||
hb_xfree( s_Color );
|
||||
}
|
||||
|
||||
int hb_gtBox( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * pbyFrame )
|
||||
int hb_gtBox( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE * pbyFrame )
|
||||
{
|
||||
char pszBox[ 10 ];
|
||||
char cPadChar;
|
||||
BYTE pszBox[ 10 ];
|
||||
BYTE cPadChar;
|
||||
|
||||
USHORT uiRow;
|
||||
USHORT uiCol;
|
||||
@@ -604,13 +604,16 @@ int hb_gtRectSize( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hb_gtRepChar( USHORT uiRow, USHORT uiCol, USHORT uiChar, USHORT uiCount )
|
||||
int hb_gtRepChar( USHORT uiRow, USHORT uiCol, BYTE byChar, USHORT uiCount )
|
||||
{
|
||||
int rc;
|
||||
char buff[ 255 ];
|
||||
BYTE buff[ 255 ];
|
||||
|
||||
memset( buff, uiChar, uiCount );
|
||||
buff[ uiCount ] = 0;
|
||||
if( uiCount > sizeof( buff ) )
|
||||
return 1;
|
||||
|
||||
memset( buff, byChar, uiCount );
|
||||
buff[ uiCount ] = '\0';
|
||||
rc = hb_gtSetPos( uiRow, uiCol );
|
||||
if( rc != 0 )
|
||||
return rc;
|
||||
@@ -619,16 +622,16 @@ int hb_gtRepChar( USHORT uiRow, USHORT uiCol, USHORT uiChar, USHORT uiCount )
|
||||
return rc;
|
||||
}
|
||||
|
||||
int hb_gtRest( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * vlpScrBuff )
|
||||
int hb_gtRest( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, void * vlpScrBuff )
|
||||
{
|
||||
hb_gt_PutText( uiTop, uiLeft, uiBottom, uiRight, vlpScrBuff );
|
||||
hb_gt_PutText( uiTop, uiLeft, uiBottom, uiRight, ( BYTE * ) vlpScrBuff );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hb_gtSave( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * vlpScrBuff )
|
||||
int hb_gtSave( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, void * vlpScrBuff )
|
||||
{
|
||||
hb_gt_GetText( uiTop, uiLeft, uiBottom, uiRight, vlpScrBuff );
|
||||
hb_gt_GetText( uiTop, uiLeft, uiBottom, uiRight, ( BYTE * ) vlpScrBuff );
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -674,14 +677,14 @@ int hb_gtSetSnowFlag( BOOL bNoSnow )
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hb_gtWrite( char * fpStr, ULONG length )
|
||||
int hb_gtWrite( BYTE * fpStr, ULONG length )
|
||||
{
|
||||
int iRow, iCol, iMaxCol, iMaxRow;
|
||||
ULONG size = length;
|
||||
char attr = s_Color[ s_uiColorIndex ] & 0xFF;
|
||||
BYTE attr = s_Color[ s_uiColorIndex ] & 0xFF;
|
||||
char *fpPointer = fpStr;
|
||||
|
||||
/* TODO: this is doing more work than needed */
|
||||
/* TODO: this is doing more work than needed */
|
||||
|
||||
/* Determine where the cursor is going to end up */
|
||||
iRow = s_uiCurrentRow;
|
||||
@@ -689,7 +692,7 @@ int hb_gtWrite( char * fpStr, ULONG length )
|
||||
iMaxRow = hb_gtMaxRow();
|
||||
iMaxCol = hb_gtMaxCol();
|
||||
|
||||
length = ( length < iMaxCol-iCol+1 ) ? length : iMaxCol - iCol + 1;
|
||||
length = ( length < iMaxCol - iCol + 1 ) ? length : iMaxCol - iCol + 1;
|
||||
|
||||
size = length;
|
||||
|
||||
@@ -743,7 +746,7 @@ int hb_gtWrite( char * fpStr, ULONG length )
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hb_gtWriteAt( USHORT uiRow, USHORT uiCol, char * fpStr, ULONG length )
|
||||
int hb_gtWriteAt( USHORT uiRow, USHORT uiCol, BYTE * fpStr, ULONG length )
|
||||
{
|
||||
int rc;
|
||||
|
||||
@@ -753,7 +756,7 @@ int hb_gtWriteAt( USHORT uiRow, USHORT uiCol, char * fpStr, ULONG length )
|
||||
return hb_gtWrite( fpStr, length );
|
||||
}
|
||||
|
||||
int hb_gtWriteCon( char * fpStr, ULONG length )
|
||||
int hb_gtWriteCon( BYTE * fpStr, ULONG length )
|
||||
{
|
||||
int rc = 0, nLen = 0;
|
||||
BOOL ldisp = FALSE;
|
||||
|
||||
@@ -550,8 +550,8 @@ HARBOUR HB_INKEY( void )
|
||||
/* When not using the GT API, flush both stdout and stderr,
|
||||
because we are waiting for input and want to ensure that
|
||||
any user prompts are visible. */
|
||||
// fflush( stdout );
|
||||
// fflush( stderr );
|
||||
/* fflush( stdout ); */
|
||||
/* fflush( stderr ); */
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -3,37 +3,36 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
Harbour Project source code
|
||||
|
||||
Harbour Mouse Subsystem for DOS
|
||||
|
||||
Copyright 1999 Jose Lalin <dezac@corevia.com>.
|
||||
Luiz Rafael Culik <Culik@sl.conex.net>.
|
||||
www - http://www.harbour-project.org
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version, with one exception:
|
||||
|
||||
The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
an executable, this does not by itself cause the resulting executable
|
||||
to be covered by the GNU General Public License. Your use of that
|
||||
executable is in no way restricted on account of linking the HRL
|
||||
and/or HVM code into it.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
their web site at http://www.gnu.org/).
|
||||
|
||||
*/
|
||||
* Harbour Project source code:
|
||||
* Harbour Mouse Subsystem for DOS
|
||||
*
|
||||
* Copyright 1999 Jose Lalin <dezac@corevia.com>
|
||||
* Luiz Rafael Culik <Culik@sl.conex.net>
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version, with one exception:
|
||||
*
|
||||
* The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
* and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
* an executable, this does not by itself cause the resulting executable
|
||||
* to be covered by the GNU General Public License. Your use of that
|
||||
* executable is in no way restricted on account of linking the HRL
|
||||
* and/or HVM code into it.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
* their web site at http://www.gnu.org/).
|
||||
*
|
||||
*/
|
||||
|
||||
/* TOFIX: Change this to something better */
|
||||
/* #define BORLANDC */
|
||||
|
||||
@@ -3,41 +3,46 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
Harbour Project source code
|
||||
* Harbour Project source code:
|
||||
* Harbour mouse subsystem for OS/2 compilers
|
||||
*
|
||||
* Copyright 1999 Chen Kedem <niki@actcom.co.il>
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version, with one exception:
|
||||
*
|
||||
* The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
* and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
* an executable, this does not by itself cause the resulting executable
|
||||
* to be covered by the GNU General Public License. Your use of that
|
||||
* executable is in no way restricted on account of linking the HRL
|
||||
* and/or HVM code into it.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
* their web site at http://www.gnu.org/).
|
||||
*
|
||||
*/
|
||||
|
||||
Harbour mouse subsystem for OS/2 compilers.
|
||||
|
||||
Copyright 1999 by Chen Kedem <niki@actcom.co.il>
|
||||
www - http://www.harbour-project.org
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version, with one exception:
|
||||
|
||||
The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
an executable, this does not by itself cause the resulting executable
|
||||
to be covered by the GNU General Public License. Your use of that
|
||||
executable is in no way restricted on account of linking the HRL
|
||||
and/or HVM code into it.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
their web site at http://www.gnu.org/).
|
||||
|
||||
V 1.3 Chen Kedem hb_mouse_Hide() now work in any text
|
||||
screen mode by calling VioGetMode.
|
||||
hb_mouse_IsButtonPressed() now return
|
||||
TRUE if any button was pressed.
|
||||
V 1.0 Chen Kedem Initial version.
|
||||
*/
|
||||
/*
|
||||
* ChangeLog:
|
||||
*
|
||||
* V 1.3 Chen Kedem hb_mouse_Hide() now work in any text
|
||||
* screen mode by calling VioGetMode.
|
||||
* hb_mouse_IsButtonPressed() now return
|
||||
* TRUE if any button was pressed.
|
||||
* V 1.0 Chen Kedem Initial version.
|
||||
*
|
||||
*/
|
||||
|
||||
#define INCL_MOU
|
||||
#define INCL_VIO /* needed only for VioGetMode/VIOMODEINFO */
|
||||
|
||||
@@ -3,36 +3,35 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
Harbour Project source code
|
||||
|
||||
Harbour Mouse Subsystem Template
|
||||
|
||||
Copyright 1999 Victor Szel <info@szelvesz.hu>
|
||||
www - http://www.harbour-project.org
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version, with one exception:
|
||||
|
||||
The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
an executable, this does not by itself cause the resulting executable
|
||||
to be covered by the GNU General Public License. Your use of that
|
||||
executable is in no way restricted on account of linking the HRL
|
||||
and/or HVM code into it.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
their web site at http://www.gnu.org/).
|
||||
|
||||
*/
|
||||
* Harbour Project source code:
|
||||
* {Harbour Mouse Subsystem Template}
|
||||
*
|
||||
* Copyright 1999 {list of individual authors and e-mail addresses}
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version, with one exception:
|
||||
*
|
||||
* The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
* and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
* an executable, this does not by itself cause the resulting executable
|
||||
* to be covered by the GNU General Public License. Your use of that
|
||||
* executable is in no way restricted on account of linking the HRL
|
||||
* and/or HVM code into it.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
* their web site at http://www.gnu.org/).
|
||||
*
|
||||
*/
|
||||
|
||||
#include "mouseapi.h"
|
||||
|
||||
|
||||
@@ -3,36 +3,35 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
Harbour Project source code
|
||||
|
||||
Harbour Mouse Subsystem for Windows
|
||||
|
||||
Copyright 1999 ????????????
|
||||
www - http://www.harbour-project.org
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version, with one exception:
|
||||
|
||||
The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
an executable, this does not by itself cause the resulting executable
|
||||
to be covered by the GNU General Public License. Your use of that
|
||||
executable is in no way restricted on account of linking the HRL
|
||||
and/or HVM code into it.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
their web site at http://www.gnu.org/).
|
||||
|
||||
*/
|
||||
* Harbour Project source code:
|
||||
* Harbour Mouse Subsystem for Windows
|
||||
*
|
||||
* Copyright 1999 {list of individual authors and e-mail addresses}
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version, with one exception:
|
||||
*
|
||||
* The exception is that if you link the Harbour Runtime Library (HRL)
|
||||
* and/or the Harbour Virtual Machine (HVM) with other files to produce
|
||||
* an executable, this does not by itself cause the resulting executable
|
||||
* to be covered by the GNU General Public License. Your use of that
|
||||
* executable is in no way restricted on account of linking the HRL
|
||||
* and/or HVM code into it.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
|
||||
* their web site at http://www.gnu.org/).
|
||||
*
|
||||
*/
|
||||
|
||||
#include "mouseapi.h"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user