* utils/hbmk2/hbmk2.*.po
* utils/hbmk2/hbmk2.prg
+ added '-hb30' option and '{hb30}' filter macro to allow
reverting back to Harbour 3.0.0
+ added provisions for merging 'hblang' and 'hbcpage'
core libs into new 'hbnat' lib
+ SETCURSOR() and SETCOLOR() references will now also
trigger full screen CUI mode in hbrun scripts
+ documented the fact that GTCGI is default GT for scripts
and that it's switched to another one (and which) when
CUI mode script is detected
+ marked all information in help with '[*]' which shows
host platform dependent, dynamic data (f.e. systems paths)
+ hbmk.hbc will now be searched for under user's home
directory on non-*nix, too
+ added '-find' special hbmk2 option for finding Harbour functions.
It will lookup any strings passed as command line arguments
and display in which library they can be found. It will
also do the lookup in packages not currently installed.
Replaces similar 'hbrun bin/find' functionality, but now
uses existing code inside hbmk2. The new implementation
also supports wildcards.
Example:
hbmk2 -find wapi_*string ntos wild
! documented that hbstart.hb is first searched for in
current working directory
! ${hb_ver} and ${hb_verstr} macros now change their value
in compatibility modes (-hb10, -hb20, -hb30, -xhb)
+ -longhelpmd output will now not contain installation
specific (and potentially sensitive) data: home directory,
hbmk2 directory, only generic replacement terms
+ version= directive help text got a mention of its default
value (it was so far only mentioned next to HBMK_HAS_<hbcname>
envvar)
+ documented exit codes in help text
* minor tweaks to some help lines
* cleanup for Markdown formatting internals
* plugin callback variable "nErrorLevel" renamed to "nExitCode"
[INCOMPATIBLE]
* exit code changed to value 6 from 1 when hbrun script has
a compile error [INCOMPATIBLE]
+ use core hb_DirSepToOS() where possible
- deleted hbmk2 plugin API function hbmk_PathSepToSelf()
Use core hb_DirSepToOS() instead. [INCOMPATIBLE]
+ added '-exitstr' hbmk2 option which will display the exit result
in textual format
* contrib/hbpre.hbm
* contrib/make.hb
% use -exitstr hbmk2 option instead of rolling a local copy
of possible result strings
* src/pp/ppcore.c
+ generate '\a' '\f' '\v' escape chars
- bin/find.hb
* config/postinst.hb
* package/harbour.spec
- deleted find.hb for 'hbrun bin/find' functionality.
Replaced by 'hbmk2 -find' option.
* src/rtl/Makefile
- src/rtl/strxchg.c
+ src/rtl/strrepl.c
* src/rtl/tget.prg
* utils/hbmk2/hbmk2.prg
* include/harbour.hbx
* ChangeLog.txt
* renamed HB_STRXCHG() to HB_STRREPLACE(), according to:
https://groups.google.com/d/topic/harbour-devel/vSzlAkv6h9Y/discussion
* updated function skeleton in ChangeLog and C source
(also with new hash parameter)
* contrib/hbsqlit3/hbsqlit3.hbp
* contrib/hbsqlit3/hbsqlit3.hbx
+ contrib/hbsqlit3/errstr.prg
+ hb_sqlite3_errstr_short( <nError> ) -> <cError>
* contrib/hbsqlit3/tests/authoriz.prg
* contrib/hbsqlit3/tests/backup.prg
* contrib/hbsqlit3/tests/hooks.prg
% use hb_sqlite3_errstr_short() instead of implementing
it locally in each example
% use sqlite3_errstr() API to get long error strings instead
of reimplementing it locally
% minor opt
* contrib/hbsqlit3/hbsqlit3.hbp
- contrib/hbsqlit3/hdbcsqlt.prg
+ contrib/hbsqlit3/hdbc.prg
* renamed
* contrib/hbhpdf/errstr.prg
* contrib/hbmzip/mziperr.prg
! indenting
* contrib/hbtip/tests/tiptest.prg
* leave color
* src/codepage/*.c
- src/codepage/l_*.c
+ src/codepage/l_*.h
* src/lang/Makefile
- src/lang/*.c
+ src/lang/l_*.c
+ renamed collation modules and language modules, so they
now can be merged into a single directory (and sorted
by extension to overview country coverage).
* src/common/hbstr.c
+ added missing some C escaped chars: \a, \f, \v
INCOMPATIBLE: thus far they had been converted to
char 'a', 'f', 'v' respectively.
e"" string literals, HB_STRCDECODE(), HB_STRDECODESCAPE()
are affected.
* utils/hbmk2/hbmk2.prg
! avoided one ASCII code dependent comparison
! added missing value value validation for -incpath= option
* minor internal cleanups
* utils/hbmk2/hbmk2.prg
+ reminaing STRTRAN() to HB_STRXCHG() update.
* converted few NOTEs to TODOs to eliminate few
cases of recursive macros (which exploited side-effect
of repeated STRTRAN() calls)
; Any sort of regression is possible now.
* utils/hbmk2/hbmk2.prg
! fixed casing of hb_StrXChg() to match harbour.hbx
! fixed to not include and invalid header directory
in a rare case (hbmk2 -head=native t.c -hbc -inc)
on header detection. It seemed a duplicate value
in valid cases anyway.
+ using HB_STRXCHG() with the new hash option almost
everywhere
+ use HB_STRXCHG() in some more places when forming
command (no everywhere yet, and the recursive
replacement was localized but not sorted out yet)
+ use HB_STRXCHG() to replace macros in an internal
template
; HB_STRXCHG() can resolve unlikely case where
options/filenames contained macro names used inside
the source. It also makes for a less ambiguous code.
+ added warnings if invalid value is used in certain
options. (after HB_LEGACY_LEVEL4, until then, the
replacement option is displayed)
* src/rtl/tget.prg
* utils/hbmk2/hbmk2.prg
! fixed casing of hb_StrXChg() to match harbour.hbx
* harbour/src/rtl/strxchg.c
+ added support for using hash arrays as replace pairs in second
argument of hb_strXChg() - hash arrays are accepted if 3-rd parameter
is ommitted or is NIL. Now this alternative syntax:
hb_strXChg( <cString>, <hChanges> ) -> <cResult>
is also supported, i.e.:
cData := hb_strXChg( cSource, { "{LI}" => cLIValue, ;
"{FI}" => cFIValue } )
Please remember that single hash layer is much lighter data type
then array of subarrays because it needs only one GC item when
each subarray is new GC item.
* harbour/include/hbtypes.h
* renamed HB_EXTISARRAY to HB_EXTISPARAM, old type is covered by
HB_LEGACY_LEVEL4 macro.
* harbour/include/hbapi.h
* harbour/src/vm/extend.c
+ added new public C function:
HB_BOOL hb_extIsNil( int iParam );
% use hb_extIsNil(n) in HB_ISNIL(n) macro. It eliminates double
function call and also double (n) usage so it improves the
performance and allows to use complex expressions as HB_ISNIL()
argument.
* harbour/src/vm/maindllp/dllext.c
+ added wrappers for hb_extIsNil() abd hb_extIsObject()
* src/rtl/tget.prg
% use HB_STRXCHG()
* utils/hbmk2/hbmk2.prg
+ use HB_STRXCHG() for all Markdown conversion
! use HB_STRXCHG() in filter evaluation code. It will
fix potential problem when macro values contained
internal placeholder string
! fixed Markdown conversion in copyright banner
% use \t instead of manual solution
* other minor cleanups
+ added a good bunch of TODOs for remaining places
where STRTRAN() has to be changed to HB_STRXCHG()
I'm only wishing for a syntax that keeps search
and replace values closer together to keep the
source well readable, f.e.:
STRXCHG( str, { ;
{ "{LI}", cLIValue }, ;
{ "{FI}", cFIValue } } )
Though it may be solved with a local wrapper because
they are not speed critical. Ideas welcome.
* utils/hbmk2/hbmk2.*.po
* utils/hbmk2/hbmk2.prg
! fixed most hacks around embedded newlines in hbmk2's
own output messages. Now they are handled natively,
which will fix output that contains "\n" as normal
part of the text, f.e. "C:\name\", and makes the
newlines in .po files standard.
* ChangeLog.txt
* utils/hbmk2/hbmk2.prg
! "Markdown" cased correctly
* src/rtl/strxchg.c
+ SVN props
* contrib/hbtip/httpcli.prg
* cleanups
* harbour/include/harbour.hbx
* harbour/src/rtl/Makefile
+ harbour/src/rtl/strxchg.c
+ added new PRG function:
hb_strXChg( <cString>, <cSource> | <acSource>, ;
<cDest> | <acDest> ] ) -> <cResult>
This function allows to easy replace different substrings in
given string.
If 2-nd is string then each character in <cString> which exists
in <cSource> at <n> position is replaced by corresponding character
at <n> position in <cDest> or string from <acDest>[ <n> ]
If 2-nd parameter is array then each <cString> substring which exists
in <acSource> at <n> position is replaced by corresponding character
at <n> position in <cDest> or string from <acDest>[ <n> ].
If <n> is longer then LEN() of <cDest> or <acDest> then given
character/substring is removed from result.
This function should help in code which wrongly uses repeated
StrTran() calls all regex which can change also substituted values.
Examples:
// encode XML value
cXmlText := hb_strXChg( cText, "<>&", { "<", ">", "&" } )
// now decode it to raw text
cText := hb_strXChg( cXmlText, { "<", ">", "&" }, "<>&" )
// strip all digits from string
cNoDigit := hb_strXChg( cText, "0123456789" )
// extract all digits from string
cDigits := hb_strXChg( cText, cNoDigit )
// convert chosen letters to upper case
? hb_strXChg( "hello world, "hlwd", "HLWD" )
* harbour/src/common/hbfopen.c
* added workaround for missing wsystem() in XCC
* contrib/hbtip/httpcli.prg
+ Added: method :Put( xPostData, cQuery ).
This is identical to :Post() but issues PUT verb instead of POST.
PUT verb is required for certain RESTful operations.
* contrib/xhb/hbxml.c
! several memory leaks fixed in xhb XML support (TXml class)
; Patch by Jose F. Gimenez. Thank you very much.
* utils/hbmk2/hbmk2.prg
! fixed -request= to work again for Harbour pcode dynlibs
regression from: 2010-07-31 13:44 UTC+0200 Viktor Szakats
8fb774ef80
(sf.net's SVN web browser is effectively unusable anymore
for certain parts of Harbour, their server cannot handle
the history)
! fixed missing detection for the proper bcc linker option
that disables warning for duplicate symbols in executables
* extras/template/hbtpl.hbp
+ added example to link dynlib against other Harbour (pcode) dynlib
Disclaimer: There is no "generic support" for this,
only a set of conventions used throughout Harbour
contrib .hbc files, contrib/make.hbs and
$hb_pkg_dynlib.hbm (aka utils/hbmk2/pkg_dynl.hbm)
* extras/*/*.hbx
* refreshed
* utils/hbmk2/hbmk2.*.po
* utils/hbmk2/hbmk2.prg
* some internal cleanups
+ invalid libpath detection extended to .hbc files
+ invalid header path detection extended to .hbc files
+ invalid libpath detection extended to an alternate lib directory
+ invalid header/lib path detection now detects some
relative path formats
+ invalid header/lib path detection now detects values
pointing to embedded C compiler location (these are
always invalid and handled by hbmk2 automatically)
; amazing what it takes to protect users from themselves!
I guess users who make above errors won't read the
warnings anyway.
* utils/hbmk2/hbmk2.prg
* -harbourhelp description detailed
+ documented -build option in help
+ support for -credits option
! fixed indentation in two recent functions
* utils/hbmk2/examples/contrib.hbc
! minor correction
* contrib/hbformat/hbfmtcls.prg
* contrib/hbformat/utils/hbformat.ini
+ allow control for how many spaces to insert (or leave
as is) between comment markers and comment text.
Thanks to Jose F. Gimenez for the bit-perfect patch.
* utils/hbmk2/hbmk2.prg
! fixed libname suggestion in a very obscure case
* utils/hbmk2/examples/contrib.hbc
- utils/hbmk2/examples/contribf.hbc
- deleted further .hbc examples with heavy contrib specific
information. For live .hbc example it's best to check any
of them in /extras/*/ and /contrib/*/ directories
* utils/hbmk2/hbmk2.prg
+ better detection of core libraries specified in user make files
+ hbmk2 will now detect certain common and non-portable/wrong
library specifications in command line and .hbc file.
It will also suggest to correct options to use.
It's now a warning, but such wrong options will be ignored
after HB_LEGACY_LEVEL4.
Report if it causes warnings for proper usage scenarios.
Some examples for wrong options detected:
my.lib
libmy.lib
-lmy.lib
-llibmy.lib
-llibmy.a
-lmy.a
-lC:\libs\my.lib
-lC:\libs\libmy.lib
-lC:\libs\libmy.a
-lC:\libs\my.a
-lC:\libs\hbrtl.a
-lC:\hb30\lib\win\mingw\
-lC:\hb30\lib\win\mingw\my
-lC:\hb30\lib\win\mingw\my.a
-lC:\hb30\lib\win\mingw\hbrtl.a
-lhbrtl.lib
-llibhbrtl.a
-lhbrtl.a
[ For those who wonder: all of these can be safely
replaced with '-lmy -LC:\libs' ]
* utils/hbmk2/hbmk2.prg
* utils/hbmk2/examples/contrib.hbc
* minor internal and help cleanups
- utils/hbmk2/examples/c4w.hbc
- utils/hbmk2/examples/fwh.hbc
- utils/hbmk2/examples/oohg.hbc
- utils/hbmk2/examples/whoo.hbc
- utils/hbmk2/examples/xhgtk.hbc
- deleted example .hbc files for defunct, commercial
or long time untested against 3rd party libs, that
held no real example value anymore. It's best if
these files are shipped by the projects themselves.
* utils/hbmk2/hbmk2.*.po
* utils/hbmk2/hbmk2.prg
+ added all supported filter values/expressions to help.
! fixed case insensitiveness in filter comparison
expressions (=,>,<) to work on non-ASCII chars as well.
(I wouldn't recommend using accented chars to control
build behavior though)
* src/rtl/hbstrfmt.c
* HB_STRFORMAT(): changed to not RTE if there is format
string reference to a parameter missing at runtime,
but instead simply ignore that parameter specifier.
Format strings are primarily meant to help language
translation of human readable strings. Old behavior
could result in very difficult to test or predict
runtime errors caused by typos, mistakes in translation
(.po) files. It may also be unsafe in some situations,
allowing DoS attack.
TODO: To implement parameter checking, Harbour compiler
should handle HB_STRFORMAT() as intrinsic function
and test and warn if the number of parameter specifiers
differs from the actual number of parameters passed,
at compile time. Similar to GCC/CLANG.
* contrib/hbhttpd/tests/files/main.css
* extras/hbdoc/hbdoc.css
* extras/httpsrv/home/css/base.css
* website/css/styles.css
* cleanups and applied http://csscomb.com
* utils/hbmk2/hbmk2.prg
+ ability to output help text in MarkDown format:
hbmk2 --longhelpmd > man.md
view it with any MarkDown compatible viewer, or
convert to HTML/PDF/MANPAGE/TROFF/etc.
* utils/hbmk2/hbmk2.prg
+ show warning and offer best practice when non-portable
".exe" extension is used in -o option
+ show warning and offer best practice when non-portable
"*.lib" library name is passed directly to hbmk2
* src/codepage/l_sv.c
+ NOTE with Klas's explanation of the extra chars
included over the Swedish alphabet
+ 4 new characters add to the Swedish
collation as per Klas's guidance:
https://groups.google.com/d/msg/harbour-devel/13ImOaYoq8o/B-mDY708EpcJ
(and its followup)
* utils/hbmk2/hbmk2.prg
! very minor fix where -hbc= options list value
items are now trimmed from spaces.
* config/aix/gcc.mk
* config/beos/gcc.mk
* config/bsd/clang.mk
* config/bsd/gcc.mk
* config/bsd/pcc.mk
* config/cygwin/gcc.mk
* config/darwin/clang.mk
* config/darwin/gcc.mk
* config/dos/djgpp.mk
* config/global.mk
* config/hpux/gcc.mk
* config/linux/clang.mk
* config/linux/gcc.mk
* config/linux/sunpro.mk
* config/minix/ack.mk
* config/minix/clang.mk
* config/minix/gcc.mk
* config/os2/gcc.mk
* config/qnx/gcc.mk
* config/sunos/gcc.mk
* config/sunos/sunpro.mk
* config/symbian/gcc.mk
* config/vxworks/gcc.mk
* config/vxworks/global.mk
* config/wce/mingwarm.mk
* config/win/clang.mk
* config/win/mingw.mk
* utils/hbmk2/hbmk2.prg
* README.txt
* envvar renamed HB_CCPOSTFIX -> HB_CCSUFFIX
INCOMPATIBLE. (I surmise few people need this,
hence no grace period)
* contrib/hbmemio/tests/test.prg
* minor cleanup
* contrib/hbtip/popcli.prg
+ QUESTION to method that returns three different types
(of those two are indicating different errors)
+ TOFIX added to code that can RTE (due to similarly
messy solution which returns multiple type in different
cases, which is obviously not accounted for when
calling it.)
* include/harbour.hbx
* updated/cased
* contrib/hbtip/mail.prg
* format
* harbour/include/hbapi.h
* harbour/src/vm/arrays.c
+ added new internal VM C function: hb_arraySwap()
! fixed typo HB_TRACE message
* harbour/src/vm/hvm.c
+ added support for codeblocks in __vmItemID()
* harbour/src/vm/classes.c
+ added PRG new functions:
__objRestoreIVars( <aIVars>, <hClass> | <sClassFunc> |
<cClassName>[, <cClassFuncName>] ) -> <oObject>
it works in similar way to __objSetIVars() but stores new object
result in passed <aIVars> array.
* harbour/src/rtl/valtoexp.prg
! fixed serialization code for nested objects with redefined [] operator
! fixed cross references detection broken in last modification
* utils/hbmk2/hbmk2.*.po
* utils/hbmk2/hbmk2.prg
+ help text added for .hbc directives
+ added -longhelp/--longhelp option which will include
envvars, .hbc directives and maybe future details
+ added -depfinish=, -harbourhelp, -ldflag+=, -dflag+=
to help text
+ -depfinish= will now show a warning if non-existing
name is passed to it as parameter.
+ all warnings will now go to stderr (some were going to
stdout before)
+ added -dflags=, -dflags+= .hbc directives in sync with
existing options
* harbour/include/hboo.ch
* added small comment
* harbour/include/hbapirdd.h
* harbour/src/rdd/workarea.c
* fixed typo in parameter name
* harbour/include/hbapi.h
* harbour/src/vm/arrays.c
+ added to new C functions: hb_arraySetCPtr() and hb_arraySetCConst()
* harbour/src/vm/classes.c
+ added support for passing assign type restrictions to in
HB_OO_MSG_PROPERTY and HB_OO_MSG_CLASSPROPERTY in __clsAddMsg()
It can be done by new option 7-th <xType> parameter.
+ added support for super class casting in __objGetIVars() and
__objSetIVars(). Now this functions can be used to serialize
all object instance variables also overloaded by other classes
so they can be accessed only with super class casting or by
nonvirtual messages. It means that above functions create fully
functional serialization system and can be used as backed for
HB_SERIALIZE() and HB_VALTOEXP() when objects are serialized.
Such serialization consumes more time and needs more memory but
objects can be deserialized by modified code which uses slightly
different raw object representation. The original HB_SERIALIZE()/
HB_VALTOEXP() format is very fast and compact but it needs exactly
the same raw object representation in the program which serialized
object and in the program which later desrialize it. It may create
serious problems if programmer modify the code, i.e adding new
instance variables or changing their order in the object class or
or in one of its ancestors and then tries to restore some objects
serialized by previous program version.
* updated some comments and few typos in local names
* harbour/src/rtl/valtoexp.prg
* modified HB_VALTOEXP() to use be default __objGetIVars() and
__objSetIVars() to serialize objects.
+ added 2-nd parameter <lRaw> to HB_VALTOEXP(). By default it's .F.
Setting it to .T. forces all raw serialization format.
* utils/hbtest/hbtest.prg
+ will now recognize -help and --help options to
display help
- utils/hbmk2/hbmk2.1
- utils/hbtest/hbtest.1
* config/postinst.hb
- deleted platform specific "man"-files, which were
either outdated (hbmk2) or the exact same as regular
help output (hbtest). They are also extremely
inconvenient to edit with regular text editors, plus
keeping two similar docs in sync is very inefficient
so pbly it's better idea to create .md output from
the tools themselves and convert those to man
format using an automated tool like md2man.rb.
* utils/hbmk2/hbmk2.es_PE.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.pt_BR.po
* updated one string in sync with hbmk2.prg
* utils/hbmk2/hbmk2.prg
* update in a comment
* utils/hbmk2/hbmk2.prg
+ help text added for envvars, disk files and macros
supported by hbmk2
+ HB_CCSUFFIX envvar support added. Works the same as
HB_CCPOSTFIX, only with a new name
* HB_CCPOSTFIX envvar deprecated with HB_LEGACY_LEVEL4
* hbmk[ "cCCPOSTFIX" ] hbmk2 plugin variable renamed to
hbmk[ "cCCSUFFIX" ]. INCOMPATIBLE. Update your plugin
source if you used this.
* src/3rd/tiff/Makefile
- disabled JPEG support in libtiff.
I'm leaving tuning this to someone with more interest
in this feature, or wait until libtiff is synced with
latest jpeg lib changes. (Still related to the mess
they are making with boolean types that collide with
each other and certain platform ones.)
* contrib/hbssl/hbssl.hbm
* suppressed a gazillion of warnings where Apple was
telling us that OpenSSL - as a whole - is deprecated
since OS X Lion 10.7
* src/3rd/tiff/tiff.dif
* src/3rd/tiff/tiffconf.h
! fixed a zillion warnings when compiled on OS X
* config/bsd/clang.mk
* config/darwin/clang.mk
* config/linux/clang.mk
* config/minix/clang.mk
* config/win/clang.mk
! applied gcc/mingw 'HB_BUILD_WARN := no' settings to clang
* src/3rd/tiff/Makefile
! fixed regression due to strange change in jpeglib 9
related to bool type