* harbour/include/hbthread.h
* harbour/source/vm/thread.c
! added support for conditional variables working like in PTHREADS
in OS2 builds - it fixes the problem with possible dead lock or
starvation effect which can also cause dead lock in some cases.
OS2 users please test current code.
* config/win/bcc32.cf
* Synced flags with non-GNU make. This adds MT support.
* config/win/install.cf
! Install command modified to not give errors and block
the whole build process if the target file already exists.
The workaround consisted of changing 'copy' to 'xcopy /d /y'.
* include/inkey.ch
+ Added comments on K_MM*DOWN codes.
These also should be protected, and moved to
local the local headers belonging to GTs
supporting this feature (GTWVG notably).
* source/rtl/gtwvt/gtwvt.c
+ Protected non-Clipper compatible extension regarding
K_MM*DOWN with __HB_GTWVT_GEN_K_MMDOWN_EVENTS #define.
Also see notes in about app level code modification
needed if you want to continue using default Harbour build:
2009-02-18 12:20 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
* include/hbextern.ch
* common.mak
* source/rtl/Makefile
* source/rtl/mouse53.c
+ Added HB_MMIDDLEDOWN() functions, plus MMIDDLEDOWN() alias.
These are always available regardless of the CLIP53
compatibility setting.
; TOFIX: K_MM*DOWN events _override_ C5.3 compatible
K_MOUSEMOVE events (in GTWVT only), which created
an unfortunate incompatibility with our target
C5.x compiler when using some specific GT. Ideas
are welcome how to fix this. We should probably
either send out both codes and let the inkey queue
do the filtering as requested by app (we need a
new filter then), or remove these event code and
generate proper K_MOUSEMOVE events instead. Apps
using this these incompatible keycodes are encouraged
to replace expressions:
'( key == K_KK*DOWN )' with the compatible:
'( key == K_MOUSEMOVE .AND. M*DOWN() )' to prepare
for the fix.
* harbour/include/hbapi.h
* harbour/source/vm/cmdarg.c
* harbour/source/vm/hvm.c
* added hb_cmdargUpdate() function which makes final argc/argv updating
(code moved from hb_cmdargInit())
! use hb_cmdargUpdate() - it fixes GPF in MT mode when some fs* functions
were called before allocating HVM stack
; TOFIX: change some hb_setGet*() functions to work without HVM stack.
* harbour/source/rtl/hbtoken.c
* formatting
* harbour/include/dbinfo.ch
+ added DBI_ISTEMPORARY
* harbour/include/hbapirdd.h
* harbour/source/rdd/wafunc.c
+ added hb_rddCreateTableTemp() C function to create temporary
table which are automatically deleted on close. All indexes and
memo files for such tables are also in temporary files and
automatically deleted on close. Please remember that Harbour uses
OS functions to create temporary files so it's installation dependent
how much disk space is available for them. Some RDDs may also do
not create temporary files but keep everything in memory if they
decide it's more efficient.
* harbour/source/rdd/dbcmd.c
+ added .prg function to create temporary files:
dbCreateTemp( <cAlias>, <aStruct>, <cRDD>, ;
<cCodePage>, <nConnection> ) -> <lSuccess>
Not all RDDs have to support it. It's verified by support for
DBI_ISTEMPORARY dbInfo() action.
* harbour/include/hbrdddbf.h
* harbour/include/hbrddnsx.h
* harbour/include/hbrddcdx.h
* harbour/include/hbrddntx.h
* harbour/source/rdd/dbf1.c
* harbour/source/rdd/dbffpt/dbffpt1.c
* harbour/source/rdd/dbfntx/dbfntx1.c
* harbour/source/rdd/dbfnsx/dbfnsx1.c
* harbour/source/rdd/dbfcdx/dbfcdx1.c
+ added support for temporary tables in native RDDs.
Most of above modifications were done by Viktor Szakats.
* bin/hbmk.bat
+ Added autodetection of Harbour dirs. So this batch will
now work when called from any directories, and even if
'/bin' dir is added to the PATH. IOW, it's not anymore
necessary to supply these envvars in normal cases:
HB_INSTALL_PREFIX, HB_BIN_INSTALL, HB_LIB_INSTALL,
HB_INC_INSTALL. If someone moves this batch file away
from its original place, these envvars can still be used
to point to the Harbour tree, but support for this may
be removed in the future to keep things simple.
+ Added support for multiple .prg files on the command line.
The first will be the main program.
+ Added support to supply .c files on the command line.
[these features need Windows NT or upper]
; TODO: Test OpenWatcom. I had to remove -fo and FILE
directives from script, if this was required we
need to find a solution to support multiple
input files.
* bin/hbmk_b32.bat
* bin/hbmk_vc.bat
+ Now these files can be called from any directories and even
when '/bin' dir is added to the PATH.
+ Added support for unlimited number of command line parameters.
[these features need Windows NT or upper]
* Changed to not interfere with 'echo off' setting of the
caller.
; NOTE: After this change it's possible to get rid of all
non-customized version of hbmk_b32.bat/hbmk_vc.bat
files in the source tree. I plan to remove these in
the near future. The rest can be simplified in most
places. This will only cause some inconvenience
for developers still using Win95/98/ME.
+ bin/hbmk_gcc.bat
+ bin/hbmk_ow.bat
+ Added make batch files to MingW/GCC and OpenWatcom.
* contrib/hbwin/win_tprn.prg
! Fixed recent typo.
* include/hbstdgen.ch
- Removed #undef __FILE__. I understand this isn't needed anymore.
* harbour/include/hbthread.h
* harbour/source/vm/thread.c
! fixed a bug on OS/2 MT implementation adding a new function,
_hb_cond_timed_wait() because when a semaphore gets posted it has
to be reset, otherwise it does not stop new threads entering it in a wait.
* harbour/include/hbpp.h
* harbour/source/pp/hbpp.c
* harbour/source/pp/ppcore.c
* harbour/source/compiler/hbmain.c
+ added support for dynamically calculated #define results
! removed old code which was adding __FILE__ #define constant
It was not working correctly like in other compilers ignoring
#include
+ added __FILE__ and __LINE__ #define directives using dynamically
calculated results - now it works as expected respecting #include
directives and the implementation is local to PP without any hacks
in core compiler code.
* harbour/contrib/hbct/files.c
* added support for optional milliseconds part in HB_FSETDATETIME()/
HB_FGETDATETIME().
* harbour/source/rtl/philes.c
! minor fix in return value
* include/hbdefs.h
* contrib/gtwvg/gtwvg.h
* contrib/gtwvg/wvggui.h
* contrib/examples/terminal/trm_client.prg
+ Added HB_EXTERN_START/END.
* include/hbdefs.h
+ Added some comments from the original mail from Przemek.
+ harbour/include/hbwapi.h
As this header will be required fot many libraries in contrib
I have placed it in core folder. It will pave me the way to
isolated WINAPI wrappers as discussed earlier. Before I begin to
shift functions in harbour/contrib/hbwin please feel free to
include in this header whatever you feel will be required
for such transition.
* harbour/include/hbextern.ch
* harbour/source/rtl/philes.c
+ added HB_FGETDATETIME(). A "brother" of function HB_FGETDATETIME().
; TODO: BTW, hb_fs*() functions can get a better precision
(milliseconds). It would be nice to support it also at .prg level.
* source/rtl/gtwvt/gtwvt.c
* BYTE -> CHAR (Windows) - UNDONE.
* include/hbdefs.h
+ Added (commented) new types. Work in progress, incomplete.
* contrib/hbssl/ssl.c
- Temporary disabled SSL_GET_READ_AHEAD() as a workaround for
BCC linking problem with SSL_get_read_ahead() OpenSSL
library function (symbol is unresolved due to missing
leading underscore in implib generated ssleay32.lib file).
* source/vm/set.c
% hb_fsFile() -> hb_fsFileExists()
* source/rtl/hbffind.c
* HB_WIN_32_MATCH -> HB_WIN_MATCH
* doc/whatsnew.txt
* include/hbsetup.h
* source/vm/fm.c
* #define HB_FM_WIN32_ALLOC renamed to HB_FM_WIN_ALLOC.
; INCOMPATIBLE: For those who are using this switch, please
update your make files.
* source/rtl/tpopup.prg
! Fixed to draw separator lines with BOX GT attributes,
so that they appear properly.
* harbour/include/hbapi.h
* harbour/source/vm/cmdarg.c
+ added const char * hb_cmdargARGVN( int argc )
* harbour/source/vm/cmdarg.c
* try to convert executable file name argument in argv[0] to
absolute path if it's relative one. Respect PATH envvar it necessary.
* harbour/source/common/hbdate.c
* formatting
* harbour/source/rtl/philes.c
* harbour/source/rtl/errorint.c
* harbour/source/rtl/filesys.c
! use hb_cmdargARGVN(n) instead of hb_cmdargARGV()[n] to avoid
possible GPF if some function will be called before argument
initialization
* removed additional logic which tries to convert relative paths
in file name from hb_fsBaseDirBuff() and HB_PROGNAME() functions
* doc/whatsnew.txt
* include/hbextern.ch
* source/vm/runner.c
* source/rdd/dbcmd.c
* __HRB*() functions marked as HB_LEGACY_LEVEL2 compatibility,
please update your code to use HB_HRB*().
* __RDDGETTEMPALIAS() marked as HB_LEGACY_LEVEL2 compatibility,
please update your code to use HB_RDDGETTEMPALIAS().
; I've permanently remove these symbols from hbextern.ch, so
regardless of the legacy setting, hbrun won't have them
anymore. This is merely technical, as it would need some
hacks in the make system to push through HB_LEGACY_OFF
to pptable.c generation. If someone wants to deal with
this, even better.
* include/hbstdgen.ch
* Added #undef __FILE__.
* include/hbsetup.ch
* Minor.
* doc/whatsnew.txt
* include/clipdefs.h
* include/filesys.api
* include/gt.api
* include/hbapi.h
* include/hbapierr.h
* include/hbapifs.h
* include/hbapigt.h
* include/hbapiitm.h
* include/hbapirdd.h
* include/hbdefs.h
* include/hbgfxdef.ch
* include/hbgtinfo.ch
* include/hbsetup.ch
* include/hbsetup.h
* include/item.api
* include/rdd.api
* source/rtl/errorapi.c
* source/rtl/filesys.c
* source/vm/cmdarg.c
* common.mak
- source/vm/debugold.c
* source/vm/Makefile
* source/vm/vmmt/Makefile
- Permanently disabled HB_LEGACY_LEVEL support.
+ Added HB_LEGACY_LEVEL2 support to protect some
recently made incompatible changes. Old methods
are supported until Harbour 1.2. Please update
your code until then. To test your code for
compatibility with recent changes, you can turn
off legacy support manually by #defining HB_LEGACY_OFF.
(HB_USER_CFLAGS=-DHB_LEGACY_OFF)
This is recommended on local systems for all
Harbour developers.
* include/hbapigt.h
* source/rtl/gtfunc.c
+ Extended HB_GT_INFO structure with nPCount member.
* include/hbgtinfo.ch
* include/hbgtcore.h
* source/rtl/hbgtcore.c
+ Added HB_GTI_CARGO. This can be used to store whatever
user defined value on a per GT basis.
HB_GTINFO( HB_GTI_CARGO[, <xValue ] ) -> <xPrevValue>
* source/rtl/hbgtcore.c
! hb_gt_def_Alert() fixed to also initialize pNewVal2 with NULL.
(didn't cause any real-world harm).
* contrib/hbwin/win_tprn.prg
% Minor optimizations.
* source/rtl/fstemp.c
! Added cast for MSVC warning. (this code part was
formerly only active for non-Windows builds)
* include/hbapifs.h
* source/rtl/fstemp.c
* source/rtl/filebuf.c
* UCHAR -> BYTE in new FS functions, for consistency.
* include/hbapifs.h
* source/rtl/spfiles.c
+ Added hb_spFileExists(). Same as hb_spFile(), but uses
the more efficient (especially on networks) hb_fsFileExists()
call to check for file exitance.
[ not very elegant solution, as I've just copied the
whole function, and changed the file existance call, maybe
a worker function + passing the check function pointer
could help, but the hb_fsFile() and hb_fsFileExists() workings
differ slightly. ]
* source/rdd/dbfntx/dbfntx1.c
* source/rdd/dbfnsx/dbfnsx1.c
* source/rdd/dbfcdx/dbfcdx1.c
* source/rdd/dbf1.c
% Using hb_spFileExists() instead of hb_spFile().
This API also works for dirs where use doesn't have file listing
rights, which may create a slight incompatibility by finding
files which weren't found by former method (and by Clipper).
C:\WINDOWS\TEMP\*.* were such when logged in as non-admin user,
but this dir is only used as a default TEMP dir for DOS programs.
Please speak up if you find this issue (or something else) to
be problem.
* source/rtl/file.c
* File naming standardized.
* doc/whatsnew.txt
* Minor updates.
* include/hbapifs.h
* include/hbextern.ch
* source/rtl/fstemp.c
* source/rtl/filebuf.c
+ Added hb_fsCreateTempEx(). Similar to hb_fsCreateTemp(),
but allows to control the extension. Note, that the
ordering of parameters ha slightly changed compared to
hb_fsCreateTemp().
+ Added hb_fileCreateTempEx(). See above.
+ Added Harbour level HB_FTEMPCREATEEX(). See above.
; Please review & test.
* harbour/include/hbdefs.h
* harbour/include/hbapi.h
* moved HB_ISSPACE(), HB_ISFIRSTIDCHAR() and HB_ISNEXTIDCHAR() from
hbapi.h to hbdefs.h
+ HB_ISXDIGIT() macro
* harbour/include/hbpp.h
* updated other HB_PP_IS*() macros definitions to internally use HB_IS*()
ones
* harbour/source/rtl/fstemp.c
! fixed unterminated ASCIIZ string
TODO: new macros HB_CHARVAL( c ), HB_CHARXVAL( c ),
HB_VALDIGIT( i ), HB_VALXDIGIT( i )
* include/hbpp.h
* Minor rearrangement of previous state.
Still referencing HB_ISDIGIT() and HB_TOUPPER(), one time
each.
* contrib/xhb/hbxml.c
* isspace() -> HB_ISSPACE(). HB_ISSPACE() should be
revised in the future if Unicode is used, but until
then this is fine here.
* ChangeLog
* Marked one TODO as [CANCELLED].
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
! fixed typo in one internal function name
* harbour/include/hbapi.h
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
* harbour/source/vm/dynsym.c
* harbour/source/vm/memvars.c
% changed code used for memvars clear in MT mode - it greatly
reduce the cost of HVM thread exit
% changed code for memvars copping/sharing when thread is started
it greatly reduce the time of thread creation when existing memvars
are shared or copied
Both modifications reduced the cost of simple
hb_threadJoin( hb_threadCreate( {|| NIL } ) )
few times depending on number of symbols and memvars.
* harbour/source/rtl/gttrm/gttrm.c
* harbour/source/rtl/gtsln/gtsln.c
* harbour/source/rtl/gtsln/gtsln.h
* harbour/source/rtl/gtpca/gtpca.c
% added better initial cursor position detection and eliminated sscanf()
* harbour/source/Makefile
! fixed concurrent dependencies in cross builds
* source/rtl/tget.prg
* source/rtl/tgetx.prg
* source/rtl/tbcolumn.prg
* source/rtl/tbrowse.prg
* Reset internal name of GET(), TBROWSE(), TBCOLUMN(),
because even if Clipper doesn't have such public
symbols, Class(y) has them, and we want to maintain
compatibility.
* include/hbextern.ch
+ Added GET, TBROWSE, TBCOLUMN.
* include/hbextern.ch
* source/rtl/tbcolumn.prg
* source/rtl/tbrowse.prg
* source/rtl/tget.prg
* source/rtl/tgetx.prg
! Using new method to solve the GET()/TBROWSE()/TBCOLUMN()
symbol problem (these aren't public symbols in Clipper).
The method used is the one already implemented for other
C53 CUI classes.
This allows inheritance, doesn't mess up the class name,
and won't declare above public symbols.
* Moved Xbase++ compatible GET()/TBROWSE()/TBCOLUMN()
functionality into separate classes, all inheriting from
original Harbour classes. This means that Xbase++
compatible methods are only accessible when using the
derived classes. The separation will allow us to
move XPP (and other HB_COMPAT_*) compatible functionality
into a separate libraries in the future, allowing more
freedom to resolve clashing features, symbol names, etc..
* Xbase++ compatible classes are named: xpp_Get(),
xpp_TBrowse(), xpp_TBColumn(). This is a slight
incompatibility compared to Xbase++ and also to
previous Harbour. Technically it seems possible
to give them the names GET()/TBROWSE()/TBCOLUMN(), if
the class is defined in a different file, but let's first
discuss it.
* source/rtl/tgetint.prg
* Using GetNew() instead of Get():New().
; Finally I didn't use '( ... )' to pass parameters in GetNew(),
as it's a tiny bit less efficient with -gc3.
* include/hbusrrdd.ch
* include/hbapi.h
+ Comment.
* include/hbextern.ch
* common.mak
* source/rtl/Makefile
+ source/rtl/tgetx.prg
* source/rtl/tget.prg
* source/rtl/tgetint.prg
+ CA-Cl*pper compatible GET class renamed to HBGet and
is now always available regardless of feature settings.
* Xbase++ compatible GET class named Get(), moved to separate
file and now inherits from HBGet, plus implements
additional functionality also in the separate file.
* GetNew() moved to tget.prg from tgetint.prg.
* Code changed to use HBGet():New() instead of Get():New().
; TOFIX: After above changes, Xbase++ compatiblity
methods are no longer available for regular
GETs, only if they are explicitly created
using Get():New(). If this is a problem for someone
we can start thinking of a solution.
; TODO: Do the same with TBrowse() and TColumn().
* include/hbdefs.h
* include/hbthread.h
* added HB_OS_SUNOS to be able to build under OpenSolaris 2008.11
using pthreads.
* source/common/hbprintf.c
* include ieeefp.h under OpenSolaris 2008.11
* harbour/source/vm/fm.c
! fixed typo in default FM module setting/
* harbour/include/hbapicls.h
* harbour/source/vm/classes.c
* harbour/source/debug/dbgentry.c
* renamed hb_dbgObjSendMessage() to hb_dbg_objSendMessage() to keep
naming convention used for other C debugger functions
* harbour/source/vm/debug.c
* added information about existing debugger functions and where they
are used.
* harbour/include/hbvm.h
* harbour/include/hbapidbg.h
* harbour/include/hbvmpub.h
* harbour/include/hbstack.h
* harbour/include/hbapi.h
* harbour/source/vm/codebloc.c
* harbour/source/vm/estack.c
* harbour/source/vm/hvm.c
* harbour/source/debug/dbgentry.c
* changed the method of static variable handling. Now we do not
have centralized array of all statics used by application (s_aStatics)
but each module uses it's own array to keep statics. The old
s_aStatics has been removed. It means that loading new PCODE module
from .hrb file or shared/dynamic library does not cause any static
table reallocation so it does not creates potential GPF trap for MT
code which may operate on static vars.
This modification changed a little bit the debugger interface.
I also updated some unused by us debug functions like __DBGVMVARSLIST()
or __DBGVMVARSLEN() anyhow any 3-rd party debuggers should be
updated for new API and modified hb_dbgEntry() syntax.
* harbour/include/hbdefs.h
* include stdint.h in DJGPP >= 2.4
* harbour/source/common/hbprintf.c
! fixed DJGPP <= 2.3 compilation
* harbour/source/common/hbstr.c
* force buffer ending in DJGPP <= 2.3 when vsprintf() is used
* harbour/source/rtl/hbproces.c
! fixed typo in HB_SYMBOL_UNUSED() variable name
* harbour/config/dos/global.cf
! fixed for GNU make ports which prefer COMSPEC before SHELL