* make_vc.mak
* -GA option only used for HB_VISUALC_VER >= 70.
Please update this if older versions also support it.
* include/hbver.ch
* source/common/hbver.c
* Some more fiddling with version number terminology and
hb_version() values:
HB_VERSION_MICRO -> HB_VERSION_RELEASE
HB_VERSION_BLD_DATE_STR -> HB_VERSION_BUILD_DATE_STR
HB_VERSION_BLD_DATE -> HB_VERSION_BUILD_DATE
HB_VERSION_BLD_TIME -> HB_VERSION_BUILD_TIME
HB_VERSION_CHANGELOG_REV -> HB_VERSION_CHANGELOG_ID
Third part of version number could also be: PATCH, MICRO, BUILD
SVN revision could also be: BUILD
BUILD is inherently connected with a physical binary, so
I dropped it, PATCH is limiting and negativ, MICRO is not
very common (otherwise good), so a finally opted for
RELEASE. REVISION kept as is.
; If there are no objections I'll HB_VER_REVISION macro to
HB_VER_RELEASE. This will be an INCOMPATIBLE change, but
I expect not too many ppl being affected.
* TODO
- Removed MT as a TODO. Thanks Przemek for the nice job.
* harbour/include/hbapi.h
* harbour/source/vm/hashes.c
* harbour/source/vm/hashfunc.c
* changed hb_hSort() to execute sorting when hash is marked as needed
resorting instead of marking hash for resorting
* harbour/source/vm/fm.c
* formatting
* harbour/contrib/hbdbgfx/dbgfxc.c
! fixed casting in ASCII build
+ added support for UNICODE builds
* harbour/contrib/gtwvg/gtwvg.c
* cover LWA_ALPHA usage by #if ( _WIN32_WINNT >= 0x0500 )
to keep at least compile time compatibility with older systems
* harbour/include/hbapi.h
* harbour/source/vm/hashfunc.c
* harbour/source/vm/hashes.c
+ added support for binary key order
% enable binary internal key order by default for new hash arrays
+ added .prg function to enable/disable/retrive binary order in hash
items:
hb_hSetBinary( <hValue>, <lOnOff> ) => <hValue>
hb_hBinary( <hValue> [, <lBinary> ] ) => <lBinary>
+ added support for hash array resorting. It's activated automatically
on 1-st key access/assign after changing binary or casematch hash
array flag
+ added .prg function hb_hSort( <hValue> ) => <hValue> which marks
hash array for sorting
* harbour/source/rtl/itemseri.c
% improved performance of hash array deserialization
TODO: add support for hash array flags and hash default value
serialization
* include/hbextern.ch
* common.mak
* source/codepage/Makefile
* source/codepage/cpeswinm.c
- source/codepage/cpes850.c
+ source/codepage/cpes850c.c
* source/codepage/cpesiso.c
+ source/codepage/cpesisoc.c
* source/codepage/cpeswin.c
+ source/codepage/cpeswinc.c
* source/codepage/cpesisom.c
* Spanish language support cleaned:
Modern collation made the default, fixed
CP linkage in ESWIN collations, Clipper
compatibility versions renamed to have an
ending 'C'
Now the following collations are supported:
ES850C - Clipper compatibility CP: IBM850
ESWINC - Clipper compatibility CP: Windows-1252
ESISOC - Clipper compatibility CP: ISO-8859-1
ESWIN - Modern CP: Windows-1252
ESISO - Modern CP: ISO-8859-1
ESMWIN - Compatibility with previous Harbour versions and xhb.
(this collation has wrong linkage, so everyone is
encouraged to use ESWIN or ESISO instead.)
Intentionally not added to hbextern.ch.
; TODO: Add ES850.
; TODO: Check whether Clipper compatibility is indeed true.
* harbour/include/hbthread.h
! fixed typo
* harbour/source/vm/Makefile
* excluded mainpm.c from OS2 builds
* harbour/source/rtl/hbinet.c
* changed the #include order for OS2 OpenWatcom builds and added some
cleanups - please test other builds.
* harbour/include/hbthread.h
* harbour/source/vm/thread.c
+ added ULONG _hb_gettid( void ) to OS2 builds - thanks to Maurilio
* harbour/source/rtl/hbinet.c
* changed a little bit the order of including header files in OS2 builds
(blink fix for OpenWatcom OS2 builds).
* harbour/include/hbexprb.c
! fixed possible GPF/internal memory corruption in code like:
? HB_I18N_GETTEXT_NOOP( "Ala ma kota" + " !!!" )
Mindaugas, the fix is also the answer for the question you left
in TODO.
* harbour/include/hbdefs.h
+ added #define INCL_LONGLONG to include native compiler LONGLONG
definition. It's necessary for OpenWatcom. Please check how it will
interact with other OS2 compilers (GCC)
* include/hbextern.ch
* source/rtl/memofile.c
+ Added HB_MEMOREAD() which is identical to MEMOREAD()
except it won't truncate the last byte (on non-UNIX
compatible systems) if it's a EOF char.
See also existing HB_MEMOWRIT().
[TOMERGE 1.0]
* include/hbextern.ch
* source/rtl/hbi18n.c
% Using buffered hb_file*() API in __I18N_LOAD()
instead of plain hb_fs*(). This will cause speedup when
buffering gets implemented in hb_file*(), because
currently two hb_fsRead() will be executed for each
string stored in the language file.
- __I18N_LOAD(): Because of the above, passing a file handle
is no longer possible.
+ Added __I18N_LOADFROMMEMORY( <mem> ) => trs
% Minor internal cleanups.
* include/hbextern.ch
* common.mak
* source/rtl/Makefile
+ source/rtl/hbi18n.c
+ Added basic/low level i18n functions:
__I18N_SAVE( cFileName | nHandle, aSortedTable [, cComment ] ) => lSuccess
__I18N_LOAD( cFileName | nHandle ) => trs
__I18N_GETTEXT( @cText, trs ) => NIL
; NOTE: These were originally based on Giancarlo Niccolai's work in xhb,
but everything was completely reworked, fixed, internals removed,
made portable, lighter, shorter and probably quicker. The used file
format is incompatible, slightly smaller and portable.
; NOTE: The internal format of 'trs' (loaded translation) is also
different. For minimal memory/speed overhead, I've choosen a one
dimensional array, as opposed to the original two dimensional
(like the input aSortedTable array).
; TODO: Higher level functions to handle selecting a default
language, loading files automatically, possibly caching
multiple loaded language translations in memory and providing
a high level HB_I18N_GETTEXT() function. We may also readd
a low-level function to create 'trs' from a memory object
instead of loading it from the disk. We should in any case make
the higher level the lightest and less app specific as possible.
* include/hbver.ch
* source/rtl/version.c
* utils/hbtest/rt_str.prg
* ChangeLog
! Fixed returning bit width.
* Reworked hb_version() parameter values as follows:
(also fixed some differences between docs here in the
previous entry and actual code)
HB_VERSION_HARBOUR (was: HB_V_HARBOUR )
HB_VERSION_COMPILER (was: HB_V_COMPILER )
HB_VERSION_MAJOR (was: HB_V_MAJOR )
HB_VERSION_MINOR (was: HB_V_MINOR )
HB_VERSION_MICRO (was: HB_V_REV )
HB_VERSION_STATUS (was: HB_V_STATUS )
HB_VERSION_REVISION (was: HB_V_COUNT )
HB_VERSION_BLD_DATE_STR (was: HB_V_DATE_TIME )
HB_VERSION_BLD_DATE (was: HB_V_DATE )
HB_VERSION_BLD_TIME (was: HB_V_TIME )
HB_VERSION_PCODE_VER (was: HB_V_PCODE )
HB_VERSION_PCODE_VER_STR (was: HB_V_PCODE_STR )
HB_VERSION_CHANGELOG_LAST (was: HB_V_CHANGELOG_LAST )
HB_VERSION_CHANGELOG_REV (was: HB_V_CHANGELOG_REV )
HB_VERSION_FLAG_PRG (was: HB_V_FLAG_HARBOUR )
HB_VERSION_FLAG_C (was: HB_V_FLAG_C )
HB_VERSION_FLAG_LINKER (was: HB_V_FLAG_LINKER )
HB_VERSION_BITWIDTH (was: HB_V_BITWIDTH )
HB_VERSION_ENDIANNESS (was: HB_V_ENDIANNESS )
This function makes deprecated following functions:
- HB_COMPILER() => hb_version( HB_VERSION_COMPILER )
- HB_PCODEVER() => hb_version( HB_VERSION_PCODE_VER_STR )
- HB_BUILDDATE() => hb_version( HB_VERSION_BLD_DATE_STR )
and macros:
- __ARCH16BIT__
- __ARCH32BIT__
- __ARCH64BIT__
- __LITTLE_ENDIAN__
- __BIG_ENDIAN__
- __PDP_ENDIAN__
- HB_VER_SVNID
- HB_VER_CHLID
- HB_VER_LENTRY
- HB_VER_C_USR
- HB_VER_L_USR
- HB_VER_PRG_USR
; TOFIX: Some term anomalies regarding 'REVISION'.
* source/vm/runner.c
* Minor formatting and added "s_" prefix to static var.
* harbour/include/hbvmpub.h
+ added HB_VM_ISFUNC(), HB_VM_FUNCUNREF() and HB_VM_EXECUTE()
macros to operate on HB_SYMB structure
* harbour/source/vm/hvm.c
* harbour/source/vm/classes.c
* use HB_VM_ISFUNC()/HB_VM_FUNCUNREF()/HB_VM_EXECUTE() macros
for executing function inside HB_SYMB structure to avoid possible
synchronization problems during modifications
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
+ added hb_stackReleaseTSD() function - this function can be called
only in HVM cleanup state when all threads except the main one are
released
* harbour/source/rdd/dbf1.c
* harbour/source/rdd/dbffpt/dbffpt1.c
* harbour/source/rdd/dbfntx/dbfntx1.c
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* make RDDINFO settings in BDF* based RDDs thread local
* harbour/include/hbclass.ch
* minor modification
* harbour/include/hbxvm.h
* harbour/source/vm/hvm.c
* harbour/source/compiler/gencc.c
+ added finished by mistake support for hidden strings in -gc3 mode
* include/hbextern.ch
* source/vm/cmdarg.c
+ Added HB_CMDLINE() .prg level function to return
the full command line. Currently it does reassemble
it from hb_argc/hb_argv.
* contrib/rddsql/mysqldd.c
! Fixed MSVC casting errors in C++ mode.
* include/hbwmain.c
* source/vm/cmdarg.c
* Moved argv[ 0 ] generation on Windows platform, so
that it now gets properly filled with the full
executable file path for console mode (GTWIN)
apps in all situations (f.e. when run from a
batch file using '%~n1.exe' macro).
* source/rtl/hbinet.c
! Fixed to use safe strerror() (named strerror_s())
under MSVS 2005 and upper.
Please test.
* source/hbzlib/gzio.c
+ Added _CRT_SECURE_NO_DEPRECATE locally to suppress
various MSVC unsafe CRT API usage warnings. Maybe it'd
be better to fix these by using Harbour APIs.
* utils/hbdoc/gentrf.prg
! Fixed missing "common.ch"
* harbour/include/hbdefs.h
+ added HB_PRINTF_FORMAT() macro to declare functions with printf()
like formatting parameters - now it works only for GCC compilers.
* harbour/include/hbapi.h
* declare hb_snprintf() with HB_PRINTF_FORMAT() attribute
* harbour/source/rtl/philes.c
+ set FERROR() in HB_FLOCK()/HB_FUNLOCK()
+ accept extended lock attributes (WAIT/SHARE) in HB_FLOCK()
* include/hbextern.ch
* source/rtl/philes.c
+ Added HB_FLOCK() / HB_FUNLOCK() file locking
functions.
[TOMERGE 1.0]
* source/rtl/tget.prg
! Accessing of Get() variables below made
C5.x compatible when a new value was
assigned to them as function call, rather
then normal assigment.
:buffer, :changed, :clear, :col, :colorSpec
:minus, :pos, :row, :subScript, :postBlock,
:preBlock, :cargo, :exitState, :reader.
; NOTE: Please report if any of the side cases
still don't work.
[TOMERGE 1.0]
* make_vc.mak
* contrib/mtpl_vc.mak
- Removed no longer necessary '-D_CRT_SECURE_NO_DEPRECATE'
for MSVS 2005 and upper.
* include/hbsetup.h
* Mapping snprintf() calls to hb_snprintf().
; TODO: Replace the calls in source code.
* source/common/hbstr.c
! Fixed hb_snprintf(). Please verify on your platforms.
; TODO: It may need further tweaking to smooth out the
platform implementation differences.
* source/common/hbstr.c
* Some tweaks to hb_snprintf(). It still doesn't work
for some reason.
* include/hbapi.h
+ Added hb_snprintf() to header.
* source/debug/dbgentry.c
* Changed strcpy() to hb_strncpy(). Chances are high
this is wrong. Please review and test.
* harbour/rtl/gtwvt/gtwvt.h
+ Added <ResizeMode> member to HB_GTWVT
* harbour/include/hbgtinfo.ch
+ Added HB_GTI_RESIZEMODE
+ Added HB_GTI_RESIZEMODE_FONT
+ Added HB_GTI_RESIZEMODE_ROWS
* harbour/include/inkey.ch
+ Added K_HB_RESIZE 1101
* harbour/rtl/gtwvt/gtwvt.c
! Updated to accomodate HB_GTI_RESIZEMODE.
* harbour/rtl/hbgtcore.c
! static BOOL hb_gt_def_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
{
case HB_GTI_RESIZEMODE:
pInfo->pResult = hb_itemPutNInt( pInfo->pResult, HB_GTI_RESIZEMODE_FONT );
break;
* harbour/tests/wvtext.prg
! Updated to demonstrate K_HB_RESIZE event in navigation loop.
; Odd numbered windows will have HB_GTI_RESIZEMODE_ROWS mode
Even numbered windows will have HB_GTI_RESIZEMODE_FONT mode.
Open two or more browsers to see the effects.
; To activate HB_GTI_RESIZEMODE_ROWS mode call
hb_gtInfo( HB_GTI_RESIZEMODE, HB_GTI_RESIZEMODE_ROWS )
and whenever window will be resized you can retrieve it via
if inkey() == K_HB_RESIZE
// Reconfigure browser/your screen accordingly
endif
* harbour/source/rtl/gtxwc/gtxwc.c
* added hack for problems with some XLIB versions in heavy stress
MT tests
* harbour/include/hbapigt.h
* harbour/source/vm/thread.c
* added parameter to hb_gtAlloc() C function
* harbour/include/hbapigt.h
* harbour/source/rtl/hbgtcore.c
+ added hb_gtCreate() and hb_gtSwap() C functions
+ added new .prg functions:
HB_GTCREATE( <cGtName> ) -> <pGT>
HB_GTSELECT( <pGT> ) -> <pPrevGT>
Using this functions is possible to create many console window
if GT supports such possibilities (f.e. GTXWC or GTWVT) even in
single thread programs and switch between them.
* harbour/source/rtl/box.c
! fixed one of recent DISPBOX() modifications - it should use:
hb_gtBoxEx() instead of hb_gtDrawBox() to set cursor position.
+ harbour/tests/gtwin.prg
+ added demonstration/test code for using more then one console window
also in single thread programs.
* harbour/include/hbstack.h
* harbour/include/hbgtcore.h
* harbour/include/hbthread.h
* harbour/include/hbapigt.h
* harbour/source/vm/estack.c
* harbour/source/vm/hvm.c
* harbour/source/vm/thread.c
* harbour/source/rtl/hbgtcore.c
+ added support for optional allocating independent console window by
each thread. By default new thread inherits console Window from
parent thread. But each thread can allocate its own console window
by calling hb_gtReload( <cGtName> ) function, f.e. by:
hb_gtReload( hb_gtVersion() )
If GT driver supports such functionality then new it will allocate
new console windows.
Each console window has reference counter which is increased when
new thread starts and decreased when hb_gtReload() is executed or
thread terminates. When counter reach zero give console window is
destroyed.
* harbour/source/rtl/gtwvt/gtwvt.c
! use SendNotifyMessage() instead of SendMessage() to not block
threads which inherited GT from parent thread. Why non of MS-Win
users reported this problem?
+ added reference counter to window class for multi GT support
+ harbour/tests/mt/mttest10.prg
+ added demonstration/test code for using independent console window
in different threads. It needs GT driver which supports such
functionality, f.e GTXWC in *nixes or GTWVT in MS-Windows
* harbour/tests/mt/mttest09.prg
! fixed typo in comment
* harbour/include/hbapigt.h
* harbour/source/rtl/console.c
* harbour/source/rtl/filesys.c
* use HB_STD{IN,OUT,ERR}_HANDLE macros instead of hard coded values
* harbour/include/hbgtcore.h
* harbour/source/rtl/hbgtcore.c
* harbour/source/rtl/gtapi.c
+ added optional support for dynamic supertables
+ added reference counter to HB_GT_BASE structure
- removed hb_gtUnLoad() function
+ added hb_gtAlloc(), hb_gtRelease(), hb_gtAttach()
+ added hb_gtRealod() function which unloads current GT driver
and loads given new one
+ added .prg function HB_GTRELOAD( <cGtName> ) -> <lSuccess>
This function allow to switch active GT driver at run time.
It can be also used to simulate removed HB_NOSTARTUPWINDOW()
functionality. F.e.:
REQUEST HB_GT_WVT
REQUEST HB_GT_NUL_DEFAULT
proc main()
// do some initializations...
hb_gtReload( "WVT" )
// rest of code...
return
Please remember that some GTs may refuse initialization due to
missing required resources and instead of return FALSE they can
interrupt program with internal error, just like at application
startup so it's not guarantied that this function always returns.
* harbour/contrib/hbct/ctwin.c
* updated for new GT API
+ added support for dynamic supertable to allow using CTWIN in the
same time with different GTs.
* harbour/contrib/xhb/hbcompat.h
- removed hb_retclenAdoptRaw translation