* contrib/gtwvg/class.prg
* contrib/gtwvg/syswnd.prg
* contrib/hbgd/gdchart.prg
+ using HB_IS*() for strict type checking instead of 'IF x == NIL'
check recently converted from DEFAULT TO commands.
This is INCOMPATIBLE for cases where wrong type was passed
for these parameters.
* contrib/xhb/cstruct.prg
* contrib/xhb/tcgi.prg
* src/debug/dbghelp.prg
* src/debug/dbgtmenu.prg
* src/debug/dbgtmitm.prg
* src/debug/debugger.prg
* contrib/hbhttpd/core.prg
* contrib/hbpgsql/tests/cache.prg
* contrib/hbpgsql/tpostgre.prg
* contrib/hbnf/metaph.prg
* extras/gtwvw/tests/ebtest7.prg
* extras/guestbk/testcgi.prg
* extras/gfspell/spell.prg
% deleted 3rd parameter from expressions 'StrTran( x, y, "" )'
Empty string is the default.
* contrib/xhb/cstruct.prg
! fixed formatting and indentation using hbformat and manually
* utils/hbmk2/hbmk2.prg
% minor opt by replacing 'iif( ! Empty(' with 'iif( Empty('
* harbour/src/compiler/harbour.y
* harbour/src/compiler/harbour.yyc
* minor formatting
* harbour/contrib/hbct/ctwfunc.c
* harbour/contrib/hbct/ctwin.c
* harbour/contrib/hbct/ctwin.h
+ added undocumented CT3 window functions:
WALIAS( <nHandle> ) -> <nHandle> | -1
change current window handle to <nHandle>
if <nHandle> is not used by other window.
return <nHandle> on success or -1 to indicate error.
Warning: I replicated CT3 limit here so <nHandle>
cannot be bigger then 255
WLIST() -> <cHandleList>
_WSTACK() -> <cHandleList>
return string with window handles in each character,
the ASCII value of the first character is handle of the
most bottm window and the last character is the top window.
Warning: this is compatibility only function
which works correctly for first 255 windows.
Harbour does not have any internal limits on
maximum number of windows so it's possible
to create more then 255 windows and this function
will return wrong results.
* contrib/hbhttpd/readme.txt
* doc/dirstruc.txt
* doc/xhb-diff.txt
* include/hbapi.h
* INSTALL
* NEWS
* src/common/hbver.c
* src/main/harbour.c
* src/pp/hbpp.c
* src/rtl/version.c
* src/vm/cmdarg.c
* Avoiding the word "SVN" (use 'source repository',
'repository' or 'repo' for short)
* Added new names that don't refer to SVN:
C level:
- hb_verRevision() (was: hb_verSvnID())
- hb_verChangeLogID() (was: hb_verSvnChangeLogID())
- hb_verChangeLogLastEntry() (was: hb_verSvnLastEntry())
.prg level:
- HB_VER_REVID built-in macro (was: HB_VER_SVNID)
; Old functions/macros will be deleted after next major
revision, start using the new names until then.
* harbour/include/hbcomp.h
* harbour/src/compiler/hbmain.c
* harbour/src/compiler/hbstripl.c
% eliminate repeated HB_P_LINE pcodes bound by unconditional jump
This optimization is not enabled when debug mode (-b) is used.
* harbour/include/hberrors.h
* harbour/src/compiler/hbgenerr.c
* harbour/src/compiler/harbour.y
* harbour/src/compiler/harbour.yyc
+ added new compile time error: "Duplicate case value"
* src/debug/dbgwa.prg
* src/rtl/browse.prg
* src/rtl/dbedit.prg
% deleted EXIT from SWITCH statements' OTHERWISE branches.
(it'd be nice if the compiler could ignore these
automatically - in case it can be solved with low cost)
* extras/gtwvw/tests/prog2.prg
* extras/gtwvw/tests/wvwtest9.prg
* src/debug/debugger.prg
* src/rtl/tgetlist.prg
* tests/sbartest.prg
* tests/tb1.prg
! further cases of object vars called as methods, though
these didn't (necessarily) caused errors.
I wish Harbour had a native core OOP engine to catch
all (there are more cases than above) this mess at
compile-time.
* src/rtl/browse.prg
! fixed not appending a new record when pressing K_DOWN
in append mode (and perhaps some other cases)
The problem was using 'oBrw:HitBottom( .T. )' instead
of 'oBrw:HitBottom := .T.'
* minor optimizations and cleanup.
; Some stats: it was a 5 year old bug
took about 10 hours to find the solution. Sheet.
* harbour/src/rtl/philes.c
* modified HB_CWD() to return previous path if new one is set by
optional parameter so current syntax is:
HB_CWD( [ <cNewWD> ] ) -> <cPrevWD>
+ set FError() in HB_CWD() function. Now programmer can check if HB_CWD()
succeed checking result of FError() function, i.e.
HB_CWD( cNewPath )
IF FError() != 0
? "Cannot set working directory to:", cNewPath
ELSE
// stuff
ENDIF
+ set FError() in the following functions:
HB_FGETATTR(), HB_FSETATTR(),
HB_FGETDATETIME(), HB_FSETDATETIME(),
HB_FISDEVICE()
* src/rtl/tget.prg
! fixed regression from 2012-01-29 17:22 UTC+0100
when non-numeric index was allowed on a non-hash
variable and then an RTE generated.
Caused rto_get.prg to RTE in the middle.
* contrib/gtwvg/activex.prg
* contrib/gtwvg/class.prg
* contrib/gtwvg/tests/demoxbp.prg
* contrib/gtwvg/tests/utils.prg
* contrib/rddads/doc/en/adsfuncs.txt
* contrib/rddads/doc/en/readme.txt
* contrib/xhb/tfile.prg
* contrib/xhb/txml.prg
* contrib/xhb/xhbole.prg
* doc/windll.txt
* extras/gtwvw/gtwvw.c
* extras/gtwvw/hbgtwvw.h
* extras/gtwvw/tests/maincoor.prg
* extras/gtwvw/wvwcheck.c
* extras/gtwvw/wvwdraw.c
* extras/gtwvw/wvwedit.c
* extras/gtwvw/wvwfuncs.c
* extras/gtwvw/wvwmenu.c
* extras/gtwvw/wvwpush.c
* extras/gtwvw/wvwstbar.c
* extras/gtwvw/wvwtbar.c
* extras/hbdoc/tmplates.prg
* tests/gtcolors.prg
* tests/ipclnt.prg
* tests/ipsvr.prg
* tests/rto_get.prg
* tests/rto_tb.prg
* tests/usrrdd/exarr.prg
* tests/usrrdd/exfcm.prg
* tests/usrrdd/exhsx.prg
* tests/usrrdd/exlog.prg
* tests/usrrdd/exmemo.prg
* tests/usrrdd/exrlx.prg
* tests/wcecon.prg
* full formatting using hbformat (where needed)
* Win32 -> Windows
* 32-bit deleted where it didn't make sense
* using K_* constants
! fixed != operators where used on strings (more to come)
Thanks to Jose F. Gimenez for the ones in txml.prg.
* avoid "common.ch"
% use hb_ntos() in Harbour specific code
* include/harbour.hbx
* src/rtl/hbdoc.prg
* tests/hbdoctst.prg
+ added __hbdoc_DirLastModified( <cDir> ) -> <tLastModified>
function that returns last modification timestamp for a
given NF doc root directory. It returns empty date if the
directory doesn't exist or is empty.
It can be used to decide whether to update .hbd files f.e.
in an hbmk2 plugin that builds .hbd files automatically.
* harbour/include/hbapifs.h
* harbour/src/rtl/filesys.c
+ added two new C functions:
HB_BOOL hb_fsGetCWD( char * pszBuffer, HB_SIZE nSize );
HB_BOOL hb_fsSetCWD( const char * pszDirName );
* synced some parameters names with declarations in header
* harbour/src/rtl/hbfilehi.prg
* harbour/src/rtl/philes.c
* rewritten HB_CWD() function in C
! fixed to HB_CWD() work with UNC path in MS-Windows and other
systems using drive letters
+ added support for setting new working directory (and drive)
by HB_CWD( <cNewWD> )
* contrib/hbnf/popadder.prg
* src/rtl/listbox.prg
* src/rtl/scrollbr.prg
* src/rtl/tmenuitm.prg
* tests/db_brows.prg
! reverted to use plain Chr() for low-ASCII (0-31) drawing chars
(hb_UTF8ToStr*() converts these to "?", which is expected)
* contrib/hbmisc/hbedit.prg
* src/debug/dbghelp.prg
* src/debug/dbgtmenu.prg
* src/debug/dbgtwin.prg
* src/debug/dbgwa.prg
* src/rtl/browse.prg
* src/rtl/listbox.prg
* src/rtl/radiogrp.prg
* src/rtl/tmenuitm.prg
* src/rtl/tpopup.prg
* tests/gtwin.prg
* tests/box.prg
* tests/boxtst2.prg
* tests/scroll.prg
* tests/vidtest.prg
! fixed to use new unicode-compatible box.ch/button.ch macros
For standalone programs (in tests) in only makes any difference
when running them as scripts, now they will work (after
adding hbshell_gtInteracive() call at startup), while
before the drawing chars were scrambled.
* src/rtl/browse.prg
* src/rtl/checkbox.prg
* src/rtl/dbedit.prg
* src/rtl/dbedit.prg
* src/rtl/listbox.prg
* src/rtl/scrollbr.prg
* src/rtl/tmenuitm.prg
! fixed Chr() calls for drawing chars to unicode strings
to be compatible with both unicode and non-unicode (and
any BOXCP) mode.
* src/rtl/browse.prg
! fixed to use '!( hb_keyChar( nKey ) == "" )' instead
of looking for keycode between 32 and 255 (inclusive)
making it unicode compatible
* formatting
* src/rtl/tpersist.prg
* src/rtl/memoedit.prg
* src/debug/debugger.prg
* src/debug/dbgthsh.prg
* src/debug/dbgtarr.prg
* src/debug/tbrwtext.prg
* formatting
* src/rtl/tmenuitm.prg
* src/rtl/tpopup.prg
+ added TOFIXes where drawing chars are used as internal
flags. This may cause problems if switching CPs while
using these objects.
* tests/sbartest.prg
+ unicode compatibility while keeping it Cl*pper compatible
! fixed RTE due to using wrong SCROLLBAR method
* tests/tb1.prg
* changed to use new unicode-compatible box.ch/button.ch macros
while keeping Cl*pper compatibility
* tests/vidtest.prg
! fixed remaining drawing chars using Chr() (Cl*pper
compatibility maintained)
* tests/testsha2.prg
* tests/utf8at.prg
! fixed to use HB_BCHAR() instead of CHR() for unicode compatibility.
; NOTE: After above changes scripts and commands run via hbrun
will display drawing chars properly. Unicode apps as
well, even with BOXCP set to unicode, too.
; TODO: Fix above things also on C level, f.e. DISPBOX() with
numeric box drawing request.
* harbour/src/pp/ppcore.c
! fixed possible GPF when some broken expressions are used as
part of extended expression match marker
* harbour/src/rtl/padr.c
* harbour/src/rtl/padc.c
* harbour/src/rtl/padl.c
! fixed PADR(), PADL() and PADC() to accept pad mulibyte characters
when CPs with such encoding is used, i.e. CP950 or UTF8EX
* harbour/contrib/xhb/xhb.hbx
* updated to follow recent modifications
* include/harbour.hbx
* src/rtl/Makefile
+ src/rtl/cdpbox.prg
+ added HB_UTF8TOSTRBOX( <cUTF8String> ) -> <cStringEncodedIn_GT_BOXCP>
It's needed because HB_UTF8TOSTR() will convert to main CP,
but box drawing CP can be setup differently with HB_GTI_BOXCP,
that function call will take that into account.
* contrib/hbnf/aredit.prg
* contrib/hbnf/clrsel.prg
* contrib/hbnf/dispmsg.prg
* contrib/hbnf/menu1.prg
* contrib/hbnf/pegs.prg
* contrib/hbnf/pickday.prg
* contrib/hbnf/popadder.prg
* contrib/hbnf/tbwhile.prg
* contrib/hbnf/vertmenu.prg
* tests/db_brows.prg
* tests/gtchars.prg
* tests/testbrw.prg
* extras/gtwvw/tests/prog0.prg
* extras/gtwvw/tests/prog1.prg
* extras/gtwvw/tests/prog2.prg
! fixed drawing chars to display properly regardless of HB_GTI_BOXCP
setting.
! some related minor fixes
* tests/tb1.prg
! fixed to compile and build using Clipper after recent
UTF8 compatibility updates (not tested though)
; TOFIX: Pad*() function handle 3rd parameter as binary string,
so it doesn't work properly in UTF8 mode.
* src/lang/sk.c
+ updated Slovak language module.
Patch by Jaroslav Janík. Many thanks.
* contrib/hbnf/calendar.prg
* contrib/hbnf/pegs.prg
* tests/ac_test.prg
* minor formatting.
* harbour/src/compiler/harbour.yyh
* harbour/src/compiler/harbour.yyc
* harbour/src/macro/macro.yyc
* harbour/src/macro/macro.yyh
* regenerated with bison 2.5
* harbour/src/rdd/dbcmd.c
* added note about Cl*pper incompatibility in our implementation of
__dbSkipper() functions
* harbour/src/vm/hvm.c
* allow to overwrite non local function symbols from dynamic libraries
by local ones also loaded from dynamic library if they point to the
same function.
This modification resolves the problem with class defined in
multiple module dynamic libraries.
* harbour/src/rtl/Makefile
- harbour/src/rtl/fieldbl.prg
- removed old PRG level implementation of FIELDBLOCK() and
FIELDWBLOCK() functions
* harbour/src/vm/macro.c
+ created new implementation of FIELDBLOCK() and FIELDWBLOCK()
functions in C. This implementation is strictly Clipper compatible
and allows to create field blocks only for symbols already
registered in HVM so it does not create new symbols in HVM.
When table is open then all field symbols are registered in HVM.
It means that new functions may not create field block if table
is not open yet and field name was never used explicitly in
whole compiled application. It's possible to easy change it
and automatically register new symbols if we decide it's real
limitation and we should drop strict Cl*pper compatibility.
Anyhow it may cause that some code will register big number
of completely unnecessary symbols in HVM so it should be well
thought decision.
This implementation makes exactly the same fied name conversions
as default implementation of ADDFIELD() workarea method so exactly
the same set of symbols is accepted. It means that after opening
table which has field names with spaces or other characters
which are not accepted as PRG identifiers it's possible to create
field blocks for them.
It should be also noticable faster because macrocompiler is not
used at all and is many times faster in codeblock evaluation then
implementation like in xHarbour which uses
fieldget( fieldpos( cFieldName ) )
to support fields with embeded spaces.
* harbour/src/rtl/hbgtcore.c
% small optimization in INKEY() code
* harbour/src/compiler/hbmain.c
! fixed bug intorduced in my last commit when - PCODE ofr empty
strings "" were not generated if -km switch was not used
! fixed possible problem with allocating variable using dynamic
buffer for variable name
* minor code cleanup
* harbour/include/hbexprb.c
* harbour/include/hbcomp.h
* harbour/include/hbcompdf.h
* harbour/src/compiler/hbusage.c
* harbour/src/compiler/harbour.yyc
* harbour/src/compiler/harbour.y
* harbour/src/compiler/ppcomp.c
* harbour/src/compiler/hbmain.c
* harbour/src/compiler/cmdcheck.c
* harbour/doc/cmpopt.txt
* harbour/doc/xhb-diff.txt
+ added new harbour compiler switch:
-kd => accept macros with declared symbols
This switch allows to use declared symbols like LOCALs, STATICs
and FIELDs in macros and macrocodeblocks (every evaluated).
; Please do not confuse different things. Above modification
does not mean to that such variables are visible for macro
compiler. It only allows to write code like:
cbVar := {|| &cLocal + cPrivate }
or:
cbVar := {|| &cLocalPref.func&cPriv1( cPriv2 ) }
or:
? &cLocalPref.func&cPriv1( cPriv2 )
etc.
If possible then for macrocodeblocks Harbour compiler tries to
generate early eval code in which macros are expanded when codeblock
is created. Otherwise macros are expanded each time codeblocks are
evaluated.
For more information look at harbour/doc/xhb-diff.txt section:
MACROS WITH DECLARED SYMBOLS
+ contrib/hbwin/oemansi.c
* contrib/hbwin/hbwin.hbp
* contrib/hbwin/hbwin.hbx
+ added WIN_OEMTOANSI() and WIN_ANSITOOEM(). These are
compatible with current core HB_OEMTOANSI()/HB_ANSITOOEM()
Usage of them is not recommended.
* contrib/hbxpp/oemansix.c
* CONVTOANSICP()/CONVTOOEMCP() changed to use local
implementation instead of relying on now deprecated
core OEM/ANSI functions
* src/rtl/oemansi.c
* HB_OEMTOANSI()/HB_ANSITOOEM() Windows-specific functions
deprecated with HB_LEGACY_LEVEL4 (meaning they will
disappear after next stable release). Either avoid
these calls completely (recommended) or change them to
hbwin or hbxbp equivalents.
* contrib/hbtip/thtml.prg
* contrib/hbtip/hbtip.hbx
* deprecated HtmlToAnsi(), HtmlToOem(), AnsiToHtml(), OemToHtml()
functions with HB_LEGACY_LEVEL4.
+ added TIP_STRTOHTML(), TIP_HTMLTOSTR() functions which cover
major above functionality, but in a portable and CP agnostic
way. Code untested, if you need it, test it and provide feedback
and/or fix.
* harbour/config/dos/watcom.mk
* harbour/utils/hbmk2/hbmk2.prg
! cleaned and synced optimization flags which interacts with calling
convention
* harbour/src/3rd/zlib/zconf.h
! added missing export attribute in OS2 dll builds
* harbour/src/3rd/zlib/zlib.dif
* rediffed
* harbour/src/compiler/hbmain.c
* minor modification to pacify warning generated by some compilers
* harbour/src/rtl/gete.c
! added missing #include "hbapicdp.h" in DOS and OS2 builds
* harbour/src/rtl/gtdos/gtdos.c
! fixed typo
* harbour/contrib/3rd/sqlite3/sqlite3.hbp
! set SQLITE_OS_OTHER in Watcom OS2 builds - it does not support
PTHREAD and some OS extensions used in default SQLite builds
* harbour/src/rdd/workarea.c
! set FOUND flag in child workareas when non index but
record number relation is used - Clipper compatible behavior.
Many thanks to Davor Siklic for information about the problem
and self contain code example.
* harbour/src/rtl/chruni.c
* harbour/include/harbour.hbx
+ added new functions to operate on unicode and binary strings.
They work like hb_At() but are CP independent.
hb_UAt( <cSubString>, <cString>, [<nFrom>], [<nTo>] ) -> <nAt>
hb_BAt( <cSubString>, <cString>, [<nFrom>], [<nTo>] ) -> <nAt>