* harbour/source/rtl/mlcfunc.c
! skip SOFTCR when it's on the end of extracted line.
; NOTE: MPOSTOLC() is not exactly CA-Cl*pper compatible
The returned value is intentionally updated to be
MLCTOPOS() so conversions are revertable. For me
it's a bug in CA-Cl*pper.
* harbour/source/rtl/tget.prg
! fixed translation comma/dot translation for pictures with "@E"
Viktor, please test it - I'm not very familiar with GET code
and it's possible that I made sth wrong
* harbour/contrib/hbmzip/zip.c
! fixed access to uninitialized member of z_stream by simple
initialization. Anyhow it's minor bug in MINIZIP code exploited
HB_ZipDeleteFile() which causes that TEXT flag is not set after
raw binary file updating. There is also no API call to make it
manually.
* harbour/contrib/hbmzip/hbmzip.c
* harbour/contrib/hbmzip/readme.txt
+ added HB_ZipDeleteFile( cZipFile, cFileMask ) --> nError
* harbour/common.mak
* harbour/source/rtl/Makefile
+ harbour/source/rtl/dirscan.prg
+ added HB_DirScan( cPath, cFileMask, cAttr )
* harbour/source/rtl/strmatch.c
+ added HB_FileMatch( cFile, cPattern )
* harbour/include/hbextern.ch
+ added HB_DirScan(), HB_FileMatch()
* harbour/contrib/xhb/dirrec.prg
* changed to use HB_DirScan()
* harbour/contrib/xhb/Makefile
* harbour/contrib/xhb/common.mak
+ harbour/contrib/xhb/dirrec.prg
+ added DirectoryRecurse() function. It's not exactly xHarbour
compatible as I wanted at the beginning. But when I begin
to carefully check what xHarbour exactly does then I dropped
the strict compatibility due to problems with xHarbour
implementation which have to be fixed. I left this note in the
dirrec.prg header:
This implementation uses different rules then xHarbour one.
It does not change current drive or current directory so
unlike the xHarbour version it's MT safe.
It also returns relative paths which are more similar to
DIRECTORY() function results so they can be easy used
directly in other code, f.e. to create archive without
absolute paths. Please note that user can easy convert
relative paths to absolte ones by simple adding curdir()
and/or cPath parameter passed to DirectoryRecurse() but
reverted conversion may not be possible in some cases.
The 3-rd xHarbour parameter <lCaseMach> is ignored because
harbour uses platform native rules to check filename mask
respecting SET FILECASE and SET DIRCASE settings.
xHarbour does not add "D" to attribute list used for directory
tree scanning so user always have to add it manually and later
it ignores it so it's not possible to extract file list with
directories entries. In Harbour it's fixed.
* harbour/source/rtl/philes.c
+ added hb_osFileMask()
* harbour/source/rtl/direct.c
% minor optimization
* harbour/source/rtl/hbinet.c
! fixed possible data file corruption due to wrong use of 0 handle.
0 handle is perfectly valid. By default it points to stdin but
it can be closed and then reused for any other thing, f.e. data
file. In such case any data written to socket was written to
such file and this situation was very easy to replicate with
old hbinet code.
! fixed resource leak due to unclosed handles in few cases
! fixed possible double close of the some handle what could cause
that other object handles reusing the same handle number between
first and second close (f.e. data files) was wrongly closed
! fixed s_inetRecvPattern()/HB_INETRECVLINE() - the end pattern
was wrongly checked and the code didn't detect end pattern in
streams like: "...\r\r\n" when end pattern was "\r\n"
NOTE: this code needs some general cleanup. IMHO it should be
joined with adding hbinet C API.
* harbour/source/common/hbwince.c
* formatting
* harbour/contrib/hbcurl/hbcurl.c
+ use hash table to keep strings passed to CURL library accessible
even if HVM destroys them. It should allow to safely use HBCURL
wrapper also with CURL library older then 7.17.0 though it can
be a little bit expensive in some cases. The allocated strings
are freed when CURL pointer is destroyed (directly or by
CURL_EASY_CLEANUP()) or reset by CURL_EASY_RESET().
This feature is enabled only when compiled for CURL libraries
older then 7.17.0 or when user set explicitly compile time macro
HB_CURL_HASH_STRINGS
Viktor, you are more familiar with this code so please check it.
* harbour/contrib/hbmzip/hbmzip.c
! fixed storing/setting file date, time and attributes in *nixes
* harbour/include/hbapifs.h
* harbour/source/rtl/hbffind.c
* harbour/source/rtl/filesys.c
! replaced hack with direct bit conversion in *nixes attributes
by bit testing
* harbour/source/rtl/gtwvt/gtwvt.c
* disabled SetWindowLongPtr() in 32bit MSVC WinCE builds
* harbour/source/rtl/hbffind.c
* minor cleanup.
* harbour/source/rtl/filesys.c
+ implemented hb_fsGetAttr() and hb_fsGetFileTime() for DOS, MS-Win,
OS2 and *nixes. Please test it on different platforms.
* include/hbapifs.h
* source/rtl/filesys.c
+ Added skeletons for hb_fsGetAttr() and hb_fsGetFileTime()
TODO: Implementation.
* contrib/hbclipsm/common.mak
* contrib/hbclipsm/Makefile
- contrib/hbclipsm/dbf.c
! Removed duplicate implementation of DBF() from hbclipsm.lib
; TOFIX:
I'm getting these new warnings under BCC55:
Warning W8080 source\rtl\filesys.c 2718: '_fstat(int,_stat *)' is declared but never used
Warning W8080 source\rtl\filesys.c 2718: '_disable()' is declared but never used
Warning W8080 source\rtl\filesys.c 2718: '_enable()' is declared but never used
Warning W8080 source\rtl\fssize.c 142: '_fstat(int,_stat *)' is declared but never used
* harbour/source/rtl/gtwvt/gtwvt.h
* added some definitions which seems to be missing in some MSVC-WinCE
versions
* harbour/source/rtl/gtwvt/gtwvt.c
* cleaned SetWindowLongPtr()/SetWindowLong() usage so now all calls
are protected by the same #if condition
* harbour/ChangeLog
* harbour/contrib/hbtip/ChangeLog
* replaced TABs with SPACEs
* harbour/source/compiler/genobj32.c
! fixed memory leak
TODO: disable this module in default builds until it will not
be fixed to generate valid OMF .obj files
* harbour/contrib/hbw32/dllcall.c
* minor cleanup in return values
* harbour/contrib/hbole/ole2.c
* cleaned casting in UNICODE conversions
* harbour/source/common/expropt2.c
* replicate CA-Cl*pper compile time optimization bugs:
"" $ <literString> => .T.
AT( "", <literString> ) => 1
CHR( 256 ) => ""
only when Harbour extensions (-kh) are not enabled, f.e.
in strict Clipper compatibility mode (-kc)
* harbour/utils/hbtest/rt_hvma.prg
* harbour/utils/hbtest/rt_str.prg
* updated to test Clipper and Harbour compile time modes in
the above situations
* harbour/common.mak
* harbour/source/rtl/Makefile
- harbour/source/rtl/strings.c
* harbour/source/common/hbstr.c
* moved hb_strEmpty() from RTL to COMMON library
* harbour/include/hbexprb.c
* harbour/include/hbexprop.h
* harbour/source/common/expropt2.c
+ added compile time optimization for EMPTY() function
; removed 'TODO: empty optimization' note
* harbour/source/rtl/itemseri.c
% compress trailing spaces during string item serialization
* harbour/include/hbapi.h
* harbour/source/vm/hashes.c
+ added hb_hashAddNew() - works like hb_hashAdd() but it adds item
only if new key is used
* harbour/source/vm/hvm.c
* use hb_hashAddNew() instead of hb_hashAdd() for HB_P_HASHGEN
I cannot revert the order of hash item during compilation because
it will also change the order of user expression evaluation.
* harbour/include/dbedit.ch
* harbour/source/rtl/dbedit.prg
+ added support for undocumented Clipper DE_APPEND mode - code
covered by HB_C52_UNDOC
% ignore K_MOUSEMOVE events to avoid flickering just like CA-Cl*pper
does
+ added support for cell positioning with mouse left key - CL53
compatible behavior covered by HB_COMPAT_C53 macro
* changed static function name dbEditCallUser() to CallUser() for
strict Clipper compatibility - some user function code may check
PROCNAME()
* some minor optimizations and fixes
* harbour/contrib/hbmzip/hbmzip.c
* indenting
* harbour/source/vm/hvm.c
* formatting
* harbour/include/hbwince.h
* harbour/source/common/hbwince.c
+ added SetFileAttributesA() for WinCE builds
* harbour/source/rtl/filesys.c
* replaced UNICODE translations for SetFileAttributes()
with direct call to SetFileAttributesA()
* harbour/include/hbapifs.h
* harbour/source/rtl/spfiles.c
* harbour/source/rtl/fstemp.c
* harbour/source/rtl/hbffind.c
* harbour/source/rtl/direct.c
* harbour/source/rtl/filesys.c
* changed internal representation for file attributes from USHORT
to ULONG
+ added support for POSIX permission attributes in .c code
; added some comments about used attribute translations which
should be cleand
* harbour/source/rtl/set.c
! do not add .prn extension to printer/extra filenames if file name
is one of well known device name: PRN, LPT[1-3], COM[1-9]
This code is enabled only for OS2 builds where it's necessary
but maybe MS-Windows/DOS users should think about adding it to
their builds too because sometimes also DOS/Win does not recognize
correctly device name when it has extension.
* harbour/include/hbdate.h
* harbour/source/common/hbdate.c
+ added hb_timeStampEncode()
* harbour/include/hbapifs.h
* harbour/source/rtl/filesys.c
+ added hb_fsSetFileTime()
+ added POSIX file attributes with some macros to convert Harbour
definitions into OS ones.
+ added initial version of hb_fsSetAttr() - work in progress, I should
finish it in the evening.
* harbour/contrib/hbmzip/hbmzip.c
* added setting file attribute in DJGPP builds
! fixed some small typos in OS2 builds reported by David
* harbour/source/vm/fm.c
* changed hb_xrealloc() to be ANSI-C realloc() compatible
* source/rtl/gtwvt/gtwvt.c
* contrib/gtwvg/gtwvg.c
! Restored previous change.
In Harbour, passing NULL to hb_itemPutC() is valid and
will result in an empty string being stored in an optimized way.
hb_itemPutCLPtr() should be used instead of hb_itemPutCPtr().
The GPF in question used to happen when setting the clipboard,
and it looks to happen inside the OS. I'm still investigating.
* contrib/hbapollo/tests/bld_b32.bat
* contrib/hbapollo/tests/bld_vc.bat
! Fixed external .lib name.
* harbour/include/hbrddcdx.h
* harbour/source/rdd/dbfcdx/dbfcdx1.c
! fixed casting for indexes with key length greater then 196 bytes
created on tables with record number smaller then 256. In such
case if keys have equal value then after decoding they may need
more then 32767 bytes and casting to SHORT gives negative indexes.
Thanks to Saulius Zrelskis for example.
% changed some SHORT to INT to reduce runtime overhead
* harbour/source/vm/runner.c
+ added support for passing non string parameters to .HRB INIT/<main>
procedures/function
+ added automatic destructors for .HRB modules
; TOFIX: add protection against possible double executing of
EXIT procedures in .HRB modules in HVM quit phase
* source/compiler/genhrb.c
* contrib/hbtip/utils.c
! Changed octal values in strings (and chars too) to make
these functions work with Pelles C 5.00.1.
* source/vm/arrayshb.c
* contrib/xhb/xhbfunc.c
! Moved hb_ArrayID() Harbour level function to xhb.lib.
; NOTE: This function is not compatible with x64 architecture.
* source/vm/extrap.c
! Warning fixed.
* contrib/hbmysql/mysql.c
* contrib/hbmysql/tmysql.prg
! sqlListF() return value changed to pointer from numeric.
Now compatible with Win64.
INCOMPATIBLE.
* contrib/hbw32/w32_prn.c
! Warning suppressed (pointer to BOOL conversion).
* contrib/hbw32/dllcall.c
* contrib/hbhpdf/harupdf.c
* contrib/hbfimage/fi_winfu.c
* contrib/hbgf/hbgfw32/win32.c
! Fixed several pointer (handle) passings to be 64bit compatible.
* contrib/hbw32/w32_reg.prg
* Minor formatting.
; TOFIX: There are still some PellesC 64bit warnings to be fixed.
(posted separately)
* source/rtl/hbffind.c
! Added workaround for PellesC 5.00.1 hang bug.
* config/w32/pocc.cf
% Removed unnecessary '-I' switches.
! Removed ws2.lib from liblist to make it link with PellesC 5.00.1
(where this lib is not available anymore).
* source/pp/hbpp.c
* source/pp/ppcore.c
* source/pp/pplib.c
! Fixed bug introduced in r8836, so that now __HARBOUR__
will again be #defined when 'harbour /u' switch is used.
Thanks Randy.