*** empty log message ***
This commit is contained in:
@@ -1,3 +1,23 @@
|
||||
19990808-15:00 EDT Paul Tucker <ptucker@sympatico.ca>
|
||||
* makefile.vc
|
||||
+ source/rtl/tbrowse.prg
|
||||
+ source/rtl/tbcolumn.prg
|
||||
+ source/debug/debugger.prg
|
||||
+ tests/working/testbrw.prg
|
||||
* source/rtl/gtapi.c
|
||||
-hb_gt_ScreenBuffer
|
||||
* include/gtapi.h
|
||||
-hb_gt_ScreenBuffer
|
||||
* source/rtl/gt/gtwin.c source/rtl/gtdos.c
|
||||
+ Improved or added Dispbegin/end support
|
||||
* minor corrections in gtdos
|
||||
* source/rtl/gt_tpl.c
|
||||
+ dummy hb_gt_Set/GetBlink hb_gt_replicate
|
||||
* source/rtl/gtos2.c
|
||||
+ dummy hb_gt_Set/GetBlink hb_gt_replicate
|
||||
* corrected parameter order as reported by Davig G. Holme
|
||||
NOTE: cursor sizes are not correct in this version.
|
||||
|
||||
19990807-19:34 GMT+1 Antonio Linares <alinares@fivetech.com>
|
||||
* source/rtl/tbrowse.prg
|
||||
* improved
|
||||
|
||||
@@ -101,7 +101,8 @@ extern void hb_gt_SetAttribute( char cTop, char cLeft, char cBottom, char cRig
|
||||
extern void hb_gt_DrawShadow( char cTop, char cLeft, char cBottom, char cRight, char attribute );
|
||||
extern void hb_gt_DispBegin( void );
|
||||
extern void hb_gt_DispEnd( void );
|
||||
extern ULONG hb_gt_ScreenBuffer( ULONG buffer );
|
||||
extern void hb_gt_SetMode( USHORT uiRows, USHORT uiCols );
|
||||
extern BOOL hb_gt_GetBlink(void);
|
||||
extern void hb_gt_SetBlink(BOOL bBlink);
|
||||
|
||||
#endif /* HB_GTAPI_H_ */
|
||||
|
||||
@@ -18,6 +18,7 @@ RTL_DIR=source\rtl
|
||||
RDD_DIR=source\rdd
|
||||
HBPP_DIR=source\hbpp
|
||||
TOOLS_DIR=source\tools
|
||||
DEBUG_DIR=source\debug
|
||||
VM_DIR=source\vm
|
||||
INCLUDE_DIR=include
|
||||
BIN_DIR=bin
|
||||
@@ -90,6 +91,8 @@ HARBOUR_LIB_OBJS = \
|
||||
$(OBJ_DIR)\setcolor.obj \
|
||||
$(OBJ_DIR)\setkey.obj \
|
||||
$(OBJ_DIR)\strings.obj \
|
||||
$(OBJ_DIR)\tbcolumn.obj \
|
||||
$(OBJ_DIR)\tbrowse.obj \
|
||||
$(OBJ_DIR)\tclass.obj \
|
||||
$(OBJ_DIR)\tget.obj \
|
||||
$(OBJ_DIR)\tgetlist.obj \
|
||||
@@ -401,6 +404,18 @@ $(OBJ_DIR)\setkey.obj : $(RTL_DIR)\setkey.c
|
||||
$(OBJ_DIR)\strings.obj : $(RTL_DIR)\strings.c
|
||||
$(CC) $(CLIBFLAGS) -Fo$@ $**
|
||||
|
||||
$(RTL_DIR)\tbcolumn.c : $(RTL_DIR)\tbcolumn.prg
|
||||
$(HARBOUR_EXE) $** $(HARBOURFLAGS) -o$(**D)
|
||||
|
||||
$(OBJ_DIR)\tbcolumn.obj : $(RTL_DIR)\tbcolumn.c
|
||||
$(CC) $(CLIBFLAGS) -Fo$@ $**
|
||||
|
||||
$(RTL_DIR)\tbrowse.c : $(RTL_DIR)\tbrowse.prg
|
||||
$(HARBOUR_EXE) $** $(HARBOURFLAGS) -o$(**D)
|
||||
|
||||
$(OBJ_DIR)\tbrowse.obj : $(RTL_DIR)\tbrowse.c
|
||||
$(CC) $(CLIBFLAGS) -Fo$@ $**
|
||||
|
||||
$(RTL_DIR)\tclass.c : $(RTL_DIR)\tclass.prg
|
||||
$(HARBOUR_EXE) $** $(HARBOURFLAGS) -o$(**D)
|
||||
|
||||
@@ -422,6 +437,16 @@ $(OBJ_DIR)\tgetlist.obj : $(RTL_DIR)\tgetlist.c
|
||||
$(OBJ_DIR)\transfrm.obj : $(RTL_DIR)\transfrm.c
|
||||
$(CC) $(CLIBFLAGS) -Fo$@ $**
|
||||
|
||||
#
|
||||
# Debugger source dependencies below. Add as needed
|
||||
#
|
||||
|
||||
$(DEBUG_DIR)\debugger.c : $(DEBUG_DIR)\debugger.prg
|
||||
$(HARBOUR_EXE) $** $(HARBOURFLAGS) -o$(**D)
|
||||
|
||||
$(OBJ_DIR)\debugger.obj : $(DEBUG_DIR)\debugger.c
|
||||
$(CC) $(CLIBFLAGS) -Fo$@ $**
|
||||
|
||||
#
|
||||
# VM source dependencies below. Add as needed
|
||||
#
|
||||
|
||||
@@ -46,15 +46,15 @@ char hb_gt_Row(void)
|
||||
{
|
||||
}
|
||||
|
||||
void hb_gt_SetCursorStyle(int style)
|
||||
{
|
||||
}
|
||||
|
||||
int hb_gt_GetCursorStyle(void)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
|
||||
void hb_gt_SetCursorStyle(int style)
|
||||
{
|
||||
}
|
||||
|
||||
void hb_gt_Puts(char x, char y, char attr, char *str, int len)
|
||||
{
|
||||
}
|
||||
@@ -94,3 +94,12 @@ void hb_gt_SetMode( USHORT uiRows, USHORT uiCols )
|
||||
void hb_gt_Replicate( char c, DWORD nLength )
|
||||
{
|
||||
}
|
||||
|
||||
BOOL hb_gt_GetBlink()
|
||||
{
|
||||
RETURN FALSE;
|
||||
}
|
||||
|
||||
void hb_gt_SetBlink( BOOL bBlink )
|
||||
{
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
*
|
||||
* This module is based on VIDMGR by Andrew Clarke and modified for
|
||||
* the Harbour project
|
||||
*
|
||||
* User programs should never call this layer directly!
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
@@ -36,8 +38,17 @@ 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
|
||||
#endif
|
||||
static char FAR *scrnPtr;
|
||||
static char FAR *scrnStealth;
|
||||
static char FAR *hb_gt_ScreenAddress(void);
|
||||
|
||||
void hb_gt_Init(void)
|
||||
{
|
||||
scrnStealth = (char *)-1;
|
||||
scrnPtr = hb_gt_ScreenAddress();
|
||||
}
|
||||
|
||||
void hb_gt_Done(void)
|
||||
@@ -49,11 +60,12 @@ int hb_gt_IsColor(void)
|
||||
return hb_gt_GetScreenMode() != 7;
|
||||
}
|
||||
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
|
||||
char *hb_gt_ScreenPtr(char cRow, char cCol)
|
||||
static char FAR *hb_gt_ScreenAddress()
|
||||
{
|
||||
char *ptr;
|
||||
|
||||
char FAR *ptr;
|
||||
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
if (hb_gt_IsColor())
|
||||
{
|
||||
ptr = (char *)(0xB800 << 4);
|
||||
@@ -62,14 +74,7 @@ char *hb_gt_ScreenPtr(char cRow, char cCol)
|
||||
{
|
||||
ptr = (char *)(0xB000 << 4);
|
||||
}
|
||||
return ptr + (cRow * hb_gt_GetScreenWidth() * 2) + (cCol * 2);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
char FAR *hb_gt_ScreenPtr(char cRow, char cCol)
|
||||
{
|
||||
char FAR *ptr;
|
||||
if (hb_gt_IsColor())
|
||||
{
|
||||
ptr = (char FAR *)MK_FP(0xB800, 0x0000);
|
||||
@@ -78,10 +83,15 @@ char FAR *hb_gt_ScreenPtr(char cRow, char cCol)
|
||||
{
|
||||
ptr = (char FAR *)MK_FP(0xB000, 0x0000);
|
||||
}
|
||||
return ptr + (cRow * hb_gt_GetScreenWidth() * 2) + (cCol * 2);
|
||||
#endif
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
#endif
|
||||
char FAR *hb_gt_ScreenPtr(char cRow, char cCol)
|
||||
{
|
||||
return scrnPtr + (cRow * hb_gt_GetScreenWidth() * 2) + (cCol * 2);
|
||||
}
|
||||
|
||||
static char hb_gt_GetScreenMode(void)
|
||||
{
|
||||
@@ -115,8 +125,8 @@ void hb_gt_SetPos(char cRow, char cCol)
|
||||
#if defined(__TURBOC__)
|
||||
_AH = 0x02;
|
||||
_BH = 0;
|
||||
_DH = cRow
|
||||
_DL = cCol
|
||||
_DH = cRow;
|
||||
_DL = cCol;
|
||||
geninterrupt(0x10);
|
||||
#else
|
||||
union REGS regs;
|
||||
@@ -268,10 +278,11 @@ void hb_gt_Puts(char cRow, char cCol, char attr, char *str, int len)
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_GetText(char cTop, char cLeft, char cBottom, char right, char *dest)
|
||||
void hb_gt_GetText(char cTop, char cLeft, char cBottom, char cRight, char *dest)
|
||||
{
|
||||
char x, y;
|
||||
for (y = cTop; y <= cBottom, y++ )
|
||||
|
||||
for (y = cTop; y <= cBottom; y++ )
|
||||
{
|
||||
for (x = cLeft; x <= cRight; x++)
|
||||
{
|
||||
@@ -284,6 +295,7 @@ void hb_gt_GetText(char cTop, char cLeft, char cBottom, char right, char *dest)
|
||||
void hb_gt_PutText(char cTop, char cLeft, char cBottom, char cRight, char *srce)
|
||||
{
|
||||
char x, y;
|
||||
|
||||
for (y = cTop; y <= cBottom; y++)
|
||||
{
|
||||
for (x = cLeft; x <= cRight; x++)
|
||||
@@ -294,25 +306,52 @@ void hb_gt_PutText(char cTop, char cLeft, char cBottom, char cRight, char *srce)
|
||||
}
|
||||
}
|
||||
|
||||
void SetAttribute( char cTop, char cLeft, char cBottom, char cRight, char attribute )
|
||||
void hb_gt_SetAttribute( char cTop, char cLeft, char cBottom, char cRight, char attribute )
|
||||
{
|
||||
char x, y;
|
||||
char attr, ch;
|
||||
|
||||
for (y = cTop; y <= cBottom; y++)
|
||||
{
|
||||
for (x = cLeft; x <= cRight; x++)
|
||||
{
|
||||
hb_gt_xGetXY( y, x, &attr, &ch );
|
||||
hb_gt_xPutch( y, x, attribute, ch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_DrawShadow( char cTop, char cLeft, char cBottom, char cRight, char attribute )
|
||||
{
|
||||
char x, y;
|
||||
char attr, ch;
|
||||
|
||||
for (y = cTop; y <= cBottom; y++)
|
||||
{
|
||||
|
||||
hb_gt_xGetXY( y, cRight, &attr, &ch );
|
||||
hb_gt_xPutch( y, cRight, attribute, ch);
|
||||
|
||||
if( y == cBottom )
|
||||
for (x = cLeft; x <= cRight; x++)
|
||||
{
|
||||
hb_gt_xGetXY( y, x, &attr, &ch );
|
||||
hb_gt_xPutch( y, x, attribute, ch );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* returns col */
|
||||
char hb_gt_Col(void)
|
||||
{
|
||||
#if defined(__TURBOC__)
|
||||
_AH = 0x03;
|
||||
_BH = 0;
|
||||
geninterrupt(0x10);
|
||||
return _DH;
|
||||
return _DL;
|
||||
#else
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x02;
|
||||
regs.h.ah = 0x03;
|
||||
regs.h.bh = 0;
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
int386(0x10, ®s, ®s);
|
||||
@@ -323,7 +362,6 @@ char hb_gt_Col(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
/* returns row */
|
||||
char hb_gt_Row(void)
|
||||
{
|
||||
#if defined(__TURBOC__)
|
||||
@@ -333,7 +371,7 @@ char hb_gt_Row(void)
|
||||
return _DH;
|
||||
#else
|
||||
union REGS regs;
|
||||
regs.h.ah = 0x02;
|
||||
regs.h.ah = 0x03;
|
||||
regs.h.bh = 0;
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
int386(0x10, ®s, ®s);
|
||||
@@ -344,15 +382,78 @@ char hb_gt_Row(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
void hb_gt_DispBegin(void)
|
||||
{
|
||||
if( hb_gtDispCount() == 1 )
|
||||
{
|
||||
char FAR *ptr;
|
||||
ULONG nSize;
|
||||
|
||||
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 );
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_DispEnd(void)
|
||||
{
|
||||
if( hb_gtDispCount() == 0 )
|
||||
{
|
||||
char FAR *ptr;
|
||||
ULONG nSize;
|
||||
|
||||
nSize = hb_gt_GetScreenWidth() * hb_gt_GetScreenHeight() * 2;
|
||||
|
||||
ptr = scrnPtr;
|
||||
scrnPtr = scrnStealh;
|
||||
scrnStealth = ptr;
|
||||
memcpy( (void *)scrnPtr, (void *)ptr, nSize );
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_SetMode( USHORT uiRows, USHORT uiCols )
|
||||
{
|
||||
uiRows=uiCols=0;
|
||||
}
|
||||
|
||||
void hb_gt_DispBegin(void)
|
||||
void hb_gt_Replicate(char c, DWORD nLength)
|
||||
{
|
||||
c= ' ';
|
||||
nLength = 0;
|
||||
|
||||
}
|
||||
|
||||
void hb_gt_DispEnd(void)
|
||||
BOOL hb_gt_GetBlink()
|
||||
{
|
||||
#if defined(__WATCOMC__) && defined(__386__)
|
||||
return *((char *)0x0465) & 0x10;
|
||||
#else
|
||||
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;
|
||||
#else
|
||||
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);
|
||||
#else
|
||||
int86(0x10, ®s, ®s);
|
||||
#endif
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
*
|
||||
* This module is based on VIDMGR by Andrew Clarke and modified for
|
||||
* the Harbour project
|
||||
*
|
||||
* User programs should never call this layer directly!
|
||||
*/
|
||||
|
||||
#define INCL_KBD
|
||||
@@ -72,6 +74,14 @@ char hb_gt_Col(void)
|
||||
return y;
|
||||
}
|
||||
|
||||
static void hb_gt_GetCursorSize(char *start, char *end)
|
||||
{
|
||||
VIOCURSORINFO vi;
|
||||
VioGetCurType(&vi, 0);
|
||||
*start = vi.yStart;
|
||||
*end = vi.cEnd;
|
||||
}
|
||||
|
||||
static void hb_gt_SetCursorSize(char start, char end)
|
||||
{
|
||||
VIOCURSORINFO vi;
|
||||
@@ -82,25 +92,68 @@ static void hb_gt_SetCursorSize(char start, char end)
|
||||
VioSetCurType(&vi, 0);
|
||||
}
|
||||
|
||||
static void hb_gt_GetCursorSize(char *start, char *end)
|
||||
int hb_gt_GetCursorStyle(void)
|
||||
{
|
||||
VIOCURSORINFO vi;
|
||||
VioGetCurType(&vi, 0);
|
||||
*start = vi.yStart;
|
||||
*end = vi.cEnd;
|
||||
char start, end;
|
||||
int rc;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
return(rc);
|
||||
}
|
||||
|
||||
void hb_gt_SetCursorStyle(int style)
|
||||
{
|
||||
/* TODO: need to implement this */
|
||||
}
|
||||
switch(style)
|
||||
{
|
||||
case SC_NONE:
|
||||
hb_gt_SetCursorSize(32, 32);
|
||||
break;
|
||||
|
||||
int hb_gt_GetCursorStyle(void)
|
||||
{
|
||||
/* TODO: need to implement this */
|
||||
int rc=0;
|
||||
case SC_NORMAL:
|
||||
hb_gt_SetCursorSize(6, 7);
|
||||
break;
|
||||
|
||||
return(rc);
|
||||
case SC_INSERT:
|
||||
hb_gt_SetCursorSize(4, 7);
|
||||
break;
|
||||
|
||||
case SC_SPECIAL1:
|
||||
hb_gt_SetCursorSize(0, 7);
|
||||
break;
|
||||
|
||||
case SC_SPECIAL2:
|
||||
hb_gt_SetCursorSize(0, 3);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void hb_gt_Puts(char cRow, char cCol, char attr, char *str, int len)
|
||||
@@ -152,3 +205,18 @@ void hb_gt_DispBegin(void)
|
||||
void hb_gt_DispEnd(void)
|
||||
{
|
||||
}
|
||||
|
||||
void hb_gt_Replicate(char c, DWORD nLength)
|
||||
{
|
||||
c= ' ';
|
||||
nLength = 0;
|
||||
|
||||
}
|
||||
BOOL hb_gt_GetBlink()
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void hb_gt_SetBlink( BOOL bBlink )
|
||||
{
|
||||
}
|
||||
|
||||
@@ -31,6 +31,8 @@ typedef WORD far *LPWORD;
|
||||
|
||||
static HANDLE HInput = INVALID_HANDLE_VALUE;
|
||||
static HANDLE HOutput = INVALID_HANDLE_VALUE;
|
||||
static HANDLE HStealth = INVALID_HANDLE_VALUE; /* DispBegin buffer */
|
||||
static HANDLE HOriginal;
|
||||
static HANDLE HCursor; /* When DispBegin is in effect, all cursor related
|
||||
functions must refer to the original handle!
|
||||
Otherwise turds are left on the screen when
|
||||
@@ -56,16 +58,61 @@ void hb_gt_Init(void)
|
||||
{
|
||||
LOG("Initializing");
|
||||
HInput = GetStdHandle(STD_INPUT_HANDLE);
|
||||
HOutput = HCursor = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
hb_gt_ScreenBuffer((ULONG)HOutput);
|
||||
HOriginal = HOutput = HCursor = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
}
|
||||
|
||||
void hb_gt_Done(void)
|
||||
{
|
||||
/* 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 quiting.
|
||||
*/
|
||||
|
||||
if( HOutput != HOriginal )
|
||||
{
|
||||
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;
|
||||
|
||||
srWin.Top = srWin.Left = 0;
|
||||
srWin.Bottom = (coBuf.Y = hb_gt_GetScreenHeight()) -1;
|
||||
srWin.Right = (coBuf.X = hb_gt_GetScreenWidth()) -1;
|
||||
|
||||
/* allocate a buffer for the screen rectangle */
|
||||
pCharInfo = (CHAR_INFO *)hb_xgrab(coBuf.X * coBuf.Y * 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 */
|
||||
|
||||
GetConsoleScreenBufferInfo(HOutput, &csbi);
|
||||
HOutput = HOriginal;
|
||||
SetConsoleScreenBufferSize(HOutput, coBuf);
|
||||
SetConsoleCursorPosition(HOutput, csbi.dwCursorPosition);
|
||||
|
||||
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);
|
||||
|
||||
SetConsoleActiveScreenBuffer(HOutput);
|
||||
}
|
||||
CloseHandle(HInput);
|
||||
HInput = INVALID_HANDLE_VALUE;
|
||||
CloseHandle(HOutput);
|
||||
HOutput = INVALID_HANDLE_VALUE;
|
||||
CloseHandle(HStealth);
|
||||
HStealth = INVALID_HANDLE_VALUE;
|
||||
CloseHandle(HOriginal);
|
||||
HOriginal = INVALID_HANDLE_VALUE;
|
||||
LOG("Ending");
|
||||
}
|
||||
|
||||
@@ -366,19 +413,16 @@ void hb_gt_DispBegin(void)
|
||||
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 */
|
||||
USHORT uiCount;
|
||||
|
||||
if( ( uiCount = hb_gtDispCount() ) == 1)
|
||||
if( hb_gtDispCount() == 1 )
|
||||
{
|
||||
srWin.Top = srWin.Left = 0;
|
||||
srWin.Right = (coBuf.X = hb_gt_GetScreenWidth()) -1;
|
||||
srWin.Bottom = (coBuf.Y = hb_gt_GetScreenHeight()) -1;
|
||||
srWin.Right = (coBuf.X = hb_gt_GetScreenWidth()) -1;
|
||||
|
||||
/* allocate a buffer for the screen rectangle */
|
||||
pCharInfo = (CHAR_INFO *)hb_xgrab(coBuf.X * coBuf.Y * sizeof(CHAR_INFO));
|
||||
|
||||
hb_gt_ScreenBuffer( (ULONG)HOutput ); /* store current handle */
|
||||
|
||||
/* read the screen rectangle into the buffer */
|
||||
ReadConsoleOutput(HOutput, /* current screen handle */
|
||||
pCharInfo, /* transfer area */
|
||||
@@ -386,14 +430,19 @@ void hb_gt_DispBegin(void)
|
||||
coDest, /* upper-left cell to write data to */
|
||||
&srWin); /* screen buffer rectangle to read from */
|
||||
|
||||
HOutput = CreateConsoleScreenBuffer(
|
||||
GENERIC_READ | GENERIC_WRITE, /* Access flag */
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, /* Buffer share mode */
|
||||
NULL, /* Security attribute ptr */
|
||||
CONSOLE_TEXTMODE_BUFFER, /* Type of buffer */
|
||||
NULL); /* reserved */
|
||||
/* store current handle */
|
||||
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 */
|
||||
|
||||
SetConsoleScreenBufferSize(HOutput, coBuf);
|
||||
SetConsoleScreenBufferSize(HStealth, coBuf);
|
||||
}
|
||||
HOutput = HStealth;
|
||||
|
||||
WriteConsoleOutput(HOutput, /* output handle */
|
||||
pCharInfo, /* data to write */
|
||||
@@ -408,39 +457,16 @@ void hb_gt_DispBegin(void)
|
||||
void hb_gt_DispEnd(void)
|
||||
{
|
||||
/* ptucker */
|
||||
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 */
|
||||
USHORT uiCount;
|
||||
|
||||
if( ( uiCount = hb_gtDispCount() ) == 1 )
|
||||
if( hb_gtDispCount() == 0 )
|
||||
{
|
||||
srWin.Top = srWin.Left = 0;
|
||||
srWin.Right = (coBuf.X = hb_gt_GetScreenWidth()) -1;
|
||||
srWin.Bottom = (coBuf.Y = hb_gt_GetScreenHeight()) -1;
|
||||
CONSOLE_CURSOR_INFO cci;
|
||||
GetConsoleCursorInfo(HCursor, &cci);
|
||||
SetConsoleCursorInfo(HOutput, &cci);
|
||||
SetConsoleActiveScreenBuffer(HOutput);
|
||||
HStealth = HCursor;
|
||||
HCursor = HOutput;
|
||||
|
||||
/* allocate a buffer for the screen rectangle */
|
||||
pCharInfo = (CHAR_INFO *)hb_xgrab(coBuf.X * coBuf.Y * sizeof(CHAR_INFO));
|
||||
|
||||
/* read the screen rectangle into the buffer */
|
||||
ReadConsoleOutput(HOutput, /* current screen buffer */
|
||||
pCharInfo, /* transfer area */
|
||||
coBuf, /* col/row size of destination buffer */
|
||||
coDest, /* upper-left cell to write data to in dest */
|
||||
&srWin); /* screen buffer rectangle to read from */
|
||||
|
||||
CloseHandle( HOutput );
|
||||
|
||||
HOutput = (HANDLE)hb_gt_ScreenBuffer( 0 ); /* get previous handle */
|
||||
|
||||
WriteConsoleOutput(HOutput, /* output buffer */
|
||||
pCharInfo, /* buffer with 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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -490,8 +516,17 @@ void hb_gt_Replicate(char c, DWORD nLength)
|
||||
c, /* character to write */
|
||||
nLength, /* number of cells to write */
|
||||
coBuf, /* coordinates of first cell */
|
||||
&nWritten /* receives actual number written */
|
||||
&nWritten /* receives actual number written */
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
BOOL hb_gt_GetBlink()
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void hb_gt_SetBlink( BOOL bBlink )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
* GTAPI.C: Generic Terminal for Harbour
|
||||
*
|
||||
* Latest mods:
|
||||
* 1.53 19990807 ptucker Modified Dispbegin/end support
|
||||
* 1.47 19990802 ptucker DispBegin/End and SetMode for gtWin
|
||||
* 1.46 19990801 ptucker simplified hb_gtScroll if gtWin
|
||||
* 1.44 19990730 ptucker simplified gtputs and gtSetAttribute
|
||||
@@ -81,14 +82,11 @@ int *_Color; /* masks: 0x0007 Foreground
|
||||
*/
|
||||
int _ColorCount;
|
||||
|
||||
ULONG *_ScrnBuffer;
|
||||
|
||||
/* gt API functions */
|
||||
|
||||
void hb_gtInit(void)
|
||||
{
|
||||
/* ptucker */
|
||||
_ScrnBuffer = (ULONG *)hb_xgrab( sizeof( ULONG ) );
|
||||
_Color = (int *)hb_xgrab(5*sizeof( int ) );
|
||||
_ColorCount = 5;
|
||||
hb_gt_Init();
|
||||
@@ -105,20 +103,6 @@ void hb_gtExit(void)
|
||||
hb_xfree( _Color );
|
||||
while( s_uiDispCount )
|
||||
hb_gtDispEnd();
|
||||
hb_xfree( _ScrnBuffer );
|
||||
}
|
||||
|
||||
/* this gets called from gtwin/gtdos, etc. */
|
||||
/* otherwise it has to be duplicated in each driver */
|
||||
ULONG hb_gt_ScreenBuffer( ULONG NewBuffer)
|
||||
{
|
||||
/* ptucker */
|
||||
ULONG Previous = _ScrnBuffer[s_uiDispCount];
|
||||
|
||||
if( NewBuffer )
|
||||
_ScrnBuffer[s_uiDispCount] = NewBuffer;
|
||||
|
||||
return Previous;
|
||||
}
|
||||
|
||||
int hb_gtBox (USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char* pbyFrame)
|
||||
@@ -173,7 +157,7 @@ int hb_gtBox (USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char
|
||||
/* Draw the box or line as specified */
|
||||
height = uiBottom - uiTop + 1;
|
||||
width = uiRight - uiLeft + 1;
|
||||
// hb_gtDispBegin();
|
||||
/* hb_gtDispBegin(); */
|
||||
|
||||
if( height > 1 && width > 1 )
|
||||
{
|
||||
@@ -213,7 +197,7 @@ int hb_gtBox (USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char
|
||||
}
|
||||
|
||||
/* speed issue for now */
|
||||
// hb_gtDispEnd();
|
||||
/* hb_gtDispEnd(); */
|
||||
|
||||
hb_gtSetPos(uiTopBak + 1, uiLeftBak + 1);
|
||||
|
||||
@@ -248,7 +232,6 @@ int hb_gtDispBegin(void)
|
||||
{
|
||||
/* ptucker */
|
||||
++s_uiDispCount;
|
||||
_ScrnBuffer = (ULONG *)hb_xrealloc( _ScrnBuffer, sizeof( ULONG ) * (s_uiDispCount+1) );
|
||||
hb_gt_DispBegin();
|
||||
return(0);
|
||||
}
|
||||
@@ -261,9 +244,8 @@ USHORT hb_gtDispCount(void)
|
||||
int hb_gtDispEnd(void)
|
||||
{
|
||||
/* ptucker */
|
||||
hb_gt_DispEnd();
|
||||
--s_uiDispCount;
|
||||
_ScrnBuffer = (ULONG *)hb_xrealloc( _ScrnBuffer, sizeof( ULONG ) * (s_uiDispCount+1) );
|
||||
hb_gt_DispEnd();
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -585,14 +567,14 @@ int hb_gtScrDim(USHORT * uipHeight, USHORT * uipWidth)
|
||||
|
||||
int hb_gtGetBlink(BOOL * bBlink)
|
||||
{
|
||||
*bBlink = FALSE;
|
||||
*bBlink = hb_gt_GetBlink();
|
||||
|
||||
return ( 0 );
|
||||
return(0);
|
||||
}
|
||||
|
||||
int hb_gtSetBlink(BOOL bBlink)
|
||||
{
|
||||
HB_SYMBOL_UNUSED( bBlink );
|
||||
hb_gt_SetBlink( bBlink );
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user