* harbour/src/vm/classes.c
% small optimization in __CLSGetProperties() function
* harbour/src/rtl/tpersist.prg
! force linkin ARRAY() function when HBPersistent class is used
! use hb_ValToExp() instead of local ValToText() function which
didn't work correctly for memos and some other types
! fixed infinite loop in HBPersistent:LoadFromText() used with
empty text. The problem was also exploited by :LoadFromFile()
method if file does not exists or it's empty()
! fixed deserialization of strings containing "=" char inside
! fixed deserialization of strings containing "::"
! added support for decoding nested objects - the code was not
finished and this part was not implemented at all
+ added support for serialized text using ":=" assign operator
instead of "="
* use ":=" instead of "=" as assign operator in new serialized
text
+ ignore lines starting with "//" and added support for files
which do not start with OBJECT directive
* ignore pointer and codeblock items stored in instance variables
during serialization
; now HBPersistent class in Harbour should read serialized files
created in xHarbour with few exceptions:
- Harbour does not allow to serialize codeblocks
See "CODEBLOCK SERIALIZATION / DESERIALIZATION" in
doc/xhb-diff.txt for the reasons.
If Harbour application restores xHarbour HBPersistent files
with serialized codeblocks then RTE
Undefined function: HB_RESTOREBLOCK
is generated.
- xHarbour serialize pointer items as numeric items
saved in hexadecimal notation. Then restore them as numbers.
- HBPersistent does not support hash arrays - they are
serialized by default serialization code used by both
compilers to generate expressions.
In Harbour it's done by hb_valToExp() function and
in xHarbour it's ValToPrg() is used.
ValToPrg() does not create valid macrocompiler expressions
for arrays and objects so HBPersistent files created
by xHarbour are broken and cannot be correctly deserialized.
It happens if objects has hash arrays in instance variables
and these hash arrays contain normal arrays or object
If Harbour application restores such xHarbour HBPersistent
file then RTE "Syntax error: &" is generated.
; xHarbour encapsulates deserialization code inside TRY/CATCH/END
statement saving errors to trace.log file. Harbour generates RTE.
If programmer needs similar behavior then he should
call :LoadFromText() and :LoadFromFile() methods inside
BEGIN SEQUENCE [ / RECOVER ... ] / END SEQUENCE
statement.
; xHarbour reinitialize all or properties instance variables to
default state inside :LoadFromText() and :LoadFromFile() methods.
The 3-rd parameter in above method <lPropertiesOnly> allows to
chose which install variables should be reinitialized:
all (default) or properties only.
Harbour does not have such functionality.
If programmer needs it then he should reinitialize them himself.
It can be easy done be simple function.
Alternatively we can implement this functionality but in such
case I'd suggest to define three actions for such switch:
none (default), all, properties only.
; Harbour does not support 2-nd parameter <lIgnoreBadIVars> which
exist in xHarbour versions of HBPersistent:LoadFromText() and
HBPersistent:LoadFromFile():
If necessary we can implement it though it's usable only if we
want to ignore some wrong lines and process others.
; Warning: Neither Harbour nor xHarbour supports arrays and objects
with cyclic references in HBPersistent code - infinite
loop appears in such case.
; I've never used HBPersistent and the state of the previous
HBPersistent code in Harbour suggests that no one used it for
some serious jobs so I'm open for any opinions and suggestions
about it from xHarbour users.
* harbour/src/compiler/harbour.y
* generate line numbers before extended codeblocks - it gives
more debugger friendly code.
* harbour/src/compiler/harbour.yyh
* harbour/src/compiler/harbour.yyc
* regenerated (with bison 2.4.1)
* harbour/include/hbdefs.h
* moved HB_WCHAR definition from hbapicdp.h to hbdefs.h
* harbour/include/hbapicdp.h
* harbour/include/hbcdpreg.h
* harbour/src/rtl/cdpapi.c
* harbour/src/rtl/cdpapihb.c
+ added support for custom sorting redirected from HVM
+ added support for custom character indexes in strings
+ added support for custom character flags (upper, lower, alpha, digit)
+ added support for custom upper/lower conversions
+ added support for CPs using unicode character values instead of
ASCII ones
+ added new CP functions which respects custom CP settings:
hb_cdpUpperWC(), hb_cdpTextLen(), hb_cdpTextPos(),
hb_cdpTextPosEx(), hb_cdpTextGetU16(), hb_cdpTextPutU16(),
hb_cdpCharEq(), hb_cdpCharCaseEq()
+ added new conversion functions:
hb_cdpGetUC(), hb_cdpGetWC(), hb_cdpGetU16Ctrl()
+ added macros to detect codepage parameters:
HB_CDP_ISBINSORT() - codepage uses simple binary sorting
HB_CDP_ISCUSTOM() - codepage uses custom string decoding
HB_CDP_ISCHARIDX() - codepage use character indexes instead
of bytes ones
HB_CDP_ISCHARUNI() - CHR(), ASC() and similar functions operates
on Unicode values instead of bytes
HB_CDP_ISUTF8() - codepage uses UTF-8 encoding
* harbour/include/inkey.ch
- removed HB_INKEY_EXTENDED - it was not used in Harbour
+ added new flag HB_INKEY_EXT - it allows to used different
event encoding system with automatic translation to
standard Clipper values. It will be used in the future
as base for low level GTs code. Now it's possible to
selectively switch to the new system. New codes are
unique and do not interacts with Clipper.
+ added HB_INKEY_ALL macro - it's similar to INKEY_ALL but
enables also GTEVENT keys.
* harbour/include/hbgtcore.h
* harbour/src/rtl/hbgtcore.c
* changed character values in internal screen buffer to unicode.
Warning: this modification interacts with SAVESCREE()/RESTSCREEN()
data. Now all GTs uses extended definition. If somene
has code which needs VGA like screen buffers returned
by SAVESCREE() then it can be forced by
hb_gtInfo( HB_GTI_COMPATBUFFER, .t. )
Anyhow it will for to use only one CP in output.
+ added new GT methods which operated on HB_WCHAR values
* modified existing methods using HB_WCHAR/HB_USHORT parameters
to operate on HB_WCHAR values
+ added codepage conversion code directly to core code so it can
be eliminated from low level GT drivers which do not need some
special operations on it.
+ added support for extended inkey codes, they allow to encoded
unicode values, mouse events with flags, keyboard events with
modifier flags (shift,alt,ctrl,...), etc.
Now in low level GT code only unicode key values are used but
I plan to updated all GTs and switch to new code - it should
resolve many small problems inheriting with Clipper inkey codes.
* harbour/include/hbapifs.h
* moved hb_fsNameConvU16() definition from hbapicdp.h to hbapifs.h
* harbour/include/hbxvm.h
- removed comment copied by mistake from GT header file
* harbour/include/hbwinuni.h
* changed HB_CHARDUP() and HB_CHARDUPN() macros - now they
operate on functions which can be used without active HVM.
In such case ANSI CP is used as source encoding.
+ added new macros: HB_OSSTRDUP() and HB_OSSTRDUP2().
They make conversions from OS encoding to HVM one.
They can be used without active HVM and in such case ANSI CP
is used as destination encoding.
* harbour/include/hbapi.h
* harbour/src/vm/cmdarg.c
+ added new function hb_cmdargProgName()
It returns application name with path or NULL if not set,
caller must free returned value with hb_xfree() if not NULL.
The string is in HVM encoding so it does not need any additional
encodings.
* modified hb_cmdargString() to return strings in HVM encoding.
% some small code optimizations
; NOTE: parameters passed to MS-WINDOWS GUI programs which use
WinMain() instead of main() as startup entry are translated
to ANSICP before they can be accessed by application.
This can be eliminated though not for console programs
using where C compiler makes such translation to main()
parameters.
in all systems parameters are passed to application
startup and init functions before programmer can set OS CP.
This can be resolved by adding:
INIT PROC CLIPINIT()
SET( _SET_CODEPAGE, <userCP> )
SET( _SET_OSCODEPAGE, <systemCP> )
RETURN
to linked code. INIT procedures called CLIPINIT() are
executed before any other ones.
* harbour/include/hbapi.h
* harbour/src/vm/set.c
+ added new functions for CP converisons which can be used with
and without active HVM:
hb_osStrEncode(), hb_osStrEncodeN(),
hb_osStrDecode(), hb_osStrDecode2(),
hb_osStrU16Encode(), hb_osStrU16EncodeN(),
hb_osStrU16Decode(), hb_osStrU16Decode2(),
* harbour/include/hbvm.h
* harbour/src/vm/hvm.c
+ added new function hb_vmIsReady() - it's similar to hb_vmActive()
but it also checks if current thread has active HVM stack.
* moved hb_cdpReleaseAll() to the end of HVM cleanup code so
CP conversions are longer active.
* harbour/include/hbcomp.h
* harbour/src/compiler/cmdcheck.c
* harbour/src/compiler/hbusage.c
* harbour/src/common/expropt2.c
+ added new compiler switch:
-ku - strings in user encoding
Now it informs compiler that strings use custom encoding so some
optimizations which are byte oriented cannot be used.
It's possible that in the future we will change above definition
to sth like: "strings in UTF8 encoding" but now I would like to
keep more general.
* harbour/src/vm/macro.c
* inform macrocompiler about custom CPs using own character indexes
to disable byte oriented optimizations.
* harbour/include/hbapigt.h
* harbour/src/rtl/gtapi.c
* harbour/src/rtl/inkeyapi.c
+ added HB_B_*_W macros with unicode box character definitions
+ added HB_MBUTTON_* macros
+ added new GT functions: hb_gtHostCP() and hb_gtBoxCP() which
allows to extract CPs used in translations by GTs.
+ added new function hb_inkeyKeyString() - it converts inkey value
to corresponding string
+ added new function hb_inkeyKeyStd() - it converts new extended
key value to standard Clipper one.
* harbour/include/hbapifs.h
* harbour/src/common/hbffind.c
* moved OS codepage translations fully to hb_fsFind*() functions.
It fixes few problems which existed before, i.e. double CP
conversions in MS-Windows builds and simplifies upper level code.
* harbour/src/pp/hbpp.c
* harbour/src/rtl/direct.c
* harbour/src/rtl/fssize.c
* harbour/src/rtl/file.c
* harbour/contrib/hbct/files.c
* eliminated not longer necessary CP conversions in code calling
hb_fsFind*() functions.
* harbour/src/common/hbgete.c
* moved OS codepage translations to hb_getenv(), hb_getenv_buffer()
and hb_setenv() functions. It fixes few problems which existed
before, i.e. double CP conversions in MS-Windows builds and
simplifies upper level code.
* harbour/src/rtl/net.c
* harbour/src/rtl/gete.c
* eliminated not longer necessary CP conversions in code calling
hb_getenv()/hb_setenv() functions.
; NOTE: additional parameters in HB_GETENV() and HB_SETENV() which
disabled CP conversions are not longer supported.
They were strictly platform dependent and ignored in chosen
cases (i.e. in MS-Windows UNICODE builds we always have to
convert strings transferred between HVM and OS. If someone
needs old functionality for other platform then he should
temporary disable _SET_OSCODEPAGE.
* harbour/src/common/hbver.c
* harbour/src/common/hbfsapi.c
* harbour/src/rtl/fstemp.c
* harbour/src/rtl/fslink.c
* eliminated HB_TCHAR_*() macros
* harbour/src/common/strwild.c
+ added supprot for custom CPs using own character indexes in:
hb_strMatchWild(),
hb_strMatchWildExact(),
hb_strMatchCaseWildExact()
* harbour/src/nortl/nortl.c
+ added new dummy function replacement for binaries which are not
linked with HVM.
* harbour/src/rtl/filesys.c
! fixed double CP conversions in MS-Windows builds of hb_fsCurDirBuff()
* use hb_vmIsReady() instead of hb_stackId() in file name conversions.
* use hb_cmdargProgName() in hb_fsBaseDirBuff()
* harbour/src/rtl/philes.c
* use hb_cmdargProgName() in HB_PROGNAME() function.
* harbour/src/rtl/gtcgi/gtcgi.c
* harbour/src/rtl/gtstd/gtstd.c
* harbour/src/rtl/gtpca/gtpca.c
* harbour/src/rtl/gtdos/gtdos.c
* harbour/src/rtl/gtos2/gtos2.c
* harbour/src/rtl/gtwin/gtwin.c
* harbour/src/rtl/gtwvt/gtwvt.h
* harbour/src/rtl/gtwvt/gtwvt.c
* harbour/src/rtl/gttrm/gttrm.c
* harbour/src/rtl/gtcrs/gtcrs.c
* harbour/src/rtl/gtsln/gtsln.c
* harbour/src/rtl/gtsln/kbsln.c
* harbour/src/rtl/gtsln/gtsln.h
* harbour/src/rtl/gtxwc/gtxwc.h
* harbour/src/rtl/gtxwc/gtxwc.c
* harbour/contrib/gtwvg/gtwvg.c
* harbour/contrib/gtwvg/gtwvg.h
* harbour/contrib/gtalleg/gtalleg.c
* harbour/contrib/hbqt/gtqtc/gtqtc.cpp
* harbour/contrib/hbqt/gtqtc/gtqtc.h
* updated to work with new unicode GT API
please make tests with different GTs - I'm not able to test
all of them, i.e. I do not have any OS2 machine.
* harbour/src/rtl/box.c
* harbour/src/rtl/oldbox.c
* harbour/src/rtl/scroll.c
* harbour/src/rtl/console.c
* updated to work with new unicode GT API and
CPs using custom character indexes
* harbour/src/rtl/at.c
* harbour/src/rtl/ati.c
* harbour/src/rtl/rat.c
* harbour/src/rtl/len.c
* harbour/src/rtl/transfrm.c
* harbour/src/rtl/left.c
* harbour/src/rtl/right.c
* harbour/src/rtl/substr.c
* harbour/src/rtl/stuff.c
* harbour/src/rtl/padc.c
* harbour/src/rtl/padl.c
* harbour/src/rtl/padr.c
* updated to work with CPs using custom character indexes
* harbour/src/rtl/chrasc.c
+ added support for HB_CDP_ISCHARUNI() CPs.
* harbour/src/rtl/mlcfunc.c
* rewritten from scratch to work with CPs using custom character
indexes
* harbour/src/rtl/accept.c
* updated to work with unicode inkey values and
CPs using custom character indexes
* harbour/src/rtl/strmatch.c
% small optimization
* harbour/src/rtl/Makefile
+ harbour/src/rtl/chruni.c
+ added new PRG functions which allows to make byte/binary and
unicode/character operations on strings:
HB_UCHAR( <nCode> ) -> <cText>
return string with U+nCode character in HVM CP encoding
HB_BCHAR( <nCode> ) -> <cText>
return 1 byte string with <nCode> value
HB_UCODE( <cText> ) -> <nCode>
return unicode value of 1-st character (not byte) in given string
HB_BCODE( <cText> ) -> <nCode>
return value of 1-st byte in given string
HB_ULEN( <cText> ) -> <nChars>
return string length in characters
HB_BLEN( <cText> ) -> <nBytes>
return string length in bytes
HB_UPEEK( <cText>, <n> ) -> <nCode>
return unicode value of <n>-th character in given string
HB_BPEEK( <cText>, <n> ) -> <nCode>
return value of <n>-th byte in given string
HB_UPOKE( [@]<cText>, <n>, <nVal> ) -> <cText>
change <n>-th character in given string to unicode <nVal> one and
return modified text
HB_BPOKE( [@]<cText>, <n>, <nVal> ) -> <cText>
change <n>-th byte in given string to <nVal> and return modified
text
* harbour/src/rtl/hbdoc.prg
* harbour/src/rtl/memvarhb.prg
* use HB_BCHAR() for binary string definitions
* harbour/src/rtl/hbi18n2.prg
* use hb_utf8CHR( 0xFEFF ) instead of hardcoded binary sting and
HB_BLEN() instead of LEN()
* harbour/src/rtl/inkey.c
+ added new functions:
HB_KEYCHAR( <nKey> ) -> <cChar>
HB_KEYSTD( <nExtKey> ) -> <nClipKey>
! use HB_INKEY_ALL instead of INKEY_ALL in LASTKEY()
* harbour/src/rtl/achoice.prg
* harbour/src/rtl/browse.prg
* harbour/src/rtl/menuto.prg
* harbour/src/rtl/tgetlist.prg
* harbour/src/rtl/teditor.prg
* harbour/src/rtl/tlabel.prg
* harbour/src/rtl/tpopup.prg
* harbour/src/rtl/radiobtn.prg
* harbour/src/rtl/radiogrp.prg
* harbour/src/rtl/wait.prg
* updated to work with unicode inkey() values
* harbour/src/rtl/listbox.prg
* use box.ch macros instead of explicit CHR(...) definitions
* harbour/src/rtl/ttopbar.prg
* updated to work with different type of CPs
* harbour/src/rtl/scrollbr.prg
* formatting
* harbour/src/rtl/mouse53.c
* use HB_MBUTTON_* macros instead of local ones
* harbour/src/codepage/cp_utf8.c
+ harbour/src/codepage/uc16def.c
+ harbour/src/codepage/utf8sort.c
* replaced UTF8ASC with new CP: UTF8EX
This CP uses character indexes instead of bytes one
and operates on unicode characters flags.
Tables for upper/lower conversions and upper/lower/alpha/digit
flags were generated automatically from
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
It also uses custom collation rules. It's very simple one
level sorting based on UTF8 C collation.
If someone needs some advanced sorting rules, then it's enough
to create copy of this cp with user custom version of UTF8_cmp()
and UTF8_cmpi() functions, i.e. they can be redirected to some
external library like ICU (icu-project.org).
* harbour/contrib/hbct/ctwin.c
* harbour/contrib/hbct/ctwin.h
* harbour/contrib/hbct/ctwfunc.c
* added support for new unicode GT API
* harbour/contrib/xhb/xhbfunc.c
* redirected HB_CMDARGARGV() to HB_PROGNAME()
* harbour/contrib/hbnf/origin.c
* redirected FT_ORIGIN() to HB_PROGNAME()
* harbour/contrib/hbnf/getenvrn.c
! windows version of FT_GETE() fully rewritten - it should
fix well known problems reported to the devel list. Please test.
% small optimization for other systems
* harbour/contrib/hbfship/exec.c
* use hb_cmdargProgName() in EXECNAME()
+ harbour/tests/uc16_gen.prg
+ added code which generates tables with unicode character flags
from http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.
harbour/src/codepage/uc16def.c was generated by this code.
* harbour/tests/inkeytst.prg
* harbour/tests/wvtext.prg
* harbour/tests/gtkeys.prg
* use HB_INKEY_ALL
* harbour/include/harbour.hbx
* harbour/include/hbcpage.hbx
* harbour/include/hblang.hbx
* regenerated
; It was quite big peace of modifications and for sure not everything
is well tested so please make test and report problems you will find.
; This is basic version which introduce to HVM CPs with custom encodings.
Some contrib code has to be updated to work correctly with it.
I hope that developers interesting in will make necessary updates.
I haven't touched GTWVW code at all - sorry but it needs very serious
work to make it production ready and fix all existing problems.
; Special thanks to OTC - this firm sponsored adding basic UTF8 support
to HVM.
* src/compiler/hbopt.c
! fixed -w3 warning 'Variable ... is assigned but not used' in case of
BEGIN SEQUENCE/END SEQUENCE sentence. Ex.:
BEGIN SEQUENCE
nI := 1
BREAK(NIL)
RECOVER
? nI
END SEQUENCE
* harbour/include/hbcompdf.h
* harbour/src/compiler/hbmain.c
* harbour/src/compiler/hbcomp.c
* harbour/src/compiler/harbour.y
* harbour/src/compiler/harbour.yyc
! fixed compile time GPF exploited by strings used in CASE values
of SWITCH statement compiled with active TEXHIDDEN pragma.
Warning: strings used in such context (CASE values) are not encrypted
in generated code, i.e. ".jpeg", ".jpg", ".png" in this code:
SWITCH hb_FNameExt( cFileName )
CASE ".jpeg"
CASE ".jpg"
CASE ".png"
show_pict( "Article picture", cFileName )
ENDSWITCH
* harbour/src/compiler/hbmain.c
! take starting line number from PP to eliminate possible
synchronization problem
* harbour/src/compiler/hbcmplib.c
! minor fix in meta filename detecting
* harbour/include/hbpp.h
* harbour/include/hbcomp.h
* harbour/src/pp/ppcore.c
* harbour/src/compiler/hbmain.c
* harbour/src/compiler/hbcmplib.c
+ added support for setting starting line number in code compiled
from memory buffer
! removed unnecessary EF_CANDEFULT flag from recently added
compiler RTE
* harbour/include/hbpp.h
* harbour/include/hbcomp.h
* harbour/include/hbcompdf.h
* harbour/src/compiler/hbmain.c
* harbour/src/compiler/hbcomp.c
* harbour/src/compiler/hbgenerr.c
+ added support for redirecting compiler warning and error messages
to user function.
* harbour/src/compiler/hbcmplib.c
+ optional support for generating RTE in HB_COMPILE*() functions
on compile errors.
* harbour/include/hbstack.h
* harbour/src/vm/estack.c
+ added internal function hb_stackLockCount()
* harbour/src/vm/hvm.c
* modified hb_vmRequestReenter() to return HB_FALSE instead of GPF
when called from non HVM thread.
* extended hb_vmRequestReenter[Ext]()/hb_vmRequestRestore() to
save and restore HVM stack lock state and lock HVM stack before
successful return.
This extensions is critical for MT applications which need
to safely reenter HVM also from code encapsulated inside unknown
number of hb_vnUnlock()/hb_vnLock() calls.
[TOMERGE 3.0]
* harbour/src/compiler/cmdcheck.c
% removed redundant conditions
* src/compiler/cmdcheck.c
! added workaround for what it seems like a clang bug in latest Apple XCode 4.1
'Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM 3.0svn)',
manifesting in this error:
---
/Developer/usr/bin/clang -I. -I../../../../../include -fno-common -W -Wall -O3 -o cmdcheck.o -c ../../../cmdcheck.c
clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal 1 (use -v to see invocation)
---
The fix simply introduces a new variable to use ptr reference instead of
indexed vector access in one specific loop.
Please review/refix it, I didn't make functional tests.
* harbour/src/vm/thread.c
* set sleep timeout in *nix version of hb_threadReleaseCPU() to 10 ms
* harbour/src/compiler/hbpcode.c
! fixed typo which could cause compile time crash when debugger code
is generated (-b) and file name with extenssion has only one or
two characters
* harbour/include/hbcompdf.h
* harbour/src/compiler/hbmain.c
* harbour/src/compiler/hbstripl.c
* harbour/src/compiler/harbour.y
* harbour/src/compiler/harbour.yyc
! removed old code designed to optimize line numbers generated in PCODE.
It cannot work correctly and in some cases it was generating HB_P_LINE
pcodes in wrong places.
% enabled new code for HB_P_LINE PCODEs optimization also in debugger (-b)
compilation so it can be used to replaced the old one.
* src/compiler/gencc.c
! hb_p_pushlong: conditional -gc3 generated code modified to
evaluate the condition at C compile time rather than .c
code generation time. This particular fix would pbly only
affect 16-bit cross builds, which we don't have any ATM.
; TOFIX: same in hb_p_pushlonglong
* contrib/hbrun/hbrun.prg
! Fixed to not crash due to corrupted .hrb leftover files next to hbrun executable.
* src/compiler/hbusage.c
! typo in e-mail address
* contrib/hbqt/hbqt_common.hbm
+ qt autodetection on beos
* config/postinst.hbs
* ld config -> linux only
; [Tamas Tevesz]
* harbour/src/rtl/valtype.c
* modified to work with any HB_IT_STRING flags we may add in the future
* harbour/src/rdd/dbcmd.c
* eliminated explicit hb_parinfo() usage
* harbour/src/compiler/harbour.y
* added casting which seems to be necessary for some newer bison versions
* harbour/doc/xhb-diff.txt
* typo
* harbour/src/compiler/gencc.c
* added workaround for C compilers which cannot compile very long
strings. This hack is not enabled by default and can be enabled
by __HB_CSTRING_SIZE_MAX[=<maxsize>] macro (by default <maxsize>
is 4KB).
* harbour/include/hbcompdf.h
* harbour/src/compiler/hbmain.c
* save and restore compiler settings when separated .prg files are
compiled as different modules. Files compiled as single module
(i.e. by .clp files, #included, added by DO ... [WITH ...], etc.)
are still compiled using the same settings inheriting any modifications
introduced by #pragma. It's intentional behavior.
* harbour/src/compiler/complex.c
! fixed condition used in some seldom places to convert expressions
inside square brackets [] to strings, i.e.:
FOR EACH c IN [abc]
? c
NEXT
* keep Clipper restrictions for FUNCTION and PROCEDURE keywords
covered by -kc switch
* harbour/ChangeLog
* marked may last TODO note as DONE - thanks to Viktor and Mindaugas
* harbour/include/hbmacro.h
! added missing const in hb_macroGenPCodeN() declaration
* harbour/include/hbapi.h
* added const to HB_CODEBLOCK.pCode
* harbour/include/hbcompdf.h
! added missing const to HB_MACRO.string
* harbour/src/pp/ppcore.c
* harbour/src/common/hbstr.c
* harbour/src/compiler/hbmain.c
* harbour/src/compiler/hbfix.c
* harbour/src/compiler/complex.c
* harbour/src/compiler/hbdead.c
* harbour/src/compiler/genc.c
* harbour/src/compiler/hbident.c
* harbour/src/compiler/gencc.c
* harbour/src/compiler/hblbl.c
* harbour/src/compiler/harbour.yyc
* harbour/src/compiler/harbour.y
* harbour/src/compiler/harbour.yyh
* harbour/src/vm/macro.c
* harbour/src/vm/codebloc.c
* harbour/src/vm/itemapi.c
* harbour/src/vm/hvm.c
* harbour/src/rtl/hbjson.c
* harbour/src/rtl/sha1.c
* harbour/src/rtl/sha2hmac.c
* harbour/src/rtl/hbsocket.c
* harbour/src/rtl/hbbffnc.c
* harbour/src/rtl/itemseri.c
* harbour/src/rtl/filebuf.c
* harbour/src/rtl/hbbfish.c
* harbour/src/rtl/gttrm/gttrm.c
* harbour/src/rdd/workarea.c
* harbour/src/macro/macrolex.c
* harbour/src/rdd/usrrdd/usrrdd.c
* cleaned const pointer casting
* harbour/src/rdd/usrrdd/usrrdd.c
! fixed very serious bug located during const pointer cleanup
which should cause GPF on user code creating indexes
* harbour/src/rtl/sha2.c
* minor formatting
; TOFIX: Seems that there is sth wrong with src/rtl/sha1.c.
Function SHA1_Transform() wrongly declares 2-nd parameter
buffer[64] as const when in fact it changes it what can be
seen if
BYTE64QUAD16 *block;
is changed to:
const BYTE64QUAD16 *block;
This casting which removes const hides potentially very serious
bug - modifying readonly memory area. SHA1_Transform() changes
the buffer so the 2-nd parameter must be declared without const.
After such modification C compiler should warn when const buffers
are passed to this function and such places should be fixed.
In fact it seems to be only line 136:
SHA1_Transform(context->state, &data[i]);
Viktor can you look at it and fix the code?
* harbour/include/hbpp.h
! removed repeated declaration of hb_pp_eof()
* harbour/include/hbapicdp.h
* harbour/include/hbapilng.h
* harbour/include/hbgtcore.h
* added extern declaration to HB_*_REQUEST() macros to pacify
undeclared global functions warnings
* harbour/include/hbstack.h
! added missing hb_stackDec() declaration
* harbour/include/hbdefs.h
! added missing const in some endian macros
* removed some unnecessary casting which may hide bugs
in the code
* harbour/include/hbapi.h
! removed repeated declaration of hb_strVal()
* harbour/include/hbznet.h
! removed repeated declaration of hb_znetError()
* harbour/include/hbcompdf.h
* minor comment
* harbour/src/vm/hvm.c
! added missing static to hb_vmTSVarClean() declaration
* added extern hb_vmForceLink() declaration to pacify
undeclared global functions warnings
* harbour/src/vm/thread.c
* make hb_threadInit() and hb_threadExit() internal HVM
functions available only in MT mode
* harbour/src/rtl/dates.c
! added missing static to hb_dateUnformatRaw() declaration
* harbour/src/macro/macrolex.c
* added extern hb_macro_yylex() declaration to pacify
undeclared global functions warnings
* harbour/src/rdd/workarea.c
* added extern _hb_rddWorkAreaForceLink() declaration to pacify
undeclared global functions warnings
* harbour/src/compiler/complex.c
* added extern hb_comp_yylex() declaration to pacify
undeclared global functions warnings
* harbour/contrib/hbnetio/netiocli.c
! added missing static to s_fileFlush() declaration
* harbour/contrib/hbct/tempfile.prg
! respect in TmepFile() function default file attributes set by
SetFCreate()
* harbour/contrib/hbct/ctstrfil.h
! added missing declarations for ct_getfcreate() and ct_setfcreate()
* harbour/contrib/hbwin/legacy.prg
* removed dummy RETURN statement
* harbour/contrib/xhb/fparse.c
! added missing static to hb_ParseLine() declaration
* harbour/contrib/xhb/freadlin.c
! added missing static to hb_fsReadLine() declaration
* harbour/contrib/xhb/txtline.c
! added missing static to hb_readLine() and hb_tabexpand() declarations
! fixed uninitialized variable warning exploited by above modification
(static function was automatically inlined increasing optimizations)
* harbour/contrib/xhb/hbserv.c
! removed repeated declaration of hb_isService() and hb_serviceExit()
* harbour/contrib/xhb/cstructc.c
* disabled public C functions hb_retclenAdoptRaw() and hb_retclenStatic()
* harbour/contrib/xhb/xhbat.c
* declare C function hb_AtSkipStrings() as static
Warning: this functions is part of public xHarbour C API.
; TODO: The following functions are declared as public but without
any prototypes in header files so they should be made static
or we should add them to some header files:
hbver.c:143: hb_verHostCPU()
hbjson.c:640: hb_jsonEncode()
hbjson.c:665: hb_jsonDecode()
sha2.c:228: sha256_transf()
sha2.c:445: sha512_transf()
I would like to ask authors to look at them and chose
best solution.
* harbour/src/rtl/gtclip.c
! fixed bug in calculation of maximum unicode clipboard buffer size
* harbour/src/compiler/complex.c
! recognize BREAK( [<exp>] ) as BREAK [<exp>] statement
not function call - it enables some addiitonal compiler
logic like warning for unreachable code, i.e.:
proc main()
break()
? "Hello World!!!"
return
* harbour/contrib/xhb/xhb.hbp
* harbour/contrib/xhb/xhb.hbx
+ harbour/contrib/xhb/xhbmvinf.c
+ added __MVSYMBOLINFO() xHarbour compatible function
* harbour/src/rdd/dbfntx/dbfntx1.c
* harbour/src/rdd/dbfnsx/dbfnsx1.c
* harbour/src/rdd/dbfcdx/dbfcdx1.c
! fixed INDEX ON ... command with USECURRENT clause to
ignore active filter on internal GOTOP operation.
Many thanks to Oleg for bug report and self contain
code example illustrating the problem.
* harbour/include/hbpp.h
* harbour/include/hbcomp.h
* harbour/src/pp/ppcore.c
* harbour/src/main/harbour.c
* harbour/src/compiler/hbmain.c
* harbour/src/compiler/ppcomp.c
* harbour/src/compiler/hbcmplib.c
* added support for setting hash array as container for included
files in HB_COMPILE*() functions.
* harbour/utils/hbrun/hbrun.prg
+ added optional support for embedding all core header files
into final HBRUN executable file. It can be enabled by
compilation with HBRUN_WITH_HEADERS macro.
* harbour/contrib/hbsqlit3/hbsqlit3.c
! removed non standard C construction
% push function parameters directly on HVM stack
* harbour/src/compiler/hbmain.c
+ allow to use -p* switches in HB_COMPILEFROMBUF()
* harbour/src/compiler/harbour.y
+ accept
#line <num>
directive without file name. It can be usable in some cases
and it also resolves the problem reported by Viktor when
we compile file without any name, i.e. using HB_COMPILEFROMBUF()
function.
* harbour/src/compiler/harbour.yyc
* regenerated
* harbour/src/compiler/hbmain.c
! reset function and class declaration between compiling files included
by SET PROCEDUR TO <name> or DO <name> [ WITH <args,...> ]
This behavior is synced with PP rules resetting.
* harbour/contrib/xhb/xhb.hbp
+ added two .ch files
* harbour/contrib/hbct/hbct.hbx
* regenerated with LF EOL.
I think that these files should be declared in SVN as using native
EOLs
* harbour/src/compiler/hbmain.c
* declare automatically created function in code compiled by
HB_COMPILEFROMBUF() with -n2 switch as static.
It eliminates possible conflicts when user tries to register
in single HVM instance many HRB modules with such startup function.
+ Added to the list of contributors:
Carlos Bacco (carlosbacco gmail.com)
Francesco Perillo (fperillo gmail.com)
Istvan Bisz (istvan.bisz t-online.hu)
Tamas Tevesz (ice extreme.hu)
(I accept recommendation about who else should be added,
it's be a while I updated this list)
* contrib/hbide/ideparseexpr.c
% Using hb_parldef().
* src/compiler/hbcomp.c
! Revisiting non-*nix stdout/stderr usage in compiler.
From now on the Clipper (and old MS-DOS/Windows tool)
compatible behavior is only maintained for MS-DOS Harbour
builds, for the rest error messages are output to stderr,
regular msgs are output to stdout.
* include/hbcomp.h
* src/macro/macro.yyc
* src/macro/macro.y
* src/macro/macrolex.c
* src/compiler/hbmain.c
* src/compiler/complex.c
* src/compiler/harbour.yyc
* src/compiler/harbour.y
* Changed prefix used for bison generated function prefix
(hb_comp -> hb_comp_yy, hb_macro -> hb_macro_yy)
; Pls review.
This avoids collision between hb_macroError/hb_macroerror
for obsolete tools like bcc implib which uses case-insensitive
symbol lookup by default)
* package/winuni/mpkg_win_uni_extra_copy.bat
+ Added trick to generate special implib for core .dlls so
that now bcc can use the regular Harbour one and doesn't
need the special '-bcc' postfixed version to be shipped.
An ugly trick for an obsolete compiler.
(release process now requires bcc implib tool because of this)
* utils/hbmk2/hbmk2.prg
+ Added -c option to implib calls. This fixes implib generation
for certain .dlls, like OpenSSL.
* harbour/include/hbcomp.h
! fixed description of HB_VS_CBLOCAL_VAR macro
* harbour/src/compiler/hbmain.c
! fixed wrongly generated E0047 compile time error for
codeblocks with early evaluated macros accessing local
parameters. It should fix problem reported by Itamar.
* harbour/src/vm/hvm.c
* modified one #if condition to pacify ICC warning
reported by Andi
* harbour/src/compiler/gencc.c
! fixed wrongly used HB_ISIZ instead of HB_LONG
* harbour/package/harbour.spec
! fixed /etc/ld.so.conf.d detection
% minor improvement
; TOFIX:
* /etc/ld.so.conf.d/harbour.conf in final RPM contains
wrong path due to missing HB_INSTALL_PREFIX
* soft links to harbour shared libraries for systems
without /etc/ld.so.conf.d are missing
* soft links with short shared libraries names are missing
and current long names do not confirm standard Linux
shared library naming convention:
<name>.so[.<maj>[.<min>[.<rel>]]]
hbmk2 also uses short names so it does not work correctly
with binaries installed from the RPMs
* src/compiler/genc.c
* src/compiler/gencc.c
! Fixed format strings to be win64 compatible. Also fixing
mingw64 (4.6.0) reported warnings.
; I'd appreciate a review here. There are explicit lengths
used in some of these format strings, which may need to
be extended.
* src/rdd/dbffpt/dbffpt1.c
! Silenced bcc warning.
* harbour/include/hbpp.h
* harbour/include/hbmacro.h
* harbour/include/hbcomp.h
* harbour/include/hbcompdf.h
* harbour/include/hbexprb.c
* harbour/src/pp/ppcore.c
* harbour/src/compiler/hbmain.c
* harbour/src/vm/macro.c
! fixed code used to decide about early and late macro
evaluation in codeblocks to be exactly Clipper compatible.
Now if codeblock contains at least one macro variable
(i.e.: &var, any&var, any&var.2) then it's always early
evaluated.
Please remember that codeblocks which contains only simple
macro variable ( &var[.] ), i.e.:
{|| &var }
are modified during compilation by Clipper and Harbour compilers to:
&( "{||" + var + "}" )
and then PCODE is generated. It allows to use LOCALs, STATICs and
FIELDs as 'var' in such expressions. In xHarbour above functionality
was extended to work also with macrotext variables, i.e.:
{|| &var.2 }
If you think it's important extension then I can make the same
in Harbour or I can even implement it for all codeblock expressions
with macros using declared non memvar symbols, i.e.
{|| &var + 1 }
what should effectively eliminate E0047 compile time error
! fixed compile time error E0042 "Macro of declared symbol..."
to be generated with the same conditions as in Clipper.
! fixed compile time error E0047
"Code block contains both macro and declared symbol references..."
to be generated with the same conditions as in Clipper.
Note: -km switch disables macro text evaluation so also above errors
unless macro is not used in codeblock
Warning: above modifications can cause compile time errors in some
code which was not Clipper compatible and in such case they
will have to be updated.
* harbour/utils/hbtest/rt_math.prg
! updated code with Clipper incompatible code exploited by above
modifications
* harbour/src/rtl/cdpapi.c
% removed one redundant if() condition
* replaced not working HB_CDP_[UN]LOCK used in hb_cdpList()
function with simple counter as protection against possible
overflow.
* harbour/src/compiler/complex.c
+ added support also for "." as date delimiters in VFP compatible
date[time] constant values.
* harbour/doc/xhb-diff.txt
* updated description of date[time] constant values syntax
to follow current Harbour and xHarbour behavior.