Saturday, September 28, 2013

QtContribs - Harbour Qt Projects

Welcome to the new chapter in Harbour's history: Harbour Qt Projects.
So far all the contribution libraries were hosted in Harbour project's repository. This is the first time a part of it has been pulled and hosted outside. To make sure that end-user is not affected by this split, the folder structure of this repository has been kept the same as that of Harbour's. The same make system and the same build targets have been achieved.
As the name suggests, Qt related projects, viz., HbQt, HbXBP and HbIDE have been transferred here.
The goal of this project is be the satellite of Harbour Project, and not an independent project. This project will try to honor the high standards set forth by Harbour. It will encourage the developers to write code in such a way that Harbour could adopt and absorb inside its own repository, if the administrators deem fit.
This project will never attempt to develop its own build system and will ever rely on Harbour's native one. So if Harbour happens to make changes then maintainers of Harbour will be requested to update the same here also. As of now I have near zero understanding of Harbour's make system, and if that breaks for some reason, I will find it helpless to set it right for this project.
Everybody is encouraged to contribute to this repository. Do not be afraid of your creativity level, just have a willingness to contribute, respect Harbour's coding high standards, and send it here. Your small contribution will make HbQt bindings extremely rich.
In this repository we do not have, at times, hypothetical constraints. But it does not mean that we have to drift away from standards set forth by Harbour. We have to remain careful about the acceptability of our codebase. Constraints can be overlooked if changes do not harm the portability issues if a piece of code is supposed to be portable.
So, do join us...
Pritpal Bedi
a student of software analysis & concepts

More at  http://sourceforge.net/projects/qtcontribs/

Locking schemes used with DBF files by Przemyslaw Czerpak

Locking schemes used with DBF files.
Przemyslaw Czerpak (druzus/at/poczta.onet.pl)


Exclusive/shared modes (DENY READ, DENY WRITE) in POSIX systems.
================================================================

Exclusive modes (DENY READ, DENY WRITE) do not exist in POSIX systems.
They can be emulated by fcntl() or flock() locks. Harbour uses flock()
in systems where it does not create conflicts with fcntl() locks used
to synchronize file access by different processes in shared mode.
Currently it's enabled by default only in Linux (tests with *BSD systems
and MacOSX showed that it interacts with fcntl locks causing deadlocks).
On other POSIX systems Harbour uses fcntl() read and write locks at
address 0x7fffffff (size 1) to simulate shared and exclusive mode.

CLIP and FlagShip use fcntl() locks to simulate shared/exclusive modes.
CLIP shared/exclusive flag:     0x7fffffff : 1 (the same as Harbour)
FlagShip shared/exclusive flag: 0x7ffffbfc : 1




File access synchronization (record and file locking) in shared mode.
=====================================================================

FlagShip uses different record and index locking schemes
(i.e. for RLOCK it locks record area) and it is not described
here.


In documentation CLIP can use Clipper like or FoxPro like locking
schemes and it can be controlled by SET LOCKSTYLE [TO] ... command
or Set( _SET_LOCKSTYLE, 0 | 1 ) function.
This switch only changes the RLOCK/FLOCK offset.
For:
   SET LOCKSTYLE [TO] CLIPPER | CLIPPER50 | CLIPPER53
or:
   Set( _SET_LOCKSTYLE, 0 )
this offset is set to 1'000'000'000. This is header lock address
and records are locked at above address + record number.
This is compatible with standard Clipper locking.
Commands:
   SET LOCKSTYLE [TO] CLIPPER52 | FOXPRO | SIX
or:
   Set( _SET_LOCKSTYLE, 1 )
set this offset to 0x10000000 keeping the same algorithm
for record locking what is incompatible with any other locking
schemes known by me. For sure it's not compatible with [V]FP
locking (see details about this locking scheme below).
For more information look at CLIP source code.




(*) In Harbour index read locks are shared on platforms which support
    shared (read) locks.

Clipper DBFNTX locking:
=======================
all locks are exclusive (*)
DBF HEADER LOCK: @1000000000 : 1 (exclusive)
DBF RECORD LOCK: @1000000000 + recNO : 1 (exclusive)
DBF FLOCK SIZE:  1000000000
   => maximum records: 3'294'967'295
      maximum file size in non POSIX systems: 1'000'000'000

NTX READ LOCK:   @1000000000 : 1 (exclusive)
NTX WRITE LOCK:  @1000000000 : 1 (exclusive)

In Harbour it's DB_DBFLOCK_CLIPPER.


Clipper new DBFNTX locking (ntxlock2.obj):
==========================================
all locks are exclusive (*)
DBF HEADER LOCK: @4000000000 : 1 (exclusive)
DBF RECORD LOCK: @4000000000 + recNO : 1 (exclusive)
DBF FLOCK SIZE:  294967295
   => maximum records: 294'967'295
      maximum file size in non POSIX systems: 4'000'000'000

NTX READ LOCK:   @1000000000 : 1 (exclusive)
NTX WRITE LOCK:  @1000000000 : 1 (exclusive)

In Harbour it's DB_DBFLOCK_CLIPPER2.


CL52 DBFCDX, SIX3 SIXCDX, SIX3 SIXNSX, [V]FP CDX
================================================
all locks are exclusive (*)
when there is no structural index:
DBF HEADER LOCK: @0x40000000 : 1
DBF RECORD LOCK: @0x40000000 + record offset : 1 (some implementations
                                                  locks whole record)
DBF FLOCK SIZE:  0x3ffffffd
   => maximum file size: 1'073'741'823

when structural index is open:
DBF HEADER LOCK: @0x7ffffffe : 1
DBF RECORD LOCK: @0x7ffffffe - recNO : 1
DBF FLOCK SIZE:  0x07ffffff
   => maximum records: 134'217'727
      maximum file size in non POSIX systems: 2'013'265'919

index file locking is the same for production and normal indexes:
CDX READ LOCK:   @0x7ffffffe : 1
CDX WRITE LOCK:  @0x7ffffffe : 1

In Harbour it's DB_DBFLOCK_VFP.


CL53 DBFCDX, COMIX (hyper locking)
==================================
all locks are exclusive (*), in index shared locks are emulated

DBF HEADER LOCK: @1000000000 : 1
DBF RECORD LOCK: @1000000000 + recNO : 1
DBF FLOCK SIZE:  1000000000
   => maximum records: 1'000'000'000
      maximum file size in non POSIX systems: 1'000'000'000

CDX READ LOCK:   @0xffff0000 + random value from 0x0 to 0xffff : 1
CDX WRITE LOCK:  @0xfffeffff : 0x10001
    if fail then @0xfffeffff : 1
    prepare the index modification in memory and before writing to
    index file lock @0xffff0000 : 0x10000
  to eliminate starvation effect caused by many readers
  on each 16-th read lock reading process tries to lock write
  area @0xfffeffff : 1 instead and then sets normal read lock

In Harbour it's DB_DBFLOCK_COMIX.


HARBOUR 32-bit locking
======================
all locks are exclusive (*), in index shared locks are emulated

DBF HEADER LOCK: @4000000000 : 1 (exclusive)
DBF RECORD LOCK: @4000000000 + recNO : 1 (exclusive)
DBF FLOCK SIZE:  294967295
   => maximum records: 294'967'295
      maximum file size in non POSIX systems: 4'000'000'000

CDX READ LOCK:   @0xffff0000 + random value from 0x0 to 0xffff : 1
CDX WRITE LOCK:  @0xfffeffff : 0x10001
    if fail then @0xfffeffff : 1
    prepare the index modification in memory and before writing to
    index file lock @0xffff0000 : 0x10000
  to eliminate starvation effect caused by many readers
  on each 16-th read lock reading process tries to lock write
  area @0xfffeffff : 1 instead and then sets normal read lock

In Harbour it's DB_DBFLOCK_HB32.


HARBOUR 64-bit locking
======================
all locks are exclusive (*), in index shared locks are emulated

DBF HEADER LOCK: @0x7fffffff00000001 : 1
DBF RECORD LOCK: @0x7fffffff00000001 + recNO : 1
DBF FLOCK SIZE:  0xfffffffeUL
   => maximum records: 4'294'967'294
      maximum file size: no limits created by locks

CDX READ LOCK:   @0x7fffffff00000000 + random value from 0x1 to 0xffff : 1
CDX WRITE LOCK:  @0x7fffffff00000000 : 0x10001
    if fail then @0x7fffffff00000000 : 1
    prepare the index modification in memory and before writing to
    index file lock @0x7fffffff00000001 : 0x10000
  to eliminate starvation effect caused by many readers
  on each 16-th read lock reading process tries to lock write
  area @0x7fffffff00000000 : 1 instead and then sets normal read lock

In Harbour it's DB_DBFLOCK_HB64.

Windows DLLs with Harbour code

There are a lot of infomation that can be gleaned if one chose to go through the \doc folder of any official harbour installation. In this post, I have chosen to re-publish the following:-


Windows DLLs with Harbour code

Programs created with Clipper or Harbour are traditionally a
monolithic EXE containing all executable code.  This includes
the Virtual Machine (VM) and the RunTime Library (RTL) as well as
your own code.  Running under Windows with Harbour, you
can now also create and use Windows DLLs that contain PRG code.

Harbour supports Windows DLLs in 3 ways.

  1) Self-contained DLLs containing functions from any platform.
     (These are not what we call a "harbour.dll", although they may
     be named that. The DLL entry points are different.)
     These have the VM/RTL inside them and can be used by any other
     Windows program. You can create a .lib for static linking,
     or use GetProcAddress as in any standard Windows DLL.
     Calling Harbour/Prg functions directly is limited to
     those that take no parameters unless you include C functions
     in the DLL that take parameters and then call the PRG-level
     code.

     To do static linking, do this to create the .lib:
        implib harbour.lib harbour.dll
     For the Borland C platform, use that library and import32.lib
     and cw32.lib from Borland, and you are ready to go.


  2) PCode EXEs using a Harbour.dll

     A Harbour.dll is designed to be called from a Harbour app.
     A pcode EXE is a small Harbour executable that does not contain the
     VM/RTL. To execute its functions, it must load and access a
     Harbour.dll.
     If you want dynamic linking, then use this to execute a Harbour
     dynamically loaded pcode DLL function or procedure:
        HB_DllDo( [,] ) --> []

     This lets you have all your common code in a DLL, and have lots
     of small EXEs that use it.  Realize however that, even though this
     may be a nice way to manage your code, each EXE may
     load its own image of the Harbour.dll into memory at runtime.
     In terms of Windows memory, there may not be a benefit to using pcode
     EXEs over monolithic EXEs. But it may be a worthwhile maintenance
     benefit to have lots of replaceable small exes.

  3) PCode DLLs used from traditional EXEs
     A pcode DLL does not contain the VM/RTL.
     It is a library of Harbour-compiled PRG code that uses the VM/RTL
     of the EXE that calls it.  This has the benefit of having
     replaceable modules in DLLs that don't necessarily require updating
     your EXE.


The following is clipped from a msg by Antonio Linares to the Harbour
developer list explaining some of the details:

Please notice that there are three different Windows DLL entry points:
   + src/vm/
   * maindll.c     Windows self-contained DLL entry point
   * maindllh.c    Windows Harbour DLL entry point  (harbour.dll)
   * maindllp.c    Windows pcode DLL entry point and VM/RTL routing functions

   >    * maindll.c     Windows self-contained DLL entry point
   To produce Harbour code, as DLLs, that may be used
   from other programming languages applications (as VB,
   Delphi, C++, etc...)

   >    * maindllh.c    Windows Harbour DLL entry point  (harbour.dll)
   To produce Harbour.dll, to be just used from small pcode Harbour EXEs

   >    * maindllp.c    Windows pcode DLL entry point and VM/RTL routing
   To produce small pcode DLLs, to be used just from Harbour EXE apps.
   maindllp.c is the entry point for the Harbour pcode DLLs. pcode DLLs
   are quite small DLLs, that just contain pcode and/or C (using extend
   api) functions.

   mainwin.c is the entry point for Windows EXEs, not for DLLs.

   You may use maindll.c, maindllh.c or maindllp.c based on
   your needs.

   If you are looking to build a Harbour.dll, then you must use
   maindllh.c

Friday, September 27, 2013

List of HB_ Functions

As posted by Grigory Filatov on the HMG Forum:-

Please take a look for the following list (borrowed from the file harbour\include\harbour.hbx):

Quote:
DYNAMIC HB_ADEL
DYNAMIC HB_ADLER32
DYNAMIC HB_AINS
DYNAMIC HB_ALERT
DYNAMIC HB_ANSITOOEM
DYNAMIC HB_APARAMS
DYNAMIC HB_ARGC
DYNAMIC HB_ARGCHECK
DYNAMIC HB_ARGSHIFT
DYNAMIC HB_ARGSTRING
DYNAMIC HB_ARGV
DYNAMIC HB_ARRAYTOPARAMS
DYNAMIC HB_ASCAN
DYNAMIC HB_ASCIIISALPHA
DYNAMIC HB_ASCIIISDIGIT
DYNAMIC HB_ASCIIISLOWER
DYNAMIC HB_ASCIIISUPPER
DYNAMIC HB_ASCIILOWER
DYNAMIC HB_ASCIIUPPER
DYNAMIC HB_AT
DYNAMIC HB_ATI
DYNAMIC HB_ATOKENS
DYNAMIC HB_ATX
DYNAMIC HB_BASE64DECODE
DYNAMIC HB_BASE64ENCODE
DYNAMIC HB_BITAND
DYNAMIC HB_BITNOT
DYNAMIC HB_BITOR
DYNAMIC HB_BITRESET
DYNAMIC HB_BITSET
DYNAMIC HB_BITSHIFT
DYNAMIC HB_BITTEST
DYNAMIC HB_BITXOR
DYNAMIC HB_BLOWFISHDECRYPT
DYNAMIC HB_BLOWFISHENCRYPT
DYNAMIC HB_BLOWFISHKEY
DYNAMIC HB_BUILDDATE
DYNAMIC HB_BYTESWAPI
DYNAMIC HB_BYTESWAPL
DYNAMIC HB_BYTESWAPLL
DYNAMIC HB_BYTESWAPU
DYNAMIC HB_BYTESWAPW
DYNAMIC HB_CDPINFO
DYNAMIC HB_CDPLIST
DYNAMIC HB_CDPSELECT
DYNAMIC HB_CDPUNIID
DYNAMIC HB_CLOCKS2SECS
DYNAMIC HB_CLRAREA
DYNAMIC HB_CMDLINE
DYNAMIC HB_COLORINDEX
DYNAMIC HB_COLORTON
DYNAMIC HB_COMCLOSE
DYNAMIC HB_COMDISCARDCHAR
DYNAMIC HB_COMERRORCHAR
DYNAMIC HB_COMFLOWCHARS
DYNAMIC HB_COMFLOWCONTROL
DYNAMIC HB_COMFLOWSET
DYNAMIC HB_COMFLUSH
DYNAMIC HB_COMGETDEVICE
DYNAMIC HB_COMGETDEVICEHANDLE
DYNAMIC HB_COMGETERROR
DYNAMIC HB_COMGETOSERROR
DYNAMIC HB_COMINIT
DYNAMIC HB_COMINPUTCOUNT
DYNAMIC HB_COMINPUTSTATE
DYNAMIC HB_COMLASTNUM
DYNAMIC HB_COMLSR
DYNAMIC HB_COMMCR
DYNAMIC HB_COMMSR
DYNAMIC HB_COMOPEN
DYNAMIC HB_COMOUTPUTCOUNT
DYNAMIC HB_COMOUTPUTSTATE
DYNAMIC HB_COMPILER
DYNAMIC HB_COMRECV
DYNAMIC HB_COMSEND
DYNAMIC HB_COMSENDBREAK
DYNAMIC HB_COMSETDEVICE
DYNAMIC HB_COMSETERROR
DYNAMIC HB_CRC
DYNAMIC HB_CRC16
DYNAMIC HB_CRC32
DYNAMIC HB_CRCCT
DYNAMIC HB_CSTR
DYNAMIC HB_CTOD
DYNAMIC HB_CTOT
DYNAMIC HB_CURDRIVE
DYNAMIC HB_CWD
DYNAMIC HB_DATE
DYNAMIC HB_DATETIME
DYNAMIC HB_DBCREATETEMP
DYNAMIC HB_DBDETACH
DYNAMIC HB_DBDROP
DYNAMIC HB_DBEXISTS
DYNAMIC HB_DBPACK
DYNAMIC HB_DBRENAME
DYNAMIC HB_DBREQUEST
DYNAMIC HB_DBZAP
DYNAMIC HB_DESERIALIZE
DYNAMIC HB_DIRSEPADD
DYNAMIC HB_DIRSEPDEL
DYNAMIC HB_DIRBASE
DYNAMIC HB_DIRBUILD
DYNAMIC HB_DIRCREATE
DYNAMIC HB_DIRDELETE
DYNAMIC HB_DIREXISTS
DYNAMIC HB_DIRSCAN
DYNAMIC HB_DIRTEMP
DYNAMIC HB_DIRUNBUILD
DYNAMIC HB_DISABLEWAITLOCKS
DYNAMIC HB_DISKSPACE
DYNAMIC HB_DISPBOX
DYNAMIC HB_DISPOUTAT
DYNAMIC HB_DISPOUTATBOX
DYNAMIC HB_DTOC
DYNAMIC HB_DTOT
DYNAMIC HB_DYNCALL
DYNAMIC HB_ENDOBJECT
DYNAMIC HB_EOL
DYNAMIC HB_EXECFROMARRAY
DYNAMIC HB_EXECMSG
DYNAMIC HB_FCOMMIT
DYNAMIC HB_FCOPY
DYNAMIC HB_FCREATE
DYNAMIC HB_FEOF
DYNAMIC HB_FGETATTR
DYNAMIC HB_FGETDATETIME
DYNAMIC HB_FIELDDEC
DYNAMIC HB_FIELDLEN
DYNAMIC HB_FIELDTYPE
DYNAMIC HB_FILEEXISTS
DYNAMIC HB_FILEMATCH
DYNAMIC HB_FISDEVICE
DYNAMIC HB_FLINK
DYNAMIC HB_FLINKREAD
DYNAMIC HB_FLINKSYM
DYNAMIC HB_FLOCK
DYNAMIC HB_FNAMEDIR
DYNAMIC HB_FNAMEEXISTS
DYNAMIC HB_FNAMEEXT
DYNAMIC HB_FNAMEEXTSET
DYNAMIC HB_FNAMEEXTSETDEF
DYNAMIC HB_FNAMEMERGE
DYNAMIC HB_FNAMENAME
DYNAMIC HB_FNAMENAMEEXT
DYNAMIC HB_FNAMESPLIT
DYNAMIC HB_FORNEXT
DYNAMIC HB_FSETATTR
DYNAMIC HB_FSETDATETIME
DYNAMIC HB_FSETDEVMODE
DYNAMIC HB_FSIZE
DYNAMIC HB_FTEMPCREATE
DYNAMIC HB_FTEMPCREATEEX
DYNAMIC HB_FUNLOCK
DYNAMIC HB_GCALL
DYNAMIC HB_GCSTEP
DYNAMIC HB_GET
DYNAMIC HB_GETENV
DYNAMIC HB_GETREADVAR
DYNAMIC HB_GETSTDERR
DYNAMIC HB_GETSTDIN
DYNAMIC HB_GETSTDOUT
DYNAMIC HB_GFXPRIMITIVE
DYNAMIC HB_GFXTEXT
DYNAMIC HB_GTALERT
DYNAMIC HB_GTCREATE
DYNAMIC HB_GTINFO
DYNAMIC HB_GTLOCK
DYNAMIC HB_GTRELOAD
DYNAMIC HB_GTSELECT
DYNAMIC HB_GTSYS
DYNAMIC HB_GTUNLOCK
DYNAMIC HB_GTVERSION
DYNAMIC HB_GZCLEARERR
DYNAMIC HB_GZCLOSE
DYNAMIC HB_GZCOMPRESS
DYNAMIC HB_GZCOMPRESSBOUND
DYNAMIC HB_GZDIRECT
DYNAMIC HB_GZDOPEN
DYNAMIC HB_GZEOF
DYNAMIC HB_GZERROR
DYNAMIC HB_GZFLUSH
DYNAMIC HB_GZGETC
DYNAMIC HB_GZGETS
DYNAMIC HB_GZOPEN
DYNAMIC HB_GZPUTC
DYNAMIC HB_GZPUTS
DYNAMIC HB_GZREAD
DYNAMIC HB_GZREWIND
DYNAMIC HB_GZSEEK
DYNAMIC HB_GZSETPARAMS
DYNAMIC HB_GZTELL
DYNAMIC HB_GZUNGETC
DYNAMIC HB_GZWRITE
DYNAMIC HB_HALLOCATE
DYNAMIC HB_HASH
DYNAMIC HB_HAUTOADD
DYNAMIC HB_HBINARY
DYNAMIC HB_HCASEMATCH
DYNAMIC HB_HCLONE
DYNAMIC HB_HCOPY
DYNAMIC HB_HDEFAULT
DYNAMIC HB_HDEL
DYNAMIC HB_HDELAT
DYNAMIC HB_HEVAL
DYNAMIC HB_HEXTONUM
DYNAMIC HB_HEXTOSTR
DYNAMIC HB_HFILL
DYNAMIC HB_HGET
DYNAMIC HB_HGETDEF
DYNAMIC HB_HHASKEY
DYNAMIC HB_HKEEPORDER
DYNAMIC HB_HKEYAT
DYNAMIC HB_HKEYS
DYNAMIC HB_HMAC_SHA1
DYNAMIC HB_HMAC_SHA224
DYNAMIC HB_HMAC_SHA256
DYNAMIC HB_HMAC_SHA384
DYNAMIC HB_HMAC_SHA512
DYNAMIC HB_HMERGE
DYNAMIC HB_HOUR
DYNAMIC HB_HPAIRAT
DYNAMIC HB_HPOS
DYNAMIC HB_HRBDO
DYNAMIC HB_HRBGETFUNSYM
DYNAMIC HB_HRBLOAD
DYNAMIC HB_HRBRUN
DYNAMIC HB_HRBSIGNATURE
DYNAMIC HB_HRBUNLOAD
DYNAMIC HB_HSCAN
DYNAMIC HB_HSET
DYNAMIC HB_HSETAUTOADD
DYNAMIC HB_HSETBINARY
DYNAMIC HB_HSETCASEMATCH
DYNAMIC HB_HSETORDER
DYNAMIC HB_HSORT
DYNAMIC HB_HVALUEAT
DYNAMIC HB_HVALUES
DYNAMIC HB_I18N_ADDTEXT
DYNAMIC HB_I18N_CHECK
DYNAMIC HB_I18N_CODEPAGE
DYNAMIC HB_I18N_CREATE
DYNAMIC HB_I18N_DESCRIPTION
DYNAMIC HB_I18N_GETTEXT
DYNAMIC HB_I18N_GETTEXT_STRICT
DYNAMIC HB_I18N_HEADERSIZE
DYNAMIC HB_I18N_LOADPOT
DYNAMIC HB_I18N_NGETTEXT
DYNAMIC HB_I18N_NGETTEXT_STRICT
DYNAMIC HB_I18N_PLURALFORM
DYNAMIC HB_I18N_RESTORETABLE
DYNAMIC HB_I18N_SAVEPOT
DYNAMIC HB_I18N_SAVETABLE
DYNAMIC HB_I18N_SET
DYNAMIC HB_IDLEADD
DYNAMIC HB_IDLEDEL
DYNAMIC HB_IDLERESET
DYNAMIC HB_IDLESLEEP
DYNAMIC HB_IDLESTATE
DYNAMIC HB_INETACCEPT
DYNAMIC HB_INETADDRESS
DYNAMIC HB_INETCLEANUP
DYNAMIC HB_INETCLEARERROR
DYNAMIC HB_INETCLEARPERIODCALLBACK
DYNAMIC HB_INETCLEARTIMELIMIT
DYNAMIC HB_INETCLEARTIMEOUT
DYNAMIC HB_INETCLOSE
DYNAMIC HB_INETCOMPRESS
DYNAMIC HB_INETCONNECT
DYNAMIC HB_INETCONNECTIP
DYNAMIC HB_INETCOUNT
DYNAMIC HB_INETCREATE
DYNAMIC HB_INETCRLF
DYNAMIC HB_INETDATAREADY
DYNAMIC HB_INETDGRAM
DYNAMIC HB_INETDGRAMBIND
DYNAMIC HB_INETDGRAMRECV
DYNAMIC HB_INETDGRAMSEND
DYNAMIC HB_INETERRORCODE
DYNAMIC HB_INETERRORDESC
DYNAMIC HB_INETFD
DYNAMIC HB_INETGETALIAS
DYNAMIC HB_INETGETHOSTS
DYNAMIC HB_INETGETRCVBUFSIZE
DYNAMIC HB_INETGETSNDBUFSIZE
DYNAMIC HB_INETIFINFO
DYNAMIC HB_INETINIT
DYNAMIC HB_INETISSOCKET
DYNAMIC HB_INETPERIODCALLBACK
DYNAMIC HB_INETPORT
DYNAMIC HB_INETRECV
DYNAMIC HB_INETRECVALL
DYNAMIC HB_INETRECVENDBLOCK
DYNAMIC HB_INETRECVLINE
DYNAMIC HB_INETSEND
DYNAMIC HB_INETSENDALL
DYNAMIC HB_INETSERVER
DYNAMIC HB_INETSETRCVBUFSIZE
DYNAMIC HB_INETSETSNDBUFSIZE
DYNAMIC HB_INETSTATUS
DYNAMIC HB_INETTIMELIMIT
DYNAMIC HB_INETTIMEOUT
DYNAMIC HB_ININEW
DYNAMIC HB_INIREAD
DYNAMIC HB_INIREADSTR
DYNAMIC HB_INISETCOMMENT
DYNAMIC HB_INIWRITE
DYNAMIC HB_INIWRITESTR
DYNAMIC HB_ISARRAY
DYNAMIC HB_ISBLOCK
DYNAMIC HB_ISCHAR
DYNAMIC HB_ISDATE
DYNAMIC HB_ISDATETIME
DYNAMIC HB_ISHASH
DYNAMIC HB_ISLOGICAL
DYNAMIC HB_ISMEMO
DYNAMIC HB_ISNIL
DYNAMIC HB_ISNULL
DYNAMIC HB_ISNUMERIC
DYNAMIC HB_ISOBJECT
DYNAMIC HB_ISPOINTER
DYNAMIC HB_ISPRINTER
DYNAMIC HB_ISREGEX
DYNAMIC HB_ISSTRING
DYNAMIC HB_ISSYMBOL
DYNAMIC HB_ISTIMESTAMP
DYNAMIC HB_JSONDECODE
DYNAMIC HB_JSONENCODE
DYNAMIC HB_KEYCLEAR
DYNAMIC HB_KEYINS
DYNAMIC HB_KEYPUT
DYNAMIC HB_LANGERRMSG
DYNAMIC HB_LANGMESSAGE
DYNAMIC HB_LANGNAME
DYNAMIC HB_LANGSELECT
DYNAMIC HB_LIBERROR
DYNAMIC HB_LIBEXT
DYNAMIC HB_LIBFREE
DYNAMIC HB_LIBGETFUNSYM
DYNAMIC HB_LIBLOAD
DYNAMIC HB_LIBNAME
DYNAMIC HB_LIBPREFIX
DYNAMIC HB_LPPCREATE
DYNAMIC HB_LPPDESTROY
DYNAMIC HB_LPPERROR
DYNAMIC HB_LPPRECV
DYNAMIC HB_LPPRECVLEN
DYNAMIC HB_LPPSEND
DYNAMIC HB_LPPSENDLEN
DYNAMIC HB_LPPSETLIMIT
DYNAMIC HB_MACROBLOCK
DYNAMIC HB_MATHERBLOCK
DYNAMIC HB_MATHERMODE
DYNAMIC HB_MD5
DYNAMIC HB_MD5FILE
DYNAMIC HB_MEMOREAD
DYNAMIC HB_MEMOWRIT
DYNAMIC HB_METHODNAME
DYNAMIC HB_MILLISECONDS
DYNAMIC HB_MINUTE
DYNAMIC HB_MMIDDLEDOWN
DYNAMIC HB_MTVM
DYNAMIC HB_MUTEXCREATE
DYNAMIC HB_MUTEXLOCK
DYNAMIC HB_MUTEXNOTIFY
DYNAMIC HB_MUTEXNOTIFYALL
DYNAMIC HB_MUTEXQUEUEINFO
DYNAMIC HB_MUTEXSUBSCRIBE
DYNAMIC HB_MUTEXSUBSCRIBENOW
DYNAMIC HB_MUTEXUNLOCK
DYNAMIC HB_MVRESTORE
DYNAMIC HB_MVSAVE
DYNAMIC HB_NTOCOLOR
DYNAMIC HB_NTOS
DYNAMIC HB_NTOT
DYNAMIC HB_NUMTOHEX
DYNAMIC HB_OEMTOANSI
DYNAMIC HB_OSDRIVESEPARATOR
DYNAMIC HB_OSERROR
DYNAMIC HB_OSFILEMASK
DYNAMIC HB_OSISWIN2K
DYNAMIC HB_OSISWIN9X
DYNAMIC HB_OSISWINCE
DYNAMIC HB_OSISWINNT
DYNAMIC HB_OSISWINVISTA
DYNAMIC HB_OSNEWLINE
DYNAMIC HB_OSPATHDELIMITERS
DYNAMIC HB_OSPATHLISTSEPARATOR
DYNAMIC HB_OSPATHSEPARATOR
DYNAMIC HB_PATHJOIN
DYNAMIC HB_PATHRELATIVIZE
DYNAMIC HB_PATHNORMALIZE
DYNAMIC HB_PCODEVER
DYNAMIC HB_PROCESSCLOSE
DYNAMIC HB_PROCESSOPEN
DYNAMIC HB_PROCESSRUN
DYNAMIC HB_PROCESSVALUE
DYNAMIC HB_PROGNAME
DYNAMIC HB_PS
DYNAMIC HB_PVALUE
DYNAMIC HB_RANDOM
DYNAMIC HB_RANDOMINT
DYNAMIC HB_RANDOMSEED
DYNAMIC HB_RASCAN
DYNAMIC HB_RAT
DYNAMIC HB_RDDGETTEMPALIAS
DYNAMIC HB_RDDINFO
DYNAMIC HB_REGEX
DYNAMIC HB_REGEXALL
DYNAMIC HB_REGEXATX
DYNAMIC HB_REGEXCOMP
DYNAMIC HB_REGEXHAS
DYNAMIC HB_REGEXLIKE
DYNAMIC HB_REGEXMATCH
DYNAMIC HB_REGEXSPLIT
DYNAMIC HB_RELEASECPU
DYNAMIC HB_RUN
DYNAMIC HB_SCRMAXCOL
DYNAMIC HB_SCRMAXROW
DYNAMIC HB_SCROLL
DYNAMIC HB_SEC
DYNAMIC HB_SECONDSCPU
DYNAMIC HB_SERIALIZE
DYNAMIC HB_SETCLSHANDLE
DYNAMIC HB_SETDISPCP
DYNAMIC HB_SETENV
DYNAMIC HB_SETKEY
DYNAMIC HB_SETKEYARRAY
DYNAMIC HB_SETKEYCHECK
DYNAMIC HB_SETKEYCP
DYNAMIC HB_SETKEYGET
DYNAMIC HB_SETKEYSAVE
DYNAMIC HB_SETLASTKEY
DYNAMIC HB_SETMACRO
DYNAMIC HB_SETOBJECT
DYNAMIC HB_SETTERMCP
DYNAMIC HB_SHA1
DYNAMIC HB_SHA224
DYNAMIC HB_SHA256
DYNAMIC HB_SHA384
DYNAMIC HB_SHA512
DYNAMIC HB_SHADOW
DYNAMIC HB_SOCKETACCEPT
DYNAMIC HB_SOCKETBIND
DYNAMIC HB_SOCKETCLOSE
DYNAMIC HB_SOCKETCONNECT
DYNAMIC HB_SOCKETERRORSTRING
DYNAMIC HB_SOCKETGETERROR
DYNAMIC HB_SOCKETGETHOSTNAME
DYNAMIC HB_SOCKETGETHOSTS
DYNAMIC HB_SOCKETGETIFACES
DYNAMIC HB_SOCKETGETOSERROR
DYNAMIC HB_SOCKETGETPEERNAME
DYNAMIC HB_SOCKETGETRCVBUFSIZE
DYNAMIC HB_SOCKETGETSNDBUFSIZE
DYNAMIC HB_SOCKETGETSOCKNAME
DYNAMIC HB_SOCKETLISTEN
DYNAMIC HB_SOCKETOPEN
DYNAMIC HB_SOCKETRECV
DYNAMIC HB_SOCKETRECVFROM
DYNAMIC HB_SOCKETRESOLVEADDR
DYNAMIC HB_SOCKETRESOLVEINETADDR
DYNAMIC HB_SOCKETSELECT
DYNAMIC HB_SOCKETSELECTREAD
DYNAMIC HB_SOCKETSELECTWRITE
DYNAMIC HB_SOCKETSELECTWRITEEX
DYNAMIC HB_SOCKETSEND
DYNAMIC HB_SOCKETSENDTO
DYNAMIC HB_SOCKETSETBLOCKINGIO
DYNAMIC HB_SOCKETSETBROADCAST
DYNAMIC HB_SOCKETSETEXCLUSIVEADDR
DYNAMIC HB_SOCKETSETKEEPALIVE
DYNAMIC HB_SOCKETSETMULTICAST
DYNAMIC HB_SOCKETSETNODELAY
DYNAMIC HB_SOCKETSETRCVBUFSIZE
DYNAMIC HB_SOCKETSETREUSEADDR
DYNAMIC HB_SOCKETSETSNDBUFSIZE
DYNAMIC HB_SOCKETSHUTDOWN
DYNAMIC HB_STOD
DYNAMIC HB_STOT
DYNAMIC HB_STRCDECODE
DYNAMIC HB_STRCLEAR
DYNAMIC HB_STRDECODESCAPE
DYNAMIC HB_STRFORMAT
DYNAMIC HB_STRSHRINK
DYNAMIC HB_STRTOEXP
DYNAMIC HB_STRTOHEX
DYNAMIC HB_STRTOTS
DYNAMIC HB_STRTOUTF8
DYNAMIC HB_STRXOR
DYNAMIC HB_THREADDETACH
DYNAMIC HB_THREADID
DYNAMIC HB_THREADJOIN
DYNAMIC HB_THREADONCE
DYNAMIC HB_THREADONCEINIT
DYNAMIC HB_THREADQUITREQUEST
DYNAMIC HB_THREADSELF
DYNAMIC HB_THREADSTART
DYNAMIC HB_THREADTERMINATEALL
DYNAMIC HB_THREADWAIT
DYNAMIC HB_THREADWAITFORALL
DYNAMIC HB_TOKENCOUNT
DYNAMIC HB_TOKENGET
DYNAMIC HB_TOKENPTR
DYNAMIC HB_TRACEFILE
DYNAMIC HB_TRACEFLUSH
DYNAMIC HB_TRACELEVEL
DYNAMIC HB_TRACELOG
DYNAMIC HB_TRACELOGAT
DYNAMIC HB_TRACELOGLEVEL
DYNAMIC HB_TRACESTATE
DYNAMIC HB_TRACESTRING
DYNAMIC HB_TRACESYSOUT
DYNAMIC HB_TRANSLATE
DYNAMIC HB_TSTOSTR
DYNAMIC HB_TTOC
DYNAMIC HB_TTOD
DYNAMIC HB_TTON
DYNAMIC HB_TTOS
DYNAMIC HB_USERLANG
DYNAMIC HB_USERNAME
DYNAMIC HB_UTCOFFSET
DYNAMIC HB_UTF8ASC
DYNAMIC HB_UTF8AT
DYNAMIC HB_UTF8CHR
DYNAMIC HB_UTF8LEFT
DYNAMIC HB_UTF8LEN
DYNAMIC HB_UTF8PEEK
DYNAMIC HB_UTF8POKE
DYNAMIC HB_UTF8RAT
DYNAMIC HB_UTF8RIGHT
DYNAMIC HB_UTF8STRTRAN
DYNAMIC HB_UTF8STUFF
DYNAMIC HB_UTF8SUBSTR
DYNAMIC HB_UTF8TOSTR
DYNAMIC HB_VALTOEXP
DYNAMIC HB_VALTOSTR
DYNAMIC HB_VERSION
DYNAMIC HB_WAEVAL
DYNAMIC HB_WILDMATCH
DYNAMIC HB_WILDMATCHI
DYNAMIC HB_ZCOMPRESS
DYNAMIC HB_ZCOMPRESSBOUND
DYNAMIC HB_ZERROR
DYNAMIC HB_ZLIBVERSION
DYNAMIC HB_ZUNCOMPRESS
DYNAMIC HB_ZUNCOMPRESSLEN

Harbour Project : Migration from SourceForge to gitHub

On 14/03/13 Viktor wrote:
Here it is:
http://github.com/harbour/core SVN was converted at r18918. (18919 patch is lost, I'll commit it manually)

['core' repo name is subject to change]

I will commit there from now on, if you're active dev member or admin and want to join, drop a message. Everybody else simply fork, patch and submit a pull request if you feel you have something to be included in main repo.

Instead of 'svn export', download source zip: http://github.com/harbour/core/archive/master.zip

Instead of 'svn checkout', do this: git clone http://github.com/harbour/core.git

GitHub supports svn "emulation", see it here: http://github.com/blog/626-announcing-svn-support


-- Viktor

Sunday, September 22, 2013

Using HMG Extended 226 and hbDev32 on Windows 7/8

Brief Notes on Using HMG Extended 226 and HBDEv3.2 on Windows 7/8

1) When using HMG Extended, Harbour Dev 3.2 must be used to compile and link it via hbmk2.
2) Note that HBDev3.2 uses mingw as the default compiler and my hbp file would be as follows :-

-oPMS4hmgx
-w0
-gtgui
-rebuild
# Minigui libs
-lminigui -lvfw32 -lmsvfw32
//Harbour libs
-lhbct -lhbmzip -lminizip -lhbwin -lhbmisc -lxhb

# my apps hbc file
pms4hmgx.hbc

# list of prgs
PMS4WIN.PRG
LOCKS.PRG
RDDSYS.PRG

3) Add PATH=C:\HB32\BIN to your Environmental Variables in Win 7/8

Wednesday, September 18, 2013

Harbour MiniGUI Extended Edition 2.2.6 Released on 17th September 2013

Hi All,

Harbour MiniGUI Extended Edition 2.2.6 setup is published at the following URL:

http://hmgextended.com/files/CONTRIB/hmg-2.2.6-setup.zip

and a full MinGW-based self-extracting archive is placed at the following URL:

http://hmgextended.com/files/CONTRIB/hmg226-mingw.exe

There are an *optional* xHarbour-based archive at the following URL:

http://hmgextended.com/files/CONTRIB/xhmg226_xhb9969.zip

and *donationware* xCC-based self-extracting archive for xHarbour.com distribution at

http://hmgextended.com/files/CONTRIB/hmg222-xcc.exe

There is the following changelog for this build:

2013/09/17: HMG Extended Edition 2.2.6 Published.
* Changed: The BACKGROUNDCOLOR property of MonthCal control was renamed to
BKGNDCOLOR at the alternative syntax for avoiding of duplication
Image control property (introduced in the build 2.2.3).
Remark: This property of MonthCal is available only at WinXP or earlier.
(see month.prg in folder \samples\Basic\Monthcal)
* Changed: The internal C-functions SetMonthCalMonthBkColor(), SetMonthCalFontColor(),
SetMonthCalTitleBkColor(), SetMonthCalTitleFontColor(), SetMonthCalBkColor(),
SetMonthCalTrlFontColor(), SetMonthCalFirstDayOfWeek(),
GetMonthCalFirstDayOfWeek() are defined as pseudo-functions now.
Contributed by Grigory Filatov <gfilatov@...>
(see demos in folder \samples\Basic\Monthcal)
* Changed: The internal C-functions SetDatePickFontColor(), SetDatePickTitleBkColor(),
SetDatePickTitleFontColor(), SetDatePickBkColor(), SetDatePickTrlFontColor()
are defined as pseudo-functions now.
Contributed by Grigory Filatov <gfilatov@...>
(see demo.prg in folder \samples\Basic\DatePicker)
* Changed: The internal C-function ClearIpAddress() is defined as pseudo-function.
Contributed by Grigory Filatov <gfilatov@...>
(see demo in folder \samples\Basic\IPADDRESS)
* Changed: The internal C-functions SetProgressbarBarColor(), SetProgressbarBkColor()
are defined as pseudo-functions now.
Contributed by Grigory Filatov <gfilatov@...>
(see demo3.prg in folder \samples\Basic\PROGRESSBAR)
* Changed: The internal C-functions SetSpinnerValue(), GetSpinnerValue() and
SetSpinnerRange() are defined as pseudo-functions now.
Contributed by Grigory Filatov <gfilatov@...>
(see demo in folder \samples\Basic\SPINNER)
* Changed: The internal C-functions GetBandCount(), GetButtonBarCount() and
CustomizeToolbar() are defined as pseudo-functions now.
Contributed by Grigory Filatov <gfilatov@...>
(see demos in folder \samples\Basic\TOOLBAR)
* Changed: The internal functions TreeView_GetBkColor(), TreeView_GetIndent(),
TreeView_GetItemHeight(), TreeView_GetLineColor(), TreeView_GetTextColor(),
TreeView_SetBkColor(), TreeView_SetIndent(), TreeView_SetItemHeight(),
TreeView_SetLineColor(), TreeView_SetTextColor() are defined as pseudo-
functions now.
Contributed by Grigory Filatov <gfilatov@...>
(see demo in folder \samples\Basic\Tree)
* Updated: Header file i_hmgcompat.ch for compatibility with Official HMG.
Contributed by Grigory Filatov <gfilatov@...>
* Updated: HbSQLite3 library:
- update for using SQLITE3 version 3.8.0.2 (from 3.8.0dev).
Contributed by Grigory Filatov <gfilatov@...>
(see demo in folder \samples\Advanced\SQLITE_2)
* Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG:
- Modified: improving displays an empty array at the initiation.
Contributed by Janusz Pora <januszpora@...>
* Updated: Harbour Compiler 3.2.0dev (r2013-09-10 02:09).
Contributed by Grigory Filatov <gfilatov@...>
(look at ReadMe.txt in folder \harbour)
* Updated: HMGS-IDE v.1.2.1 Project Manager and Two-Way Visual Form Designer:
- Fixed: Controls Copy Action not show the new object Height/Width.
Reported by Ariel Savransky.
Contributed by Grigory Filatov <gfilatov@...>
* New: 'Mouse Drag' sample with using 'On MouseDrag' event for drawing of triangle.
Based upon a contribution by Bicahi Esgici <esgici@...>.
Adapted for Minigui Extended by Grigory Filatov <gfilatov@...>
(see in folder \samples\Basic\MouseDrag)
* New: 'Message Functions Improvements' sample.
Based upon a contribution by Bicahi Esgici <esgici@...>.
Adapted for Minigui Extended by Grigory Filatov <gfilatov@...>
(see in folder \samples\Basic\MsgFuncs)
* New: 'MiniPrint for beginners in 10 easy steps' sample.
Based upon a contribution by Bicahi Esgici <esgici@...>.
Adapted for Minigui Extended by Grigory Filatov <gfilatov@...>
(see in folder \samples\Basic\MiniPrint_2)
* Updated: 'Stock' (Builder of the Function List) sample:
- Fixed: code cleaning for warnings with Harbour switch -w3.
Contributed by Grigory Filatov <gfilatov@...>
(see in folder \Utils\FuncList)

It is a regularly scheduled monthly maintenance release.

This release is considered stable and ready for production use.

--
With Best Regards,
Grigory Filatov
[MiniGUI Team]

Welcome to Clipper... Clipper... Clipper


In 1997, then using Delphi 3, I had already created 32-bits Windows applications for HRIS, ERP and CRM. In 2007, using Ruby on Rails, an AJAX powered CRM site running on Apache & MySQL was created and I am now using Visual Studio .Net 2008 to create web-based projects and Delphi 7 for Win32 applications using SQL2005 & DBFCDX.

So, why then am I reviving the Original Clipper... Clipper... Clipper via a Blog as CA-Clipper is a programming language for the DOS world ? Believe it or not, there are still some clients using my mission-critical CA-Clipper applications for DOS installed in the late 80's and up to the mid 90's. This is testimony to CA-Clipper's robustness as a language :-)

With the widespread introduction of Windows 7 64-bits as the standard O/S for new Windows based PCs & Notebooks, CA-Clipper EXE simply will not work and it has become imperative for Clipper programmers to migrate immediately to Harbour to build 32/64 bits EXEs

Since 28th January 2009, this blog has been read by 134,389 (10/3/11 - 39,277) unique visitors (of which 45,151 (10/3/11 - 13,929) are returning visitors) from 103 countries and 1,574 cities & towns in Europe (37; 764 cities), North America (3; 373 cities) , Central America & Caribeans (6; 13 cities), South America(10; 226 cities), Africa & Middle-East (12; 44 cities) , Asia-Pacific (21; 175 cities). So, obviously Clipper is Alive & Well : -)


TIA & Enjoy ! (10th October 2012, 11:05; 13th November 2015)


Original Welcome Page for Clipper... Clipper... Clipper

This is the original Welcome Page for Clipper... Clipper... Clipper, which I am republishing for historical and sentimental reasons. The only changes that I have made was to fix all the broken links. BTW, the counter from counter.digits.com is still working :-)

Welcome to Chee Chong Hwa's Malaysian WWW web site which is dedicated to Clipperheads throughout the world.

This site started out as a teeny-weeny section of Who the heck is Chee Chong Hwa ? and has graduated into a full blown web site of more than 140 pages (actually hundreds of A4 size pages) ! This is due to its growing popularity and tremendous encouragements from visiting Clipperheads from 100 countries worldwide, from North America, Central America, Caribbean, South America, Europe, Middle-East, Africa and Asia-Pacific. Thanx Clipperheads, you all made this happen !


What is Clipper ?

You may ask, what is this Clipper stuff ? Could Clipper be something to do with sailing as it is the name of a very fast sailing American ship in the 19th century ?

Well, Clipper or to be precise, CA-Clipper is the premier PC-Software development tool for DOS. It was first developed by Nantucket Corporation initially as a compiler for dBase3+ programs. Since then, CA-Clipper has evolved away from its x-base roots with the introduction of lexical scoping & pre-defined objects like TBrowse. As at today, the most stable version ofClipper is 5.2e while the latest version, 5.3a was introduced on 21 May 1996.

As at 11th November, 1996, an unofficial 5.3a fixes file was made available by Jo French. See the About CA-Clipper 5.3a section for more details. BTW, Jo French uploaded the revised 5.3a fixes file on 20th November, 1996.

Latest News

The latest news is that CA has finally released the long-awaited 5.3b patch on 21 May, 1997.

For 5.3b users, you must a take a look at Jo French's comments on unfixed bugs in 5.3b.

BTW, have you used Click ? If you're a serious Clipperprogrammer and need an excellent code formatter, Click is a natural choice. How to get it ? Simple, access Phil Barnett's site via my Cool Clipper Sites.

32-bits Clipper for Windows ?

Have you tried Xbase ++ ? Well, I have and compared to Delphi (my current Windows programming tool of choice), I'm still sticking to Delphi.

Anyway, you should visit the Alaska Home Page. Give it a chance and then draw your own conclusions !.

The Harbour Project

Is this the future of Xbase ? Take a look at at the Harbour Project

You are Visitor # ...

According to counter.digits.com, you are visitor since 3 June 1996.

If you like or dislike what you see on this website, please drop me a line by clicking the email button at the bottom of this page or better still, by filling out the form in my guest book. If you are not sure what to write,click here to take a look at what other Clipperheads have to say.