This is the successor to Clipper... Clipper... Clipper, a popular & well-linked CA-Clipper website which I started in 1995 and which went offline in 2002
Friday, October 10, 2014
Tuesday, July 15, 2014
Harbour MiniGUI Extended Edition 2.3.7 is published
Hi All,
Harbour MiniGUI Extended Edition 2.3.7 setup is published at the following URL:
http://hmgextended.com/files/
and a MinGW-based self-extracting archive is placed at the following URL:
http://hmgextended.com/files/
There are also an optional xHarbour-based archive at the following URL:
http://hmgextended.com/files/
and donationware xCC-based self-extracting archive for xHarbour.com distribution at
http://hmgextended.com/files/
There is the following changelog for this build:
2014/07/09: HMG Extended Edition 2.3.7 Published.
* Fixed: Correction in the function _GetFocusedControl() for ComboBox control
with DisplayEdit clause and ComboBoxEx control.
Problem was reported at official HMG forum.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
* Enhanced: 'ThisWindow' object reference may be used inside a structure
DEFINE WINDOW ... END WINDOW.
Sample code:
DEFINE WINDOW Win_1 TITLE 'Hello World!' WINDOWTYPE MAIN
This.Sizable := .F.
This.MaxButton := .F.
This.MinButton := .F.
END WINDOW
Contributed by Russian user SergKis
(see demo2.prg in folder \samples\Basic\ExtractIcon)
* Changed: Function InkeyGUI([
Contributed by Russian user SergKis
(see demo2.prg in folder \samples\Basic\WAIT_WINDOW)
* Enhanced: The ButtonEx control supports an optional HANDCURSOR clause and
'ON MOUSEHOVER' and 'ON MOUSELEAVE' events.
Using of above events allow dynamically change a button's look at
a mouse hover and got focus after arrows keys pressing.
Requested by Verchenko Andrey <verchenkoag@gmail.com>.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see cpanel_2.prg in folder \samples\Advanced\CONTROL_
menulist_2.prg in folder \samples\Advanced\MenuList)
* Enhanced: HOTTRACK clause have used for highlighting of selected Tab page
at an owner-draw colored TAB. It is an experimental feature.
Requested by Eduardo Piazza <e.p@ergosoftware.it>.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo.prg in folder \samples\Basic\TAB)
* Updated: Header file i_hmgcompat.ch for compatibility with Official HMG:
- added pseudo-functions IsValidWindowHandle() and IsMinimized().
Contributed by Grigory Filatov <gfilatov@inbox.ru>
* Updated: Config file of hbmk2 utility: revised description of needed libs.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see minigui.hbc in folder \harbour\bin)
* Updated: HBPrinter library v.2.37:
- Fixed: Brush and pen not working when printing a rounded rectangle.
- New: Added command SET COPIES [TO]
Requested by Vianei Moreira de Lemos <vianeimoreira@gmail.com>.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Basic\HBPrinter)
* Updated: PropGrid library source code:
- Changed: Optional clause ITEMDATA for item type STRING to execute
InputMask in form Control TextBox.
Contributed by Janusz Pora <januszpora@onet.eu>
* Updated: HbXml library source code (see in folder \Source\HbXML).
Borrowed from HwGui v2.18 by Alexander Kresin <alex@kresin.ru>.
Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Advanced\XMLDEMO)
* Updated: Harbour Compiler 3.2.0dev (r2014-06-26 18:42).
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(look at ReadMe.txt in folder \harbour)
* New: 'Grid Row Height workaround' sample.
Based upon a contribution of S.Rathinagiri <srgiri@dataone.in>
(see in folder \samples\Basic\Grid_RowHeight)
* New: 'Control Panel with ButtonEx' sample.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see in folder \samples\Advanced\CONTROL_
* New: 'Menu List with ButtonEx' sample.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see in folder \samples\Advanced\MenuList)
* New: 'External Application Control' sample.
Based upon a contribution of Claudio Soto <srvet@adinet.com.uy>.
Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru>
(see demos in folder \samples\Advanced\ExternalApp_
Warning: This example don't work properly at 64-bit version of Windows.
* New: 'Sqlite browser' utility.
Contributed by Janusz Pora <januszpora@onet.eu>.
Revised by Grigory Filatov <gfilatov@inbox.ru>
(see in folder \Utils\SqlDBU)
* Updated: 'Example assembled from three parts (modules)' sample.
Contributed by Verchenko Andrey <verchenkoag@gmail.com>
(see in folder \samples\Basic\SPLASHDEMO_3)
* Updated: 'Method AddPage, AddControl and BackColor in TAB' sample.
Based upon a contribution of Daniel Maximiliano.
Revised by Grigory Filatov <gfilatov@inbox.ru>
(see in folder \samples\Basic\Tab_2)
There is also a following "last minute" change in this build:
* Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG:
- Changed: Minor correction in the method SortArray().
Contributed by Igor Nazarov.
It is a regularly scheduled maintenance release.
This release is considered stable and ready for production use.
--
With Best Regards,
Grigory Filatov
[MiniGUI Team]
P.S. Thank you very much to ALL donators of this project!
This release would not have been possible without your support.
Saturday, June 21, 2014
Harbour MiniGUI Extended Edition 2.3.6 Released on 14 June 2014
Harbour MiniGUI Extended Edition 2.3.6 setup is published at the following URL:
http://hmgextended.com/files/
and a MinGW-based self-extracting archive is placed at the following URL:
http://hmgextended.com/files/
There are also an optional xHarbour-based archive at the following URL:
http://hmgextended.com/files/
and donationware xCC-based self-extracting archive for xHarbour.com distribution at
http://hmgextended.com/files/
There is the following changelog for this build:
2014/06/11: HMG Extended Edition 2.3.6 Published.
* Changed: The C-functions SetArrowCursor() and SetWaitCursor() are
defined as pseudo-functions.
They are a wrappers for the C-function SetWindowCursor().
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Basic\CURSOR)
* Changed: The internal C-function ReleaseControl() is defined as pseudo-function.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
* Modified: The C-function GetWindowRect() supports a second parameter as numeric value.
Syntax:
nRet := GetWindowRect( hWnd, /*@*/ aPos | nSwitch ),
where nSwitch have the following values:
1 - function returns Window Row of specified handle hWnd;
2 - function returns Window Column of specified handle hWnd;
3 - function returns Window Width of specified handle hWnd;
4 - function returns Window Height of specified handle hWnd.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Basic\DropDown)
* Changed: The C-functions GetWindowRow(), GetWindowCol(), GetWindowWidth() and
GetWindowHeight() are defined as pseudo-functions.
They are a wrappers for the updated C-function GetWindowRect().
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Basic\FormStorage)
* Updated: MiniPrint library (see source in folder \Source\MiniPrint):
- Updated: Unified definition of hotkeys in the three forms.
Borrowed from HMG official version 3.3
(see demo in folder \samples\Basic\miniprint)
* Updated: 'Bos Taurus' Graphics Library (see source in folder \Source\BosTaurus).
Based upon a contribution of Claudio Soto <srvet@adinet.com.uy>.
Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru>
(see demos in folder \samples\Advanced\BosTaurus)
* Updated: HbXml library source code (see in folder \Source\HbXML).
Borrowed from HwGui v2.18 by Alexander Kresin <alex@kresin.ru>.
Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Advanced\XMLDEMO)
* Updated: HbSQLite3 library:
- update for using SQLITE3 version 3.8.5 (from 3.8.5dev).
Upgrading from the previous version is recommended.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Advanced\SQLITE_2)
* Updated: Harbour Compiler 3.2.0dev (r2014-05-23 17:01).
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(look at ReadMe.txt in folder \harbour)
* New: 'MiniPrint Demo' sample. Borrowed from HMG 4 project.
Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru>
(see demo2.prg in folder \samples\Basic\miniprint)
* New: 'Usage of FreeImage DLL for images from file and resource' sample.
This sample is required a library FreeImage.Dll from http://freeimage.sourceforge.
Based upon a contribution of Vladimir Chumachenko <ChVolodymyr@yandex.ru>
(see in folder \samples\Advanced\FreeImage_2)
* Updated: 'Charts ADO' sample: minor change.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see in folder \samples\Basic\Charts)
* Updated: 'ToolBar container' sample:
- Fixed: Windows problem of overlap between ToolBar Bottom and StatusBar.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo1.prg in folder \samples\Basic\CONTAINERS\
It is a regularly scheduled maintenance release.
This release is considered stable and ready for production use.
--
With Best Regards,
Grigory Filatov
[MiniGUI Team]
Saturday, September 28, 2013
QtContribs - Harbour Qt Projects
a student of software analysis & concepts
More at http://sourceforge.net/projects/qtcontribs/
Locking schemes used with DBF files by Przemyslaw Czerpak
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
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
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 | ||
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 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 ProjectYou 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.