* src/rtl/filebuf.c
! fixed file handle sharing in POSIX systems when writeonly mode is used
! fixed accessing files in writeonly mode in POSIX systems which use
fcntl() locks for DENY_* flag emulation.
! added for POSIX systems protection against potential race condition in
MT programs and file open and close operations. Now the whole low level
open and close operations are covered by mutex. It means that they are
fully serialized so in case of remote file access (i.e. NFS or SMBFS)
it may reduce the performance in applications which simultaneously open
and closes many different files in different threads but its necessary.
For local file access it should not create noticeable scalability
problems. In my Linux box Harbour can open and close in MT mode more
then 250000 files per second.
% use different mutexes for file open/close and file lock operations to
not reduce the lock performance by potentially slow open() operation
in POSIX systems.
; NOTE: please remember that DENY_* flag emulation in POSIX systems
emulates only shared and exclusive modes so if any of
FO_DENYREAD, FO_DENYWRITE or FO_EXCLUSIVE flag is used then
it effectively works like FO_EXCLUSIVE in POSIX system and
is not mandatory for other processes so it blocks only
other Harbour applications which use Harbour virtual handles
(RDD code, hb_vf*() functions)
* src/rtl/filesys.c
* do not convert exclusive lock to shared one when file is open in
readonly mode on POSIX system using flock() for DENY_* flag emulation.
Now HB_USE_BSDLOCKS is enabled only for Linux and it's documented that
this implementation allow to use shared and exclusive locks regardless of
file open mode.
% do not create file name copy in hb_fsExtOpen() when passed parameters
does not force file name modification
* src/rtl/gtwin/gtwin.c
* added workaround for compilers which do not have MOUSE_HWHEELED macro
(thanks to Alexey)
* src/rtl/gtwvt/gtwvt.c
* do not use LR_DEFAULTSIZE in WinCE builds (synced with Viktor's branch)
* tests/gtkeys.prg
* casing
* src/rtl/gtsln/kbsln.c
* tests/inkey.prg
- removed not longer used HB_INKEY_RAW flag
* tests/inkey.prg
* test HB_INKEY_EXT keycodes when second parameter contains "E" letter
* src/rtl/gtwvt/gtwvt.c
* minor switch order modification
* accept 127 as unicode character value if system also do that
* src/rtl/gtwin/gtwin.c
+ added support for Harbour extended key codes
+ added support for mouse middle button
+ added support for some missing key combinations
! fixed mouse event processing
! fixed ALT + KeyPad NUMs processing - now it's disabled by default
because current GTWIN supports native ALT + KeyPad NUMs processing
provided by MS-Windows console. It works when NUMLOCK is ON. If
someone needs to process it also when NUMLOCK is OFF then he can
enable it by:
hb_gtInfo( HB_GTI_KBDALT, .T. )
! fixed and simplified workaround for bug in MS-Windows 95 and 98
consoles which wrongly decode SHIFT + <NUMBER> with CAPSLOCK ON
for standard US keyboard drivers. Now enabling this workaround by:
hb_gtInfo( HB_GTI_KBDSPECIAL, .T. )
should not break input with fixed keyboard drivers.
; please test it with different windows versions and national keyboard
layouts, tests/gtkeys.prg is quite good test program.
* src/rtl/gtwin/gtwin.c
! add some HB_GTI_* setting to default GT handler
(2015-06-08 23:32 UTC+0200 Viktor Szakats)
+ add HB_GTI_WINHANDLE support to GTWIN
(2015-04-24 19:56 UTC+0200 Viktor Szakats)
% variable scopes adjusted
* minor cleanups along the way
(2015-03-30 13:57 UTC+0200 Viktor Szakats)
! move misplaced comment to its proper location
(2015-03-28 15:45 UTC+0100 Viktor Szakats)
* simplify compatibility logic around [P]CONSOLE_SCREEN_BUFFER_INFOEX
it's also an attempt to fix it for some mingw distros
(f.e. on AppVeyor CI)
(2015-03-23 03:32 UTC+0100 Viktor Szakats)
% cleanup a #define spagetti
(2015-03-23 03:27 UTC+0100 Viktor Szakats)
! fixed msvc sanitize warnings
(2014-07-16 17:37 UTC+0200 Viktor Szakats)
* include/hbgtinfo.ch
* removed unused HB_GTI_KBD_* macros
* redefined few other HB_GTI_KBD_* macros to be more HB_KF_* friendly.
[INCOMPATIBLE]
; Warning this modification is not binary compatible so if someone uses
HB_GTI_KBD_SCROLOCK, HB_GTI_KBD_NUMLOCK, HB_GTI_KBD_CAPSLOCK,
HB_GTI_KBD_LSHIFT, HB_GTI_KBD_RSHIFT,
HB_GTI_KBD_LCTRL, HB_GTI_KBD_RCTRL,
HB_GTI_KBD_LALT, HB_GTI_KBD_RALT,
HB_GTI_KBD_LWIN, HB_GTI_KBD_RWIN or
HB_GTI_KBD_MENU
then he should recompile his code with new hbgtinfo.ch header files.
* include/hbgtcore.h
* src/rtl/gtkeycod.c
* src/rtl/gtdos/gtdos.c
* src/rtl/gtos2/gtos2.c
* src/rtl/gtpca/gtpca.c
* src/rtl/gtstd/gtstd.c
+ added support for Harbour extended keycodes
* src/rtl/gtos2/gtos2.c
+ added support for HB_GTI_KBDSHIFTS
* src/rtl/gtdos/gtdos.c
! fixed CTRL+C and CTRL+BREAK handling in OpenWatcom builds
* src/rtl/inkeyapi.c
! fixed translation for CTRL + @
* tests/gtkeys.prg
+ added raw keyboard test - it disables any additional interactions
* modified Harbour output to show more information about extended
keycodes
* src/rtl/gtwvt/gtwvt.c
* src/rtl/gtwvt/gtwvt.h
* merged and simplified code for HB_GTI_ICONFILE and HB_GTI_ICONRES
* src/rtl/hbcom.c
* use "COM<n>:" instead of "COM<n>" as serial port name in WinCE
builds - it's suggested by MSDN but if some of you has different
experience then please inform me.
* contrib/hbfoxpro/hbfoxpro.hbx
* contrib/hbfoxpro/occurs.prg
+ added FoxPro compatible At() function with 3-rd <nOccurrence>
parameter:
fox_At( <cSubstr>, <cString>, <nOccurrence> ) -> <nPos>
* contrib/hbfoxpro/hbfoxpro.ch
+ added PP rule for At() with FoxPro like 3 parameters,
please remember that such At() extension is not compatible with
xHarbour one so do not include hbcompat.ch or xhb.ch - they
redefines At() with 3 or more parameters to xHarbour compatible
function: hb_At()
* src/rtl/mlcfunc.c
! do not access trailing 0 byte in empty strings passed to hb_MLEval()
(thanks to Abe for information and example illustrating the problem)
* respect in return value also empty line after last EOL
* src/rtl/memoedit.prg
* always returned reformatted string after CTRL+W even if user has not
made any modifications in edited data - Cl*pper compatible behavior.
* contrib/hbnetio/netiocli.c
* strip connection parameters (server name, port, password,...) from
second parameter of hb_vfRename(), hb_vfLink() and hb_vfSymLink()
functions redirected to HBNETIO if it's the same as in the first
parameter.
Now it's possible to use above functions with path containing connection
parameters in second argument. Please only remember that both parameters
have to point to the same server in above functions. If not then DOS
error 2 is set.
In case of hb_vfCopy() the parameters can point to different servers
so it's possible to copy files between different HBNETIO servers or
even different Harbour File IO redirectors.
* src/rtl/hbsocket.c
! fixed typo (unnecessary parenthesis) in previous commit
* enabled getnameinfo() in MSVS 2015 builds
; thanks to Viktor for the information about above items
* src/rtl/hbbfsock.c
! typo in comment
* src/rtl/mlcfunc.c
* casting
* src/rtl/memoedit.prg
* src/rtl/teditor.prg
* formatting and few modifications to reduce some differences between
core and Viktor's branch
* include/hbapigt.h
* src/rtl/inkeyapi.c
+ added new C function:
int hb_inkeyKeyExt( int iKey );
It extracts function/edit key code value HB_KX_* from Harbour extended
key code. If passed keycode is not valid extended keycode which points
to function/edit key then 0 is returned.
* include/harbour.hbx
* src/rtl/inkey.c
+ added new PRG function hb_keyExt() - it's wrapper to hb_inkeyKeyExt()
* include/harbour.hbx
* src/rtl/mlcfunc.c
! restored original Cl*pper behavior in memo line functions,
test shows that inside MemoEdit() Cl*pper internally uses a little
bit different rules to format text then in memo line functions,
It's Cl*pper bug but hard to fix because any differences to Cl*pper
in this area cause that someone reports them as bug. So I decided
to leave original Cl*pper behavior for compatibility and add new
function which can be used in MemoEdit() and related code.
+ added new memo line function:
hb_MLEval( <cString>, <bCode>, [ <nLineLength>=79 ],
[ <nTabSize>=4 ], [ <lWrap>=.T. ],
[ <nPos> ], [ @<nRow> ], [ @<nCol> ] ) -> <nLines>
it formats texts using rules like in Cl*pper MemoEdit() not Cl*pper
memo lines functions. For each processed line <bCode> is executed
with 2 parameters: <cLine> and <lSoftCR>. It recognizes and accepts
any EOLs just like hb_ATokens( <cText>, .T. ) and strips or converts
soft CRs depending on word wrap mode.
* src/rtl/teditor.prg
* Use hb_MLEval() to format text
% minor optimization
* src/rtl/memoedit.prg
* enabled Harbour extended key codes
* small optimization
! fixed ME_BOTTOMRIGHT processing
! fixed initial line size calculation
* src/vm/thread.c
* removed dymmy code
* src/vm/hvm.c
! delay locking of main HVM thread stack until HVM is initialized,
it fixes issue #107
! protect access to HB_STACK_TLS_PRELOAD by s_fHVMActive in
hb_vmLockForce()
* src/rtl/hbcom.c
* src/rtl/gtcrs/gtcrs.c
* src/rtl/gtpca/gtpca.c
* src/rtl/gtstd/gtstd.c
* src/rtl/gttrm/gttrm.c
* added workaround for bug in some Linux kernels (i.e.
3.13.0-64-generic Ubuntu) in which select() unconditionally
accepts terminal device for reading if c_cc[ VMIN ] = 0
It's very serious problem, i.e. in GTTRM no input is possible
in such kernels without this workaround.
* src/rtl/dirscan.prg
* modified hb_DirScan() and hb_DirRemoveAll() to work with Harbour
File IO API (hb_vf*() functions)
+ added new PRG function:
hb_FileDelete( <cFileMask> [, <cAttr> ] ) -> <lResult>
this function removes files which match given <cFileMask>
(it may contain path) and returns .T. if at least one file
was deleted. Optional <cAttr> parameter can be used to include
system ("S") and hidden ("H") files. If <cAttr> contains "R"
letter then before deleting READONLY attribute is removed from
files (it's necessary to remove files with READONLY attribute
in systems like DOS, MS-Windows or OS2). This function uses
Harbour File IO API (hb_vf*() functions)
* remove READONLY attribute from files in hb_DirRemoveAll()
* include/harbour.hbx
+ added hb_DirRemoveAll() and hb_FileDelete()
* contrib/hbct/files.c
! do not allow to remove empty directories by FileDelete() function
even if user explicitly sets directory attribute - CT3 compatible fix.
! remove READONLY attribute before deleting READONLY files if 2-nd
parameter of FileDelete() contains READONLY bit
* src/rtl/filesys.c
* formatting
* ChangeLog.txt
! typo
* utils/hbmk2/hbmk2.prg
+ Partially merge 8f16b6731 from vszakats/harbour-core:
"refined the way pkg-config queries the package version. Now
it does it in a separate call to make some pkg-config versions
happy where version query option cannot be mixed with --cflags
and similar options (f.e. pkg-config 0.28 in current homebrew)."
* src/common/hbffind.c
+ added support for link attribute (HB_FA_LINK -> "L") passed to
Directory() and other functions using hb_fsFindFirst()/hb_fsFindNext()
When this attribute is passed then softlinks are presented "as is"
without following target.
* src/rtl/dirscan.prg
+ added new PRG function hb_DirRemoveAll( <cDir> ) -> <lResult>
BE CAREFUL! This function removed recursively whole directories
with it's body so hb_DirRemoveAll( hb_ps() ) can remove all
files and directories from your disk.
* src/rtl/hbproces.c
! added protection against writing more then 4096 bytes to unblocked
pipe in MS-Windows builds of hb_fsProcessRun()
! close write side of child stdin handle if all data is sent in OS2
builds of hb_fsProcessRun()
* src/rtl/hbproces.c
* In OS2 builds use fGentle parameter of hb_fsProcessClose() to
control if kill signal should be send only to child process or
also to its all descendant processes.
* src/rtl/fscopy.c
* pacified BCC warning
* src/rtl/hbproces.c
* added HB_PROCESS_USEFILES macro which enable child process
standard IO handles redirection to files instead of pipes
in hb_fsProcessRun() function. It's enabled by default in
DOS and WinCE builds
* enable HB_PROCESS_USEFILES for tests in OS2 builds
* include/hbapicls.h
* src/vm/classes.c
* minor modification in variable name
* src/rtl/filebuf.c
* src/rtl/fscopy.c
* src/rtl/fslink.c
* src/rtl/vfile.c
* cleaned FError() setting. It should not be changed by C file IO
functions because they can be activated from RDD code so accessing
work area field could change the FError() result, i.e. this code
does not work when FError() is changed by C level IO operations:
AnyFunc( FSeek( hFile, 0, FS_END ), field->MEMOVAL, FError() )
Even simple field access may cause file IO operations in RDD code
when relations are set because records in child area are repositioned
only when necessary (when user tries to make some operations on this
area). In the past RDD code was full of constructions like:
uiSaveError = hb_fsFError();
// make some IO operations
hb_fsSetFerror( uiSaveError );
to eliminate such overhead I separated PRG level FError() from
C level IOError(). Please keep it.
* ChangeLog.txt
! few typos
* include/hbvmpub.h
* src/vm/hvm.c
+ added support for hb_vmAtInit(), hb_vmAtExit() and hb_vmAtQuit()
functions for dynamically loaded libraries
This modification should also fix issue #33
* src/rtl/gttrm/gttrm.c
- removed unused macros and definitions
* formatting and minor cleanup
* src/rtl/gtcrs/gtcrs.h
* src/rtl/gtcrs/gtcrs.c
+ added support for extended key codes, GTCRS does not support
unicode so it's not fully functional just like in GTTRM