From f181406951c80dbae2561a3d4813a443a76d932c Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Wed, 16 Apr 2008 12:42:05 +0000 Subject: [PATCH] 2008-04-16 14:41 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbclass.ch ! removed: MESSAGE IS used as synonym of: MESSAGE METHOD If someone was using the removed version then please update the code to MESSAGE ... METHOD ... The removed command has special meaning in Class(y) and it allow to define alternate names for existing messages. I'll add support for them in the future. * harbour/contrib/hbct/ctwin.c * added disabled code which is a workaround for some possible bad side effect caused by online shadow showing by CTWIN. * harbour/source/rtl/errorint.c ! fixed displaying internal error message * harbour/source/common/hbver.c * added "Rev." prefix to shown revision number * harbour/include/hbexprop.h * harbour/include/hbexprb.c * harbour/source/common/expropt1.c * harbour/source/common/expropt2.c + added hb_compExprReduceNegate() ! fixed wrong negate optimizations for platforms where HB_LONG_MAX is smaller then -HB_LONG_MIN, f.e. all x86 based CPUs. ! fixed setting the size in optimized negative numbers ! fixed some math optimizations to not use casting to double value when it's not necessary - when double precision is smaller then HB_LONG (f.e. on x86 it's 53 bits and HB_LONG has 64bit) such casting can damage up to 11 less significant bits in big 64 bit numbers. * harbour/source/rtl/hbinet.c * replaced MAKEWORD() macro with HB_MKWORD() to pacify BCC58 warnings * harbour/include/hbdefs.h + added #include It should hide some warnings related to redefined integer size constants Viktor if it will not help for BCC58 warnings then you will have to add #include few lines below but please remember that older BCC version does not have it so check for the exact compiler version. ! changed macros which setting default numeric item size for more strict Clipper compatible mode. I'm not a fun of some Clipper behavior in calculating number size and I left some notes about it in hbdefs.h Anyhow this and some other modifications below should cover the differences you've found recently. Some things are not addressed by me intentionally, f.e. _itemPutNL() in Clipper always set size to 10 without checking the maximum size so it's too small for values less then -999999999. Harbour compiler makes more compile time optimizations then Clipper. The formatting rules used by compiler are a little bit different then by VM so this can be source of some other differences to Clipper. I can easy create some examples. Harbour supports 64bit signed integers and Clipper doesn't. This is yet another situation when we may have different results then Clipper. Most of them can be hidden if we add new PCODE(s) for integer number with explicit size but I do not think it's such important to increase PCODE list. In few cases it will be necessary to disable some optimizations at all and I do not like it. In the future when I will be adding some new optimizations I also add compiler switch to disable/enable optimizations which can have such side effects for people who need strict formatting. * harbour/include/hbvmpub.h * harbour/source/common/hbstr.c * harbour/source/vm/hvm.c * harbour/source/vm/itemapi.c * harbour/source/rtl/round.c * updated for more Clipper compatible number formating using new macros --- harbour/ChangeLog | 79 ++++++++++++++++++++++++++++++-- harbour/contrib/hbct/ctwin.c | 26 +++++++++++ harbour/include/hbclass.ch | 18 +++++--- harbour/include/hbdefs.h | 58 +++++++++++++++++------ harbour/include/hbexprb.c | 18 +------- harbour/include/hbexprop.h | 1 + harbour/include/hbvmpub.h | 4 +- harbour/source/common/expropt1.c | 16 ++++++- harbour/source/common/expropt2.c | 50 +++++++++++++++++--- harbour/source/common/hbstr.c | 12 ++--- harbour/source/common/hbver.c | 2 +- harbour/source/rtl/errorint.c | 5 +- harbour/source/rtl/hbinet.c | 3 +- harbour/source/rtl/round.c | 2 +- harbour/source/vm/hvm.c | 58 +++++++++++------------ harbour/source/vm/itemapi.c | 23 +++++++--- 16 files changed, 278 insertions(+), 97 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 6b6d26bedd..21d152180d 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,79 @@ 2008-12-31 13:59 UTC+0100 Foo Bar */ +2008-04-16 14:41 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/include/hbclass.ch + ! removed: + MESSAGE IS + used as synonym of: + MESSAGE METHOD + If someone was using the removed version then please update the + code to MESSAGE ... METHOD ... + The removed command has special meaning in Class(y) and it allow + to define alternate names for existing messages. I'll add support + for them in the future. + + * harbour/contrib/hbct/ctwin.c + * added disabled code which is a workaround for some possible + bad side effect caused by online shadow showing by CTWIN. + + * harbour/source/rtl/errorint.c + ! fixed displaying internal error message + + * harbour/source/common/hbver.c + * added "Rev." prefix to shown revision number + + * harbour/include/hbexprop.h + * harbour/include/hbexprb.c + * harbour/source/common/expropt1.c + * harbour/source/common/expropt2.c + + added hb_compExprReduceNegate() + ! fixed wrong negate optimizations for platforms where HB_LONG_MAX + is smaller then -HB_LONG_MIN, f.e. all x86 based CPUs. + ! fixed setting the size in optimized negative numbers + ! fixed some math optimizations to not use casting to double value + when it's not necessary - when double precision is smaller then HB_LONG + (f.e. on x86 it's 53 bits and HB_LONG has 64bit) such casting can damage + up to 11 less significant bits in big 64 bit numbers. + + * harbour/source/rtl/hbinet.c + * replaced MAKEWORD() macro with HB_MKWORD() to pacify BCC58 warnings + + * harbour/include/hbdefs.h + + added #include + It should hide some warnings related to redefined integer size constants + Viktor if it will not help for BCC58 warnings then you will have to add + #include + few lines below but please remember that older BCC version does not + have it so check for the exact compiler version. + ! changed macros which setting default numeric item size for more strict + Clipper compatible mode. I'm not a fun of some Clipper behavior in + calculating number size and I left some notes about it in hbdefs.h + Anyhow this and some other modifications below should cover the + differences you've found recently. Some things are not addressed by + me intentionally, f.e. _itemPutNL() in Clipper always set size to 10 + without checking the maximum size so it's too small for values less + then -999999999. Harbour compiler makes more compile time optimizations + then Clipper. The formatting rules used by compiler are a little bit + different then by VM so this can be source of some other differences + to Clipper. I can easy create some examples. Harbour supports 64bit + signed integers and Clipper doesn't. This is yet another situation + when we may have different results then Clipper. Most of them can + be hidden if we add new PCODE(s) for integer number with explicit + size but I do not think it's such important to increase PCODE list. + In few cases it will be necessary to disable some optimizations at + all and I do not like it. In the future when I will be adding some + new optimizations I also add compiler switch to disable/enable + optimizations which can have such side effects for people who need + strict formatting. + + * harbour/include/hbvmpub.h + * harbour/source/common/hbstr.c + * harbour/source/vm/hvm.c + * harbour/source/vm/itemapi.c + * harbour/source/rtl/round.c + * updated for more Clipper compatible number formating using new macros + 2008-04-15 13:32 UTC+0100 Viktor Szakats (harbour.01 syenar hu) * source/rtl/tget.prg + TGet instance variable ordering in class definition @@ -179,9 +252,9 @@ 2008-04-10 15:39 UTC+0100 Belgrano Massimo (mbelgrano/at/deltain.it) * harbour/contrib/rddado/adordd.prg - Instead of overloading FOUND method in ADO RDD it will be - more efficient to use standard implementation written in C - by Przemyslaw suggestion + * Instead of overloading FOUND method in ADO RDD it will be + more efficient to use standard implementation written in C + by Przemyslaw suggestion 2008-04-09 20:42 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/ChangeLog diff --git a/harbour/contrib/hbct/ctwin.c b/harbour/contrib/hbct/ctwin.c index 01c504b351..f20d0c184c 100644 --- a/harbour/contrib/hbct/ctwin.c +++ b/harbour/contrib/hbct/ctwin.c @@ -1320,6 +1320,32 @@ static BOOL hb_ctw_gt_PutChar( PHB_GT pGT, int iRow, int iCol, { long lIndex = ( long ) iRow * s_iMapWidth + iCol; iWindow = s_pWindowMap[ lIndex ]; +#if 0 + /* When window with shadow is closed CT3 restores attributes + * which existed before shadow was displayed. In some application + * which switches to window 0 for pass-throw output it causes that + * wrong attributes appears after this operation. In Harbour it's + * fixed so such problem do not exist. Anyhow some code may switch + * to window 0, make savescreen()/restscreen() and in such case + * all shadow attributes are copied to window 0 buffer. The code + * below is workaround for it. [druzus] + */ + if( s_pShadowMap[ lIndex ] != 0 ) + { + int iShadow = s_pShadowMap[ lIndex ]; + if( s_windows[ iShadow ]->iShadowAttr >= 0 && + ( BYTE ) s_windows[ iShadow ]->iShadowAttr == bColor ) + { + BYTE bClr, bAtr; + USHORT usCh; + if( HB_GTSELF_GETSCRCHAR( pGT, iRow, iCol, &bClr, &bAtr, &usCh ) ) + { + if( usCh == usChar && bClr == bColor ) + return TRUE; + } + } + } +#endif s_pShadowMap[ lIndex ] = 0; } } diff --git a/harbour/include/hbclass.ch b/harbour/include/hbclass.ch index c45339a8a9..e4a9ec4dcc 100644 --- a/harbour/include/hbclass.ch +++ b/harbour/include/hbclass.ch @@ -7,11 +7,12 @@ * Header file for Class commands * * Copyright 1999 Antonio Linares - * www - http://www.harbour-project.org * * Copyright 2006 Przemyslaw Czerpak * most of rules rewritten * + * 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, or (at your option) @@ -379,7 +380,7 @@ DECLARE HBClass ; #xcommand MESSAGE [ AS ] DEFERRED => ; MESSAGE [ AS ] VIRTUAL -#xcommand MESSAGE [ AS ] [] [] [] [