Harbour is a compiler for the xBase superset language often referred to as Clipper (the language that is implemented by the compiler CA-Clipper). It is a cross platform compiler and is known to compile and run on MS-DOS, MS-Windows (32,64), Pocket PC, Windows CE, OS/2, GNU/Linux and Mac OSX.
Why using it?
Because is a free software 100% compatible with Clipper compilers
Because remove some of the limits imposed by the base implementation but the extent of this will depend on your chosen platform.
Because Harbour is proven to be stable, robust and efficient.
Because Harbour supports RDDs (Replaceable Database Drivers) to allow multiple data sources which allows an application to scale.
Because Harbour is portable across multiple operating systems with the same code base.
Because Harbour's architecture is fully open and supports a third-party add on market.
Because Harbour is open-source and therefore you are not at the mercy of the decisions of a private company.
Because Harbour is developed by a very experienced and capable team of developers.
Most importantly, try Harbour for yourself, decide for yourself why it has advantages for you.
This product will be an harbour for clipper
What's New in This Release: [ read full changelog ]
· Digital Marc C build fixed.
· Debian, RPM packaging fixes.
· Several code quality enhancements, warning fixes.
· Doc quality fixes, formatting.
· Fixed so that build-time PRG_USR always overrides default options in GNU-make.
· Added openSUSE package requirements to doc/linux1st.txt.
· Unnecessary compiler options and lib dependencies cleaned from build processes.
· Fixed Darwin (OS X) builds broken due to a change shortly before 1.0.0.
· Non-critical filename casing related cleanups.
· Non-ASCII chars stripped from several source files for better portability.
· Added RDD regression test code.
· Fixed potential buffer overruns in PP, GTCRS, GTPCA, GTSTD, hbfbird, hbwhat32.
· Eliminated remaining non-safe string manipulation calls: strncpy(), strcpy() -> hb_strncpy() strncat(), strcat() -> hb_strncat()
· Some contrib name collisions fixed in non-GNU builds.
· gtalleg GT moved to the contrib area to enable it for non-GNU builds and non-*nix builds in general. Use HB_INC_ALLEGRO or HB_DIR_ALLEGRO (for non-GNU make only) to specify the location of the headers or the package (respectively).
· Harbour compiler now defaults to -gc0 switch (was -gc2) to generate the smallest possible .c output by default.
· Fixed to compile under Cygwin.
· -mno-cygwin option removed from MinGW builds. You may need to readd this to C_USR if you use very old MinGW compilers, like Cygnus MinGW32 2.95.
· Fixed WinCE harbour.dll generation in non-GNU builds.
· Fixed WinCE build warnings in non-GNU builds.
· Synced build options between BCC/MSVC GNU make and non-GNU make.
· Default HB_VISUALC_VER envvar value changed uniformly to 80 for both core and contrib and WinCE build in non-GNU make. You may need change your environment if you relied on the default.
· Non-GNU MSVC WinCE builds are now integrated into mainstream non-GNU MSVC make. make_vcce.bat was removed. Please read instructions in make_vc.bat, how to initiate a WinCE build.
· Now Harbour is able to build and run properly in MSVC C mode in AMD64 (64-bit) mode.
· Added experimental Pelles C WinCE GNU-make file. It doesn't yet work properly.
· Post batch file called from core non-GNU make files was renamed, please update your system if you're using them: exit_err.bat -> hbmkpost.bat
· Added experimental MSVC WinCE GNU-make file.
· Added Darwin autodetection to non-GNU .sh make files.
· Changed GNU-make name of MinGW WinCE compiler (HB_COMPILER) from 'cemgw' to 'mingwce'. Please update your system, if you've been using this directly (and not via make_*ce.sh scripts).
· Memory statistics module now turned off by default for optimal performance. It can be turned on by setting HB_FM_STATISTICS macro.
· Added HB_LEGACY_LEVEL macro to control inclusion of certain deprecated Harbour elements. This macro is enabled by default, and will be disabled (and legacy parts probably removed) in Harbour 1.1. You can disable it now manually by #defining HB_LEGACY_LEVEL_OFF, in order to check what elements needs to be changed, and if they were properly and fully changed in your local code.
· HB_DBG_*() internal functions moved to the internal function namespace __DBG*(). Some of these
· potentially used by 3rd party packages
· are still accessible under the old name, when HB_LEGACY_LEVEL is #defined.
· Removed old __VM*() macros which were aliased to __DBG*() functions.
· Macro name change __EXPORT__ -> HB_DYNLIB This shouldn't normally affect users, but if you happen to use it, please update it.
· Some internal macro names changed as follows: OS_UNIX_COMPATIBLE * -> HB_OS_UNIX_COMPATIBLE OS_DOS_COMPATIBLE -> !defined( HB_OS_UNIX_COMPATIBLE ) OS_PATH_LIST_SEPARATOR -> HB_OS_PATH_LIST_SEP_CHR OS_PATH_DELIMITER * -> HB_OS_PATH_DELIM_CHR OS_PATH_DELIMITER_STRING -> HB_OS_PATH_DELIM_STR OS_PATH_DELIMITER_LIST -> HB_OS_PATH_DELIM_LIST OS_FILE_MASK -> HB_OS_ALLFILE_MASK OS_DRIVE_DELIMITER -> HB_OS_DRIVE_DELIM_CHR OS_HAS_DRIVE_LETTER -> HB_OS_HAS_DRIVE_LETTER OS_OPT_DELIMITER_LIST -> HB_OS_OPT_DELIM_LIST OS_EOL_LEN -> HB_OS_EOL_LEN HARBOUR_GCC_OS2 -> HB_OS_OS2_GCC HARBOUR_START_PROCEDURE -> HB_START_PROCEDURE HARBOUR_MAIN_STD -> HB_MAIN_STD HARBOUR_MAIN_WIN -> HB_MAIN_WIN HARBOUR_MAX_RDD_DRIVERNAME_LENGTH * -> HB_RDD_MAX_DRIVERNAME_LEN HARBOUR_MAX_RDD_ALIAS_LENGTH * -> HB_RDD_MAX_ALIAS_LEN HARBOUR_MAX_RDD_AREA_NUM -> HB_RDD_MAX_AREA_NUM If you happen to use these, please update your code to use the new names. The more commonly used ones (marked with '*') are still available under the old name, covered with HB_LEGACY_LEVEL.
· hbmake and hbdoc tools reduction in size, several fixes, better multiplaform support and lots of code cleanups, especially in hbmake (still a long way to go though).
· Some names deprecated and replaced with new ones: FHANDLE -> HB_FHANDLE EVALINFO -> HB_EVALINFO PEVALINFO -> PHB_EVALINFO EVALINFO_PTR -> marked as legacy, use PHB_EVALINFO instead. CLR_STRLEN -> HB_CLRSTR_LEN All of these are marked with HB_LEGACY_LEVEL. Important to note that legacy Clipper compatible C sources may continue to use Clipper compatible symbols, regardless of the HB_LEGACY_LEVEL setting. It's advised to change these to Harbour-only C sources in preparation to the next Harbour major version (1.1).
· Marked hb_fileNameConv() as HB_LEGACY_LEVEL. 3rd party and app developers should switch to hb_fsNameConv().
· GTI_*, GFX_* macros marked as HB_LEGACY_LEVEL. Please use HB_GTI_*, HB_GFX_* equivalents.
· Fixed potential buffer overrun in hb_fsTempName(). This got introduced shortly before 1.0.0.
· Debugger: Strip function name from module name used to initialize global and file wide variables. It fixes presenting file wide static variables in debugger.
· Removed hb_hInstance, hb_hPrevInstance, s_iCmdShow, s_WinMainParam old undocumented public variables. 3rd parties should use official hb_winmainArgGet() API to get these values. This feature is also HB_LEGACY_LEVEL dependent, therefore it will be finalized in 1.1, until then, old symbols will still work.
· Fixed _FIELD indirectly used as alias to generate the right RTE: ? ("_FIELD")->NAME, or: M->var := "_FIELD"; ? ("&var")->NAME
· Fixed OS() to detect Vista/Windows 2008. This bug got introduced in 1.0.0rc2.
· Fixed OS() string when run on Windows XP 64-bit Edition.
· Changed HB_COMPILER() to always show 32/64-bit in the returned string.
· Fixed GPFs and leaks when using Harbour compiler -w3 switch.
· Bad workaround added for Pelles C 5.00.1 in AMD64 mode to compile the Harbour 'inet' subsystem. It won't properly work, but it lets build the rest of Harbour (like hbrun.exe).
· PCRE lib upgraded to 7.8 (from 7.7)
· Fixed dbInfo( DBI_POSITIONED ) returned value.
· Fixed internal error in dirty index reading.
· Fixed return value of HB_INETGETSNDBUFSIZE().
· Fixed GPF when user sort code block reduces the size of sorted array.
· Fixed typo in hash cloning code which caused that references was copied to cloned array. Thanks to Mindaugas for example.
· Added missing MESSAGE < MessageName > TO < oObject > to hbclass.ch.
· hbmzip potential GPF fixed in executable type detection.
· General code style fixes in certain contribs.
· Harbour -km switch enabled for contribs.
· hbmysql SQLFETCHR() function updated to allow fetching binary (BLOB) fields.
· hbclipsm GAUGE*() function fixes.
· gtalleg fixed to compile under several non-*nix platforms (still needs more work).
· xhb: HB_ARRAYBLOCK() compatibility function added.
· hbnf FT_GETE() function bad leak fixed on Win32 systems, and potential GPF on all systems.
· hbwhat32 removed wintypes.ch header. Header with the same name and identical content can be found in xhb contrib.
· hbct VOLUME() buffer overrun fixed.
· hbole GPF fixed. This bug got introduced in 1.0.0rc2.
· hbole, hbw32 64-bit fix for MESSAGEBOX() functions. It now allows for both pointer and numeric types to be passed as a window handle.
· hbwhat32 fixed to not define WinMain() and also not to collide with certain Harbour public symbols.
· hbw32 unnecessary memory allocation hacks removed from OLE support.
· Using ANSI C comments more consistently in contribs.
· hbct / atnum.c changed to workaround a compiler bug in Pelles C 5.00.1 in AMD64 mode.
· hbole modified to generate RTE when OLE object cannot be found, to be in sync with hbw32 OLE implementation.
· hbbtree fixed scope problem in class, causing an RTE. Added build batch files for its tests.
· Remaining code (hbwhat32, hbnf) fixed to always use Harbour C API, instead of legacy Clipper C API (*.api, clipdefs.h and extend.h).
· hbsqlit2 lib was moved to examples and sqlite2 sources removed. Please use hbsqlit3 instead.
· hbziparch heavy rework/refactor/reduce/fixing effort, what resulted in hbziparc, which implements the same old ZipArchive interface with similar functionality (except progress codeblock callbacks unzip functions and .zip spanning feature), now rewritten in Harbour. If you need to use this API, please change hbziparch to hbziparc and link in hbmzip library, too. In contrary to old implementation, this new one is completely portable and fixes some potential leaks and GPFs. This code could use some more testing, be aware.
· hbbmcdx fixed internal error in dirty index reading.
· hbcurl added support for libcurl 7.19.0 features.
· hbhpdf added support for libharu 2.1.0.
· Fixed so that contrib source files cannot collide with each other when building them using the non-GNU make system.
· Former hbwhat32 lib added to the default contrib list under the name of hbwhat, compilation was fully cleaned and fixed to support Win64 platform. INTERNETREADFILE(), INTERNETWRITEFILE() functions were fixed. what32.ch renamed to hbwhat.ch.
· hbhpdf fixed HPDF_ADDPAGELABEL().
· hbw32 got a new COM port handling class and API.
· gtwvg got some enhancements and 64-bit compatibility fixes. A critical 1.0.0 bug was also fixed, which could cause dialogs to not appear.
· hbfimage fixed to compile with Watcom compilers.
· Windows 64-bit builds may generate a large amount of type conversion warnings. This is currently normal and will be addressed in a future version.
· Contrib hbfimage won't currently compile on Linux systems. This will be addressed in a future version.
· Contrib hbsqlit3 will not embed foreign sqlite3 library code for Pelles C 4.5 and Open Watcom 1.7 due to fatal compile problems. For these compilers you will have to supply sqlite3 library yourself. For other compilers, some warnings are expected and normal in this non-Harbour code.
· Using Pelles C 5.00.1 in 64-bit mode, HB_INET*() functions won't work.
· gtalleg, hbwhat contrib may not compile on all platforms/compilers.
· hbcurl won't build when using DMC and libcurl 7.19.0. Earlier versions build okay.