* harbour/source/rdd/wacore.c
* harbour/source/vm/classes.c
* harbour/include/hbapirdd.h
* harbour/source/compiler/hbmain.c
* updated HB_TRACE messages and some minor cleanups
* harbour/source/rdd/dbcmd.c
! fixed initialisation of DBRELINFO dbSetRelation() - thanks to Antonio
for locating the problem
* harbour/source/rtl/idle.c
* increase timeout in nanosleep() from 1 microsecond to 1 millisecond
- removed some wrong comment
* harbour/contrib/Makefile
* harbour/contrib/bmdbfcdx/Makefile
* harbour/source/rdd/Makefile
! fixed GNU make compilation
* harbour/include/hbapifs.h
* harbour/source/rtl/filesys.c
+ added support for DOS/Windows DENY_* flag emulation in POSIX
systems using BSD locks. So far such emulatin was done with
standard POSIX locks. The new emulation can be enabled by setting
HB_USE_BSDLOCKS and disabled by HB_USE_BSDLOCKS_OFF. By default
it's enabled in Linux and BSD* based systems.
Please not that it BSD locks work in differ way then POSIX ones.
They are bound with file handle and process ID not i-node and PID.
It will allow to synchronize even single process but it will not
work in NFS and some old BSD and Linux kernels. This synchronization
cannot be used also between different platforms. If someone needs
such synchronization then he should build Harbour on all platforms
with HB_USE_BSDLOCKS_OFF and HB_USE_SHARELOCKS with valid multi
platform lock offset
* harbour/source/rdd/dbcmd.c
* removed all explicit NETERR setting - now it can be set only
by NETERR() function (executed by default errorsys)
* changed ordListAdd()/dbSetIndex() - now they return logical value
with information about success
* harbour/source/rdd/wafunc.c
* changed hb_rddOpenTable()/hb_rddCreateTable() to make dbUseArea()/
dbCreate() more Clipper compatible - it's not exact Clipper behavior
but I intentionally do not want to replicate some strange for me
things, f.e. I do not know why Clipper ignores RDDNAME when it has
only one character
+ harbour/tests/tstuse.prg
+ test code for dbUseArea()
* harbour/common.mak
* harbour/include/hbapirdd.h
- harbour/include/hbrddwrk.h
* harbour/source/rdd/Makefile
+ harbour/source/rdd/wacore.c
+ harbour/source/rdd/wafunc.c
* harbour/source/rdd/workarea.c
* cleaned RDD code:
* the default work area implementation from which each RDD inherits
and RDD management is now in workarea.c file - this part will be
common for all threads in future MT version
* the code to mange workareas and aliases moved to wacore.c - this
code uses some static variables which will be moved to HVM stack
in MT version
* helper RDD functions thread independent moved to wafunc.c
* harbour/source/rdd/dbcmd.c
* removed RDD/WorkArea management code - only independent HB_FUNCs
left. IMHO it will be good to divide this file into few ones.
* changed dbCreate() and dbUseArea() to return logical value
* harbour/config/global.cf
- removed nulsys from linked library list - it should not be here
because it can confuse some linkers and wrong library will be
created
* harbour/contrib/rdd_ads/ads1.c
* harbour/source/rdd/dbf1.c
* harbour/source/rdd/delim1.c
* harbour/source/rdd/sdf1.c
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* harbour/source/rdd/dbfdbt/dbfdbt1.c
* harbour/source/rdd/dbffpt/dbffpt1.c
* harbour/source/rdd/dbfntx/dbfntx1.c
* harbour/source/rdd/nulsys/nulsys.c
* updated for recent modifications in RDD API
* harbour/include/hbextern.ch
- removed __RDDSETDEFAULT() - this function was necessary with old
rdd register code and we not not need it for few years. It's not
Clipper function so I do not see any reason to keep it but if you
want we can add wrapper to standard RDDSETDEFAULT()
* harbour/source/rdd/hbsix/sxcompr.c
+ added workaround for SIX3 bug which I intentionally replicated in
[x]Harbour but it may cause data corruption so IMHO it will be better
to fix it.
* harbour/source/rtl/errorsys.prg
* added default action for EG_LOCK - it's Clipper compatible behavior
but done in differ way. Due to some differences in linker we are
using we cannot exactly replicate Clipper behavior because it will
not work on some platforms as expected so I decided to add it here.
I think it's even more Clear then the trick with source/sys/ntxerr.prg
done by Clipper. Many people do not even knows about it.
* harbour/source/rtl/gtcrs/chrmap.c
* changed environment variable name from HB_CHRMAP to HB_CHARMAP to
be compatible with description in default map file
* harbour/source/rtl/set.c
* harbour/include/set.ch
* harbour/include/hbset.h
* added support for SET EOL <x> as in xHarbour
* harbour/source/rtl/mlcount.c
* fixed count for softcr
* harbour/include/hbcompat.ch
* added compatibility for isregex(string) function
* harbour/contrib/tip/cgi.prg
* changed return of StartSession to Self
* harbour/source/rtl/diskspac.c
! Fixed to return free space instead of disk size under Unix OSes.
* harbour/source/rtl/tget.prg
! Fixed checking for invalid GET var types.
! More C5x compatible behaviour for invalid types.
! ::UnTransform() fixed when not in focus.
- ::UnTransform() cBuffer incompatible parameter removed.
! ::Reform() probably made more compatible.
+ ::PosInBuffer() XBase++ compatible method implemented.
(but not tested or compared with XBase++)
! ::Minus assignment fixed.
! ::Clear assignment fixed.
! ::Changed assignment fixed.
! ::Buffer assignment fixed.
! ::Block assignment fixed.
! ::Name assignment fixed.
! ::UnTransform() extra parameter removed.
! ::UpdateBuffer() minor fix when not in focus.
! ::Reform() made more compatible.
% ::SetFocus() some superfluous stuff removed.
% ::SetFocus() some fixes, cleanups.
! ::KillFocus() now sets ::TypeOut properly.
! ::VarPut(), ::VarGet() fixed for invalid ::Subscript contents.
! ::VarPut(), ::VarGet() fixed for invalid ::Block content.
! ::Pos rewritten to be fully compatible.
! ::ColorSpec made fully compatible.
! ::UnTransform() fixed when not in focus.
! ::UnTransform() fixed handling "YL" in string pictures.
% ::UnTransform() minor optimization.
% ::PutMask() some hacks removed.
! ::PutMask() invalid types handling.
! ::BackSpace() fixed when not in focus.
! ::Delete() fixed when not in focus.
! ::DeleteAll() fixed when not in focus.
! ::IsEditable() fixes.
! ::Picture fixes for invalid types, assignment behaviour.
! ::Picture hacks removed.
! Non-assignable vars made READONLY. (will generate
different RTEs than in CA-Cl*pper due to the more
refined oo engine in Harbour.)
! ::BadDate changed to be a METHOD.
! ::ToDecPos fixes.
! ::Row assigment and behaviour fixes.
! ::Col assigment and behaviour fixes.
+ Several comments and NOTEs added.
* harbour/include/hbapigt.h
* harbour/source/rtl/gtapi.c
* harbour/source/rtl/setcolor.c
+ hb_gtColorsToString() public API added.
+ hb_NToColor() function added to convert a single color
value (returned by hb_ColorToN()) back to a string.
Used in TGet():ColorSpec implementation.
* harbour/source/vm/fm.c
* "Blocks" -> "Block(s)"
* harbour/tests/rto_get.prg
+ Added many test cases.
* harbour/source/vm/cmdarg.c
+ Added support to use "--" instead of "//" for internal
command line options.
* harbour/source/rtl/tbcolumn.prg
+ Formatting.
* harbour/source/rtl/tbrowse.prg
+ Added Harbour (undocumented) extension NOTE.
* harbour/include/Makefile
- harbour/include/usrrdd.ch
+ harbour/include/hbusrrdd.ch
* harbour/source/rdd/usrrdd/usrrdd.c
* harbour/source/rdd/usrrdd/rdds/dbtcdx.prg
* harbour/source/rdd/usrrdd/rdds/fcomma.prg
* harbour/source/rdd/usrrdd/rdds/fptcdx.prg
* harbour/source/rdd/usrrdd/rdds/hscdx.prg
* harbour/source/rdd/usrrdd/rdds/rlcdx.prg
* harbour/source/rdd/usrrdd/rdds/smtcdx.prg
* harbour/contrib/pgsql/pgrdd.prg
! Changed public header filename to comply with the "hb*.ch" rule.
(namespace protection)
* harbour/source/rtl/tget.prg
* harbour/tests/Makefile
+ harbour/tests/rto_get.prg
; Fixed lots of minor bugs and differences between
CA-Cl*pper and Harbour Get system. The following
methods got most of the fixes:
+ ::Reform() undocumented C52 method added.
! ::Display() fixed when not having focus. (old TOFIX)
! ::UpdateBuffer() fixed when not having focus.
! ::SetFocus() fixed to do nothing when already having focus.
! ::KillFocus() made almost fully compatible.
(the ::Assign() call is still raising questions)
! ::Reset() made compatible.
! ::VarPut() fixed when not having focus.
! ::Undo() made compatible.
! ::Type() behaviour now fully C5x compatible.
! ::Block() assignment now fully C5x compatible.
! ::OverStrike() fixed RTE when not having focus.
! ::Insert() fixed RTE when not having focus.
! ::ToDecPos() fixed to set ::Changed.
! ::PutMask() fixed to not pad the string to ::nMaxLen to
be fully compatible with C5x.
! ::DecPos, ::Pos initialization made compatible.
(here the CA-Cl*pper NG is wrong in stating that these
vars ever hold NIL, they don't and they hold 0s instead)
! ::Minus more compatible but still far from perfect.
% ::ParsePict() integrated into ::Picture()
- ::HasScroll() internal method removed.
! ::HitTest() guarded with HB_COMPAT_C53.
+ Propely marked Get vars/methods as PROTECTED/VISIBLE.
% Several minor optimizations, meaningless code elimination.
; Formatting, removed many old commented code snippets.
+ Added regression style tests for basic Get methods.
All the above fixes was the result of comparing
Get object var dumps after calling different methods
in different order.
; Notice that there could be new/rare cases when any of
the above methods would need more fixes, in that case
the regression test is there to check if the existing
behaviour stayed the same after the fix and it's also
very useful to add the new cases to the test.
Pls report any problems (with reduced examples), TGet() is
still far from being perfect, but should be more compatible
after these changes.
* harbour/contrib/gd/gdwrp.c
* harbour/contrib/libmisc/hb_f.c
* harbour/contrib/samples/dbf.c
* harbour/contrib/samples/time.c
* harbour/doc/es/hb_apiln.txt
* harbour/include/hbapicdp.h
* harbour/include/hbapilng.h
* harbour/source/rdd/dbcmd.c
* harbour/source/rdd/dbnubs.c
* harbour/source/rdd/hsx/cftsfunc.c
* harbour/source/rtl/accept.c
* harbour/source/rtl/defpath.c
* harbour/source/rtl/oemansi.c
* harbour/source/rtl/pad.c
* harbour/source/rtl/shadow.c
* harbour/source/rtl/trim.c
* harbour/source/vm/debug.c
* changed HB_FUNCNAME( <name> )() to HB_FUNC_EXEC( <name> )
* harbour/utils/hbrun/Makefile
* changed order of linked libraries
* harbour/source/rtl/empty.c
* changed EMPTY( <symboItem> ) - not it returns .T. when <symboItem>
is not a function symbol
* harbour/source/rtl/errorapi.c
% replaced all hb_dynsym{Find,Get}*() by static variables initialized
at HVM startup variables - it reduce the cost of creating and
initializing error object about 50%
* harbour/include/hbapifs.h
* harbour/source/rtl/fssize.c
* harbour/source/rtl/filesys.c
* harbour/source/rtl/hbffind.c
* changed to use 64bit file API
+ harbour/contrib/libct/ctextern.ch
+ added list with EXTERN requests for our CT3 function. List generated
automatically from final binary CT lib created on Linux.
* harbour/source/codepage/cp_tpl.c
+ Added NOTE about the fact that hb_Translate()
(and hb_cdpTranslate()) would only work properly
if all codepages for the same language are using the
exact same number of lowercase/uppercase cp chars
in the exact same order.
* harbour/source/codepage/Makefile
* harbour/common.mak
* harbour/source/codepage/cphu852.c
* harbour/source/codepage/cphu852s.c
* harbour/source/codepage/cphuiso.c
+ harbour/source/codepage/cphuisos.c
* harbour/source/codepage/cphuwin.c
+ harbour/source/codepage/cphuwins.c
! Synced HU WIN and HU ISO codepage lower/uppercase
strings with HU 852, so that hb_Translate() works
properly. (this means there are now several duplicate
chars included in the WIN/ISO versions, along with
a non-HU char, all just needed to stay compatible with
original CA-Cl*pper HU/852 index ordering and keep
hb_Translate() working at the same time.)
IMO, we'd need to introduce a separate "collation"
string in each cp file to detach index ordering
from upper/lowercase and codepage translation without
any hacks, since as this example shows these two
are not always in sync. (or, as an alternative we might
want to make codepage translation more sophisticated,
like converting first to unicode and convert back to
the other codepage from unicode, but that leads a bit
further.). (If I'm missing something, pls don't hesitate
to clarify)
+ Added SixDriver compatible HU ISO/WIN codepage files
for the reasons described above.
* harbour/include/hbapicdp.h
* harbour/source/rtl/cdpapi.c
* harbour/source/codepage/cpbg866.c
* harbour/source/codepage/cpbgiso.c
* harbour/source/codepage/cpbgwin.c
* harbour/source/codepage/cpcs852.c
* harbour/source/codepage/cpcsiso.c
* harbour/source/codepage/cpcskam.c
* harbour/source/codepage/cpcswin.c
* harbour/source/codepage/cpeldos.c
* harbour/source/codepage/cpelwin.c
* harbour/source/codepage/cpesdos.c
* harbour/source/codepage/cpesmwi.c
* harbour/source/codepage/cpeswin.c
* harbour/source/codepage/cpfrdos.c
* harbour/source/codepage/cpgedos.c
* harbour/source/codepage/cpgewin.c
* harbour/source/codepage/cphr1250.c
* harbour/source/codepage/cphr437.c
* harbour/source/codepage/cphr852.c
* harbour/source/codepage/cphu852.c
* harbour/source/codepage/cphu852s.c
* harbour/source/codepage/cphuiso.c
* harbour/source/codepage/cphuwin.c
* harbour/source/codepage/cpit437.c
* harbour/source/codepage/cpit850.c
* harbour/source/codepage/cpitisb.c
* harbour/source/codepage/cpitiso.c
* harbour/source/codepage/cpltwin.c
* harbour/source/codepage/cppl852.c
* harbour/source/codepage/cppliso.c
* harbour/source/codepage/cpplmaz.c
* harbour/source/codepage/cpplwin.c
* harbour/source/codepage/cppt850.c
* harbour/source/codepage/cpptiso.c
* harbour/source/codepage/cpru866.c
* harbour/source/codepage/cprukoi.c
* harbour/source/codepage/cpruwin.c
* harbour/source/codepage/cpsl437.c
* harbour/source/codepage/cpsl852.c
* harbour/source/codepage/cpsliso.c
* harbour/source/codepage/cpslwin.c
* harbour/source/codepage/cpsrwin.c
* harbour/source/codepage/cptrdos.c
* harbour/source/codepage/cptrwin.c
* harbour/source/codepage/cpua866.c
* harbour/source/codepage/cpuakoi.c
* harbour/source/codepage/cpuawin.c
* harbour/source/codepage/uc1250.c
* harbour/source/codepage/uc1251.c
* harbour/source/codepage/uc1253.c
* harbour/source/codepage/uc1254.c
* harbour/source/codepage/uc1257.c
* harbour/source/codepage/uc737.c
* harbour/source/codepage/uc850.c
* harbour/source/codepage/uc852.c
* harbour/source/codepage/uc857.c
* harbour/source/codepage/uc866.c
* harbour/source/codepage/uc88591b.c
* harbour/source/codepage/uc8859_1.c
* harbour/source/codepage/uc8859_2.c
* harbour/source/codepage/uc8859_5.c
* harbour/source/codepage/uckam.c
* harbour/source/codepage/uckoi8.c
* harbour/source/codepage/uckoi8u.c
* harbour/source/codepage/ucmaz.c
! #define namespace issue in public API header file
corrected:
CPID_* -> HB_CPID_*
UNITB_* -> HB_UNITB_*
* harbour/source/compiler/gencobj.c
! Fixed warning.
* harbour/source/rdd/dbcmd.c
! update NetErr() in ordListAdd()
If you know other then dbCreate()/dbUseArea() functions which reset
NetErr() flag in Clipper then please report them. We will have to
update our functions (dbSetIndex() is a wrapper to ordListAdd() so
you nay not report it ;))
* harbour/source/rtl/gtstd/gtstd.c
* do not stop Harbour process when controlling terminal has TOSTOP
attribute set (as long as no direct out is done)
* harbour/source/rtl/tclass.prg
* harbour/source/rtl/terror.prg
* harbour/source/rtl/tobject.prg
* set valid class function
* harbour/source/rtl/tmenuitm.prg
* harbour/source/rtl/tpopup.prg
! I think that no one has been checking what these code does for
very long time. Both MenuItem() and PopUp() on each call tries
to create new _CLASSES_ called "MenuItem" and "PopUpMenu"
instead of creating only new instance of these classes (new objects)
Updated to use standard hbclass.ch commands. If possible try
to not create classes manually and always use documented commands
from hbclass.ch
* harbour/include/hbapi.h
* harbour/source/vm/dynsym.c
* changed some declarations from 'char *' to 'const char *'
* harbour/include/hbapicls.h
* harbour/source/vm/classes.c
* changed some declarations from 'char *' to 'const char *'
+ added hb_clsFuncName(), hb_clsFindClass(), hb_objSetClass()
* harbour/source/rtl/itemseri.c
! fixed some stupid typos in previous commit
* added support for serialization of object variables - I'm
not sure it's good idea anyhow people ask about it so we
have it. Probably we should add some special method like
OnError(), f.e.: OnRestore() or sth like that and execute
it after deserialization or object cloning.
* harbour/source/rtl/hbinet.c
! Warnings fixed for Darwin (gcc 4.0.1 OSX 10.4.9 PPC)
* harbour/source/rtl/idle.c
! Fixed releasing idle CPU cycles. (thanks Przemek)
The committed method was tested against usleep( 1 )
and usleep( 100 ) and found to work perfect as
opposed to the usleep() calls.
* harbour/source/rtl/tget.prg
! Adjusted my old TOFIX note.
* harbour/include/hbcompat.ch
* always translate hash H*() function to HB_H*() ones even if
HB_COMPAT_XHB is set. Code which uses HB_H*() functions can
be linked with any Harbour builds
* harbour/include/hbapi.h
* harbour/source/vm/hashes.c
+ added hb_hashId()
* harbour/source/pp/ppcore.c
+ added #ytranslate, #ycommand, #yuntranslate, #yuncommand
case sensitive version of corresponding #x* directives
* harbour/source/rtl/itemseri.c
+ added support for serialization arrays and/or hashes with cyclic
references
* harbour/source/debug/debugger.prg
* removed some not longer necessary GTWVW extensions
* harbour/source/rtl/hbgtcore.c
* harbour/contrib/libct/ctwin.c
+ added support for GTI_{NEW,GET,SET}WIN in CTWIN
Now debugger can be used with CTWIN without any problems
* harbour/common.mak
* harbour/bin/pack_src.sh
* harbour/source/vm/Makefile
- harbour/source/vm/dbgentry.c
* harbour/source/debug/Makefile
+ harbour/source/debug/dbgentry.c
* moved dbgentry.c from HVM to DEBUG library
* harbour/source/rtl/hbgtcore.c
+ added basic version of GTI_{NEW,GET,SET}WIN
* harbour/include/hbapidbg.h
* harbour/source/vm/hvm.c
* harbour/source/debug/debugger.prg
* harbour/source/debug/dbgentry.c
+ added set of .prg level functions (HB_DBG_*()) to control
debugger internals
* eliminated HB_INLINE() calls
* use to switch between user and debugger screen
* cleaned debugger interface in HVM, removed unused variables
added one common debug function
* harbour/source/debug/dbgtarr.prg
! Fixed unclosed #if construct.
Question: What does HB_NO_READDBG do?
* harbour/source/rtl/tget.prg
! Removed :Assign() call from :UpdateBuffer() to close
the functionality to CA-Cl*pper.
* harbour/common.mak
* harbour/source/rtl/Makefile
+ harbour/source/rtl/valtoexp.prg
+ added HB_VALTOEXP() and HB_CSTR()
* harbour/source/debug/dbgthsh.prg
* harbour/source/debug/debugger.prg
* replaced CSTR() with HB_CSTR() and SETLASTKEY() with HB_SETLASTKEY()
now debugger can be used without CT and TIP libraries
* harbour/include/hbgtinfo.ch
* harbour/source/rtl/hbgtcore.c
+ added GTI_ISMULTIWIN, GTI_GETWIN, GTI_SETWIN, GTI_NEWWIN
and TODO note - it's not finished yet, work in progress
* harbour/source/rtl/tget.prg
! Get method UpdateBuffer() fixed to be effective only
when the object has focus (as per the C52 docs and
Lorenzo's report).
* harbour/source/debug/debugger.prg
! Fixed a few compile errors.
! Reapplied (and extended) a former fix regarding
the proper handling of the filenames.
* harbour/source/rtl/tbrowse.prg
; Cosmetic.
* harbour/include/hbapi.h
+ harbour/include/hbapidbg.h
* harbour/include/hbcomp.h
* harbour/include/hbcompdf.h
* harbour/include/hbdebug.ch
* harbour/include/hbdefs.h
* harbour/source/compiler/Makefile
* harbour/source/compiler/genc.c
+ harbour/source/compiler/hbdbginf.c
* harbour/source/compiler/hbmain.c
* harbour/source/debug/debugger.prg
* harbour/source/rtl/altd.prg
* harbour/source/vm/Makefile
+ harbour/source/vm/dbgentry.c
* harbour/source/vm/debug.c
* harbour/source/vm/hvm.c
+ added xHarbour compatible low level debugger code
Without some small exceptions like my hbdbginf.c most of
the code created by Phil Krylov <phil a t newstar.rinet.ru>
and borrowed from xHarbour with some small modifications.
* harbour/source/rtl/gete.c
! fixed memory leak in GETENV()
* harbour/source/compiler/hbmain.c
! fixed memory leak when -build or -credit switches were used
* harbour/source/rtl/persist.prg
* harbour/source/rtl/tbrowse.prg
* harbour/source/rtl/teditor.prg
% Replaced __StrT*() internal functions with native Harbour
extensions hb_Token*().
% Removed workarounds for problems with the previous implementation
of the __StrT*() functions.
Please test TEditor (all) and TBrowse class (header/footer line splitting).
* harbour/common.mak
* harbour/source/lang/Makefile
+ harbour/source/lang/msgnl.c
+ added Dutch language module by Rene Koot
* harbour/config/os2/gcc.cf
* commented out -DTCPV40HDRS in CFLAGS
* harbour/make_gnu.cmd
* added commented by default: set C_USR=-DTCPV40HDRS %C_USR%
* harbour/contrib/libnf/menu1.prg
* harbour/contrib/libnf/pegs.prg
* harbour/contrib/libnf/popadder.prg
* harbour/contrib/libnf/savesets.prg
* harbour/source/debug/dbgmenu.prg
+ added missing #include "common.ch" for HB_SYMBOL_UNUSED()
* harbour/include/hbclass.ch
* renamed __HB_SYMBOL_UNUSED() to __HB_CLS_SYMBOL_UNUSED() to keep
the same name convention as for other hbclass definitions/commands
* harbour/include/hbsetup.h
* added commented by default #define HB_PP_MULTILINE_STRING
with small description
* harbour/source/rtl/net.c
* added missing #include(s) for OS2 build
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* formatting
* harbour/contrib/tip/Makefile
- harbour/contrib/tip/atokens.c
* removed HB_ATOKENS()
- harbour/source/rtl/teditorl.c
- removed __STRTOKEN(), __STRTKPTR()
* harbour/common.mak
* harbour/source/rtl/Makefile
* harbour/include/hbextern.ch
+ harbour/source/rtl/hbtoken.c
+ added set of functions to manipulate string tokens:
HB_TOKENCOUNT( <cString>, [ <cDelim> ], [ <lSkipStrings> ],
[ <lDoubleQuoteOnly> ] ) -> <nTokens>
HB_TOKENGET( <cString>, <nToken>, [ <cDelim> ], [ <lSkipStrings> ],
[ <lDoubleQuoteOnly> ] ) -> <cToken>
HB_TOKENPTR( <cString>, @<nSkip>, [ <cDelim> ], [ <lSkipStrings> ],
[ <lDoubleQuoteOnly> ] ) -> <cToken>
HB_ATOKENS( <cString>, [ <cDelim> ], [ <lSkipStrings> ],
[ <lDoubleQuoteOnly> ] ) -> <aTokens>
All these functions use the same method of tokenization. They can
accept as delimiters string longer then one character. By default
they are using " " as delimiter. " " delimiter has special mening
Unlike other delimiters repeted ' ' characters does not create empty
tokens, f.e.: HB_ATOKENS( " 1 2 3 " ) returns array { "1", "2" }
Any other delimiters are restrictly counted, f.e. HB_ATOKENS( ",,1,,2,")
return array: { "", "", "1", "", "2", "" }.
+ added emulation for old __STRTOKEN(), __STRTKPTR() and xHarbour's
__STRTOKENCOUNT() by HB_TOKEN*() functions. They do not return
exactly the same result as __STRT*() functions which in some cases
ignored some delimiters and return wrong results.
* harbour/source/rdd/Makefile
+ harbour/source/rdd/dbsql.c
+ added __DBSQL() function
* harbour/include/hbsetup.h
* harbour/source/vm/fm.c
+ added support for native Windows memory allocation functions
It can be enabled by HB_FM_WIN32_ALLOC macro and disable C-RTL
memory manager.
* harbour/tests/mousetst.prg
* touch screen output before MPRESENT() to work with GTXWC
* harbour/source/rtl/hbregex.c
+ added HB_REGEXHAS() and HB_REGEXLIKE()
* harbour/source/rtl/net.c
* added support for <nType> parameter in NETNAME() like in xHarbour
when nType == 1 NETNAME() returns user name instead of host name.
* harbour/source/rtl/tgetlist.prg
! Fixed bug #1692268. The fix simply removes two strange lines
of code which tried to modify the internal TGet() var "Type",
after it read the value contained in the TGet(). Since this would
be the job of TGet() alone, and Type() is not an assignable
var in CA-Cl*pper, it very much looks like a workaround
for something (maybe a shortcoming of an earlier version of
TGet()). If anyone knows what was to be achieved with that,
pls shout.
* harbour/include/Makefile
+ harbour/include/hbchksum.h
* harbour/source/rtl/Makefile
+ harbour/source/rtl/hbadler.c
+ harbour/source/rtl/hbcrc.c
+ harbour/source/rtl/hbmd5.c
+ added functions to calculate different checksums
HB_ADLER( <cValue> [, <nStart> ] ) -> <nCC>
HB_CRC32( <cValue> [, <nStart> ] ) -> <nCRC>
HB_CRC16( <cValue> [, <nStart> ] ) -> <nCRC>
HB_CRC ( <cValue> [, <nStart> ] [, <nPolynomial> ] ) -> <nCRC>
HB_CRCCT( <cValue> [, <nStart> ] [, <nPolynomial> ] ) -> <nCRC>
HB_MD5( <cString> ) -> <cMD5>
HB_MD5FILE( <cFileName> ) -> <cMD5>
HB_CRC() is general CRC function which can be used for any polynomial
given as second argument, f.e.: 0x104C11DB7 is CRC32 polynomial,
0x18005 -> CRC16, 0x11021 -> CRC16 X.26, 0x1393 -> CRC12, 0x101 -> LCR8
HB_CRCCT() makes exactly the same job but it uses broken algorithm.
Unfortunately it seems that this broken version is widely used by many
other projects, f.e. HB_CRCCT() gives exactly the same results as
COM_CRC() from CT3. Generated results are usually "good enough" but
if you do not need compatibility with some other tools which uses
broken CRC algorithm then I suggest to not use it.
HB_ADLER() is ADLER32 check sum - this function gives the same results
as HB_CHECKSUM in xHarbour.
HB_MD5*() functions are from Dmitry V. Korzhov code modified a
little bit by me for other then x86@32 machines files and buffers
longer then 2^32. I also fixed possible problems with wrong results
in some cases.
* harbour/source/compiler/hbmain.c
* increase number of optimization passes
* harbour/source/pp/ppcore.c
* cleaned C compiler warning
* harbour/common.mak
* updated for new files - please check
* harbour/harbour.spec
* added compiler library
* harbour/bin/pack_src.sh
* harbour/bin/hb-func.sh
* updated for new files and libraries
* harbour/config/w32/mingw32.cf
* harbour/config/w32/watcom.cf
* harbour/config/w32/xcc.cf
* added winsock libraries
* harbour/include/hbapicdp.h
* harbour/source/rtl/cdpapi.c
+ added hb_cdpicmp() - not case sensitive version of hb_cdpcmp()
* harbour/include/hbapiitm.h
* harbour/source/vm/itemapi.c
+ hb_itemStrICmp(), hb_itemCopyFromRef(), hb_itemMoveFromRef()
* harbour/include/hbapi.h
* harbour/include/hbcomp.h
* harbour/include/hbcompdf.h
* harbour/include/hbexpra.c
* harbour/include/hbexprb.c
* harbour/include/hbexprop.h
* harbour/include/hbmacro.h
* harbour/include/hbpcode.h
* harbour/include/hbvmpub.h
* harbour/include/hbxvm.h
* harbour/source/common/expropt1.c
* harbour/source/compiler/complex.c
* harbour/source/compiler/genc.c
* harbour/source/compiler/gencc.c
* harbour/source/compiler/gencli.c
* harbour/source/compiler/genhrb.c
* harbour/source/compiler/genobj32.c
* harbour/source/compiler/harbour.y
* harbour/source/compiler/harbour.yyc
* harbour/source/compiler/harbour.yyh
* harbour/source/compiler/hbdead.c
* harbour/source/compiler/hbfix.c
* harbour/source/compiler/hblbl.c
* harbour/source/compiler/hbmain.c
* harbour/source/compiler/hbopt.c
* harbour/source/compiler/hbpcode.c
* harbour/source/compiler/hbstripl.c
* harbour/source/macro/macro.y
* harbour/source/macro/macro.yyc
* harbour/source/macro/macro.yyh
* harbour/source/macro/macrolex.c
* harbour/source/vm/Makefile
* harbour/source/vm/arrays.c
* harbour/source/vm/asort.c
* harbour/source/vm/classes.c
* harbour/source/vm/eval.c
* harbour/source/vm/garbage.c
* harbour/source/vm/hvm.c
* harbour/source/vm/itemapi.c
* harbour/source/vm/macro.c
+ harbour/source/vm/hashes.c
+ harbour/source/vm/hashfunc.c
+ added hash items, f.e.:
local h1 := {=>}, h2 := { "a"=>1.234, "b"=>2.345 }
? h2[ "a" ], h2[ "b ]
+ added support for DYNAMIC function declaration - it allow to define
functions which are lately bound at runtime, f.e.:
/*** t01.prg ***/
dynamic func1
proc main()
local h:=__hrbload("t02.hrb")
? func1()
return
/*** t02.prg ***/
func func1
return "Hello!!!"
% use new FUNCALL structure to hold EXTERNAL and DYNAMIC functions,
it reduce memory usage, FUNCALL is much smaller then FUNCTION
% use symbol scope bits when possible instead of making some linear scan
+ added new enumarator message: __ENUMKEY - it allow to access
key value when hash item is base enumerator value, f.e.:
proc main()
local v, h:={"a"=>1.000,"b"=>2.000,"c"=>3.000}
heval( h, { |k,v,i| qout( k, v, i ) } ); ?
for each v in h
? v, "=>", v:__enumKey(), v:__enumValue(), v:__enumIndex(), ;
valtype(v:__enumBase())
v += 0.123
next
? ;heval( h, { |k,v,i| qout( k, v, i ) } )
return
+ added C level hb_hash*() functions
+ added support for full HASH item cloning and updated array cloning
to also clone nested hashes - please note that xHarbour does not do
that, in xHarbour ACLONE() clones _ONLY_ nested arrays and HCLONE()
_DOES_NOT_ clone _ANY_ nested items.
* harbour/include/hbextern.ch
+ added hash functions HB_H*()
* changed INET*() functions to HB_INET*()
+ added hash functions H*() and socket functions INET*() when
HB_COMPAT_XHB is set
* harbour/include/hbtypes.h
+ added missing HB_EXTERN_BEGIN / HB_EXTERN_END
* harbour/include/hbpp.h
* harbour/source/pp/ppcore.c
! added protection against automatic word concatenation in some cases
! fixed preprocessing expressions when match marker matches ';' token
* harbour/source/rtl/Makefile
+ harbour/source/rtl/itemseri.c
+ added functions for item serialization: HB_SERIALIZE() and
HB_DESERIALIZE() - these function are not binary compatible
with xHarbour functions with the same names but make very
similar job with the exception to serialization of codeblock
and object variables - Harbour does not allow to serialize
codeblocks and serialize objects as arrays.
In most cases these functions can replace the xHarbour ones
+ added HB_DESERIALBEGIN() and HB_DESERIALIZE() functions covered
by HB_COMPAT_XHB macro - this functions are only for compatibility
with existing xHarbour code, In Harbour HB_DESERIALBEGIN() is
dummy function which returns first parameter and HB_DESERIALNEXT()
is a simple wrapper to HB_DESERIALIZE() so it's not necessary to
use them.
* harbour/source/rtl/hbinet.c
* changed INET*() functions to HB_INET*() and enable them for default
build
+ added INET*() functions wrappers covered by HB_COMPAT_XHB macro
* harbour/source/rtl/hbrandom.c
+ added HB_RANDOMINT() - xHarbour compatible
* harbour/source/rtl/len.c
+ added support for HASHes
* harbour/source/rtl/valtype.c
+ added support for HASHes
+ added set of HB_IS*() functions - they are a little bit faster then
calling VALTYPE( v ) == <cVal>
- removed HB_ISBYREF() - this function cannot longer work, it was using
a Clipper incompatible anomalies in passing variables by reference I
fixed so it has to stop to work. If it will be realy necessary to
implement HB_ISBYREF() function then please inform me - it will have
to be done at compiler level or with some much deeper HVM stack
checking.
* harbour/source/vm/extend.c
! fixed hb_extIsArray() and hb_extIsObject() to work well with
parameters passed by reference.
Please note that now hb_extIsArray() return TRUE only for pure arrays
not object values.
* harbour/contrib/Makefile
+ harbour/contrib/tip/Changelog
+ harbour/contrib/tip/Makefile
+ harbour/contrib/tip/atokens.c
+ harbour/contrib/tip/base64x.c
+ harbour/contrib/tip/cgi.prg
+ harbour/contrib/tip/client.prg
+ harbour/contrib/tip/credent.prg
+ harbour/contrib/tip/cstr.prg
+ harbour/contrib/tip/encb64.prg
+ harbour/contrib/tip/encmthd.c
+ harbour/contrib/tip/encoder.prg
+ harbour/contrib/tip/encqp.prg
+ harbour/contrib/tip/encurl.prg
+ harbour/contrib/tip/ftpcln.prg
+ harbour/contrib/tip/hbhex2n.c
+ harbour/contrib/tip/httpcln.prg
+ harbour/contrib/tip/mail.prg
+ harbour/contrib/tip/popcln.prg
+ harbour/contrib/tip/smtpcln.prg
+ harbour/contrib/tip/tip.ch
+ harbour/contrib/tip/url.prg
+ harbour/contrib/tip/utils.c
+ added TIP library - code borrowed from xHarbour
Please test - a lot of above code is not well tested, also some peaces
were written over year ago for different things (f.e. serialization for
NETRDD) and now I collected them and committed.
The TIP library was not tested at all. It can be compiled but I cannot
say if it works - I hope that people familiar with it can make necessary
test and fixes.
It's also not the final version of low level HASH item code. I'm working
on more efficient structure which uses binary tries but I cannot say when
I'll finish it (maybe in this weekend or maybe in next year) so I committed
working version now even if I'm not happy with overall performance (BTW
not worser then in xHarbour)
* harbour/include/hbapi.h
* harbour/include/hbapiitm.h
* harbour/source/vm/garbage.c
* harbour/source/vm/extend.c
* harbour/source/vm/itemapi.c
+ added hb_gcFunc(), hb_parptrGC(), hb_itemGetPtrGC()
hb_parptrGC() and hb_itemGetPtrGC() uses GC cleanup function address
to validate if pointer item points to expected memory block type
* harbour/source/common/hbhash.c
* harbour/source/compiler/hbident.c
* formatting and minor modifications
* harbour/source/pp/pplib.c
* harbour/source/pp/pplib2.c
* use hb_parptrGC() to be sure that given pointer item points
to PP structure
+ harbour/include/hbregex.h
+ harbour/source/rtl/hbregex.c
* harbour/source/rtl/Makefile
* harbour/common.mak
+ added support for regular expressions. Now it's enabled by default
only in *nixes (POSIX regex) and BCC 5.5 (PCRE regex). Setting
HB_PCRE_REGEX macro enables Perl-Compatible Regular Expressions
and HB_POSIX_REGEX - POSIX regular expressions. In xHarbour regex
support is enabled for all builds because PCRE source code is stored
in CVS. If you will want we can make the same.
+ the following C functions are available:
hb_regexCompile(), hb_regexGet(), hb_regexFree(), hb_regexMatch()
+ the following PGR functions are available:
HB_REGEXCOMP(), HB_ISREGEX(), HB_ATX(), HB_REGEX(), HB_REGEXMATCH(),
HB_REGEXSPLIT(), HB_REGEXATX(), HB_REGEXALL()
They are working in similar way to the ones in xHarbour with the
exception to some bug fixes and form of compiled regular expression.
In Harbour it's pointer item for which HB_ISREGEX() returns TRUE when
in xHarbour it's binary string.
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* harbour/source/rdd/dbfntx/dbfntx1.c
* enabled code to seek in index using regular expressions
(DBOI_SKIPREGEX[BACK])
* harbour/include/hbcomp.h
* harbour/include/hbexpra.c
* harbour/include/hbexprb.c
* harbour/include/hbexprc.c
* harbour/include/hbmacro.h
* harbour/include/hbpcode.h
* harbour/include/hbxvm.h
* harbour/source/common/hbdate.c
* harbour/source/compiler/genc.c
* harbour/source/compiler/gencc.c
* harbour/source/compiler/harbour.c
* harbour/source/compiler/harbour.y
* harbour/source/compiler/harbour.yyc
* 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/rtl/abs.c
* harbour/source/rtl/at.c
* harbour/source/rtl/chrasc.c
* harbour/source/rtl/datec.c
* harbour/source/rtl/dateshb.c
* harbour/source/rtl/diskspac.c
* harbour/source/rtl/disksphb.c
* harbour/source/rtl/gtfunc.c
* harbour/source/rtl/left.c
* harbour/source/rtl/len.c
* harbour/source/rtl/math.c
* harbour/source/rtl/minmax.c
* harbour/source/rtl/mod.c
* harbour/source/rtl/philes.c
* harbour/source/rtl/philesx.c
* harbour/source/rtl/replic.c
* harbour/source/rtl/round.c
* harbour/source/rtl/set.c
* harbour/source/rtl/space.c
* harbour/source/rtl/strcase.c
* harbour/source/rtl/strpeek.c
* harbour/source/rtl/transfrm.c
* harbour/source/rtl/trim.c
* harbour/source/rtl/type.c
* harbour/source/rtl/val.c
* harbour/source/rtl/word.c
* harbour/source/vm/hvm.c
* harbour/source/vm/macro.c
* added some PCODEs to cover all possible combination of ++, --, <op>=
operations in the same way and keep Clipper compatible RT errors.
* added some other PCODEs to optimize some commonly used expressions/
statements
* use HB_ERR_ARGS_BASEPARAMS instead of hb_paramError()
* some other cleanups and minor optimizations
* harbour/utils/hbtest/rt_math.prg
* update expected result for MOD() - it was not Clipper compatible and
it will be hard to make it compatible without introducing some Clipper's
side effects
* harbour/bin/hb-func.sh
* do not pass linking parameters to GCC/G++ when is used for
compilation only
* harbour/contrib/rdd_ads/Makefile
* set -DWIN32 for W32 compilation
* harbour/contrib/rdd_ads/makefile.bc
* formatting
* harbour/include/hbapi.h
* harbour/source/rtl/strcase.c
+ added hb_charUpper() and hb_charLower()
* harbour/include/hbapigt.h
* harbour/include/hbgtcore.h
* harbour/source/rtl/gtapi.c
* harbour/source/rtl/hbgtcore.c
+ added support for ALERT() on GT level - C functions: hb_gtAlert()/
hb_gt_Alert()
To replicate some details of Clipper and CT3 behavior ALERT() cannot
be implement only on upper level as .prg function
* harbour/source/rtl/gtfunc.c
+ added .prg function HB_GTALLERT()
* harbour/source/rtl/alert.prg
* redirected ALERT() to HB_GTALLERT()
* harbour/source/rtl/fstemp.c
* use the same case conversion as in low level hb_fs*() functions to
avoid possible problems with national characters
* harbour/source/rtl/dates.c
* harbour/source/rtl/set.c
* harbour/source/rtl/strmatch.c
* harbour/source/rtl/transfrm.c
* use hb_charUpper()
* casting