Harbour (software)
   HOME

TheInfoList



OR:

Harbour is a computer
programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
, primarily used to create database/business programs. It is a modernized,
open source Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use the source code, design documents, or content of the product. The open-source model is a decentralized sof ...
d and
cross-platform In computing, cross-platform software (also called multi-platform software, platform-agnostic software, or platform-independent software) is computer software that is designed to work in several computing platforms. Some cross-platform software r ...
version of the older
Clipper A clipper was a type of mid-19th-century merchant sailing vessel, designed for speed. Clippers were generally narrow for their length, small by later 19th century standards, could carry limited bulk freight, and had a large total sail area. "C ...
system, which in turn developed from the
dBase dBase (also stylized dBASE) was one of the first database management systems for microcomputers and the most successful in its day. The dBase system includes the core database engine, a query system, a forms engine, and a programming language ...
database market of the 1980s and 1990s. Harbour code using the same databases can be compiled under a wide variety of platforms, including
Microsoft Windows Windows is a group of several proprietary graphical operating system families developed and marketed by Microsoft. Each family caters to a certain sector of the computing industry. For example, Windows NT for consumers, Windows Server for serv ...
,
Linux Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, which ...
,
Unix Unix (; trademarked as UNIX) is a family of multitasking, multiuser computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, and ot ...
variants, several
BSD The Berkeley Software Distribution or Berkeley Standard Distribution (BSD) is a discontinued operating system based on Research Unix, developed and distributed by the Computer Systems Research Group (CSRG) at the University of California, Berk ...
descendants,
Mac OS X macOS (; previously OS X and originally Mac OS X) is a Unix operating system developed and marketed by Apple Inc. since 2001. It is the primary operating system for Apple's Mac (computer), Mac computers. Within the market of ...
,
MINIX 3 Minix 3 is a small, Unix-like operating system. It is published under a BSD-3-Clause license and is a successor project to the earlier versions, Minix 1 and 2. The project's main goal is for the system to be fault-tolerant by detecting and rep ...
,
Windows CE Windows Embedded Compact, formerly Windows Embedded CE, Windows Powered and Windows CE, is an operating system subfamily developed by Microsoft as part of its Windows Embedded family of products. Unlike Windows Embedded Standard, which is base ...
,
Pocket PC A Pocket PC (P/PC, PPC) is a class of personal digital assistant (PDA) that runs the Windows Mobile or Windows Embedded Compact operating system that has some of the abilities of modern desktop PCs. The name was introduced by Microsoft in 2000 ...
,
Symbian Symbian is a discontinued mobile operating system A mobile operating system is an operating system for mobile phones, tablets, smartwatches, smartglasses, or other non-laptop personal mobile computing devices. While computers such as typic ...
,
iOS iOS (formerly iPhone OS) is a mobile operating system created and developed by Apple Inc. exclusively for its hardware. It is the operating system that powers many of the company's mobile devices, including the iPhone; the term also includes ...
, Android,
QNX QNX ( or ) is a commercial Unix-like real-time operating system, aimed primarily at the embedded systems market. QNX was one of the first commercially successful microkernel operating systems. The product was originally developed in the early 19 ...
,
VxWorks VxWorks is a real-time operating system (or RTOS) developed as proprietary software by Wind River Systems, a wholly-owned subsidiary of Aptiv. First released in 1987, VxWorks is designed for use in embedded systems requiring real-time, determin ...
,
OS/2 OS/2 (Operating System/2) is a series of computer operating systems, initially created by Microsoft and IBM under the leadership of IBM software designer Ed Iacobucci. As a result of a feud between the two companies over how to position OS/2 ...
(including
eComStation eComStation or eCS is an operating system based on OS/2 Warp for the 32-bit x86 architecture. It was originally developed by Serenity Systems and Mensys BV under license from IBM. It includes additional applications, and support for new hardwa ...
and
ArcaOS ArcaOS is an operating system based on OS/2, developed and marketed by Arca Noae, LLC under license from IBM. It was codenamed Blue Lion during its development. It builds on OS/2 Warp 4.52 by adding support for new hardware, fixing defects and l ...
),
BeOS BeOS is an operating system for personal computers first developed by Be Inc. in 1990. It was first written to run on BeBox hardware. BeOS was positioned as a multimedia platform that could be used by a substantial population of desktop users a ...
/
Haiku is a type of short form poetry originally from Japan. Traditional Japanese haiku consist of three phrases that contain a ''kireji'', or "cutting word", 17 '' on'' (phonetic units similar to syllables) in a 5, 7, 5 pattern, and a ''kigo'', or se ...
,
AIX Aix or AIX may refer to: Computing * AIX, a line of IBM computer operating systems *An Alternate Index, for a Virtual Storage Access Method Key Sequenced Data Set * Athens Internet Exchange, a European Internet exchange point Places Belgi ...
and
MS-DOS MS-DOS ( ; acronym for Microsoft Disk Operating System, also known as Microsoft DOS) is an operating system for x86-based personal computers mostly developed by Microsoft. Collectively, MS-DOS, its rebranding as IBM PC DOS, and a few ope ...
.


History

The idea of a free software Clipper compiler had been floating around for a long time and the subject has often cropped up in discussion on comp.lang.clipper. Antonio Linares founded the Harbour project and the implementation was started in March 1999. The name "Harbour" was proposed by Linares, it is a play on a
Clipper A clipper was a type of mid-19th-century merchant sailing vessel, designed for speed. Clippers were generally narrow for their length, small by later 19th century standards, could carry limited bulk freight, and had a large total sail area. "C ...
as a type of ship. Harbour is a synonym for port (where ships dock), and Harbour is a port of the Clipper language. In 2009 Harbour was substantially redesigned, mainly by Viktor Szakáts and Przemyslaw Czerpak.


Database support

Harbour extends the Clipper Replaceable Database Drivers (RDD) approach. It offers multiple RDDs such as DBF, DBFNTX, DBFCDX, DBFDBT and DBFFPT. In Harbour multiple RDDs can be used in a single application, and new logical RDDs can be defined by combining other RDDs. The RDD architecture allows for inheritance, so that a given RDD may extend the functionality of other existing RDD(s). Third-party RDDs, like RDDSQL, RDDSIX, RMDBFCDX,
Advantage Database Server Sap is a fluid transported in xylem cells (vessel elements or tracheids) or phloem sieve tube elements of a plant. These cells transport water and nutrients throughout the plant. Sap is distinct from latex, resin, or cell sap; it is a separ ...
, and Mediator exemplify some of the RDD architecture features. DBFNTX implementation has almost same functionality of DBFCDX and RDDSIX. NETIO and LetoDB provide remote access over TCP protocol. Harbour also offers
ODBC In computing, Open Database Connectivity (ODBC) is a standard application programming interface (API) for accessing database management systems (DBMS). The designers of ODBC aimed to make it independent of database systems and operating systems. An ...
support by means of an OOP syntax, and ADO support by means of OLE.
MySQL MySQL () is an open-source relational database management system (RDBMS). Its name is a combination of "My", the name of co-founder Michael Widenius's daughter My, and "SQL", the acronym for Structured Query Language. A relational database o ...
,
PostgreSQL PostgreSQL (, ), also known as Postgres, is a free and open-source relational database management system (RDBMS) emphasizing extensibility and SQL compliance. It was originally named POSTGRES, referring to its origins as a successor to the In ...
,
SQLite SQLite (, ) is a database engine written in the C programming language. It is not a standalone app; rather, it is a library that software developers embed in their apps. As such, it belongs to the family of embedded databases. It is the most ...
,
Firebird Firebird and fire bird may refer to: Mythical birds * Phoenix (mythology), sacred firebird found in the mythologies of many cultures * Bennu, Egyptian firebird * Huma bird, Persian firebird * Firebird (Slavic folklore) Bird species ''Various sp ...
,
Oracle An oracle is a person or agency considered to provide wise and insightful counsel or prophetic predictions, most notably including precognition of the future, inspired by deities. As such, it is a form of divination. Description The word '' ...
are examples of databases which Harbour can connect. xBase technologies often is confused with a
RDBMS A relational database is a (most commonly digital) database based on the relational model of data, as proposed by E. F. Codd in 1970. A system used to maintain relational databases is a relational database management system (RDBMS). Many relation ...
software. Although this is true, xBase is more than a simple database system as the same time xBase languages using purely DBF can not provide full concept of a real RDBMS.


Programming philosophy

Unlike Java which is intended to be write once, run anywhere, Harbour aims to be
write once, compile anywhere Write once, compile anywhere (WOCA) is a philosophy taken by a compiler and its associated Library (computing), software libraries or by a software library/software framework which refers to a capability of writing a computer program that can be c ...
. As the same compiler is available for all of the above operating systems, there is no need for recoding to produce identical products for different platforms, except when operating system dependent features are used. Cross-compiling is supported with
MinGW MinGW ("Minimalist GNU for Windows"), formerly mingw32, is a free and open source software development environment to create Microsoft Windows applications. MinGW includes a port of the GNU Compiler Collection (GCC), GNU Binutils for Windows ( ...
. Under Microsoft Windows, Harbour is more stable but less well-documented than Clipper, but has multi-platform capability and is more transparent, customizable and can run from a USB flash drive. Under Linux and Windows Mobile, Clipper source code can be compiled with Harbour with very little adaptation. Most software originally written to run on Xbase++, FlagShip, FoxPro, xHarbour and others dialects can be compiled with Harbor with some adaptation. As 2010 many efforts have been made to turn the transition from other
xBase xBase is the generic term for all programming languages that derive from the original dBASE ( Ashton-Tate) programming language and database formats. These are sometimes informally known as dBASE "clones". While there was a non-commercial predec ...
dialects easier. Harbour can use the following C compilers, among others: GCC,
MinGW MinGW ("Minimalist GNU for Windows"), formerly mingw32, is a free and open source software development environment to create Microsoft Windows applications. MinGW includes a port of the GNU Compiler Collection (GCC), GNU Binutils for Windows ( ...
,
Clang Clang is a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages, as well as the OpenMP, OpenCL, RenderScript, CUDA, and HIP frameworks. It acts as a drop-in replacement for the GNU Compiler Collection (GCC), ...
, ICC,
Microsoft Visual C++ Microsoft Visual C++ (MSVC) is a compiler for the C, C++ and C++/CX programming languages by Microsoft. MSVC is proprietary software; it was originally a standalone product but later became a part of Visual Studio and made available in both tria ...
(6.0+),
Borland C++ Borland C++ is a C and C++ IDE (integrated development environment) for MS-DOS and Microsoft Windows. It was the successor to Turbo C++ and included a better debugger, the Turbo Debugger, which was written in protected mode DOS. Libraries O ...
,
Watcom C Watcom C/C++ (currently Open Watcom C/C++) is an integrated development environment (IDE) product from Watcom International Corporation for the C (programming language), C, C++, and Fortran programming languages. Watcom C/C++ was a commercial pro ...
,
Pelles C The Fisher King is a figure in Arthurian legend, the last in a long line of British kings tasked with guarding the Holy Grail. The Fisher King is both the protector and physical embodiment of his lands, but a wound renders him incapable and hi ...
and
Sun Studio Sun Studio is a recording studio opened by rock-and-roll pioneer Sam Phillips at 706 Union Avenue in Memphis, Tennessee, on January 3, 1950. It was originally called Memphis Recording Service, sharing the same building with the Sun Records label ...
. Harbour can make use of multiple Graphic Terminal emulations, including console drivers, and Hybrid Console/GUIs, such as GTWvt, and GTWvg. Harbour supports external GUIs, free (e.g. HBQt, HWGui, MiniGUI (latest version based on Qt and QtContribs) and commercial (e.g. FiveWin, Xailer). HBQt is a library providing bindings to Qt. HBIDE application is a sample of HBQt potential. Harbour is 100% Clipper-compatible and supports many language syntax extensions including greatly extended run-time libraries such as OLE, Blat,
OpenSSL OpenSSL is a software library for applications that provide secure communications over computer networks against eavesdropping or need to identify the party at the other end. It is widely used by Internet servers, including the majority of HTT ...
, FreeImage, GD, hbtip, hbtpathy,
PCRE Perl Compatible Regular Expressions (PCRE) is a library written in C, which implements a regular expression engine, inspired by the capabilities of the Perl programming language. Philip Hazel started writing PCRE in summer 1997. PCRE's syntax i ...
, hbmzip (
zlib zlib ( or "zeta-lib", ) is a software library used for data compression. zlib was written by Jean-loup Gailly and Mark Adler and is an abstraction of the DEFLATE compression algorithm used in their gzip file compression program. zlib is also a ...
), hbbz2 ( bzip2),
cURL cURL (pronounced like "curl", UK: , US: ) is a computer software project providing a library (libcurl) and command-line tool (curl) for transferring data using various network protocols. The name stands for "Client URL". History cURL was fi ...
,
Cairo Cairo ( ; ar, القاهرة, al-Qāhirah, ) is the capital of Egypt and its largest city, home to 10 million people. It is also part of the largest urban agglomeration in Africa, the Arab world and the Middle East: The Greater Cairo metro ...
, its own implementation of CA-Tools, updated NanFor libraries and many others. Harbour has an active development community and extensive third party support. Any
xBase xBase is the generic term for all programming languages that derive from the original dBASE ( Ashton-Tate) programming language and database formats. These are sometimes informally known as dBASE "clones". While there was a non-commercial predec ...
language provides a very productive way to build business and data intensive applications. Harbour is not an exception.


Macro Operator (runtime compiler)

One of the most powerful features of xBase languages is the Macro Operator '&'. Harbour's implementation of the Macro Operator allows for runtime compilation of any valid Harbour expression. Such a compiled expression may be used as a VALUE, i.e. the right side of an assignment (rvalue), but such a compiled expression may be used to resolve the left side (lvalue) of an assignment, i.e. private, or public variables, or a database field. Additionally, the Macro Operator may compile and execute function calls, complete assignments, or even list of arguments, and the result of the macro may be used to resolve any of the above contexts in the compiled application. In other words, any Harbour application may be extended and modified at runtime to compile and execute additional code on-demand. The latest Macro compiler can compile any valid Harbour code including code to pre-process before compile. Syntax: &( ... ) The text value of the expression '...' will be compiled, and the value resulting from the execution of the compiled code is the result. &SomeId is the short form for &( SomeId ). &SomeId.postfix is the short form of &( SomeId + "postfix" ).


Object oriented programming

Programming in an OOP style is a broader issue than a specific library or a specific interface, but OOP programming is something many Clipper programmers have come to expect. CA-Clipper 5.2 and especially 5.3 added a number of base classes, and a matching OOP syntax. Libraries such a
Class(y)
Fivewin, Clip4Win, and TopClass provide additional OOP functionality. Harbour has OOP extensions with full support for classes including inheritance, based on Class(y) syntax. OOP syntax in Harbour is very similar to that of earlier Clipper class libraries so it should be possible to maintain legacy Clipper code with minimal changes.


Syntax and semantics

Harbour as every xBase language is case insensitive and can optionally accept keywords written just by their first four characters.


Built-in data types

Harbour has six scalar types :
Nil Nil may refer to: * nil (the number 0, zero) Acronyms * NIL (programming language), an implementation of the Lisp programming language * Student athlete compensation, Name, Image and Likeness, a set of rules in the American National Collegiate At ...
, String,
Date Date or dates may refer to: *Date (fruit), the fruit of the date palm (''Phoenix dactylifera'') Social activity *Dating, a form of courtship involving social activity, with the aim of assessing a potential partner ** Group dating *Play date, a ...
,
Logical Logic is the study of correct reasoning. It includes both formal and informal logic. Formal logic is the science of deductively valid inferences or of logical truths. It is a formal science investigating how conclusions follow from premises ...
, Numeric, Pointer, and four complex types:
Array An array is a systematic arrangement of similar objects, usually in rows and columns. Things called an array include: {{TOC right Music * In twelve-tone and serial composition, the presentation of simultaneous twelve-tone sets such that the ...
,
Object Object may refer to: General meanings * Object (philosophy), a thing, being, or concept ** Object (abstract), an object which does not exist at any particular time or place ** Physical object, an identifiable collection of matter * Goal, an ...
, CodeBlock, and Hash. A scalar holds a single value, such as a string, numeric, or reference to any other type. Arrays are ordered lists of scalars or complex types, indexed by number, starting at 1. Hashes, or
associative array In computer science, an associative array, map, symbol table, or dictionary is an abstract data type that stores a collection of (key, value) pairs, such that each possible key appears at most once in the collection. In mathematical terms an as ...
s, are unordered collections of any type values indexed by their associated key, which may be of any scalar or complex type. Literal (static) representation of scalar types: * Nil: * String: * Date: * Logical: * Numeric: Complex Types may also be represent as literal values: * Array: * CodeBlock: * Hash: Hashes may use ''any'' type including other Hashes as the ''Key'' for any element. Hashes and Arrays may contain ''any'' type as the ''Value'' of any member, including nesting arrays, and Hashes. Codeblocks may have references to Variables of the Procedure/Function>method in which it was defined. Such Codeblocks may be returned as a value, or by means of an argument passed , in such case the Codeblock will "outlive" the routine in which it was defined, and any variables it references, will be a variable. Detached variables will maintain their value for as long as a Codeblock referencing them still exists. Such values will be shared with any other Codeblock which may have access to those same variables. If the Codeblock did not outlive its containing routine, and will be evaluated within the lifetime of the routine in which it is defined, changes to its ''Detached Variables''(s) by means of its evaluation, will be reflected back at its parent routine. Codeblocks can be evaluated any number of times, by means of the function.


Variables

All types can be assigned to named variables. Named variable identifiers are 1 to 63 ASCII characters long, start with _/code> and further consist of the characters 0–9, _/code> up to a maximum of 63 characters. Named variables are not case sensitive. Variables have one of the following scopes: * : Visible only within the routine which declared it. Value is lost upon exit of the routine. * : Visible only within the routine which declared it. Value is preserved for subsequent invocations of the routine. If a STATIC variable is declared before any Procedure/Function/Method is defined, it has a MODULE scope, and is visible within any routine defined within that same source file, it will maintain its life for the duration of the application lifetime. * : Visible within the routine which declared it, and all routines by that routine. * : Visible by routines in the same application. and are resolved at compile time, and thus are much faster than and variables which are dynamic entities accessed by means of a runtime
Symbol table In computer science, a symbol table is a data structure used by a language translator such as a compiler or interpreter, where each identifier (or symbols), constants, procedures and functions in a program's source code is associated with info ...
. For this same reason, and variables are exposed to the Macro compiler, and any macro code which attempts to reference them will generate a runtime error. Due to the dynamic nature of and variables, they can be created and destroyed at runtime, can be accessed and modified by means of runtime macros, and can be accessed and modified by Codeblocks created on the fly.


Control structures

The basic control structures include all of the standard
dBase dBase (also stylized dBASE) was one of the first database management systems for microcomputers and the most successful in its day. The dBase system includes the core database engine, a query system, a forms engine, and a programming language ...
, and
Clipper A clipper was a type of mid-19th-century merchant sailing vessel, designed for speed. Clippers were generally narrow for their length, small by later 19th century standards, could carry limited bulk freight, and had a large total sail area. "C ...
control structures as well as additional ones inspired by the C or
Java Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's List ...
programming languages:


Loops

OWHILE ''ConditionExp'' ''...'' OOP XIT END O FOR ''Var'' := ''InitExp'' TO ''EndExp''
TEP ''StepExp'' Tep may refer to: *Tep language *Tepecano language (ISO 639:tep) People ''Tep'' is a common Cambodian name. *Tep Rindaro *Tep Vanny *Tep Vong *Tep Boprek *Tep Sothy *Tep Ngorn Other *Tep Pranam temple *Tep Wireless *''Tep Songva'', film *''Tep S ...
''...'' OOP XIT NEXT FOR EACH ''Var'' IN ''CollectionExp'' ''...'' 'Var'':__enumIndex() OOP XIT NEXT * The ''...'' is a sequence of one of more Harbour statements, and square brackets [] denote optional syntax. * The ''Var'':__enumIndex() may be optionally used to retrieve the current iteration index (1 based). * The ''LOOP'' statement restarts the current iteration of the enclosing loop structure, and if the enclosing loop is a ''FOR'' or ''FOR EACH'' loop, it increases the iterator, moving to the next iteration of the loop. * The ''EXIT'' statement immediately terminates execution of the enclosing loop structure. * The ''NEXT'' statement closes the control structure and moves to the next iteration of loop structure. In the ''FOR'' statement, the ''assignment'' expression is evaluated prior to the first loop iteration. The ''TO'' expression is evaluated and compared against the value of the control variable, prior to each iteration, and the loop is terminated if it evaluates to a numeric value greater than the numeric value of the control variable. The optional ''STEP'' expression is evaluated after each iteration, prior to deciding whether to perform the next iteration. In ''FOR EACH'', the ''Var'' variable will have the value (scalar, or complex) of the respective element in the collection value. The collection expression, may be an Array (of any type or combinations of types), a Hash Table, or an Object type.


IF statements

IF ''CondExp'' ''...'' LSEIF''CondExp'' ''...''
LSE LSE may refer to: Computing * LSE (programming language), a computer programming language * LSE, Latent sector error, a media assessment measure related to the hard disk drive storage technology * Language-Sensitive Editor, a text editor used on ...
''...'' END F ''...'' represents 0 or more ''statement(s)''. The condition expression(s) has to evaluate to a ''LOGICAL'' value.


SWITCH statements

Harbour supports a SWITCH construct inspired by the C implementation of switch(). SWITCH ''SwitchExp'' CASE ''LiteralExp'' ''...'' XIT ASE ''LiteralExp'' ''...'' XIT THERWISE ''...'' END
WITCH Witchcraft traditionally means the use of Magic (supernatural), magic or supernatural powers to harm others. A practitioner is a witch. In Middle Ages, medieval and early modern Europe, where the term originated, accused witches were usually ...
* The ''LiteralExp'' must be a compiled time resolvable numeric expression, and may involve operators, as long as such operators involve compile time static value. * The ''EXIT'' optional statement is the equivalent of the C statement ''break'', and if present, execution of the SWITCH structure will end when the EXIT statement is reached, otherwise it will continue with the first statement below the next CASE statement (fall through).


BEGIN SEQUENCE statements

BEGIN SEQUENCE ''...'' REAK reak(_[''Exp'').html"_;"title="'Exp''.html"_;"title="reak(_[''Exp''">reak(_[''Exp'')">'Exp''.html"_;"title="reak(_[''Exp''">reak(_[''Exp'')_RECOVER_[USING_''Var''.html" ;"title="'Exp''">reak(_[''Exp'').html" ;"title="'Exp''.html" ;"title="reak( [''Exp''">reak( [''Exp'')">'Exp''.html" ;"title="reak( [''Exp''">reak( [''Exp'') RECOVER [USING ''Var''">'Exp''">reak(_[''Exp'').html" ;"title="'Exp''.html" ;"title="reak( [''Exp''">reak( [''Exp'')">'Exp''.html" ;"title="reak( [''Exp''">reak( [''Exp'') RECOVER [USING ''Var'' ''...'' END[SEQUENCE] or: BEGIN SEQUENCE ''...'' REAK [Break()] END[SEQUENCE] The BEGIN SEQUENCE structure allows for a well behaved abortion of any sequence, even when crossing nested procedures/functions. This means that a called procedure/function, may issue a BREAK statement, or a Break() expression, to force unfolding of any nested procedure/functions, all the way back to the first outer BEGIN SEQUENCE structure, either after its respective END statement, or a RECOVER clause if present. The Break statement may optionally pass any type of expression, which may be accepted by the RECOVER statement to allow further recovery handing. Additionally the Harbour ''Error Object'' supports ''canDefault'', ''canRetry'' and ''canSubstitute'' properties, which allows error handlers to perform some preparations, and then request a ''Retry Operation'', a ''Resume'', or return a
Value Value or values may refer to: Ethics and social * Value (ethics) wherein said concept may be construed as treating actions themselves as abstract objects, associating value to them ** Values (Western philosophy) expands the notion of value beyo ...
to replace the expression triggering the error condition. Alternatively TRY ATCH INALLYstatements are available on ''xhb'' library working like the SEQUENCE construct.


Procedures/Functions

TATIC Tat language may refer to the following: *Tat language (Caucasus) in Dagestan and Azerbaijan, a southwestern Iranian language, closely related to Persian *Tati (Iran), a group of Northwestern Iranian dialects, including Takestani, closely related t ...
PROCEDURE ''SomeProcedureName''
TATIC Tat language may refer to the following: *Tat language (Caucasus) in Dagestan and Azerbaijan, a southwestern Iranian language, closely related to Persian *Tati (Iran), a group of Northwestern Iranian dialects, including Takestani, closely related t ...
PROCEDURE ''SomeProcedureName''()
TATIC Tat language may refer to the following: *Tat language (Caucasus) in Dagestan and Azerbaijan, a southwestern Iranian language, closely related to Persian *Tati (Iran), a group of Northwestern Iranian dialects, including Takestani, closely related t ...
PROCEDURE ''SomeProcedureName''( ''Param1'' ''ParamsN'') INIT PROCEDURE ''SomeProcedureName'' EXIT PROCEDURE ''SomeProcedureName''
TATIC Tat language may refer to the following: *Tat language (Caucasus) in Dagestan and Azerbaijan, a southwestern Iranian language, closely related to Persian *Tati (Iran), a group of Northwestern Iranian dialects, including Takestani, closely related t ...
FUNCTION ''SomeProcedureName''
TATIC Tat language may refer to the following: *Tat language (Caucasus) in Dagestan and Azerbaijan, a southwestern Iranian language, closely related to Persian *Tati (Iran), a group of Northwestern Iranian dialects, including Takestani, closely related t ...
FUNCTION ''SomeProcedureName''()
TATIC Tat language may refer to the following: *Tat language (Caucasus) in Dagestan and Azerbaijan, a southwestern Iranian language, closely related to Persian *Tati (Iran), a group of Northwestern Iranian dialects, including Takestani, closely related t ...
FUNCTION ''SomeProcedureName''( ''Param1'' ''ParamsN'')
Procedures Procedure may refer to: * Medical procedure * Instructions or recipes, a set of commands that show how to achieve some result, such as to prepare or make something * Procedure (business), specifying parts of a business process * Standard opera ...
/ Functions in Harbour can be specified with the
keyword Keyword may refer to: Computing * Keyword (Internet search), a word or phrase typically used by bloggers or online content creator to rank a web page on a particular topic * Index term, a term used as a keyword to documents in an information syst ...
s PROCEDURE, or FUNCTION. Naming rules are same as those for ''Variables'' (up to 63 characters non-case sensitive). Both Procedures and Functions may be qualified by the scope qualifier ''STATIC'' to restrict their usage to the scope of the module where defined. The ''INIT'' or ''EXIT'' optional qualifiers, will flag the procedure to be automatically invoked just before calling the application startup procedure, or just after quitting the application, respectively.
Parameter A parameter (), generally, is any characteristic that can help in defining or classifying a particular system (meaning an event, project, object, situation, etc.). That is, a parameter is an element of a system that is useful, or critical, when ...
s passed to a procedure/function appear in the subroutine as local variables, and may accept any type, including references. Changes to argument variables are not reflected in respective variables passed by the calling procedure/function/method unless explicitly passed BY REFERENCE using the ''@'' prefix. PROCEDURE have no return value, and if used in an Expression context will produce a ''NIL'' value. FUNCTION may return any type by means of the RETURN statement, anywhere in the body of its definition. An example procedure definition and a function call follows: x := Cube( 2 ) FUNCTION Cube( n ) RETURN n ** 3


Sample code

The typical "
hello world ''Hello'' is a salutation or greeting in the English language. It is first attested in writing from 1826. Early uses ''Hello'', with that spelling, was used in publications in the U.S. as early as the 18 October 1826 edition of the ''Norwich C ...
" program would be: ? "Hello, world!" Or: QOut( "Hello, world!" ) Or: Alert( "Hello, world!" ) Or, enclosed in an explicit procedure: PROCEDURE Main() ? "Hello, world!" RETURN


OOP examples

Main procedure: #include "hbclass.ch" PROCEDURE Main() LOCAL oPerson CLS oPerson := Person():New( "Dave" ) oPerson:Eyes := "Invalid" oPerson:Eyes := "Blue" Alert( oPerson:Describe() ) RETURN Class definition: CREATE CLASS Person VAR Name INIT "" METHOD New( cName ) METHOD Describe() ACCESS Eyes INLINE ::pvtEyes ASSIGN Eyes( x ) INLINE iif( HB_ISSTRING( x ) .AND. x $ "Blue,Brown,Green", ::pvtEyes := x, Alert( "Invalid value" ) ) PROTECTED: VAR pvtEyes ENDCLASS // Sample of normal Method definition METHOD New( cName ) CLASS Person ::Name := cName RETURN Self METHOD Describe() CLASS Person LOCAL cDescription IF Empty( ::Name ) cDescription := "I have no name yet." ELSE cDescription := "My name is: " + ::Name + ";" ENDIF IF ! Empty( ::Eyes ) cDescription += "my eyes' color is: " + ::Eyes ENDIF RETURN cDescription


Tools

* hbmk2 – Build tool like
make Make or MAKE may refer to: * Make (magazine), a tech DIY periodical *Make (software), a software build tool *Make, Botswana, in the Kalahari Desert *Make Architects Make Architects is an international architecture practice headquartered in Londo ...
* hbrun – Shell interpreter for Harbour. Macro compiling allows to run any valid Harbour code as it's being compiled * hbformat – Formats source code written on Harbour or another dialect according to defined rules * hbpp – Pre-processor, a powerful tool which avoids typical problems found on C language pre-processor * hbi18n – Tools to localizing text on applications * hbdoc – Creates documentation for Harbour All tools are multiplatform.


Development

Today Harbour development is led by Viktor Szakáts in collaboration with Przemysław Czerpak who also contributes many components of the core language and supplementary components. HBIDE and some other components especially HBQt, are developed by Pritpal Bedi. Other members of the development community send changes to the
GitHub GitHub, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, continuous ...
source repository. As of 2015 Harbour development is active and vibrant.


xHarbour comparison

xHarbour xHarbour is a free multi-platform extended Clipper compiler, offering multiple graphic terminals (GTs), including console drivers, GUIs, and hybrid console/GUIs. xHarbour is backward-compatible with Clipper and supports many language syntax ext ...
is a fork of the earlier Harbour project. xHarbour takes a more aggressive approach to implementing new features in the language, while Harbour is more conservative in its approach, aiming first of all for an exact replication of Clipper behaviour and then implementing new features and extensions as a secondary consideration. It should also be noted that Harbour is supported on a wide variety of
operating systems An operating system (OS) is system software that manages computer hardware, software resources, and provides common services for computer programs. Time-sharing operating systems schedule tasks for efficient use of the system and may also inc ...
while xHarbour only really supports MS Windows and Linux 32-bit. The Harbour developers have attempted to document all hidden behaviour in the Clipper language and test Harbour-compiled code alongside the same code compiled with Clipper to maintain compatibility. The Harbour developers explicitly reject extensions to the language where those extensions would break Clipper compatibility. These rejections were softened recently since the new Harbour architecture allows extensions out of the core compiler. A detailed comparison between extensions implemented in Harbour and xHarbour can be found in the source repository of the project on GitHub.


GUI libraries and tools

* '
hbide
'' –
Integrated Development Environment An integrated development environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools a ...
to help Harbour development and various xBase dialects * '
PTSource IDE
'' –
Integrated Development Environment An integrated development environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools a ...
includes Harbour * '
HwGui
'' – Open Source cross-platform GUI library for Harbour * '
HMG
'' – Free / Open Source xBase
Win32 The Windows API, informally WinAPI, is Microsoft's core set of application programming interfaces (APIs) available in the Microsoft Windows operating systems. The name Windows API collectively refers to several different platform implementations th ...
/
GUI The GUI ( "UI" by itself is still usually pronounced . or ), graphical user interface, is a form of user interface that allows users to interact with electronic devices through graphical icons and audio indicator such as primary notation, inste ...
Development System for Harbour * '
MiniGUI
'' – Free / Open Source xBase Win32 / GUI Development System (a
Fork (software development) In software engineering, a project fork happens when developers take a copy of source code from one software package and start independent development on it, creating a distinct and separate piece of software. The term often implies not merely ...
of both HMG and Harbour) * '
ooHG
'' – Object Oriented Harbour GUI – a fork "class based and oop programming" of HMG * '
Marinas-GUI
'' – Multi-Platform QT Based GUI Development Package for Harbour. Marinas-GUI downloads as a complete installation package for the chosen target platform (IDE, Version Control, Harbour/C Compiler, Libraries etc.) – Basically install and start coding and compiling


See also

*
Visual FoxPro Visual FoxPro is a Microsoft data-centric procedural programming language with object-oriented programming (OOP) features. It was derived from FoxPro (originally known as FoxBASE) which was developed by Fox Software beginning in 1984. Fox Techn ...
*
Visual Objects Visual Objects is an object-oriented computer programming language that is used to create computer programs that operate primarily under Windows. Although it can be used as a general-purpose programming tool, it is almost exclusively used to create ...
* Xbase++ *
PWCT PWCT is a free open source visual programming language for software development. Goal Programming Without Coding Technology (PWCT) is designed to be a general-purpose visual programming language that can be used for applications and systems de ...
free open source visual programming language support Harbour through HarbourPWCT


References


External links

*
The Oasis
Clipper, FoxPro and Xbase++ community repository
HBIDE

Harbour Developers Mailing List

Harbour Users Mailing List

Harbour Wiki (Harbour Functions Dictionary)
{{DEFAULTSORT:Harbour (Software) Procedural programming languages XBase programming language family Fourth-generation programming languages Dynamic programming languages Dynamically typed programming languages Query languages Declarative programming languages DOS software Linux programming tools Programming tools for Windows Windows database-related software Programming languages created in 1999 1999 software High-level programming languages Free software programmed in C Multi-paradigm programming languages