b1ded1ebb493aedc4f62f71300aeb99ddbabe8bd
227 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b16bf45375 |
2008-12-22 16:30 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/ChangeLog
! cleaned some typos in my recent ChangeLog entries
* harbour/include/hbvm.h
* harbour/include/hbvmpub.h
* harbour/include/hbsetup.h
* harbour/include/hbapi.h
* harbour/include/hbapierr.h
* added some function attributes which can improve code optimization
or introduce some additional warnings.
Now it works only in GCC builds.
* harbour/source/vm/hvm.c
! fixed missing double decimal places initialization in some number
negating
! fixed setting number of decimal places in plus and minus operations
if integer overflow forces conversion to double item
* some minor optimizations
* harbour/source/rtl/rat.c
* formatting
|
||
|
|
fa31aa6f70 |
2008-12-11 19:48 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbthread.h
* harbour/source/vm/thread.c
+ added hb_atomic_set(), hb_atomic_get(), hb_atomic_inc() and
hb_atomic_dec() functions which operates on HB_COUNTER or smaller
type if it's necessary for some platforms which can be access/assign
increment/decrement in MT safe atom operations.
hb_atomic_dec() returns true if counter is 0 after decrementation
* harbour/include/hbatomic.h
! fixed compilation in Linux and OpenWatcom
* harbour/include/hbapiitm.h
* harbour/source/rtl/itemseri.c
+ make hb_itemSerialize() and hb_itemDeserialize() public functions
! fixed serialization items with internal item references
* harbour/source/vm/hvm.c
* release memvars after closing RDDs
* harbour/source/debug/dbgentry.c
! fixed buffer overflow reported by Rodrigo
* harbour/source/vm/macro.c
* harbour/source/compiler/hbmain.c
* formatting
* harbour/include/hbexprb.c
! fixed wrongly recognized functions with HB_I18N_ prefix as
HB_I18N_GETTEXT()
* harbour/include/hbapi.h
* harbour/include/hbstack.h
* harbour/include/hbthread.h
* harbour/source/vm/estack.c
* harbour/source/vm/thread.c
* harbour/source/vm/hvm.c
+ added support for I18N in HVM.
Each thread can have it's own i18n set.
When new thread is created then it inherits i18n set from parent
thread and both uses the same set (please remember about it if you
will want to make some direct modifications on active i18n set
internals).
When thread change active i18n set then it effects only this thread
and new threads which will be create later. It does not change i18n
in other existing threads.
+ added functions to set/get pointer to active i18n set in HVM
void * hb_vmI18N( void )
void hb_vmSetI18N( void * )
* harbour/include/hbapi.h
* harbour/source/rtl/hbi18n.c
+ added i18n module. Now only for internal Harbour usage without support
for optional switching to alternative implementations.
I'll add such functionality later when I will work on native gettext
support.
The following public .prg functions has been added:
HB_I18N_GETTEXT[_STRICT]( <cMsgID> [, <cContext> ] )
-> <cTranslatedMsgID> | <cMsgID>
HB_I18N_NGETTEXT[_STRICT]( <nValue>, <cMsgID> | <acMsgID> ;
[, <cContext> ] )
-> <cTranslatedMsgID> | <cMsgID> | <acMsgID>[ <nIndex> ]
This is minimal support necessary for .prg code which has to exists
in each i18n module working with Harbour.
The following functions had been added as public C API:
PHB_ITEM hb_i18n_gettext( PHB_ITEM pMsgID, PHB_ITEM pContext )
PHB_ITEM hb_i18n_ngettext( PHB_ITEM pNum,
PHB_ITEM pMsgID, PHB_ITEM pContext )
The following functions had been added as private HVM C API:
void hb_i18n_init( void )
void hb_i18n_exit( void )
void hb_i18n_release( void * cargo )
void * hb_i18n_alloc( void * cargo )
They have to be supported by alternative i18n modules
The following functions has been added to manage Harbour i18n
translations sets:
HB_I18N_CREATE()
-> <pI18N>
Creates new empty I18N translation set
HB_I18N_CODEPAGE( [<pI18N>,] [<cNewCP>], [<lBase>], [<lTranslate>] )
-> <cOldCP>
Gets or sets Harbour codepage used by translation set
<pI18N> - I18N translation set,
if it's not given then currently active I18N set is used
<cNewCP> - new CP ID. Must be linked with application
<lBase> - when it's .T. then get/set base massages CP instead of
translated massages CP
<lTranslate> - if it's .T. then translate base (<lBase>==.T.) or
final messages in I18N set from previous CP to
given one. Base messages translation in synced
with context ID translation.
HB_I18N_PLURALFORM( [<pI18N>,] [<cNewForm>|<bNewForm>], [<lBase>] )
-> <cOldForm>|<bOldForm>
Gets or sets plural form used for final or base messages
<pI18N> - I18N translation set,
if it's not given then currently active I18N set is used
<cNewForm> - language ID of plural form, f.e.: "EN", "PL", "LT".
Now only three above are supported. Please add rules
for other languages to source/rtl/hbi18n.c.
<bNewForm> - codeblock used to calculate plural form indexes.
can be used instead of character representation but
it's not storred in serialized I18N set
<lBase> - when it's .T. then get/set base massages plural form
instead of translated massages one.
HB_I18N_DESCRIPTION( [<pI18N>,] [<cNewDescription>] )
-> <cOldDescription>
Gets or sets translation set description. After serialization
up to 32 bytes is stored in header which can be easy used to
determinate type of translation file.
<pI18N> - I18N translation set,
if it's not given then currently active I18N set is used
<cNewDescription> - new description
HB_I18N_ADDTEXT( <pI18N>, <cMsgID>, <cTrans> | <acTrans> [, <cContext> ] )
-> NIL
Adds new message with translation to i18n translation set
<pI18N> - I18N translation set
<cMsgID> - original message
<cTrans> - translated message
<acTrans> - array with translated messages used for plural forms
<cContext> - message context
HB_I18N_SET( [ <pI18N> | NIL ] )
-> <lActive>
Sets given I18N translation set as default one used by
HB_I18N_[N]GETTEXT[_STRICT]() functions or remove translation
set for calling thread when passed parameter is NIL
<pI18N> - I18N translation set
Returns logical value which is .T. when i18n set is active
HB_I18N_SAVETABLE( [<pI18N>] )
-> <cTable>
Returns I18N translation as string item which can be stored
in file or database
<pI18N> - I18N translation set, if it's not given then currently
active I18N set is used
HB_I18N_RESTORETABLE( <cTable> )
-> <pI18N> | NIL
Restores I18N translation set from strin item.
<cTable> - I18N translation set in string representation
On success it returns new <pI18N> set otherwise NIL if <cTable>
is not valid item created by HB_I18N_SAVETABLE() or it's corrupted.
HB_I18N_HEADERSIZE()
-> <nHeaderSize>
Returns size of header used by i18n serialized version
HB_I18N_CHEK( <cTable> | <cHeader> [, @<cDescription> ] )
-> <lValid>
<cTable> - i18n translation set serialized by HB_I18N_SAVETABLE
<cHeader> - header of i18n translation set
( LEFT( <cTable>, HB_I18N_HEADERSIZE() )
<cDescription> - optional parameter passed by reference where
will be sored i18n translation set description
extracted from valid header
Returns logical value indicating if given table or header is
valid serialized by HB_I18N_SAVETABLE() data. It does not
decode the table though it validates size and control sums.
These functions are optional and some future alternative implementations
may not support all of them and/or may provide some other functions.
+ added unofficial .prg function __I18N_HASHTABLE() which allows to
access hash table used by i18n translation set or create new translation
set with given hash table. It's helper functions for developers which
will work on Harbour i18n tools and should not be used by Harbour users.
Unlike original gettext Harbour allows to use language with many
plural forms as base one. In such case programmer should activate
at application startup default i18n translation set with base plural
form valid for base application language, f.e. by:
pI18N := hb_i18n_create()
hb_i18n_pluralForm( pI18N, <cLangID> | <bForm>, .t. )
hb_i18n_set( pI18N )
.prg code example:
#xtranslate _( <x,...> ) => hb_i18n_gettext_strict( <x> )
#xtranslate _N( <x,...> ) => hb_i18n_ngettext_strict( <x> )
proc main()
local pI18N, i
pI18N := hb_i18n_create()
hb_i18n_pluralForm( pI18N, "PL", .t. )
hb_i18n_set( pI18N )
for i := 0 to 30
? i, _N( i, {"grosz", "grosze", "groszy"} )
if i > 0 .and. i % 10 == 0
wait
endif
next
return
In .pot files created during compilation by Harbour with -j option
for above code we have the following entries for message with plural
forms:
msgid "grosz"
msgid_plural "grosze"
msgid_plural2 "groszy"
msgstr[0] ""
The msgid_plural2 (and others if language has more plural forms)
is Harbour extension which is not gettext compatible.
The above implementation is base version but should be fully functional.
Now we will need functions to safe/read i18n files and tools to mange
.pot files: merge them, edit translations, create final binary i18n
translation sets. Because we are using gettext compatible .pot files
then for some of such jobs we can use original gettext tools but we
need at least function which will create translation set from one or
more .pot files.
We should also agree some default localization(s) for files containing
translated data, their name convention and environment variable(s)
to set default language. It's not strictly necessary and each user
can have his own implementation but it would help in adding new
translations by final users to any Harbour application which will
respect them. We can use LANG envvar to extract preferred language
and use the same path as executed application looking for files
<appname>-<lang>.hil files though it may create some problems for
OSes which support only 8.3 file names so we can also define that
HB_I18N envvar has higher priority and points to expected translation
file.
* harbour/include/hbextern.ch
- removed old __i18n_*() functions
+ added current i18n functions
|
||
|
|
50defb24c8 |
2008-11-19 19:30 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
* include/hbapi.h
* source/vm/extend.c
+ Added hb_stordl() which is similar to hb_stords() but
accepts a Julian date in long numeric format similarly
to hb_retdl().
* contrib/xhb/Makefile
* contrib/xhb/common.mak
+ contrib/xhb/filestat.c
+ Added FILESTATS() function.
Work of Giancarlo Niccolai / xhb.
Minor cleanups made.
; Please test. (Only Win32/BCC platform was tested.)
|
||
|
|
caf47b7238 |
2008-11-10 14:41 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/source/common/hbstr.c
+ added hb_numToStr()
* harbour/source/vm/estack.c
* harbour/source/compiler/genc.c
* harbour/source/compiler/gencc.c
* use hb_numToStr() for integer number conversions
* harbour/source/vm/dlmalloc.c
* disable #pragma warning ... in MinGW builds. If some newer MinGW
versions support it and it's useful then it can be enabled after
checking MinGW version
|
||
|
|
0b765b9181 |
2008-11-09 16:00 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
* make_b32.mak
* make_vc.mak
! Added hbpp.lib and hbcommon.lib to HBRUN_DLL liblist.
* include/hbapi.h
* source/vm/cmdarg.c
* source/common/hbver.c
* source/common/hbverdsp.c
* source/rtl/console.c
* source/rtl/setcolor.c
* source/rtl/setcurs.c
+ Added HB_EXPORT to some functions to make it possible
to build hbrun-dll.exe.
For other reasons, it only works if Harbour built with
set C_USR=-DHB_DYNLIB.
; TODO: Make HB_DYNLIB the default build mode, do gradual
steps to remove separate DLL building pass, and
finally to remove HB_BUILD_DLL option.
The only drawback will be about 10-100K
(currently) overhead in final executable size due
to included export table for BCC and MSVC builds.
|
||
|
|
c1318e95cd |
2008-11-05 03:01 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* 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
|
||
|
|
bb49e3711a |
2008-11-04 22:39 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* 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
|
||
|
|
dddbc1c824 |
2008-11-02 07:33 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* include/hbstdgen.ch
- Removed HB_VERSION mistakenly left there.
* include/hbextern.ch
* source/rtl/version.c
+ Added HB_OSISWINNT()
+ Added HB_OSISWINCE()
[TOMERGE 1.0]
* include/hbver.ch
* source/rtl/version.c
+ Added:
hb_version( HB_VERSION_MT ) -> <logical>
hb_version( HB_VERSION_UNIX_COMPAT ) -> <logical>
hb_version( HB_VERSION_PLATFORM ) -> <string> (same as ending of __PLATFORM__* macros)
This makes these functions/macros deprecated:
- HB_MTVM()
- __PLATFORM__* (not for all possible situations)
; TOFIX: Cleanup REVISION/SVN term usage in source.
; TOFIX: Remove HB_VER_* predefined macro usage on .prg level.
; TODO: Removed some deprecated by hb_version() functions/macros.
* include/hbapi.h
* source/vm/itemapi.c
* source/common/hbstr.c
* source/common/expropt2.c
* source/rtl/chrasc.c
* source/rtl/hbi18n.c
* Minor formatting.
|
||
|
|
4e457b25f1 |
2008-10-27 18:05 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* 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()
|
||
|
|
b5e9969713 |
2008-10-27 11:29 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* include/hbapi.h
* source/common/hbstr.c
+ Added return value to hb_snprintf().
|
||
|
|
bfd31350c2 |
2008-10-27 11:26 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* 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.
|
||
|
|
ee26c1b8d6 |
2008-10-18 10:27 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* include/hbapi.h
* source/common/hbgete.c
+ Added hb_getenv_buffer(). Similar to hb_getenv() but
this one needs a buffer+size to be passed, so no memory
allocation is done by the function. It also return
a BOOL to signal success. It doesn't signal if passed
buffer was too small to store the value.
|
||
|
|
11fe9fff36 |
2008-10-15 13:32 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/source/vm/hvm.c
* harbour/source/vm/estack.c
* disabled all debugger related bindings and variables when
HB_NO_DEBUG macro is set
% moved s_fDebuging to HVM function stack frame to eliminate
saving/restoring this variable in each function/message call
Note: if you think it's good to block linking .prg code compiled
with -b (debugger support) with HVM compiled with HB_NO_DEBUG
then it's enough to disable whole hb_dbg_SetEntry() function
in hvm.c when HB_NO_DEBUG macro is set.
|
||
|
|
d8af011440 |
2008-10-14 11:51 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/source/vm/macro.c
* added missing const attribute to hb_macroCompile() parameter
+ added new .prg function:
hb_macroBlock( <cExpr> ) -> <bCode>
which converts macro expression to codeblock. New codeblocks
do not inherit hb_macroBlock() caller scope/attributes.
|
||
|
|
c1c574142e |
2008-09-21 23:03 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/source/vm/arrays.c
+ added hb_arrayGetPtrGC(), hb_arrayGetSymbol(), hb_arraySetSymbol()
* harbour/include/hbapi.h
* harbour/source/vm/dynsym.c
+ added hb_dynsymProtectEval(). Works like hb_dynsymEval() but
keeps dynamic symbol table locked during whole execution.
It's faster then hb_dynsymEval() but user function may not
access dynamic symbol tbale to not cause recursive locks
+ added protection against possible dynamic symbol table resizing
during hb_dynsymEval() by other threads.
* harbour/include/hbapi.h
* harbour/source/vm/memvars.c
+ added hb_memvarSaveInArray( int iScope, BOOL fCopy ) and
hb_memvarRestoreFromArray( PHB_ITEM pArray )
% use hb_dynsymProtectEval() in places where it's safe
* harbour/include/Makefile
+ harbour/include/hbthread.ch
+ added header file with thread constant definitions:
HB_THREAD_INHERIT_PUBLIC
HB_THREAD_INHERIT_PRIVATE
HB_THREAD_INHERIT_MEMVARS
HB_THREAD_MEMVARS_COPY
* harbour/include/hbthread.h
* harbour/source/vm/hvm.c
* harbour/source/vm/thread.c
+ added support for inheriting visible memvars from current
thread when new thread is created. Memvars in child thread
can be shared with parrent or they can be copied. See HB_THREAD_*
attributes defined in hbthread.ch, f.e.:
hb_threadStart( HB_THREAD_INHERIT_PUBLIC, @thFunc() )
or:
hb_threadStart( HB_BITOR( HB_THREAD_INHERIT_MEMVARS + ;
HB_THREAD_MEMVARS_COPY ), ;
@thFunc() )
Please note that when child thread creates new PUBLIC variable
which didn't existed when thread was started then it's visible
only for this thread and optionally for its child threads but
not for parent thread.
Please also remember that write access to shared memvars have
to be protected by users.
+ harbour/tests/mt/mttest08.prg
+ added test code for thread memvars inheritance
|
||
|
|
54252ca860 |
2008-09-18 17:24 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/make_rpm.sh
* use rpm to test if curl-devel package is installed
* harbour/include/hbapi.h
* harbour/source/common/hbstr.c
+ added hb_strduptrim() and hb_strlentrim()
* harbour/source/rdd/dbfcdx/dbfcdx1.c
! control total length of KEY and FOR expression together
to be compatible with other CDX drivers.
Total length of both expressions cannot exceed 512 bytes
(with two trailing ASCII 0 characters)
|
||
|
|
86333ba271 |
2008-09-18 07:21 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbthread.h
* use assembler version of atomic inc/dec operation in all x86 based
GCC builds - it should noticeable improve OS2 MT build speed,
please test.
* harbour/include/hbcomp.h
* harbour/include/hbapicdp.h
* harbour/include/hbcompdf.h
* harbour/include/hbgtcore.h
* harbour/include/hbapifs.h
* harbour/include/hbwince.h
* harbour/include/hbexpra.c
* harbour/include/hbexprop.h
* harbour/include/hbmacro.h
* harbour/include/hbapigt.h
* harbour/include/hbapi.h
* harbour/include/hbapiitm.h
* harbour/include/hbexprb.c
* harbour/source/pp/ppcore.c
* harbour/source/pp/hbpp.c
* harbour/source/vm/macro.c
* harbour/source/vm/cmdarg.c
* harbour/source/vm/arrays.c
* harbour/source/vm/extrap.c
* harbour/source/vm/memvars.c
* harbour/source/vm/eval.c
* harbour/source/vm/extend.c
* harbour/source/vm/set.c
* harbour/source/main/harbour.c
* harbour/source/common/hbfsapi.c
* harbour/source/common/reserved.c
* harbour/source/common/expropt1.c
* harbour/source/macro/macro.yyc
* harbour/source/macro/macro.y
* harbour/source/macro/macro.yyh
* harbour/source/macro/macrolex.c
* harbour/source/rtl/gtdos/gtdos.c
* harbour/source/rtl/gtwin/gtwin.c
* harbour/source/rtl/gtxwc/gtxwc.c
* harbour/source/rtl/gtos2/gtos2.c
* harbour/source/rtl/hbgtcore.c
* harbour/source/rtl/cdpapi.c
* harbour/source/rtl/gtcrs/gtcrs.c
* harbour/source/rtl/hbtoken.c
* harbour/source/rtl/gtchrmap.c
* harbour/source/rtl/gtstd/gtstd.c
* harbour/source/rtl/gtsln/mousesln.c
* harbour/source/rtl/gtsln/gtsln.c
* harbour/source/rtl/gtsln/kbsln.c
* harbour/source/rtl/gttrm/gttrm.c
* harbour/source/rtl/gtpca/gtpca.c
* harbour/source/rtl/hbhex.c
* harbour/source/rtl/gtgui/gtgui.c
* harbour/source/rtl/gt_tpl/gt_tpl.c
* harbour/source/rtl/gtcgi/gtcgi.c
* harbour/source/rtl/gtwvt/gtwvt.c
* harbour/source/rtl/strtran.c
* harbour/source/rtl/hbinet.c
* harbour/source/rtl/gtapi.c
* harbour/source/rtl/filesys.c
* harbour/source/rdd/dbfntx/dbfntx1.c
* harbour/source/rdd/dbsql.c
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* harbour/source/rdd/dbffpt/dbffpt1.c
* harbour/source/rdd/hbsix/sxfname.c
* harbour/source/compiler/ppcomp.c
* harbour/source/compiler/hbmain.c
* harbour/source/compiler/cmdcheck.c
* harbour/source/compiler/hbdbginf.c
* harbour/source/compiler/genc.c
* harbour/source/compiler/hbident.c
* harbour/source/compiler/hbusage.c
* harbour/source/compiler/gencc.c
* harbour/source/compiler/harbour.yyc
* harbour/source/compiler/harbour.y
* harbour/contrib/gtalleg/gtalleg.c
* harbour/contrib/hbct/charlist.c
* harbour/contrib/hbct/charmix.c
* harbour/contrib/hbct/screen1.c
* harbour/contrib/hbct/atrepl.c
* harbour/contrib/xhb/hboutdbg.c
* harbour/contrib/xhb/hbxml.c
* harbour/contrib/xhb/hbxml.h
* harbour/contrib/hbgt/strexpan.c
* harbour/contrib/hbsqlit3/sqlite3/sqlite3.c
* harbour/contrib/gtwvg/gtwvg.c
* harbour/contrib/hbclipsm/status.c
* harbour/contrib/hbclipsm/gauge.c
* harbour/contrib/hbmisc/stringsx.c
* harbour/contrib/hbtip/utils.c
* harbour/contrib/hbgf/hbgfgtk/msginfo.c
* harbour/contrib/hbgf/hbgfgtk/harbgtk.h
* harbour/contrib/hbbmcdx/bmdbfcdx.c
* harbour/utils/hbmake/hbmgauge.c
* use const char * instead of char * in places which should be marked
as const
|
||
|
|
64f97582d9 |
2008-09-13 18:49 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbpp.h
* harbour/include/hbvm.h
* harbour/include/hbcomp.h
* harbour/include/hbcompdf.h
* harbour/include/hbtrace.h
* harbour/include/hbapilng.h
* harbour/include/hbinit.h
* harbour/source/rtl/langapi.c
* harbour/source/pp/ppcore.c
* harbour/source/pp/hbpp.c
* harbour/source/vm/itemapi.c
* harbour/source/vm/hvm.c
* harbour/source/common/hbver.c
* harbour/source/common/hbtrace.c
* harbour/source/common/expropt2.c
* harbour/source/compiler/complex.c
* harbour/source/compiler/hbident.c
* harbour/source/compiler/hbfunchk.c
* changed some declarations from 'char *' to 'const char *' and
fixed casting for some more pedantic compilers
* harbour/source/pp/ppcore.c
! fixed one typo which could cause memory leak and even GPF
* harbour/common.mak
* harbour/source/vm/Makefile
* harbour/source/rtl/Makefile
- harbour/source/rtl/set.c
+ harbour/source/vm/set.c
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
* moved from RTL to HVM
* eliminated hb_set global structure
* moved set structure to HVM stack
+ added internal function hb_setClone() which is used to create
copy of SET structure for child threads
* hidden HB_SET_STRUCT declaration - 3-rd part code must not access it
directly. Dedicated hb_set*() functions should be used instead.
+ added new function:
BOOL hb_setSetItem( HB_set_enum set_specifier, PHB_ITEM pItem )
which allow to change some set by 3-rd party code.
TODO: not all SETs can be changed yet - if someone have a while
then please add code for missing ones.
* harbour/include/set.ch
* harbour/include/hbset.h
+ added _SET_CODEPAGE which works like _SET_LANGUAGE giving common
interface
* harbour/include/hbsetup.h
+ added HB_CODEPAGE_DEFAULT which works like HB_LANG_DEFAULT
* harbour/source/vm/hvm.c
! fixed builds which uses non EN lang or code page modules
by forcing linking the chosen ones
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
* harbour/include/hbapicdp.h
* harbour/source/rtl/cdpapi.c
- removed global code page variable: hb_cdp_page and moved
code page settings to HVM stack
+ added new function hb_cdpID() which returns current code page
character ID
+ added new functions hb_vmCDP() and hb_vmSetCDP() to get/set
active for given thread code page structure
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
* harbour/include/hbapilng.h
* harbour/source/rtl/langapi.c
+ moved lang setting to HVM stack
+ added new functions hb_vmLang() and hb_vmSetLang() to get/set
active for given thread language module
* harbour/include/hbvmpub.h
* harbour/include/hbstack.h
* harbour/include/hbapi.h
* harbour/source/vm/estack.c
* harbour/source/vm/dynsym.c
* harbour/source/vm/itemapi.c
* harbour/source/vm/memvars.c
* changed memvar handles for HB_HANDLE to void * which is directly
casted to PHB_ITEM - new memvar references
* changed HB_DYNS declarations for MT mode. In MT mode HB_DYNS does
not contain area and memvar handles which are moved to thread
local HVM stack
+ added array for thread local memvar and area handles to HVM stack
% eliminated global continues array with all memvars and detached locals
% changed HB_IT_MEMVAR to use pointers to HB_ITEM directly - it resolve
synchronization problems in MT mode and should also improve the speed
and reduce memory usage. It should be well visible in applications which
uses lot of detached locals.
- removed hb_memvarsInit() and hb_memvarsFree() - they are not necessary
now because we do not longer use array with all allocated memvars
and detached local and private stack initialization is made
automatically
+ added internal functions hb_dynsymGetMemvar()/hb_dynsymSetMemvar()
+ added hb_memvarGetValueBySym() for debugger
* moved PRIVATE variable stack to HVM stack
* eliminated all static variables in memvars module
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
* harbour/source/rtl/fserror.c
* moved IO errors to HVM stack
+ added special IO error handling which works without HVM stack
It allows to use hb_fs*() functions without allocated stack
by 3-rd party threads.
* harbour/source/rtl/filesys.c
* moved hb_fsCurDir() to HVM stack with special handling to work
with HVM stack like IO errors
* harbour/source/rdd/workarea.c
* allocated RDD node array in bigger peaces to reduce later RT
reallocations in MT mode. If user want to add dynamically more
then 64 RDDs then it should synchronize this operation himself.
* harbour/source/rdd/wacore.c
* moved WA list, current WA, default RDD and neteer() flag to HVM stack
* harbour/include/hbdefs.h
- removed HB_HANDLE declaration
* harbour/include/hbapi.h
- removed HB_VALUE structure - it's not longer used due to different
memvar handling
* updated hb_struMemvar to new memvar handling
* replaced hb_vmIsLocalRef() and hb_memvarsIsMemvarRef() with
hb_vmIsStackRef() which respect multiple stack and new memvar
and static structures and location in GC mark pass.
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
* harbour/source/vm/hvm.c
+ added support for thread specific data located on HVM stack
Now it's possible to allocate static variables which are
local to thread. Such variables are allocated on HVM stack
and automatically destroyed. To declare new TSD variable use:
HB_TSD_NEW( <name>, <size>, <init>, <destruct> )
<name> - name of variable which holds TSD handler
<size> - size of TSD are which has to be allocated
<init> - init function, executed when new TSD is allocated by thread
(thread access given TSD 1-st time). This function receives
void * pointer to allocated area.
<destruct> - destructor function executed when HVM stack is destroyed
f.e.:
static HB_TSD_NEW( s_scrData, sizeof( HB_SCRDATA ),
NULL, hb_xSaveRestRelease );
To initialize dynamically allocated TSD variable use:
HB_TSD_INIT( <name>, <size>, <init>, <destruct> )
Pointer to TSD can be accessed using hb_stackGetTSD( &<name> )
where <name> is name of variable which holds TSD handler, f.e.:
PHB_SCRDATA pScrData = ( PHB_SCRDATA ) hb_stackGetTSD( &s_scrData );
See source/rtl/xsavescr.c as an example
It's also possible to test if data has been already allocated for
current thread by:
hb_stackTestTSD( &<name> ) => pData
it works like hb_stackGetTSD() but return NULL if current thread data
has not been allocated yet.
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
* changed hb_stack location to thread local storage in MT mode
+ added functions and macros to access/assign new HVM stack members
+ changed garbage collection mark functions to work with multiple
stacks, thread local static and memvar variables
* harbour/source/rtl/xsavescr.c
* use TSD data for screen buffer to make __XSAVESCREEN()/__XRESTSCREEN()
thread independent
* harbour/source/rtl/idle.c
* use TSD data for idle task settings and codeblocks
- removed hb_idleShutDown() - it's not longer necessary
* harbour/source/rtl/setkey.c
* use TSD data for allocated keys to make SETKEY() thread independent
* harbour/source/rtl/math.c
* moved math error handler, math error block, math error mode and
math error structure to TSD
* harbour/source/rtl/errorapi.c
* moved error handler, error block, error launch counter and DOS error
value to TSD
* harbour/source/rtl/inkey.c
* moved inkey "before" and "after" blocks to TSD
* harbour/source/rdd/hsx/hsx.c
* moved HSX handles array to TSD
* harbour/include/hbapigt.h
* harbour/source/rtl/console.c
- removed hb_setkeyInit() and hb_setkeyExit() - they are not longer
necessary, allocated resources will be freed by TSD destructor
function
* harbour/include/hbapi.h
* harbour/source/rtl/console.c
* removed hb_conXSaveRestRelease() - it's not longer necessary,
allocated resources will be freed by TSD destructor function
* harbour/source/vm/macro.c
* moved s_macroFlags to TSD
* harbour/source/rtl/accept.c
* moved accept buffer to TSD
* harbour/include/hbcomp.h
* harbour/include/hbcompdf.h
* harbour/include/hbxvm.h
* harbour/source/compiler/hbmain.c
* harbour/source/compiler/hbfix.c
* harbour/source/compiler/hbpcode.c
* harbour/source/compiler/hbdead.c
* harbour/source/compiler/complex.c
* harbour/source/compiler/genc.c
* harbour/source/compiler/gencc.c
* harbour/source/compiler/hbopt.c
* harbour/source/compiler/hblbl.c
* harbour/source/compiler/hbstripl.c
* harbour/source/compiler/harbour.y
* harbour/source/compiler/harbour.yyc
* harbour/source/compiler/harbour.yyh
* harbour/source/vm/hvm.c
+ added new PCODE HB_P_THREADSTATICS
+ added support for static variables which are local to thread:
THREAD STATIC <varname [:= <exp>], ...>
They work like normal static variables but each thread operates
on its own copy.
* added protection against possible double call to hb_xfree()
It can happen due to wrong marking expressions as used by bison
and executing destructors after our free code when syntax error
appear.
* harbour/source/rtl/perfuncs.prg
* harbour/source/rtl/menuto.prg
* harbour/source/rtl/getlist.prg
* harbour/source/rtl/readvar.prg
* harbour/source/rtl/text.prg
* use THREAD STATIC variables to make above code MT safe
* harbour/include/hbgtcore.h
* harbour/source/rtl/hbgtcore.c
+ added hb_gt_BaseFree() which will release current GT pointer
locked by hb_gt_Base() function. This function will be used
to optional automatic GT access synchronization when threads
share the same GT.
* harbour/source/rtl/gtapi.c
* harbour/source/rtl/inkeyapi.c
* harbour/source/rtl/mouseapi.c
* harbour/contrib/hbct/ctwin.c
* free GT pointer by hb_gt_BaseFree()
TODO: CTWIN is not MT safe yet - it will be updated together
with core GT when we add multi window interface for
thread with own console window.
* harbour/bin/hb-func.sh
* harbour/config/linux/gcc.cf
+ added rt lib to Linux builds
* harbour/bin/postinst.sh
* create MT safe version of FM stat library: fmmt
* harbour/bin/pack_src.sh
+ added support for ZIP packing
* harbour/include/hbapi.h
* harbour/include/hbvm.h
* harbour/source/vm/hvm.c
+ added hb_vmThreadInit()/hb_vmThreadQuit() functions - they initialize
HVM for calling thread so it can execute .prg code and call HVM
functions. They can be used by 3-rd party code threads.
+ added hb_vmUnlock()/hb_vmLock() functions which informs that
thread will not operate on HVM structures for some time allowing
to execute single thread only processes like GC.
+ added hb_vmThreadQuitRequest() which sends stop request to given
thread
+ added hb_vmWaitForThreads() which stops main thread execution waiting
for other threads
+ added hb_vmSuspendThreads() and hb_vmResumeThreads() used be GC
to stop all HVM threads before mark/swap scan
+ added linked list of HVM stacks
+ added hb_vmTerminateThreads() used by main HVM thread in QUIT state
* moved EXIT procedures execution from QUIT request to HVM QUIT state
in MT mode. It may effects some non structural code which tries to
access private variables in EXIT functions but it's much cleaner
and understandable for user. Please remember that we guaranties
that ALWAYS code in BEGIN SEQUENCE is _always_ executed even after
HVM QUIT request just like destructs. Personally I think that we
should move EXIT procedures execution also in ST mode.
* changed startup and cleanup code for new internal structures
* changes startup and cleanup code for MT mode
% removed some redundant HB_ITEM type settings
! eliminated non MT safe code which was using reference counters
without protection
* harbour/common.mak
* harbour/source/vm/Makefile
+ harbour/include/hbthread.h
+ harbour/source/vm/thread.c
+ added C level functions to manage threads and synchronization objects
See hbthread.h for detail description. They are based on PTHREAD API
and PTHREAD documentation can be used as reference. I intentionally
keep this list small for easier multiplatform porting.
Now they have been implemented for PTHREADS (POSIX threads supported by
many different OSes), MS-Win32/64 and OS2. The OS2 version is not tested
at all. I do not even know if it can be compiled so please make tests.
I used Internet resources and some part of xHarbour code as documentation
for OS2 MT API. It should be quite easy to add other platforms if necessary.
Harbour core code needs non recursive mutexes, conditional variables and
TLS for one pointer. If platforms does not support conditional variables
(f.e. MS-Win or OS2) then they can be emulated using multistate semaphores.
+ added .prg functions to manage threads and synchronization objects:
hb_threadStart( <@sStart()> | <bStart> [, <params,...> ] ) -> <pThID>
hb_threadJoin( <pThID> [, @<xRetCode> ] ) -> <lOK>
hb_threadDetach( <pThID> ) -> <lOK>
hb_threadQuitRequest( <pThID> ) -> <lOK>
hb_threadWaitForAll() -> NIL
hb_mutexCreate() -> <pMtx>
hb_mutexLock( <pMtx> [, <nTimeOut> ] ) -> <lLocked>
hb_mutexUnlock( <pMtx> ) -> <lOK>
hb_mutexNotify( <pMtx> [, <xVal>] ) -> NIL
hb_mutexNotifyAll( <pMtx> [, <xVal>] ) -> NIL
hb_mutexSubscribe( <pMtx>, [ <nTimeOut> ] [, @<xSubscribed> ] ) -> <lSubscribed>
hb_mutexSubscribeNow( <pMtx>, [ <nTimeOut> ] [, @<xSubscribed> ] ) -> <lSubscribed>
The function list should give similar to xHarbour API but they are not exactly
the same and except of hb_mutex*() functions which should replicate xHarbour behavior.
+ harbour/source/vm/vmmt
+ harbour/source/vm/vmmt/Makefile
+ added hbvmmt library to GNU make builds.
Non GNU make builds should be updated.
* harbour/contrib/hbct/pos1.c
* harbour/contrib/gtwvg/gtwvg.c
* harbour/contrib/rddads/ads1.c
* harbour/contrib/hbmisc/spd.c
* harbour/contrib/hbbmcdx/bmdbfcdx.c
* harbour/contrib/examples/rdddbt/dbfdbt1.c
* harbour/source/vm/runner.c
* harbour/source/vm/itemapi.c
* harbour/source/vm/hvm.c
* harbour/source/rtl/console.c
* harbour/source/rtl/strcase.c
* harbour/source/rtl/spfiles.c
* harbour/source/rtl/defpath.c
* harbour/source/rtl/hbgtcore.c
* harbour/source/rtl/dateshb.c
* harbour/source/rtl/mlcfunc.c
* harbour/source/rtl/fstemp.c
* harbour/source/rtl/is.c
* harbour/source/rtl/setcolor.c
* harbour/source/rtl/errorint.c
* harbour/source/rtl/transfrm.c
* harbour/source/rtl/dates.c
* harbour/source/rtl/filesys.c
* harbour/source/rtl/gtdos/gtdos.c
* harbour/source/rtl/gtwin/gtwin.c
* harbour/source/rtl/gtwvt/gtwvt.c
* harbour/source/rtl/gtxwc/gtxwc.c
* harbour/source/rtl/gttrm/gttrm.c
* harbour/source/rtl/gtpca/gtpca.c
* harbour/source/rtl/gtcgi/gtcgi.c
* harbour/source/rtl/gtcrs/gtcrs.c
* harbour/source/rtl/gtstd/gtstd.c
* harbour/source/rtl/gtsln/gtsln.c
* harbour/source/rtl/gtsln/gtsln.h
* harbour/source/rdd/dbf1.c
* harbour/source/rdd/sdf1.c
* harbour/source/rdd/delim1.c
* harbour/source/rdd/dbcmd.c
* harbour/source/rdd/hbdbsort.c
* harbour/source/rdd/workarea.c
* harbour/source/rdd/dbffpt/dbffpt1.c
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* harbour/source/rdd/dbfntx/dbfntx1.c
* harbour/source/rdd/hsx/hsx.c
* harbour/source/rdd/hbsix/sxfname.c
* use API functions instead of direct accessing to hb_cdp_page or hb_set
* harbour/source/rtl/fstemp.c
* harbour/source/rtl/fssize.c
* harbour/source/rtl/hbffind.c
* harbour/source/rtl/filesys.c
* encapsulate potentially slow IO operation inside
hb_vmUnlock()/hb_vmLock() calls to allow other thread GC
activation
* harbour/contrib/hbnf/fttext.c
! fixed casting
* harbour/contrib/gtwvg/gtwvg.h
- removed #include <comctl32.h> - my MinGW and MinGW/CE instalations do
not have them. If it exists in some newer ones then it has to be
covered by #if version checking.
* harbour/source/vm/dynsym.c
- removed hb_dynsymLog() and hb_dynsymMemvarHandle()
* modified code to be MT safe and improved speed of some operations
* added MUEXT protection for global dynamic table access
* harbour/include/hbapi.h
* harbour/source/vm/garbage.c
* changed to work with MT HVM
* changed to work with new memvar structures and thread local static and
memvar variables
* added MUEXT protection for linked block lists
+ added parameter to hb_gcCollectAll() which will force GC activation
in MT mode by temporary suspending all executed threads.
+ added logical parameter to HB_GCALL() functions which is passed to
hb_gcCollectAll()
* harbour/source/vm/fm.c
* added MUEXT protection for FM statistic module
* added MT protection for reference counters. For platforms
which supports atomic incrmenetation/decrementation (f.e.
Interlocked*() functions in MS-Win) such operations are
used. For other it's MUTEX protection. It gives MT safe
readonly access for HVM complex variables without user
synchronization. The MUTEX protection can cause some speed
overhead so it's good to define MT safe version of
HB_ATOM_INC()/HB_ATOM_DEC() in hbthread.h if given platform
has them. Now they are defined only for Windows. For other
platforms We can define can define them in assembler for some
most popular CPUs in the future.
* harbour/source/vm/classes.c
* changed class definition array. Now it keeps pointers to class
structures.
* In MT mode allocated at HVM startup big enough array for class
definitions to avoid later RT reallocations. It effectively eliminates
MUTEX synchronization for class structure access.
* protect by MUTEX code for new class creation
* harbour/source/debug/dbgentry.c
* eliminated hbvmopt.h and direct accessing to HVM structures
* harbour/source/rtl/gtclip.c
* protect with MUTEX access to internal clipboard data
* harbour/source/rdd/nulsys/nulsys.c
+ added hb_rddCloseAll()
+ harbour/tests/mt
+ harbour/tests/mt/mttest01.prg
+ harbour/tests/mt/mttest02.prg
+ harbour/tests/mt/mttest03.prg
+ harbour/tests/mt/mttest04.prg
+ harbour/tests/mt/mttest05.prg
+ harbour/tests/mt/mttest06.prg
+ harbour/tests/mt/mttest07.prg
+ added some demonstration/test small MT programs written
using Harbour language. Some of them can be also compiled
by xHarbour but xHarbour does not pass any of my tests in
real multi-CPU machine so do not expect they will work
correctly.
Harbour threads needs OS threads support. Each Harbour thread is directly
mapped to OS thread. It's not very efficient on some older system where
cost of thread creation and/or task switching is very expensive but it
should not be bigger problem for modern OS-es which can support threads
in practice nearly in user space only.
I haven't touched Harbour function calling convention which comes from
Clipper. It means that we do not pass pointer to VM to each functions
like CLIP or xBase++. To resolve the problem I have to use thread local
storage (TLS) where such pointer is kept. If platform does not support
TLS then it can be emulated by us. Anyhow the speed of accessing TLS
data and extracting HB_STACK poitner is critical for performance.
Some compilers depending on used hardware and OS give native support
for TLS (f.e. __thread keyword in GCC/BCC or __declspec( thread ) in MSVC).
This should give optimal performance. On other Harbour uses TLS functions
like TlsGetValue() (MS-WIN) or pthread_getspecific() (PTHREAD) are used.
OS2 gives quite interesting TLS functionality which seems to be quite fast
though it will be interesting to know how it is iplemented internally for
real multi CPU machines (if it depends on CPU exception then the
performance will be bad). We need TLS only for one pointer to HB_STACK
structure.
I haven't added any tricks like HB_THREAD_STUB in xHarbour to reduce
the cost of TLS access. If it will be necessary for some platform the we
can add it.
Except TLS Harbour threads needs OS support for non recursive mutexes or
critical sections and conditional variables. If platforms does not support
conditional variables (f.e. MS-Win or OS2) then they can be emulated using
multistate semaphores. I intentionally didn't create code which may need
recursive mutexes. The non recursive ones are often faster and some
platforms may not support recursive mutexes so they will have to be
emulated by us.
Harbour uses reference counters for complex variables. It means that even
readonly access to complex item causes internal write operations necessary
to increment/decrement its reference counter. To make such readonly access
MT safe we have to make incrementation and decrementation with result
checking atomic. By default it's done by mutex inside vm/fm.c but some
platforms have native support for atomic inc/dec operations, f.e.
Interlocked*() functions in MS-Win. If they are available then such
functions should be used to not reduce the performance by mutex call
very often used functions. For many CPUs it should be quite easy to
implement such atomic inc/dec functionality in assembler. F.e. for
GCC and x86@32 it may looks like:
static __inline__ void hb_atomic_inc32( volatile int * p )
{
__asm__ __volatile__(
"lock incl %0"
:"=m" (*p) :"m" (*p)
);
}
static __inline__ int hb_atomic_dec32( volatile int * p )
{
unsigned char c;
__asm__ __volatile__(
"lock decl %0"
"sete %1"
:"=m" (*p), "=qm" (c) :"m" (*p) : "memory"
);
return c == 0;
}
and then it's enough to define in hbthreads.h:
#define HB_ATOM_INC( p ) hb_atomic_inc32( ( volatile int * ) p )
#define HB_ATOM_DEC( p ) hb_atomic_dec32( ( volatile int * ) p )
Probably I'll make it for some most popular CPUs in the future.
In Harbour each thread which wants to call HVM functions have to allocate
it's own HVM stack. It's done hb_vmThreadInit(). The HVM stack is freed
by calling hb_vmThreadQuit(). This functions can be called also by 3-rd
party threads if they want to call HVM functions or execute .prg code.
Calling HVM functions without allocated stack will cause GPF.
I moved most of static variables to HVM stack to make them thread
local. But some of them like FS errors have their own alternative
copy which is used when thread does not allocate HVM stack. It allows
to use hb_fs*() functions without HVM stack but programmer have to
know that error codes return by hb_fs*Error() functions can be
overwritten by other threads which also didn't allocated HVM stack.
To execute garbage collector scan and mark pass it's necessary to
stop other HVM threads. Otherwise the scan may give false results.
It's also possible to not stop threads but protect with mutex all
operations on GC items but it will probably cause performance reduction
and will force some other modifications. Maybe I'll implement it
in the future.
I didn't use any OS level thread KILL or CANCEL calls. All HVM threads
have to be cleanly removed without any resource leaks.
QUIT command terminate only calling thread. If main (startup) HVM
thread call QUIT then it sends QUIT request to all existing threads.
In QUIT state ALWAYS statements and destructors are executed.
New thread is created by:
hb_threadStart( <@sStart()> | <bStart> [, <params,...> ] ) -> <pThID>
The returned value is a pointer to internal thread structure which
can be used in JOIN or DETACH operations. Each thread should be Joined
or DETACHED to avoid resource leaks. If programmer does not store
<pThID> or all instances of <pThID> are destroyed then thread is
automatically detached. I do not know clear method of thread detaching
in OS2. If some OS2 users knows it then plase update vm/hbthread.c.
When thread terminates then all locked by this thread mutexes are
released.
Each thread uses its own memvars (PRIVATEs and PUBLICs) and work areas.
When new thread is created then it inherits from parent thread:
- code page
- language
- SETs
- default RDD
error block is initialized to default value by calling ERRORSYS()
and PUBLIC variable GetList := {} is created.
The following objects are initialized to default value:
- error block
- math error handler and math error block
- macro compiler features setting (hb_setMacro())
or move them to SETs.
We can think about inheriting them. It's also possible to add
inheriting of all visible memvars but I do not know it's good
idea.
Compilation and linking:
For MT mode HVM library should be compiled with HB_MT_VM macro.
GNU make automatically creates hbvmmt library which should be
linked with Harbour MT programs instead of hbvm.
Non GNU make files should be updated.
If given compiler support TLS then you can try to set HB_USE_TLS
to force using native compiler TLS support. Now it's enabled by
default only for BCC. For Linux and GCC builds it may depend also
on used GLIBC version. In older system there is no TLS support
at all or TLS works only for shared binaries so I haven't enabled
it. If you will test some other compiler then please add default
native TLS support for them in hbthread.h
Users using hb* scripts can simply use -mt switch when they want
to create MT program, f.e.:
hbmk -n -w3 -es2 -mt mttest01.prg
There are still some minor things which should be done but I'll
do them later. Current state seems to be fully functional.
The most important and still missing is our own file lock server
for RDD synchronization in POSIX systems. Kernel internally
recognize POSIX locks by PID and file i-node - not PID and file
handle. It means that the same file open more then once by one
process shares locks. Because POSIX locks can be overwritten
then we do not have any synchronization between aliased workareas
or threads using the same table in *nixes. We have to make
synchronization ourselves. I'll create such lock server ASAP.
Please test and enjoy using Harbour threads.
|
||
|
|
56e978010a |
2008-08-17 17:30 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* include/hbstack.h
* include/hbsetup.h
* include/hbapi.h
* source/rtl/filesys.c
* contrib/gtwvg/tests/demowvg.prg
* contrib/hbct/tests/ctwtest.prg
* contrib/hbgd/ChangeLog
* contrib/hbodbc/sql.ch
* contrib/rddads/ads.ch
* contrib/rddads/ads1.c
! Some more filename casing related cleanups.
|
||
|
|
53d1817e97 |
2008-08-11 21:20 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* include/hbsetup.h
* config/hpux/gcc.cf
* config/linux/gcc.cf
* config/os2/gcc.cf
* config/bsd/gcc.cf
! Never force the platform from the make files, rather
rely on the autodetection in hbsetup.h.
Compiling default parts of the software should only rely
on manually set macros if there is no reasonable chance to
make the detection automatic.
! HB_OS_LINUX, HB_OS_HPUX autodetection supposedly made more robust.
* include/hbsetup.ch
* include/hbapi.h
* source/rtl/hbffind.c
- Removed HB_FILE_VER stuff. It's lost it's importancy with SVN.
* include/Makefile
* include/hbcommon.ch
- Removed hbcommon.ch no longer needed. It only contained
HB_FILE_VER related stuff.
* contrib/rddado/Makefile
! Excluded from OS/2 builds.
|
||
|
|
3d4a97040b |
2008-07-17 18:19 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/hbw32/dllcall.c
* minor cleanup in return values
* harbour/contrib/hbole/ole2.c
* cleaned casting in UNICODE conversions
* harbour/source/common/expropt2.c
* replicate CA-Cl*pper compile time optimization bugs:
"" $ <literString> => .T.
AT( "", <literString> ) => 1
CHR( 256 ) => ""
only when Harbour extensions (-kh) are not enabled, f.e.
in strict Clipper compatibility mode (-kc)
* harbour/utils/hbtest/rt_hvma.prg
* harbour/utils/hbtest/rt_str.prg
* updated to test Clipper and Harbour compile time modes in
the above situations
* harbour/common.mak
* harbour/source/rtl/Makefile
- harbour/source/rtl/strings.c
* harbour/source/common/hbstr.c
* moved hb_strEmpty() from RTL to COMMON library
* harbour/include/hbexprb.c
* harbour/include/hbexprop.h
* harbour/source/common/expropt2.c
+ added compile time optimization for EMPTY() function
; removed 'TODO: empty optimization' note
* harbour/source/rtl/itemseri.c
% compress trailing spaces during string item serialization
* harbour/include/hbapi.h
* harbour/source/vm/hashes.c
+ added hb_hashAddNew() - works like hb_hashAdd() but it adds item
only if new key is used
* harbour/source/vm/hvm.c
* use hb_hashAddNew() instead of hb_hashAdd() for HB_P_HASHGEN
I cannot revert the order of hash item during compilation because
it will also change the order of user expression evaluation.
|
||
|
|
b1118f3481 |
2008-06-30 11:16 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* include/hbapi.h
* source/rtl/set.c
* source/vm/fm.c
! Fixed _SET_HBOUTLOG, _SET_HBOUTLOGINFO handling in fm.c.
hb_setget*() functions cannot be used here as the set
system is deinited at this point. So local buffers are
holding the values.
|
||
|
|
e708033e0e |
2008-06-13 19:19 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* source/rtl/gtwvt/gtwvt.h
* source/rtl/gtwvt/gtwvt.c
* tests/wvtext.prg
+ Added hb_gtInfo( HB_GTI_SELECTCOPY, <cMenuText> )
to set the menu text ("Mark and Copy" on startup).
cMenuText mustn't be zero length. Setting the menu text
also enables select© automatically. The call
will return the previously set menu text. To get
the menu text without setting a new one, use:
hb_gtInfo( HB_GTI_SELECTCOPY, "" )
This is good if someone wants to adapt the menu
text to the OS's or app's language.
* doc/en/hb_apiit.txt
* include/hbapi.h
* include/hbapiitm.h
* source/rtl/gtwin/gtwin.c
* source/rtl/hbgtcore.c
* source/rtl/gtgui/gtgui.c
* source/rtl/gtwvt/gtwvt.c
* source/vm/macro.c
* source/vm/debug.c
* source/vm/itemapi.c
* source/vm/hvm.c
* source/vm/arrays.c
* source/vm/extend.c
* source/rdd/dbfntx/dbfntx1.c
* source/rdd/sdf1.c
* source/rdd/dbfcdx/dbfcdx1.c
* source/rdd/delim1.c
* source/rdd/dbf1.c
* source/rdd/dbffpt/dbffpt1.c
* contrib/hbw32/w32_ole.c
* contrib/gtwvg/gtwvg.c
* contrib/rddads/ads1.c
* contrib/hbmisc/spd.c
* contrib/hbbmcdx/bmdbfcdx1.c
* contrib/examples/rdddbt/dbfdbt1.c
* I did a mistake in 1999 by giving the name hb_itemPutCPtr()
to the function which would have to be correctly named
hb_itemPutCLPtr() (notice the 'L' for 'length').
So, now this was renamed to hb_itemPutCLPtr(), and stub was
added with the old name, and Harbour code was changed to use
the new one. I've also added hb_itemPutCPtr2() as a version
not requiring len parameter, the proper name would be hb_itemPutCPtr()
for this, but we cannot use without breakin compatiblity.
IMPORTANT: I'd strongly suggest all 3rd parties to update
their code to use the call hb_itemPutCLPtr() instead of
hb_itemPutCLPtr().
The final goal would be to have hb_itemPutCPtr() with two
parameters instead of the hakish looking hb_itemPutCPtr2().
I'd welcome any opinions how to reach this goal. I didn't want to
break compatiblity with 3rd parties this time, but IMO we may do
it in 1.1, or even before 1.0.
! The above also fixes the (potential) problem when hb_retc_buffer()'s
szText parameter was evaluated twice if HB_API_MACROS was #defined.
|
||
|
|
4761f7a5af |
2008-05-27 09:43 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
* include/hbapi.h
* source/vm/hvm.c
* source/vm/cmdarg.c
+ Added support for internal switch format:
--hb:<internal switch>
//hb:<internal switch>
Both are equivalent to original CA-Cl*pper:
//<internal switch>
|
||
|
|
b5d578680c |
2008-05-26 12:13 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
* include/hbapi.h
* source/vm/extend.c
+ Added hb_retc_null() which is equivalent to
hb_retc( NULL ) and will return an empty string.
I opted for this because hb_retc( NULL ) usage is not
compatible with CA-Cl*pper _retc(), so it might create
problems when writing C code intended for both Clipper
and Harbour.
* contrib/hbclipsm/stack.c
* contrib/hbclipsm/environ.c
* contrib/hbclipsm/status.c
* contrib/hbclipsm/gauge.c
% Optimizations.
; TOFIX: GAUGE*() still leaks and doesn't seem to function.
* contrib/rddads/adsmgmnt.c
% Optimizations (using hb_arraySet*()).
! Fixed typo in ADSMGGETOPENTABLES2().
|
||
|
|
bf68197ca0 |
2008-04-09 20:42 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/ChangeLog
* harbour/harbour.spec
* reverted translation to UTF8 - Tomaz please check your editor
settings and disable automatic translation to UTF8. It's not
the first as such situation happens.
* harbour/include/hbclass.ch
+ added two missing PP directives
! protected against some repeated external definitions
* harbour/source/pp/Makefile
* harbour/source/pp/hbppgen.c
* harbour/source/pp/ppcore.c
* harbour/source/common/hbver.c
* harbour/source/common/hbverdsp.c
* harbour/source/main/harbour.c
* harbour/source/vm/cmdarg.c
* harbour/utils/hbpp/hbpp.c
* harbour/include/hbpp.h
* harbour/include/hbcomp.h
* harbour/include/hbver.h
* harbour/include/hbapi.h
* harbour/make_vcce.mak
* harbour/make_b32.mak
* harbour/make_vc.mak
* harbour/make_gcc.mak
+ added support for dynamically set during compilation ChangeLog entry
ChangeLog ID and SVN revision and compilation flags
Now hbppgen creates in include directory hbverbld.h file with
information extracted from ChangeLog. New hbppgen parameters:
Syntax: ./hbppgen <file>[.prg] [options]
Options: -i<path> add #include file search path
-c[<file>] look for ChangeLog file
-o<file> creates .c file with PP rules
-v<file> creates .h file with version information
-w write preprocessed (.ppo) input file
-q disable information messages
+ added new C functions:
int hb_verSvnID( void )
- retrieves ChangeLog SVN revision number
const char * hb_verSvnChangeLogID( void )
- retrieves a static buffer containing ChangeLog ID string
const char * hb_verSvnLastEntry( void )
- retrieves a static buffer containing ChangeLog last entry string
const char * hb_verFlagsC( void )
- retrieves a static buffer containing build time C compiler
flags in C_USR envvar
const char * hb_verFlagsL( void )
- retrieves a static buffer containing build time linker
flags in L_USR envvar
const char * hb_verFlagsPRG( void )
- retrieves a static buffer containing build time Harbour compiler
flags in PRG_USR envvar
+ added new default PP defines which can be used in .prg code compiled
by Harbour compiler: HB_VER_LENTRY, HB_VER_CHLID, HB_VER_SVNID
* harbour/source/rtl/gtxwc/gtxwc.c
* formatting
* harbour/source/rtl/gttrm/gttrm.c
! fixed redrawing GPM mouse pointer after screen updating
* harbour/source/rtl/gtstd/gtstd.c
* harbour/source/rtl/gtpca/gtpca.c
* updated for compilation even if some POSIX macros are not supported
f.e. problems with some DJGPP versions reported recently
* harbour/source/debug/dbgentry.c
* harbour/source/debug/dbgtobj.prg
* harbour/source/debug/dbgbrwsr.prg
* harbour/source/debug/dbgthsh.prg
* harbour/source/debug/tbrwtext.prg
* harbour/source/debug/dbgwa.prg
* harbour/source/debug/debugger.prg
* harbour/source/debug/dbghelp.prg
* harbour/source/debug/dbgtarr.prg
! Fixed object inspector in the debugger.
! Added HbDbBrowser:invalidate() message. Fixes work area browsing in debugger.
! Added an minimalistic TBrowse implementation that is just enough
for internal use by the debugger. Fixes miscellaneous problems e.g.
when debugging a piece of code with RELATIONs turned on.
Fixes by Phil Krylov borrowed from xHarbour.
|
||
|
|
117324bc6a |
2008-03-25 12:26 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/common.mak
* harbour/source/lang/Makefile
+ harbour/source/lang/msgskiso.c
+ harbour/source/lang/msgskwin.c
+ harbour/source/lang/msgskkam.c
+ harbour/source/lang/msgsk852.c
+ added Slovak national messages by Gyula Bartal - many thanks
* harbour/include/hbapi.h
* harbour/source/vm/arrays.c
! Guarded hb_arraySetNLL() declaration with #ifndef HB_LONG_LONG_OFF.
! Fixed trace in hb_arraySetNInt().
By Phil Krylov borrowed from xHarbour
* harbour/include/hbgtcore.h
! added missing HB_EXTERN_BEGIN / HB_EXTERN_END
By Ron Pinkas borrowed from xHarbour
* harbour/source/rtl/gtos2/gtos2.c
% updated for much faster screen updating in OS2 console - many
thanks for Maurilio Longo for tests and code.
* harbour/source/rtl/cdpapi.c
! fixed CP string translation for CPs with accented equal characters
+ added HB_UTF8CHR( <nUniVal> ) -> <cUtf8Char>
It's compatible with the function HB_UTF8CHR() by Phil Krylov in
xHarbour
* harbour/source/rtl/gtsln/gtsln.h
* removed repeated #include <unistd.h>
* harbour/contrib/hbct/files.c
! fixed FILESEEK() called with 3-rd parameter set to .T. (exact
attribute match)
* harbour/config/os2/global.cf
! added fixes by David Arturo Macias Corona
+ harbour/make_os2_gcc.cmd
+ added build file for GCC OS2 users with minimal environment settings
|
||
|
|
cf69097383 |
2008-03-12 17:43 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/source/common/hbver.c
* harbour/source/rtl/gttone.c
* added hb_iswince() and fixed TONE() for WinCE
* harbour/source/rtl/math.c
! added workaround for SIGFPE platforms which generate it instead of
setting errno during execution of math functions
* harbour/source/rtl/gtcrs/hb-charmap.def
! remap 0x9b (155) to '.' in Linux terminals - it's control code
* harbour/source/rdd/dbsql.c
* harbour/source/rdd/workarea.c
* harbour/source/rdd/dbf1.c
! always restore current workarea in WA EVAL() method
! always use EVAL() method for user codeblocks and macros
* harbour/source/rdd/dbcmd.c
! fixed DBRELATION() called without numeric parameters or with 0 to
return first relation expression (Clipper compatible)
* harbour/contrib/hbtip/thtml.prg
! fixed wrongly ported to Harbour xHarbour specific code
* harbour/source/common/hbstr.c
+ added missing const in one declaration
* formatting
* harbour/source/rtl/transfrm.c
! fixed casting for C++ compilers
* harbour/source/rtl/errorapi.c
* harbour/source/rdd/dbfntx/dbfntx1.c
! cleanup warnings
* harbour/source/common/hbtrace.c
* harbour/source/rdd/dbcmdx.c
* harbour/source/rdd/wafunc.c
* harbour/source/rdd/dbffpt/dbffpt1.c
* harbour/source/rdd/hbsix/sxcrypt.c
* formatting
|
||
|
|
b5ae06cc09 |
2008-01-31 17:40 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* bin/hb-func.sh
+ Updated for lib name change.
Please test & review.
* source/rtl/net.c
* include/hbapi.h
+ Added hb_netname() and hb_username() low level versions
of NETNAME() and hb_USERNAME().
|
||
|
|
1e7aadcf86 |
2007-12-06 11:35 UTC+0200 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
* harbour/source/lang/msgltwin.c
* more changes from LT to LTWIN
* harbour/common.mak
* restored missing msgltwin.c
* harbour/include/hbapi.h
* harbour/source/vm/hashes.c
+ added hash key support for pointer type
|
||
|
|
d80b5e7389 |
2007-11-30 19:57 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbgtcore.h
* harbour/source/rtl/hbgtcore.c
* harbour/source/rtl/gtalleg/gtalleg.c
* harbour/source/rtl/gtdos/gtdos.c
* harbour/source/rtl/gtos2/gtos2.c
* harbour/source/rtl/gtwin/gtwin.c
* harbour/source/rtl/gtwvt/gtwvt.c
* harbour/source/rtl/gtgui/gtgui.c
* harbour/source/rtl/gtxwc/gtxwc.c
* harbour/source/rtl/gtcrs/gtcrs.c
* harbour/source/rtl/gtsln/gtsln.c
* harbour/source/rtl/gttrm/gttrm.c
* harbour/source/rtl/gtstd/gtstd.c
* harbour/source/rtl/gtpca/gtpca.c
* harbour/source/rtl/gtcgi/gtcgi.c
* harbour/contrib/libct/ctwin.c
* harbour/contrib/gtwvg/gtwvt.c
+ added GT ID (int s_GtId)
* harbour/include/hbapigt.h
* harbour/source/rtl/gtapi.c
+ added some missing wrappers for hb_gt_* functions to avoid
including hbgtcore.h by non GT code - such functions separation
will be important in MT mode where each thread can operate on
different GT context (window)
* harbour/contrib/libct/screen2.c
* harbour/contrib/libct/screen1.c
* harbour/contrib/libct/ctwfunc.c
* use hb_gt* functions instead of hb_gt_*() ones
* harbour/include/hbapigt.h
* harbour/source/rtl/inkey.c
* changed hb_setInkeyLast() to hb_inkeySetLast() to keep hb_inkey*()
prefix in all inkey() related functions
+ added hb_inkeySetText()
- removed hb_inkeyTranslate()
* harbour/contrib/libct/setlast.c
* use hb_inkeySetLast() instead of hb_setInkeyLast()
* harbour/source/rdd/usrrdd/usrrdd.c
* removed dummy xHarbour code not usable in Harbour
* harbour/include/hbapi.h
* harbour/source/vm/codebloc.c
* harbour/source/vm/hvm.c
* added const to BYTE * pCode parameter of hb_codeblockMacroNew()
|
||
|
|
6b9e24dd93 |
2007-11-17 03:08 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* make_vcce.bat
* make_vcce.mak
! Minor corrections (syncing with existing files).
* doc/genhtm.bat
! Minor fix to make it work out of the box.
- Some obsolete stuff removed from it.
* include/hbapiitm.h
* include/hbapi.h
* source/vm/itemapi.c
+ Added hb_itemPutCLConst() which is the same as
hb_itemPutCConst() but the buffer length can be passed.
Same as xhb hb_itemPutCRawStatic().
+ contrib/xhb/hbcompat.h
+ Added C level compatibility header file.
* contrib/win32/w32_ole.c
! hb_itemPutCRawStatic() -> hb_itemPutCLConst()
! Some more xhb API calls changed to Harbour ones.
! TraceLog() -> HB_TRACE()
! HB_ITEM s_OleAuto -> PHB_ITEM s_pOleAuto
TOFIX (new): s_pOleAuto is not freed on app exit.
! Fixed a few more internal accesses by using API
calls.
; NOTE: There are four more complicated problems here
to be solved:
1) hb_stackSetActionRequest() call
2) Passing direct references to HB_ITEM .value
members to external functions.
3) Storing "hidden" information in string ITEMs
prepended after the strings' actual content.
4) Not freeing s_pOleAuto (this var BTW is used in
one static function only)
* source/rtl/hbinet.c
* source/rdd/dbcmd.c
! Changed some xhb C level API calls to Harbour ones.
* contrib/xhb/Makefile
* contrib/freeimage/Makefile
* contrib/apollo/Makefile
* contrib/firebird/Makefile
* contrib/libct/Makefile
* contrib/telepath/Makefile
* contrib/pgsql/Makefile
* contrib/gd/Makefile
* contrib/libnf/Makefile
* contrib/tip/Makefile
* contrib/adordd/Makefile
* contrib/rdd_ads/Makefile
* contrib/btree/Makefile
* contrib/samples/Makefile
* contrib/mysql/Makefile
* contrib/odbc/Makefile
* contrib/pdflib/Makefile
! Added C and Harbour public headers to GNU makefiles.
! Added one missing SVN header.
* contrib/pdflib/pdfhbdoc.ch
* contrib/pdflib/pdf.ch
! Added missing SVN headers.
- contrib/pdflib/pdflib.h
- Removed this file which belongs to the pdflib
package. This package is needed anyway to use
this contrib. (but the contrib is badly broken)
* contrib/pdflib/make_b32.bat
* contrib/pdflib/make_vc.bat
! Minor typo.
* source/rtl/persist.prg
! Prefixed static var name with "s_"
|
||
|
|
7477bf4448 |
2007-11-12 01:14 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* include/hbapi.h
+ Added xhb compatibility #define for hb_storclenAdopt()
(equivalent to Harbour's hb_storclen_buffer())
* contrib/xhb/hbcompat.ch
+ Added xhb IsDirectory() <-> hb_DirExists() translation.
Harbour version works using access(), while xhb version
does a filefind, so Harbour will return a more accurate
result more quickly, but it won't work with wildcards.
* source/rtl/persist.prg
% Using hb_StrShrink()
* common.mak
* utils/hbdoc/Makefile
* utils/hbdoc/ffile1.prg
* utils/hbdoc/genasc.prg
* utils/hbdoc/genchm.prg
* utils/hbdoc/genhtm.prg
* utils/hbdoc/genng.prg
* utils/hbdoc/genos2.prg
* utils/hbdoc/genpdf1.prg
* utils/hbdoc/genrtf.prg
* utils/hbdoc/gentrf.prg
* utils/hbdoc/hbdoc.prg
* utils/hbdoc/html.prg
* utils/hbdoc/ng.prg
* utils/hbdoc/os2.prg
* utils/hbdoc/rtf.prg
+ utils/hbdoc/teeasc.prg
+ Synced with xhb.
; Someone who uses this tool, pls test.
* common.mak
* utils/hbmake/Makefile
* utils/hbmake/ft_funcs.prg
* utils/hbmake/hbmake.prg
* utils/hbmake/hbmutils.prg
* utils/hbmake/pickarry.prg
* utils/hbmake/radios.prg
+ utils/hbmake/readline.c
+ utils/hbmake/tmake.prg
+ Synced with xhb.
; Someone who uses this tool, pls test.
|
||
|
|
7bad05f1b6 |
2007-11-04 02:34 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/source/common/hbstr.c
+ added hb_strlow()
* harbour/source/rtl/fstemp.c
* harbour/source/rtl/filesys.c
! fixed _SET_DIRSEPARATOR behavior - now it's always set to default
OS directory separator what means no translations. If you want to
enable some translations then it should be set to other value, f.e.
in *nixes:
set( _SET_DIRSEPARATOR, "\" )
enables translations of "\" in paths to "/"
* harbour/source/main/harbour.c
+ added support for new compiler switches:
- Filename casing:
-fn:l (lower)
-fn:u (upper)
-fn- (disable - default)
-fn (disable - default)
- Directory casing
-fd:l (lower)
-fd:u (upper)
-fd- (disable - default)
-fd (disable - default)
- Path separator:
-fp:<char>
-fp (default: OS defined)
- Filename space trimming:
-fs (enable)
-fs- (disable - default)
These switches works only in standalone compiler.
When compiler is linked with HVM and RTL then corresponding
_SET_* switches are used instead.
|
||
|
|
e208b9a1d7 |
2007-10-24 03:54 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* include/vm.api
* include/hbapi.h
* include/clipdefs.h
* common.mak
* source/vm/Makefile
+ source/vm/vm.c
+ Added skeletons for CA-Cl*pper-like C-level VM API.
Types slightly modified for portability and to support
larger memory than C5x.
|
||
|
|
82d8ab9d01 |
2007-10-23 13:30 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/directx/w32_ddrw.cpp
* contrib/directx/w32_ddrw.h
! Cleanup, formatting.
! Tabs converted to spaces.
* contrib/libnf/aading.prg
* contrib/libnf/aavg.prg
* contrib/libnf/acctadj.prg
* contrib/libnf/acctmnth.prg
* contrib/libnf/acctqtr.prg
* contrib/libnf/acctweek.prg
* contrib/libnf/acctyear.prg
* contrib/libnf/adessort.prg
* contrib/libnf/aemaxlen.prg
* contrib/libnf/aeminlen.prg
* contrib/libnf/amedian.prg
* contrib/libnf/anomatch.prg
* contrib/libnf/any2any.prg
* contrib/libnf/aredit.prg
* contrib/libnf/asum.prg
* contrib/libnf/at2.prg
* contrib/libnf/bitclr.prg
* contrib/libnf/bitset.prg
* contrib/libnf/blink.prg
* contrib/libnf/byt2bit.prg
* contrib/libnf/byt2hex.prg
* contrib/libnf/byteand.prg
* contrib/libnf/byteneg.prg
* contrib/libnf/bytenot.prg
* contrib/libnf/byteor.prg
* contrib/libnf/bytexor.prg
* contrib/libnf/calendar.prg
* contrib/libnf/clrsel.prg
* contrib/libnf/cntryset.prg
* contrib/libnf/d2e.prg
* contrib/libnf/datecnfg.prg
* contrib/libnf/dayofyr.prg
* contrib/libnf/daytobow.prg
* contrib/libnf/dectobin.prg
* contrib/libnf/descend.c
* contrib/libnf/dfile.prg
* contrib/libnf/dhkey.h
* contrib/libnf/diskfunc.prg
* contrib/libnf/dispmsg.prg
* contrib/libnf/dosver.prg
* contrib/libnf/e2d.prg
* contrib/libnf/easter.prg
* contrib/libnf/elapmil.prg
* contrib/libnf/elapsed.prg
* contrib/libnf/eltime.prg
* contrib/libnf/findith.prg
* contrib/libnf/firstday.prg
* contrib/libnf/floptst.prg
* contrib/libnf/ftattr.c
* contrib/libnf/ftint86.ch
* contrib/libnf/ftmenuto.ch
* contrib/libnf/fttext.c
* contrib/libnf/gcd.prg
* contrib/libnf/getenvrn.c
* contrib/libnf/getver.c
* contrib/libnf/getvid.c
* contrib/libnf/hex2dec.prg
* contrib/libnf/idle.c
* contrib/libnf/invclr.prg
* contrib/libnf/isbit.prg
* contrib/libnf/isbiton.prg
* contrib/libnf/isshare.prg
* contrib/libnf/kspeed.c
* contrib/libnf/lastday.prg
* contrib/libnf/linked.prg
* contrib/libnf/madd.prg
* contrib/libnf/menu1.prg
* contrib/libnf/menuto.prg
* contrib/libnf/metaph.prg
* contrib/libnf/miltime.prg
* contrib/libnf/min2dhm.prg
* contrib/libnf/month.prg
* contrib/libnf/mouse.c
* contrib/libnf/mouse1.prg
* contrib/libnf/mouse2.prg
* contrib/libnf/netpv.prg
* contrib/libnf/nooccur.prg
* contrib/libnf/ntow.prg
* contrib/libnf/nwlstat.prg
* contrib/libnf/nwsem.prg
* contrib/libnf/nwuid.prg
* contrib/libnf/ontick.c
* contrib/libnf/origin.c
* contrib/libnf/page.prg
* contrib/libnf/pchr.prg
* contrib/libnf/peek.c
* contrib/libnf/pegs.prg
* contrib/libnf/pending.prg
* contrib/libnf/pickday.prg
* contrib/libnf/poke.c
* contrib/libnf/popadder.prg
* contrib/libnf/prtesc.prg
* contrib/libnf/prtscr.c
* contrib/libnf/pvid.prg
* contrib/libnf/qtr.prg
* contrib/libnf/rand1.prg
* contrib/libnf/readme.txt
* contrib/libnf/restsets.prg
* contrib/libnf/round.prg
* contrib/libnf/savearr.prg
* contrib/libnf/savesets.prg
* contrib/libnf/scancode.prg
* contrib/libnf/scregion.prg
* contrib/libnf/setdate.prg
* contrib/libnf/settime.prg
* contrib/libnf/sinkey.prg
* contrib/libnf/sleep.prg
* contrib/libnf/sqzn.prg
* contrib/libnf/sysmem.prg
* contrib/libnf/tbwhile.prg
* contrib/libnf/test.prg
* contrib/libnf/vertmenu.prg
* contrib/libnf/vidcur.prg
* contrib/libnf/vidmode.prg
* contrib/libnf/wda.prg
* contrib/libnf/week.prg
* contrib/libnf/workdays.prg
* contrib/libnf/woy.prg
* contrib/libnf/xbox.prg
* contrib/libnf/year.prg
- contrib/libnf/idle.c
+ contrib/libnf/ftidle.c
+ contrib/libnf/iamidle.c
* contrib/libnf/Makefile
* contrib/libnf/makefile.bc
* contrib/libnf/makefile.vc
+ Added svn headers.
! Fixed FT_IDLE()
! Renamed idle.c to not clash with core idle.obj.
! FT_F*() functions fully ported from original NFLIB.
Pls test.
* Some minor cleanups, formatting.
* include/filesys.api
! _fsRead(), _fsWrite() now more compatible.
* include/hbundoc.api
+ Added _lcopy(), _ncopyuc(), _ncopylc() compatibility
functions.
* include/hbapi.h
* source/common/hbstr.c
+ Added hb_strncpyLower()
|
||
|
|
b5d010fbeb |
2007-10-01 19:42 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/rtl/errorapi.c
+ added protection against possible GPF when some assign methods
were called without parameters
* harbour/source/rdd/workarea.c
* initialize uiFalgs also when DBS_FLAGS is not set
* harbour/contrib/bmdbfcdx/bmdbfcdx1.c
* fixed hb_cdxSkipFilter() declaration - it should be 'static' function
* harbour/source/pp/ppcore.c
* harbour/source/compiler/ppcomp.c
+ added support for changing all -k? switches by #pragma, f.e.;
#pragma -ks+
#pragma -kM-
#pragma -kx1
#pragma -kJ0
* harbour/source/compiler/hbusage.c
* changed -ks description
* harbour/include/hbexpra.c
* harbour/include/hbexprb.c
* do not generate error message for negative indexes and
[] operators are used for simple types when -ks option
is used
* harbour/include/hbvmpub.h
* harbour/include/hbapi.h
* harbour/source/vm/hvm.c
* harbour/source/vm/extend.c
* harbour/source/vm/itemapi.c
* harbour/source/vm/memvars.c
+ added HB_IT_DEFAULT flags - it allows to check if item was changed
* harbour/source/vm/memvars.c
* harbour/include/hbvm.h
! fixed HB_IT_MEMOFLAG updating to be Clipper compatible. Here we are
not Clipper compatible in one place: in clodeblock local parameters
with memo values are marked as MEMO but if you leave function where
codeblock were created then Clipper during detaching removes MEMO
flag. In Harbour memo flag is kept.
* harbour/include/hbvm.h
* harbour/source/vm/classes.c
* harbour/source/vm/hvm.c
% improved speed of extended references used for SETGET methods
and overloaded [] operators
* harbour/include/hbapi.h
* harbour/include/hbsetup.ch
* harbour/source/compiler/hbcomp.c
* harbour/source/vm/hvm.c
* harbour/source/vm/macro.c
* harbour/source/vm/cmdarg.c
* removed HB_COMPAT_XHB flags - only one HB_COMPAT_XHB still exist
in HVM in hashes.c - it will be removed soon.
* harbour/source/common/hbverdsp.c
* removed information about xHarbour compatibility mode - it's not
longer used. We are emulating xHarbour behavior using external
XHB library and standard compiler/HVM features
* harbour/contrib/xhb/xhb.ch
* harbour/contrib/xhb/xhbfunc.c
* harbour/source/vm/arrayshb.c
* moved XHB_AINS(), XHB_ADEL() from XHB lib to HVM as HB_AINS(), HB_ADEL()
* harbour/contrib/xhb/xhb.ch
+ added #pragma -ks+
+ added transaltion for hb_enumindex( <enumvar> )
+ harbour/contrib/xhb/xhbenum.c
+ added emulation for HB_EUMMINDEX()
* harbour/contrib/xhb/xhbfunc.c
* do not add INET*() function wrappers for DOS builds or when
HB_NO_DEFAULT_INET macro is set
* harbour/contrib/xhb/xhbmsgs.c
* added comment
* harbour/contrib/Makefile
+ added TIP and XHB
* harbour/make_rpm.sh
* harbour/harbour.spec
* removed HB_COMPAT_XHB, --with tip, --with xhb
they are not longer necessary
|
||
|
|
af5038b272 |
2007-09-28 14:08 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/source/vm/itemapi.c
* harbour/source/vm/garbage.c
+ added extended item references - it's universal reference which
can be used by HVM for many different things without introducing
new item types
* harbour/include/hbexprb.c
* respect -ks compiler also with <op>=, --, ++ operators
* harbour/include/hbvm.h
* harbour/source/vm/hvm.c
* harbour/source/vm/classes.c
+ added extended references for SETGET methods used as object
item references
* use extended references to respect overloaded [] operator in
object item references
+ added support for passing indexes to string item characters
( @cValue[n] ) by reference using extended references - extension
enabled by -ks compiler switch and //flags:s RT switch.
+ added hb_vmPushItemRef()
* harbour/source/rdd/dbf1.c
* harbour/source/rdd/usrrdd/usrrdd.c
* use hb_vmPushItemRef()
* harbour/contrib/xhb/xhbcomp.prg
* harbour/contrib/xhb/xhbmsgs.c
* overload +, -, *, %, ^, ++, -- in string and numeric scalar
classes to emulated xHarbour behavior when 1 byte string is
used as numeric value.
Note: <nun> + <char1> in XHB lib gives numeric value when in
xHarbour character. But because <nun> <anyOtherOper> <char1>
in xHarbour gives numeric value then I guess that it's
xHarbour bug and I should not replicate it, f.e.:
proc main()
? 1+"A", 131-"A", 33 * 2, 132 / chr(2), 133 % "C"
return
* overload +, - in hash scalar class to emulated xHarbour behavior
for <hash> + <hash> and <hash> - <hash>
Seems that now we can remove HB_COMPAT_XHB flag from HVM and keep
Harbour compatibility only with -ks compile time switch and XHB
library. Please make some tests with Harbour compiled without
HB_COMPAT_XHB and xHarbour code using REQUEST XHB_LIB. It's possible
that I missed sth but some basic test shows that our emulation is
better then original and addresses places where xHarbour does not
work at all or gives strange results, f.e.:
#ifndef __XHARBOUR__
request XHB_LIB
#endif
proc main()
local h:={"ABC"=>123.45}
? h:abc
h:abc+=1000 ; ? h:abc
h["ABC"]+=1000; ? h:abc
p(@h:abc) ; ? h:abc
p(@h["ABC"]) ; ? h:abc
return
proc p(x)
x+=1000
return
or:
#ifndef __XHARBOUR__
request XHB_LIB
#endif
#include "hbclass.ch"
proc main()
local o:=myClass():new()
o:setget:="ABC"; ? o:setget
o:setget[2]:=42; ? o:setget
o:setget[2]+=42; ? o:setget
? o:setget[2]+=42; ? o:setget
?
o:var:="ABC"; ? o:var
o:var[2]:=42; ? o:var
o:var[2]+=42; ? o:var
? o:var[2]+=42; ? o:var
return
CREATE CLASS myClass
VAR var
METHOD setget SETGET
END CLASS
METHOD setget( xNewVal ) CLASS myClass
IF pcount() > 0
::var := xNewVal
ENDIF
RETURN ::var
* harbour/include/hbapirdd.h
* harbour/source/rdd/dbcmd.c
* harbour/source/rdd/workarea.c
* harbour/source/rdd/dbf1.c
* harbour/source/rdd/dbffpt/dbffpt1.c
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* harbour/source/rdd/dbfdbt/dbfdbt1.c
* harbour/source/rdd/usrrdd/usrrdd.c
* harbour/contrib/rdd_ads/ads1.c
* changed second parameter in RELTEXT() method to PHB_ITEM
Now RELTEXT() works like FILTERTEXT() and the size of
expression is not limited. It's a modification I wanted
to make for a long time and I think that now is a good
moment to make it together with HB_FT_* modifications
- rmoved not longer necessary HARBOUR_MAX_RDD_RELTEXT_LENGTH
* harbour/source/rtl/gttrm/gttrm.c
* small cleanup
|
||
|
|
7ce01c556f |
2007-09-15 22:35 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
+ HB_ISFIRSTIDCHAR() and HB_ISNEXTIDCHAR() macros
* harbour/source/rdd/wafunc.c
* changed FIELD->, _FIELD->, <alias>-> stripping from expressions
to respect shortcuts
* harbour/source/compiler/hbmain.c
* harbour/source/compiler/hbdead.c
* harbour/source/compiler/hbopt.c
* jump joining optimization changed to work also for code with line
numbers
|
||
|
|
13a2891d97 |
2007-08-31 03:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/source/vm/dynsym.c
+ added hb_dynsymIsFunction()
* harbour/source/rtl/filehb.c
* updated comment
* harbour/source/rtl/philes.c
* renamed HB_F_EOF() to HB_FEOF()
* harbour/source/rtl/scroll.c
* harbour/source/rtl/transfrm.c
* harbour/source/rtl/file.c
* formatting
* harbour/source/rtl/substr.c
* harbour/source/rtl/trim.c
% optimization
* harbour/source/rtl/typefile.prg
% use HB_ATOKENS() instead of static .prg function
* harbour/source/rtl/setkey.c
% optimization and protection aganst possible GPF when wrong array
is passed to HB_SETKEYSAVE()
* harbour/source/rtl/xhelp.c
! do not generate RT error when HELP symbol exist
(f.e. after PUBLIC HELP) but HELP() function doesn't
! keep reference in parametes passed by reference to __XHELP()
* use only PHB_DYNS instead of PHB_SYMB
* harbour/source/rtl/seconds.c
+ added WIN32 version borrowed from XHARBOUR
* harbour/source/rtl/trace.c
! protection against possible GPF when wrong parameters are passed
* harbour/source/rtl/samples.c
! protection against possible GPF when wrong parameters are passed
Warning! We have in this file few functions without HB_ prefix.
Some of them may create conflicts with future functions for TIMEDATE
items.
* harbour/source/rtl/inkey.c
+ added support for passing array with key codes as __KEYBOARD()
parameter, covered by HB_EXTENSION macro - this is xHarbour compatible
extension. I do not like it but we already had extension with numeric
parameters and probably it would be hard to remove it now and keep
__KEYBOARD() code clean so I decided to add support also for arrays
instead of creating new function and adding conditional code covered
by HB_COMPAT_XHB macro.
* harbour/source/rtl/setfunc.prg
* accept extended __KEYBOARD() parameters when HB_EXTENSION macro
is set.
|
||
|
|
feda39d689 |
2007-08-30 03:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/source/rtl/console.c
* changed hb_conOutAlt() from static to global function.
* harbour/include/hbapi.h
* harbour/source/common/hbver.c
+ added hb_verBuildDate()
* harbour/source/rtl/accept.c
! Fixed ACCEPT to respect SET CONSOLE and similar sets.
* harbour/source/rtl/hbgtcore.c
* harbour/contrib/libct/ctwin.c
! fixed chr(8) console output - it should erase character on the screen
* harbour/include/set.ch
* harbour/include/hbset.h
* harbour/source/rtl/set.c
* harbour/source/rtl/filesys.c
+ added _SET_TRIMFILENAME - when enabled low level hb_fs*() functions
strip trailing and leading spaces from file names to emulate DOS
like behavior - switch compatible with xHarbour
* harbour/source/rtl/run.c
* remove compiler type checking - if system() is not supported by
some platform/compiler then I'd prefer to exclude it explicitly.
* harbour/source/rtl/dircmd.prg
+ added support for extended DBF types and replaced some of
Bin2W() by ASC()
* harbour/source/rtl/defpath.c
* use OS_HAS_DRIVE_LETTER macro to detect if platform supports drive
letters
* harbour/source/rtl/philes.c
+ added HB_FCOMMIT(), HB_OSERROR(), HB_OSDRIVESEPARATOR()
Question: why we have HB_F_EOF() instead HB_FEOF()
* harbour/source/rtl/oldbox.c
* harbour/source/rtl/box.c
! fixed __BOX() to be Clipper compatible
* harbour/source/rtl/math.c
* harbour/source/rtl/dateshb.c
* formatting and some minor improvements
* harbour/source/rtl/isprint.c
* harbour/source/vm/itemapi.c
* harbour/source/rtl/ampm.c
* harbour/source/rtl/inkey.c
* harbour/source/rtl/gete.c
* harbour/source/rtl/fkmax.c
* harbour/source/rtl/langapi.c
* harbour/source/rtl/colorind.c
* harbour/source/rtl/mouseapi.c
* harbour/source/rtl/readvar.prg
* harbour/source/rtl/devoutp.prg
* harbour/source/rtl/readkey.prg
* code checking and formatting
! some minor fixes
% some speed improvements
* harbour/source/rtl/menuto.prg
* harbour/source/rtl/radiogrp.prg
* harbour/source/rtl/listbox.prg
* harbour/source/rtl/checkbox.prg
* harbour/source/rtl/pushbtn.prg
* harbour/source/rtl/radiobtn.prg
* code checking and formatting
! added fixes borrowed from xHarbour
! some other fixes
% some speed improvements
* harbour/source/rtl/filehb.c
+ added commment
* harbour/source/rtl/transfrm.c
! fixed integer numbers transformation when _SET_FIXED is on to
be Clipper compatible
* harbour/source/rtl/version.c
+ added HB_PCODEVER() and HB_BUILDDATE()
* harbour/source/rtl/copyfile.c
! fixed __COPYFILE() - source and destination files should respect
_SET_DEFAULT
|
||
|
|
a455bf0d4c |
2007-08-25 12:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/source/vm/arrays.c
* harbour/source/vm/extend.c
! fixed hb_stor*() functions return value to be Clipper compatible.
These functions should return 1 _ONLY_ when the operation is really
successful; otherwise, they return zero.
+ added hb_storclen_buffer(), hb_arraySetPtrGC()
* harbour/config/darwin/gcc.cf
* harbour/config/hpux/gcc.cf
* harbour/config/dos/rsx32.cf
* harbour/config/os2/gcc.cf
* harbour/config/sunos/gcc.cf
* harbour/config/w32/gcc.cf
* harbour/config/w32/rsxnt.cf
+ added rtl library after gt drivers for linker which do not support
backward references
|
||
|
|
c775f56f50 |
2007-08-20 15:50 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbexprb.c
* do not generate error for QSELF()[...] - Clipper allows such
operation and because some valid Clipper code needs it then
I disabled error message.
* harbour/common.mak
* harbour/source/rtl/Makefile
+ harbour/source/rtl/einstvar.prg
+ added undocumented CA-Cl*pper function _eInstVar() used to validate
variable type in assign messages.
* harbour/include/hbapi.h
* harbour/source/vm/arrays.c
* changed 'char *' to 'const char *' in hb_arraySetC() and hb_arraySetCL()
* harbour/source/rdd/dbcmd.c
* cleaned DBSKIPPER() code
* harbour/source/rtl/browdb.prg
* use written in C DBSKIPPER() function instead of static .prg Skipped()
when HB_COMPAT_XPP macro is enabled
* harbour/source/rtl/browse.prg
! fixes in BROWSE() function:
! displaying box characters
+ added CL53 compatible mouse actions
+ added mouse wheel actions
+ added support for deleting records (K_DEL)
+ added support for edit mode
+ added support for append mode
|
||
|
|
85ffaae73a |
2007-07-30 18:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompat.ch
+ added #xtranslate ISPOINTER( <xValue> )
* simplified bit operator translations
* harbour/include/hbapi.h
+ added #define hb_itemPutCStatic(...) hb_itemPutCConst(...)
* harbour/include/hbapiitm.h
- removed #define hb_retclenAdoptRaw(...) hb_retclen_buffer(...)
it's not _exactly_ the same and in some cases it cannot be
replaced so users should know what exactly they are doing
* harbour/source/rtl/gttrm/gttrm.c
+ added some #ifdef OS_UNIX_COMPATIBLE for future non *nix ports
* harbour/source/rdd/dbf1.c
! added RT error when someone tires to create DBF with more then
2046 fields - without it corrupted files were created or GPF
appeared
* harbour/contrib/ole2/w32ole.c
* changed hb_retclenAdoptRaw() to hb_retclen_buffer()
|
||
|
|
113866e6a1 |
2007-06-20 21:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbgtinfo.ch
+ added GTI_ADDKEYMAP and GTI_DELKEYMAP
* harbour/include/hbapicdp.h
* harbour/source/rtl/cdpapi.c
+ added const to declarations of some function parameters
* harbour/include/hbgtcore.h
* harbour/source/rtl/Makefile
+ harbour/source/rtl/gtchrmap.c
* harbour/source/rtl/gtcrs/Makefile
- harbour/source/rtl/gtcrs/chrmap.c
* harbour/source/rtl/gtcrs/gtcrs.c
* harbour/source/rtl/gtcrs/gtcrs.h
* hb_gt_chrmapinit() common function now for different GT drivers
* minor cleanup in GTCRS code
* harbour/include/hbcompat.ch
+ added some new translation rules
* harbour/include/hbapi.h
* cleanup comment
* harbour/source/pp/ppcore.c
! fixed line numbering when errors are reported in different order
due to preprocessing extended code block
+ harbour/source/rtl/gttrm
+ harbour/source/rtl/gttrm/Makefile
+ harbour/source/rtl/gttrm/gttrm.c
+ added new GT driver - it's terminal driver like GTCRS and GTSLN
but it does not use any external library like [N]CURSES or SLANG
so it can be compiled in nearly all POSIX systems. It's not such
flexible like curses or slang base drivers because instead of
using termcap/terminfo databases to extract terminal capabilities
it uses some hard coded sequences for few terminals (now Linux, ANSI,
XTERM) but it should cover users requests in 95% of cases. Terminals
I tested are quite well supported (GTTRM works even better then GTCRS
or GTSLN and is much faster in full screen mode - 2-4 times).
I noticed that most terminal emulators works much better with GTTRM
then with GTCRS or GTSLN due to limited list of used escape sequences
so some minor differences in each terminal implementation are not
noticeable. GTTRM automatically detects ISO/UTF8 terminal mode and
chose valid output what should also help *nix users.
Now I would like to ask BSD and MacOSX users to test GTTRM in these
systems with pure text console and XWindow terminal emulators. I'm
interesting in any problems you may found.
* harbour/source/vm/hvm.c
+ added protection for possible GPF caused by wrong .prg code
* harbour/source/vm/maindllp.c
% store function addreses in static variables to improved execution
speed
+ added support for compilers which does not use "_" as function prefix
+ added support for using with harbour*.dll
* harbour/source/vm/memvars.c
+ added new method of detaching enumerators and array item references
covered by HB_COMPAT_XHB macro. xHarbour does not work in such way
but the final results are similar.
* harbour/source/vm/dynlibhb.c
+ added protection against passing wrong pointer items to HB_LIB*()
functions
* harbour/source/common/reserved.c
* cleaned warning
* harbour/bin/hb-func.sh
* harbour/config/hpux/global.cf
* harbour/config/darwin/global.cf
* harbour/config/linux/global.cf
* harbour/config/sunos/global.cf
* harbour/config/bsd/global.cf
+ added GTTRM to library list
|
||
|
|
5c85215870 |
2007-06-12 23:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/rdd_ads/ads1.c
* cleaned BCC warning
* harbour/include/hbapi.h
* harbour/source/vm/arrays.c
+ added set of hb_arraySet*() functions - I hope they will help 3-rd
party developers to eliminate using C stack level HB_ITEM and
reduce usage of potentially danger function like hb_arrayGetItemPtr()
* harbour/include/hbapiitm.h
* harbour/source/vm/itemapi.c
+ added hb_itemReturnRelease()
* harbour/include/hbcompat.ch
+ added hb_pvalue() <-> pvalue() translations
* harbour/source/vm/pvalue.c
+ added support for 2-nd parameter for assugb operation, f.e. now
hb_pvalue( 3, "abc" )
sets "abc" to 3-rd function parameter
* harbour/source/compiler/gencc.c
* harbour/source/compiler/hbopt.c
! fixed two buggy optimizations
|
||
|
|
bedaef925f |
2007-05-28 09:50 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/make_xmingw.sh
* harbour/source/pp/Makefile
* recent xHarbour fixes for MinGW Linux->W32 cross build by Phil Krylow
with small modifications
* harbour/config/rules.cf
+ added rules for C++ files
* harbour/include/hbapi.h
* harbour/source/vm/arrays.c
+ added hb_arraySetForward()
* harbour/include/hbapi.h
* harbour/source/rtl/strmatch.c
+ added hb_strMatchFile() - compare two strings using platform dependent
rules for file matching, respects platform dependent wildcards
+ added hb_strMatchCaseWildExact() - compare two strings using pattern
with wildcard (?*) ignoring the case of the characters - patern have
to cover whole string
* changed hb_strMatchRegExp() to use real reguar expresions, if build
does not support regex then redirected to hb_strMatchWildExact()
- removed not longer used hb_strMatchDOS() - in fact it was neither DOS
nor classic wildcards (?*) compatible
* harbour/source/common/hbstr.c
! casting to avoid possible problem on platforms where toupper does not
accept negative char value
* harbour/include/hbcomp.h
* harbour/source/compiler/hbcomp.c
* harbour/source/compiler/hbmain.c
* minor modifications in cleanup functions
* harbour/source/rtl/hbffind.c
* use hb_strMatchFile()
* harbour/source/vm/memvars.c
* use hb_strMatchCaseWildExact() instead of hb_strMatchRegExp()
I still keep the hack which translates any mask starting with '*'
to "*" but if you think that we should fully respect wildcards
patterns then we should remove it from function hb_memvarGetMask()
Opinions?
|
||
|
|
0724963ab3 |
2007-05-26 09:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/pp/ppcore.c
! fixed bug reported by Lorenzo
* harbour/contrib/rdd_ads/ads1.c
* changed static variable name from iSetListenerHandle to
s_iSetListenerHandle to keep common naming convention
* harbour/include/hbapi.h
* harbour/source/vm/hashes.c
* harbour/source/vm/hashfunc.c
* harbour/source/vm/hvm.c
+ added new 3-rd parameter to hb_hashGetItemPtr() to control
independently hash autoadd behavior in access/assign operation
* harbour/include/hbrdddbf.h
* harbour/include/hbrddntx.h
* harbour/source/rdd/dbfntx/dbfntx1.c
* moved static variables holding RDDI_* settings to RDDNODE data so
they can be set separately for each RDD which inherits from DBFNTX
* harbour/source/vm/classes.c
+ added disabled code to access hash items using messages
* harbour/source/vm/garbage.c
* comment
|
||
|
|
541d776d85 |
2007-05-25 01:35 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/include/hbexpra.c
* harbour/source/macro/macro.y
* harbour/source/macro/macro.yyc
* harbour/source/macro/macrolex.c
* harbour/source/vm/macro.c
- removed hb_macroIsIdent()
+ added hb_macroTextSymbol()
! fixed old bug (it exists in all [x]Harbour versions) in macrocompiler
which caused HVM stack corruption
* generate from lexer symbols which are well formatted
(uppercase and size <= HB_SYMBOL_NAME_LEN)
% use hb_dynsymGetCase() instead of hb_dynsymGet()
% some minor speed improvement
* harbour/source/rtl/gtwin/gtwin.c
% use hb_dynsymFind() instead of hb_dynsymFindName()
* harbour/source/rdd/dbcmd.c
* harbour/source/rdd/wafunc.c
* reenabled by default strict clipper compatible behavior for
code select(), dbSelectArea() and alias allocating
* harbour/source/rdd/dbf1.c
+ added DBI_ISENCRYPTED for tables encrypted by SIX3
* harbour/source/rtl/hbinet.c
! added missing break (Ron fix from xHarbour)
|
||
|
|
75bd21860c |
2007-05-22 01:45 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
* harbour/include/hbapicls.h
* harbour/include/hbcomp.h
* harbour/include/hbvm.h
* harbour/include/hbvmpub.h
* harbour/source/compiler/genc.c
* harbour/source/compiler/gencc.c
* harbour/source/compiler/gencli.c
* harbour/source/compiler/hbdead.c
* harbour/source/compiler/hbfix.c
* harbour/source/compiler/hblbl.c
* harbour/source/compiler/hbopt.c
* harbour/source/compiler/hbpcode.c
* harbour/source/compiler/hbstripl.c
* harbour/source/debug/dbgentry.c
* harbour/source/rdd/wafunc.c
* harbour/source/rtl/itemseri.c
* harbour/source/rtl/gtsln/gtsln.c
* harbour/source/vm/classes.c
* harbour/source/vm/dynsym.c
* harbour/source/vm/hvm.c
* harbour/source/vm/memvars.c
* harbour/source/vm/runner.c
* casting: changed some 'char *' to 'const char *', added const to some
other declarations, added workaround for GCC warnings about
dereferencing pointer with strict-aliasing optimization, etc.
|