* doc/dirstruc.txt
* Updated to reflect current state.
* source/compiler/hbusage.c
* source/lang/msghe862.c
* source/lang/msghewin.c
* source/rtl/tone.c
* source/rtl/gtos2/gtos2.c
* Update my email on source files
(didn't bother to change those under doc).
* harbour/include/hbpp.h
* harbour/source/pp/hbpp.c
* harbour/source/pp/ppcore.c
* harbour/source/compiler/hbmain.c
+ added support for dynamically calculated #define results
! removed old code which was adding __FILE__ #define constant
It was not working correctly like in other compilers ignoring
#include
+ added __FILE__ and __LINE__ #define directives using dynamically
calculated results - now it works as expected respecting #include
directives and the implementation is local to PP without any hacks
in core compiler code.
* harbour/contrib/hbct/files.c
* added support for optional milliseconds part in HB_FSETDATETIME()/
HB_FGETDATETIME().
* harbour/source/rtl/philes.c
! minor fix in return value
* source/rtl/binnumx.c
* Added rewritten versions of these functions:
a proper license: BIN2U(), W2BIN(), U2BIN()
; Work of Przemek.
* source/rtl/binnum.c
! Readded old copyright holder as co-holder.
* COPYING
* doc/license.txt
* source/rtl/binnum.c
* Added rewritten versions of these functions, now with
a proper license: BIN2W(), BIN2I(), BIN2L(), I2BIN(), L2BIN()
; Thanks to Przemek.
* COPYING
* source/rtl/philes.c
! Fixed license to have the Harbour exception, in agreement
with the group and main copyright holders.
* Minor cleanup to HB_FGETDATETIME().
* harbour/include/hbextern.ch
* harbour/source/rtl/philes.c
+ added HB_FGETDATETIME(). A "brother" of function HB_FGETDATETIME().
; TODO: BTW, hb_fs*() functions can get a better precision
(milliseconds). It would be nice to support it also at .prg level.
* source/rtl/gtwvt/gtwvt.c
* BYTE -> CHAR (Windows) - UNDONE.
* include/hbdefs.h
+ Added (commented) new types. Work in progress, incomplete.
* contrib/hbssl/ssl.c
- Temporary disabled SSL_GET_READ_AHEAD() as a workaround for
BCC linking problem with SSL_get_read_ahead() OpenSSL
library function (symbol is unresolved due to missing
leading underscore in implib generated ssleay32.lib file).
* source/vm/set.c
% hb_fsFile() -> hb_fsFileExists()
* source/rtl/hbffind.c
* HB_WIN_32_MATCH -> HB_WIN_MATCH
* doc/whatsnew.txt
* include/hbsetup.h
* source/vm/fm.c
* #define HB_FM_WIN32_ALLOC renamed to HB_FM_WIN_ALLOC.
; INCOMPATIBLE: For those who are using this switch, please
update your make files.
* source/rtl/tpopup.prg
! Fixed to draw separator lines with BOX GT attributes,
so that they appear properly.
* harbour/include/hbapi.h
* harbour/source/vm/cmdarg.c
+ added const char * hb_cmdargARGVN( int argc )
* harbour/source/vm/cmdarg.c
* try to convert executable file name argument in argv[0] to
absolute path if it's relative one. Respect PATH envvar it necessary.
* harbour/source/common/hbdate.c
* formatting
* harbour/source/rtl/philes.c
* harbour/source/rtl/errorint.c
* harbour/source/rtl/filesys.c
! use hb_cmdargARGVN(n) instead of hb_cmdargARGV()[n] to avoid
possible GPF if some function will be called before argument
initialization
* removed additional logic which tries to convert relative paths
in file name from hb_fsBaseDirBuff() and HB_PROGNAME() functions
* contrib/hbssl/Makefile
+ Added new detection dir.
* source/rtl/gtwvt/gtwvt.c
+ Added support for HB_GTI_BOXCP.
(available for UNICODE builds only).
* source/rtl/filesys.c
+ Added (untested) support for *NIX system to
hb_fsBaseDirBuff() / HB_DIRBASE().
* harbour/source/vm/classes.c
* covered some old functions marked as deprecated long time ago
by HB_LEGACY_LEVEL2 macro
* harbour/source/rtl/hbgtcore.c
* harbour/contrib/hbct/ctwin.c
* harbour/contrib/hbct/keyset.c
* harbour/contrib/hbct/misc3.c
* harbour/contrib/hbnf/numlock.c
* harbour/contrib/hbnf/shift.c
* harbour/contrib/hbnf/alt.c
* harbour/contrib/hbnf/ctrl.c
* harbour/contrib/hbnf/caplock.c
* use memset( >Info, 0, sizeof( gtInfo ) ); to initialize
HB_GT_INFO structure - it also fixes possible problems with
uninitialized pNewVal2 member in few cases.
* doc/whatsnew.txt
* include/clipdefs.h
* include/filesys.api
* include/gt.api
* include/hbapi.h
* include/hbapierr.h
* include/hbapifs.h
* include/hbapigt.h
* include/hbapiitm.h
* include/hbapirdd.h
* include/hbdefs.h
* include/hbgfxdef.ch
* include/hbgtinfo.ch
* include/hbsetup.ch
* include/hbsetup.h
* include/item.api
* include/rdd.api
* source/rtl/errorapi.c
* source/rtl/filesys.c
* source/vm/cmdarg.c
* common.mak
- source/vm/debugold.c
* source/vm/Makefile
* source/vm/vmmt/Makefile
- Permanently disabled HB_LEGACY_LEVEL support.
+ Added HB_LEGACY_LEVEL2 support to protect some
recently made incompatible changes. Old methods
are supported until Harbour 1.2. Please update
your code until then. To test your code for
compatibility with recent changes, you can turn
off legacy support manually by #defining HB_LEGACY_OFF.
(HB_USER_CFLAGS=-DHB_LEGACY_OFF)
This is recommended on local systems for all
Harbour developers.
* include/hbapigt.h
* source/rtl/gtfunc.c
+ Extended HB_GT_INFO structure with nPCount member.
* include/hbgtinfo.ch
* include/hbgtcore.h
* source/rtl/hbgtcore.c
+ Added HB_GTI_CARGO. This can be used to store whatever
user defined value on a per GT basis.
HB_GTINFO( HB_GTI_CARGO[, <xValue ] ) -> <xPrevValue>
* source/rtl/hbgtcore.c
! hb_gt_def_Alert() fixed to also initialize pNewVal2 with NULL.
(didn't cause any real-world harm).
* contrib/hbwin/win_tprn.prg
% Minor optimizations.
* source/rtl/fstemp.c
! Added cast for MSVC warning. (this code part was
formerly only active for non-Windows builds)
* include/hbapifs.h
* source/rtl/fstemp.c
* source/rtl/filebuf.c
* UCHAR -> BYTE in new FS functions, for consistency.
* include/hbapifs.h
* source/rtl/spfiles.c
+ Added hb_spFileExists(). Same as hb_spFile(), but uses
the more efficient (especially on networks) hb_fsFileExists()
call to check for file exitance.
[ not very elegant solution, as I've just copied the
whole function, and changed the file existance call, maybe
a worker function + passing the check function pointer
could help, but the hb_fsFile() and hb_fsFileExists() workings
differ slightly. ]
* source/rdd/dbfntx/dbfntx1.c
* source/rdd/dbfnsx/dbfnsx1.c
* source/rdd/dbfcdx/dbfcdx1.c
* source/rdd/dbf1.c
% Using hb_spFileExists() instead of hb_spFile().
This API also works for dirs where use doesn't have file listing
rights, which may create a slight incompatibility by finding
files which weren't found by former method (and by Clipper).
C:\WINDOWS\TEMP\*.* were such when logged in as non-admin user,
but this dir is only used as a default TEMP dir for DOS programs.
Please speak up if you find this issue (or something else) to
be problem.
* source/rtl/file.c
* File naming standardized.
* doc/whatsnew.txt
* Minor updates.
* include/hbapifs.h
* include/hbextern.ch
* source/rtl/fstemp.c
* source/rtl/filebuf.c
+ Added hb_fsCreateTempEx(). Similar to hb_fsCreateTemp(),
but allows to control the extension. Note, that the
ordering of parameters ha slightly changed compared to
hb_fsCreateTemp().
+ Added hb_fileCreateTempEx(). See above.
+ Added Harbour level HB_FTEMPCREATEEX(). See above.
; Please review & test.
* harbour/include/hbdefs.h
* harbour/include/hbapi.h
* moved HB_ISSPACE(), HB_ISFIRSTIDCHAR() and HB_ISNEXTIDCHAR() from
hbapi.h to hbdefs.h
+ HB_ISXDIGIT() macro
* harbour/include/hbpp.h
* updated other HB_PP_IS*() macros definitions to internally use HB_IS*()
ones
* harbour/source/rtl/fstemp.c
! fixed unterminated ASCIIZ string
TODO: new macros HB_CHARVAL( c ), HB_CHARXVAL( c ),
HB_VALDIGIT( i ), HB_VALXDIGIT( i )
* harbour/source/rtl/philes.c
* harbour/source/rtl/dirdrive.c
* harbour/source/rtl/philesx.c
* harbour/source/rtl/filesys.c
! fixed CURDRIVE() and DISKNAME() to not return "A" in OS-es which
does not use drive letters
! eliminated toupper()
% minor cleanup and speed improvement
* harbour/config/bin.cf
* harbour/config/test.cf
* removed quoting for TOP=$(GRANDP) nested GNU make call parameters
* config/os2/dir.cf
* use $(COMSPEC) instead of calling cmd.exe directly
* config/os2/gcc.cf
* rewrote create_library rule to work with make -jn without
breaking shell environment/command line size.
* source/rtl/hbproces.c
* included sys/waith.h in OS/2 build. I think that initial
#defines can be simplified a bit.
* config/os2/install.cf
* rewrote install_rule to work with make -jn without
breaking shell environment/command line size.
* config/lib.cf
* removed unnecessary double quotes around TOP definition
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
! fixed typo in one internal function name
* harbour/include/hbapi.h
* harbour/include/hbstack.h
* harbour/source/vm/estack.c
* harbour/source/vm/dynsym.c
* harbour/source/vm/memvars.c
% changed code used for memvars clear in MT mode - it greatly
reduce the cost of HVM thread exit
% changed code for memvars copping/sharing when thread is started
it greatly reduce the time of thread creation when existing memvars
are shared or copied
Both modifications reduced the cost of simple
hb_threadJoin( hb_threadCreate( {|| NIL } ) )
few times depending on number of symbols and memvars.
* harbour/source/rtl/gttrm/gttrm.c
* harbour/source/rtl/gtsln/gtsln.c
* harbour/source/rtl/gtsln/gtsln.h
* harbour/source/rtl/gtpca/gtpca.c
% added better initial cursor position detection and eliminated sscanf()
* harbour/source/Makefile
! fixed concurrent dependencies in cross builds
* source/rtl/tget.prg
* source/rtl/tgetx.prg
* source/rtl/tbcolumn.prg
* source/rtl/tbrowse.prg
* Reset internal name of GET(), TBROWSE(), TBCOLUMN(),
because even if Clipper doesn't have such public
symbols, Class(y) has them, and we want to maintain
compatibility.
* include/hbextern.ch
+ Added GET, TBROWSE, TBCOLUMN.
* include/hbextern.ch
* source/rtl/tbcolumn.prg
* source/rtl/tbrowse.prg
* source/rtl/tget.prg
* source/rtl/tgetx.prg
! Using new method to solve the GET()/TBROWSE()/TBCOLUMN()
symbol problem (these aren't public symbols in Clipper).
The method used is the one already implemented for other
C53 CUI classes.
This allows inheritance, doesn't mess up the class name,
and won't declare above public symbols.
* Moved Xbase++ compatible GET()/TBROWSE()/TBCOLUMN()
functionality into separate classes, all inheriting from
original Harbour classes. This means that Xbase++
compatible methods are only accessible when using the
derived classes. The separation will allow us to
move XPP (and other HB_COMPAT_*) compatible functionality
into a separate libraries in the future, allowing more
freedom to resolve clashing features, symbol names, etc..
* Xbase++ compatible classes are named: xpp_Get(),
xpp_TBrowse(), xpp_TBColumn(). This is a slight
incompatibility compared to Xbase++ and also to
previous Harbour. Technically it seems possible
to give them the names GET()/TBROWSE()/TBCOLUMN(), if
the class is defined in a different file, but let's first
discuss it.
* source/rtl/tgetint.prg
* Using GetNew() instead of Get():New().
; Finally I didn't use '( ... )' to pass parameters in GetNew(),
as it's a tiny bit less efficient with -gc3.
* include/hbusrrdd.ch
* include/hbapi.h
+ Comment.
* include/hbextern.ch
* common.mak
* source/rtl/Makefile
+ source/rtl/tgetx.prg
* source/rtl/tget.prg
* source/rtl/tgetint.prg
+ CA-Cl*pper compatible GET class renamed to HBGet and
is now always available regardless of feature settings.
* Xbase++ compatible GET class named Get(), moved to separate
file and now inherits from HBGet, plus implements
additional functionality also in the separate file.
* GetNew() moved to tget.prg from tgetint.prg.
* Code changed to use HBGet():New() instead of Get():New().
; TOFIX: After above changes, Xbase++ compatiblity
methods are no longer available for regular
GETs, only if they are explicitly created
using Get():New(). If this is a problem for someone
we can start thinking of a solution.
; TODO: Do the same with TBrowse() and TColumn().
* source/rtl/gtwvt/gtwvt.c
! Fixed to #undef _WIN32_WINNT before setting it.
; TOFIX: hbwhat has this problem in almost all of its source
files.
* contrib/examples/uhttpd/modules/bldhrb.bat
* contrib/examples/uhttpd/modules/showcounter.prg
* contrib/examples/uhttpd/hbmk_b32.bat
* contrib/examples/uhttpd/hbmk_vc.bat
* Minor.
* harbour/include/hbdefs.h
* include stdint.h in DJGPP >= 2.4
* harbour/source/common/hbprintf.c
! fixed DJGPP <= 2.3 compilation
* harbour/source/common/hbstr.c
* force buffer ending in DJGPP <= 2.3 when vsprintf() is used
* harbour/source/rtl/hbproces.c
! fixed typo in HB_SYMBOL_UNUSED() variable name
* harbour/config/dos/global.cf
! fixed for GNU make ports which prefer COMSPEC before SHELL
* common.mak
* include/hbextern.ch
* source/rtl/Makefile
+ source/rtl/strxor.c
+ Added HB_STRXOR() (work of Mindaugas Kavaliauskas)
* common.mak
* source/common/Makefile
+ source/common/hbprintf.c
+ Added hb_snprintf_c() (temp name, untested) (work of Przemyslaw Czerpak)
[ I've added a normal Harbour license, as per your permission
on the list. Pls give me feedback is this is wrong. ]
* source/rdd/usrrdd/example/exlog.prg
! Fixed missing #includes.
* source/rdd/usrrdd/example/hbmk_b32.bat
+ source/rdd/usrrdd/example/hbmk_vc.bat
+ Added MSVC make file.
! Added EOL to the last line to hbmk_b32.bat.
! xhb.lib dependency removed. It was not needed anyway.
; TOFIX: When compiling exhsx.prg, this happens:
exhsx.obj : error LNK2001: unresolved external symbol _HB_FUN_HSXRDD
* contrib/hbssl/sslsess.c
* contrib/hbssl/sslctx.c
* contrib/hbssl/sslciph.c
* Minor changes.
* source/rtl/philes.c
! FWRITE(): Fixed accessing past the string buffer (thus
causing potential GPF and a huge security hole) when
the passed length is greate than the lenght of the string.
Very old bug. In fact CA-Cl*pper suffers from the same
problem, and behavior for such case is not documented.
Harbour will ignore the length parameter (thus writing
the whole passed string), if the length is invalid.
* harbour/common.mak
* harbour/source/rtl/Makefile
- harbour/source/rtl/hbi18n.c
+ harbour/source/rtl/hbi18n1.c
* renamed hbi18n.c to hbi18n1.c to avoid conflicts with hbi18n
program - non GNU make files needs unique file names
! fixed bug in internal function __I18N_HASHTABLE()
* harbour/common.mak
* harbour/source/rtl/Makefile
+ harbour/source/rtl/hbi18n2.prg
+ added new I18N functions to manage .pot files and generate .hbl ones.
public functions:
HB_I18N_loadPot( <cFile>, [<pI18N>] [, @<cErrorMsg>] ) -> <pI18N> | NIL
Reads .pot file and returns Harbour translation set or NIL when
error appears. In such case <cErrorMsg> is contains error message
string. If second parameter [<pI18N>] is given then translation
items read from .pot file are added to this set. Otherwise new
Harbour translation set is created.
HB_I18N_savePot( <cFile>, <pI18N> [, @<cErrorMsg>] ) -> <lSuccess>
Generates .pot file from Harbour translation set. Please note
that Harbour translation set does not contain additional
information which exists in original .pot files like source
code numbers or alternative plural forms.
internal functions for Harbour developers which will work on I18N
tools:
__I18N_potArrayLoad( <cFile> [, @<cErrorMsg>] ) -> <aTrans> | NIL
Reads .pot file and returns array with translation items or
NIL when error appears. In such case <cErrorMsg> is contains
error message string.
<aTrans> is an array with translation items containing additional
informations from .pot file which are not necessary in final
translation sets used at runtime. It's designed for I18N tools
written in Harbour to manage .pot files and/or create .hbl ones.
__I18N_potArraySave( <cFile>, <aTrans> [, @<cErrorMsg>] ) -> <lSuccess>
Generates .pot file from array with translations items.
__I18N_potArrayJoin( <aTrans>, <aTrans2> ) -> <aTrans>
Join two arrays with translation items. Items from <aTrans2>
are added to <aTrans>. If given translation item already exists
in <aTrans> (the same msgctxt and msgid) then source code references
are merged and translations from <aTrans2> are added only if
<aTrans> does not have it.
__I18N_potArrayToHash( <aTrans>, [<lEmpty>] [, <hI18N>] ) -> <hI18N>
Converts array with translation items to hash table in the format
used internally by Harbour translation sets. It's the same format
as used __I18N_hashTable() function. The conversion removes data
which is not necessary for runtime translations like source code
references or alternative source plural forms.
If second parameter <hI18N> is given then translation items form
<aTrans> are added to it. Otherwise new hash table with is created.
If <lEmpty> is .T. then also items with empty translation are added
but source strings are used instead of missing destination ones.
* harbour/include/hbextern.ch
+ added new I18N functions
* harbour/harbour-win-spec
* harbour/harbour-wce-spec
* harbour/harbour.spec
* harbour/mpkg_tgz.sh
* harbour/make_b32.mak
* harbour/make_vc.mak
* harbour/make_gcc.mak
* harbour/common.mak
* harbour/utils/Makefile
+ harbour/utils/hbi18n
+ harbour/utils/hbi18n/hbi18n.prg
+ harbour/utils/hbi18n/Makefile
+ added very simple application to manage .pot/.hbl files
Syntax: hbi18n -m | -g [-o<outfile>] [-e] [-q] <files1[.pot] ...>
-m merge given .pot files
-g generate .hbl file from given .pot files
-o<outfile> output file name
default is first .pot file name with
.po_ (merge) or .hbl extension
-e do not strip empty translation rules from .hbl files
-q quiet mode
TODO: extend it and add support for interactive mode which will
allow to edit translations.