2017-09-12 15:13 UTC Viktor Szakats (vszakats users.noreply.github.com)

* bin/check.hb
  * config/*/*.mk
  * contrib/gtwvg/wvgwing.c
  * contrib/hbcomm/comm.prg
  * contrib/hbfbird/tfirebrd.prg
  * contrib/hbfimage/fi_wrp.c
  * contrib/hbformat/hbfmtcls.prg
  * contrib/hbformat/utils/hbformat.prg
  * contrib/hbhttpd/core.prg
  * contrib/hbnetio/utils/hbnetio/hbnetio.prg
  * contrib/hbnetio/utils/hbnetio/netiomgm.hb
  * contrib/hbsqlit3/hdbc.prg
  * contrib/hbwin/win_bmp.c
  * contrib/xhb/htmutil.prg
  * contrib/xhb/thtm.prg
  * contrib/xhb/xhbarr.c
  * contrib/xhb/xhbtedit.prg
  * ChangeLog.txt
  * debian/control
  * debian/copyright
  * doc/*.txt
  * LICENSE.txt
  * package/harbour.spec
  * README.md
  * src/compiler/hbusage.c
  * src/pp/hbpp.c
  * src/rtl/memoedit.prg
  * src/rtl/teditor.prg
  * src/rtl/tget.prg
  * src/rtl/version.c
  * utils/hbi18n/hbi18n.prg
  * utils/hbmk2/hbmk2.prg
  * utils/hbmk2/po/hbmk2.hu.po
  * utils/hbtest/hbtest.prg
    * sync with 3.4 fork (no change in functionality)
      CC3 -> CC4 license, copyright banners, some strings, minor
      code changes, doc folder, TOFIX -> FIXME
This commit is contained in:
Viktor Szakats
2017-09-12 15:15:14 +00:00
parent 15795f6330
commit 760112e3c5
81 changed files with 2526 additions and 2457 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -24,7 +24,7 @@ THE HARBOUR PROJECT LIBRARY LICENSE
=================================== ===================================
Note: This license applies to most of the files in the include directory, Note: This license applies to most of the files in the include directory,
source directory, and subdirectories. /src, /contrib, /extras directories, and their subdirectories.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -85,14 +85,14 @@ Note: This license applies to the files where the content
explicitly indicates so. explicitly indicates so.
These works are licensed under the Creative Commons Attribution-ShareAlike These works are licensed under the Creative Commons Attribution-ShareAlike
License. To view a copy of this license, visit 4.0 International License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to https://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305,
USA. A summary of the license and the full legal text is included USA. A summary of the license and the full legal text is included
after this text. If you wish to distribute some or all of these works after this text. If you wish to distribute some or all of these works
under different terms, please contact respective author(s). under different terms, please contact respective author(s).
License summary: Creative Commons Attribution-ShareAlike 3.0 Unported License summary: Creative Commons Attribution-ShareAlike 4.0 International
-*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*-
@@ -123,421 +123,431 @@ Under the following conditions:
-*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*-
Creative Commons Legal Code: Attribution-ShareAlike 3.0 Unported Attribution-ShareAlike 4.0 International
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE =======================================================================
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
DAMAGES RESULTING FROM ITS USE.
License: Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS Using Creative Commons Public Licenses
CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS
PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE
WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS
PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND Creative Commons public licenses provide a standard set of terms and
AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS conditions that creators and other rights holders may use to share
LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU original works of authorship and other material subject to copyright
THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH and certain other rights specified in the public license below. The
TERMS AND CONDITIONS. following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
1. Definitions Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
a. "Adaptation" means a work based upon the Work, or upon the Work Considerations for the public: By using one of our public
and other pre-existing works, such as a translation, adaptation, licenses, a licensor grants the public permission to use the
derivative work, arrangement of music or other alterations of a licensed material under specified terms and conditions. If
literary or artistic work, or phonogram or performance and the licensor's permission is not necessary for any reason--for
includes cinematographic adaptations or any other form in which example, because of any applicable exception or limitation to
the Work may be recast, transformed, or adapted including in any copyright--then that use is not regulated by the license. Our
form recognizably derived from the original, except that a work licenses grant only permissions under copyright and certain
that constitutes a Collection will not be considered an other rights that a licensor has authority to grant. Use of
Adaptation for the purpose of this License. For the avoidance of the licensed material may still be restricted for other
doubt, where the Work is a musical work, performance or reasons, including because others have copyright or other
phonogram, the synchronization of the Work in timed-relation rights in the material. A licensor may make special requests,
with a moving image ("synching") will be considered an such as asking that all changes be marked or described.
Adaptation for the purpose of this License. Although not required by our licenses, you are encouraged to
respect those requests where reasonable. More_considerations
for the public:
wiki.creativecommons.org/Considerations_for_licensees
b. "Collection" means a collection of literary or artistic works, =======================================================================
such as encyclopedias and anthologies, or performances,
phonograms or broadcasts, or other works or subject matter other
than works listed in Section 1(f) below, which, by reason of the
selection and arrangement of their contents, constitute
intellectual creations, in which the Work is included in its
entirety in unmodified form along with one or more other
contributions, each constituting separate and independent works
in themselves, which together are assembled into a collective
whole. A work that constitutes a Collection will not be
considered an Adaptation (as defined below) for the purposes of
this License.
c. "Creative Commons Compatible License" means a license that is Creative Commons Attribution-ShareAlike 4.0 International Public
listed at http://creativecommons.org/compatiblelicenses that has License
been approved by Creative Commons as being essentially
equivalent to this License, including, at a minimum, because
that license: (i) contains terms that have the same purpose,
meaning and effect as the License Elements of this License; and,
(ii) explicitly permits the relicensing of adaptations of works
made available under that license under this License or a
Creative Commons jurisdiction license with the same License
Elements as this License.
d. "Distribute" means to make available to the public the original By exercising the Licensed Rights (defined below), You accept and agree
and copies of the Work or Adaptation, as appropriate, through to be bound by the terms and conditions of this Creative Commons
sale or other transfer of ownership. Attribution-ShareAlike 4.0 International Public License ("Public
License"). To the extent this Public License may be interpreted as a
contract, You are granted the Licensed Rights in consideration of Your
acceptance of these terms and conditions, and the Licensor grants You
such rights in consideration of benefits the Licensor receives from
making the Licensed Material available under these terms and
conditions.
e. "License Elements" means the following high-level license
attributes as selected by Licensor and indicated in the title of
this License: Attribution, ShareAlike.
f. "Licensor" means the individual, individuals, entity or entities Section 1 -- Definitions.
that offer(s) the Work under the terms of this License.
g. "Original Author" means, in the case of a literary or artistic a. Adapted Material means material subject to Copyright and Similar
work, the individual, individuals, entity or entities who Rights that is derived from or based upon the Licensed Material
created the Work or if no individual or entity can be and in which the Licensed Material is translated, altered,
identified, the publisher; and in addition (i) in the case of a arranged, transformed, or otherwise modified in a manner requiring
performance the actors, singers, musicians, dancers, and other permission under the Copyright and Similar Rights held by the
persons who act, sing, deliver, declaim, play in, interpret or Licensor. For purposes of this Public License, where the Licensed
otherwise perform literary or artistic works or expressions of Material is a musical work, performance, or sound recording,
folklore; (ii) in the case of a phonogram the producer being the Adapted Material is always produced where the Licensed Material is
person or legal entity who first fixes the sounds of a synched in timed relation with a moving image.
performance or other sounds; and, (iii) in the case of
broadcasts, the organization that transmits the broadcast.
h. "Work" means the literary and/or artistic work offered under the b. Adapter's License means the license You apply to Your Copyright
terms of this License including without limitation any and Similar Rights in Your contributions to Adapted Material in
production in the literary, scientific and artistic domain, accordance with the terms and conditions of this Public License.
whatever may be the mode or form of its expression including
digital form, such as a book, pamphlet and other writing; a
lecture, address, sermon or other work of the same nature; a
dramatic or dramatico-musical work; a choreographic work or
entertainment in dumb show; a musical composition with or
without words; a cinematographic work to which are assimilated
works expressed by a process analogous to cinematography; a work
of drawing, painting, architecture, sculpture, engraving or
lithography; a photographic work to which are assimilated works
expressed by a process analogous to photography; a work of
applied art; an illustration, map, plan, sketch or
three-dimensional work relative to geography, topography,
architecture or science; a performance; a broadcast; a
phonogram; a compilation of data to the extent it is protected
as a copyrightable work; or a work performed by a variety or
circus performer to the extent it is not otherwise considered a
literary or artistic work.
i. "You" means an individual or entity exercising rights under this c. BY-SA Compatible License means a license listed at
License who has not previously violated the terms of this creativecommons.org/compatiblelicenses, approved by Creative
License with respect to the Work, or who has received express Commons as essentially the equivalent of this Public License.
permission from the Licensor to exercise rights under this
License despite a previous violation.
j. "Publicly Perform" means to perform public recitations of the d. Copyright and Similar Rights means copyright and/or similar rights
Work and to communicate to the public those public recitations, closely related to copyright including, without limitation,
by any means or process, including by wire or wireless means or performance, broadcast, sound recording, and Sui Generis Database
public digital performances; to make available to the public Rights, without regard to how the rights are labeled or
Works in such a way that members of the public may access these categorized. For purposes of this Public License, the rights
Works from a place and at a place individually chosen by them; specified in Section 2(b)(1)-(2) are not Copyright and Similar
to perform the Work to the public by any means or process and Rights.
the communication to the public of the performances of the Work,
including by public digital performance; to broadcast and
rebroadcast the Work by any means including signs, sounds or
images.
k. "Reproduce" means to make copies of the Work by any means e. Effective Technological Measures means those measures that, in the
including without limitation by sound or visual recordings and absence of proper authority, may not be circumvented under laws
the right of fixation and reproducing fixations of the Work, fulfilling obligations under Article 11 of the WIPO Copyright
including storage of a protected performance or phonogram in Treaty adopted on December 20, 1996, and/or similar international
digital form or other electronic medium. agreements.
2. Fair Dealing Rights. f. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
Nothing in this License is intended to reduce, limit, or restrict g. License Elements means the license attributes listed in the name
any uses free from copyright or rights arising from limitations or of a Creative Commons Public License. The License Elements of this
exceptions that are provided for in connection with the copyright Public License are Attribution and ShareAlike.
protection under copyright law or other applicable laws.
3. License Grant. h. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
Subject to the terms and conditions of this License, Licensor
hereby grants You a worldwide, royalty-free, non-exclusive,
perpetual (for the duration of the applicable copyright) license to
exercise the rights in the Work as stated below:
a. to Reproduce the Work, to incorporate the Work into one or more
Collections, and to Reproduce the Work as incorporated in the
Collections;
b. to create and Reproduce Adaptations provided that any such
Adaptation, including any translation in any medium, takes
reasonable steps to clearly label, demarcate or otherwise
identify that changes were made to the original Work. For
example, a translation could be marked "The original work was
translated from English to Spanish," or a modification could
indicate "The original work has been modified.";
c. to Distribute and Publicly Perform the Work including as
incorporated in Collections; and,
d. to Distribute and Publicly Perform Adaptations.
e. For the avoidance of doubt:
i. Non-waivable Compulsory License Schemes. In those
jurisdictions in which the right to collect royalties
through any statutory or compulsory licensing scheme
cannot be waived, the Licensor reserves the exclusive
right to collect such royalties for any exercise by You of
the rights granted under this License;
ii. Waivable Compulsory License Schemes. In those
jurisdictions in which the right to collect royalties
through any statutory or compulsory licensing scheme can
be waived, the Licensor waives the exclusive right to
collect such royalties for any exercise by You of the
rights granted under this License; and,
iii. Voluntary License Schemes. The Licensor waives the right
to collect royalties, whether individually or, in the
event that the Licensor is a member of a collecting
society that administers voluntary licensing schemes, via
that society, from any exercise by You of the rights
granted under this License.
The above rights may be exercised in all media and formats whether
now known or hereafter devised. The above rights include the right
to make such modifications as are technically necessary to exercise
the rights in other media and formats. Subject to Section 8(f), all
rights not expressly granted by Licensor are hereby reserved.
4. Restrictions.
The license granted in Section 3 above is expressly made subject to
and limited by the following restrictions:
a. You may Distribute or Publicly Perform the Work only under the
terms of this License. You must include a copy of, or the
Uniform Resource Identifier (URI) for, this License with every
copy of the Work You Distribute or Publicly Perform. You may not
offer or impose any terms on the Work that restrict the terms of
this License or the ability of the recipient of the Work to
exercise the rights granted to that recipient under the terms of
the License. You may not sublicense the Work. You must keep
intact all notices that refer to this License and to the
disclaimer of warranties with every copy of the Work You
Distribute or Publicly Perform. When You Distribute or Publicly
Perform the Work, You may not impose any effective technological
measures on the Work that restrict the ability of a recipient of
the Work from You to exercise the rights granted to that
recipient under the terms of the License. This Section 4(a)
applies to the Work as incorporated in a Collection, but this
does not require the Collection apart from the Work itself to be
made subject to the terms of this License. If You create a
Collection, upon notice from any Licensor You must, to the
extent practicable, remove from the Collection any credit as
required by Section 4(c), as requested. If You create an
Adaptation, upon notice from any Licensor You must, to the
extent practicable, remove from the Adaptation any credit as
required by Section 4(c), as requested.
b. You may Distribute or Publicly Perform an Adaptation only under
the terms of: (i) this License; (ii) a later version of this
License with the same License Elements as this License; (iii) a
Creative Commons jurisdiction license (either this or a later
license version) that contains the same License Elements as this
License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative
Commons Compatible License. If you license the Adaptation under
one of the licenses mentioned in (iv), you must comply with the
terms of that license. If you license the Adaptation under the
terms of any of the licenses mentioned in (i), (ii) or (iii)
(the "Applicable License"), you must comply with the terms of
the Applicable License generally and the following provisions:
(I) You must include a copy of, or the URI for, the Applicable
License with every copy of each Adaptation You Distribute or
Publicly Perform; (II) You may not offer or impose any terms on
the Adaptation that restrict the terms of the Applicable License
or the ability of the recipient of the Adaptation to exercise
the rights granted to that recipient under the terms of the
Applicable License; (III) You must keep intact all notices that
refer to the Applicable License and to the disclaimer of
warranties with every copy of the Work as included in the
Adaptation You Distribute or Publicly Perform; (IV) when You
Distribute or Publicly Perform the Adaptation, You may not
impose any effective technological measures on the Adaptation
that restrict the ability of a recipient of the Adaptation from
You to exercise the rights granted to that recipient under the
terms of the Applicable License. This Section 4(b) applies to
the Adaptation as incorporated in a Collection, but this does
not require the Collection apart from the Adaptation itself to
be made subject to the terms of the Applicable License.
c. If You Distribute, or Publicly Perform the Work or any
Adaptations or Collections, You must, unless a request has been
made pursuant to Section 4(a), keep intact all copyright notices
for the Work and provide, reasonable to the medium or means You
are utilizing: (i) the name of the Original Author (or
pseudonym, if applicable) if supplied, and/or if the Original
Author and/or Licensor designate another party or parties (e.g.,
a sponsor institute, publishing entity, journal) for attribution
("Attribution Parties") in Licensor's copyright notice, terms of
service or by other reasonable means, the name of such party or
parties; (ii) the title of the Work if supplied; (iii) to the
extent reasonably practicable, the URI, if any, that Licensor
specifies to be associated with the Work, unless such URI does
not refer to the copyright notice or licensing information for
the Work; and (iv) , consistent with Ssection 3(b), in the case
of an Adaptation, a credit identifying the use of the Work in
the Adaptation (e.g., "French translation of the Work by
Original Author," or "Screenplay based on original Work by
Original Author"). The credit required by this Section 4(c) may
be implemented in any reasonable manner; provided, however, that
in the case of a Adaptation or Collection, at a minimum such
credit will appear, if a credit for all contributing authors of
the Adaptation or Collection appears, then as part of these
credits and in a manner at least as prominent as the credits for
the other contributing authors. For the avoidance of doubt, You
may only use the credit required by this Section for the purpose
of attribution in the manner set out above and, by exercising
Your rights under this License, You may not implicitly or
explicitly assert or imply any connection with, sponsorship or
endorsement by the Original Author, Licensor and/or Attribution
Parties, as appropriate, of You or Your use of the Work, without
the separate, express prior written permission of the Original
Author, Licensor and/or Attribution Parties.
d. Except as otherwise agreed in writing by the Licensor or as may
be otherwise permitted by applicable law, if You Reproduce,
Distribute or Publicly Perform the Work either by itself or as
part of any Adaptations or Collections, You must not distort,
mutilate, modify or take other derogatory action in relation to
the Work which would be prejudicial to the Original Author's
honor or reputation. Licensor agrees that in those jurisdictions
(e.g. Japan), in which any exercise of the right granted in
Section 3(b) of this License (the right to make Adaptations)
would be deemed to be a distortion, mutilation, modification or
other derogatory action prejudicial to the Original Author's
honor and reputation, the Licensor will waive or not assert, as
appropriate, this Section, to the fullest extent permitted by
the applicable national law, to enable You to reasonably
exercise Your right under Section 3(b) of this License (right to
make Adaptations) but not otherwise.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING,
LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR
WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED,
STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF
TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE,
NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY,
OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT
DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED
WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability.
EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL
LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT
OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate
automatically upon any breach by You of the terms of this
License. Individuals or entities who have received Adaptations
or Collections from You under this License, however, will not
have their licenses terminated provided such individuals or
entities remain in full compliance with those licenses. Sections
1, 2, 5, 6, 7, and 8 will survive any termination of this
License. License.
b. Subject to the above terms and conditions, the license granted i. Licensed Rights means the rights granted to You subject to the
here is perpetual (for the duration of the applicable copyright terms and conditions of this Public License, which are limited to
in the Work). Notwithstanding the above, Licensor reserves the all Copyright and Similar Rights that apply to Your use of the
right to release the Work under different license terms or to Licensed Material and that the Licensor has authority to license.
stop distributing the Work at any time; provided, however that
any such election will not serve to withdraw this License (or
any other license that has been, or is required to be, granted
under the terms of this License), and this License will continue
in full force and effect unless terminated as stated above.
8. Miscellaneous j. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
a. Each time You Distribute or Publicly Perform the Work or a k. Share means to provide material to the public by any means or
Collection, the Licensor offers to the recipient a license to process that requires permission under the Licensed Rights, such
the Work on the same terms and conditions as the license granted as reproduction, public display, public performance, distribution,
to You under this License. dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
b. Each time You Distribute or Publicly Perform an Adaptation, l. Sui Generis Database Rights means rights other than copyright
Licensor offers to the recipient a license to the original Work resulting from Directive 96/9/EC of the European Parliament and of
on the same terms and conditions as the license granted to You the Council of 11 March 1996 on the legal protection of databases,
under this License. as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
c. If any provision of this License is invalid or unenforceable m. You means the individual or entity exercising the Licensed Rights
under applicable law, it shall not affect the validity or under this Public License. Your has a corresponding meaning.
enforceability of the remainder of the terms of this License,
and without further action by the parties to this agreement,
such provision shall be reformed to the minimum extent necessary
to make such provision valid and enforceable.
d. No term or provision of this License shall be deemed waived and
no breach consented to unless such waiver or consent shall be in
writing and signed by the party to be charged with such waiver
or consent.
e. This License constitutes the entire agreement between the Section 2 -- Scope.
parties with respect to the Work licensed here. There are no
understandings, agreements or representations with respect to
the Work not specified here. Licensor shall not be bound by any
additional provisions that may appear in any communication from
You. This License may not be modified without the mutual written
agreement of the Licensor and You.
f. The rights granted under, and the subject matter referenced, in a. License grant.
this License were drafted utilizing the terminology of the Berne
Convention for the Protection of Literary and Artistic Works (as
amended on September 28, 1979), the Rome Convention of 1961, the
WIPO Copyright Treaty of 1996, the WIPO Performances and
Phonograms Treaty of 1996 and the Universal Copyright Convention
(as revised on July 24, 1971). These rights and subject matter
take effect in the relevant jurisdiction in which the License
terms are sought to be enforced according to the corresponding
provisions of the implementation of those treaty provisions in
the applicable national law. If the standard suite of rights
granted under applicable copyright law includes additional
rights not granted under this License, such additional rights
are deemed to be included in the License; this License is not
intended to restrict the license of any rights under applicable
law.
Creative Commons Notice 1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
Creative Commons is not a party to this License, and makes no warranty a. reproduce and Share the Licensed Material, in whole or
whatsoever in connection with the Work. Creative Commons will not be in part; and
liable to You or any party on any legal theory for any damages
whatsoever, including without limitation any general, special,
incidental or consequential damages arising in connection to this
license. Notwithstanding the foregoing two (2) sentences, if Creative
Commons has expressly identified itself as the Licensor hereunder, it
shall have all rights and obligations of Licensor.
Except for the limited purpose of indicating to the public that the b. produce, reproduce, and Share Adapted Material.
Work is licensed under the CCPL, Creative Commons does not authorize
the use by either party of the trademark "Creative Commons" or any
related trademark or logo of Creative Commons without the prior
written consent of Creative Commons. Any permitted use will be in
compliance with Creative Commons' then-current trademark usage
guidelines, as may be published on its website or otherwise made
available upon request from time to time. For the avoidance of doubt,
this trademark restriction does not form part of the License.
Creative Commons may be contacted at http://creativecommons.org/. 2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. Additional offer from the Licensor -- Adapted Material.
Every recipient of Adapted Material from You
automatically receives an offer from the Licensor to
exercise the Licensed Rights in the Adapted Material
under the conditions of the Adapter's License You apply.
c. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
b. ShareAlike.
In addition to the conditions in Section 3(a), if You Share
Adapted Material You produce, the following conditions also apply.
1. The Adapter's License You apply must be a Creative Commons
license with the same License Elements, this version or
later, or a BY-SA Compatible License.
2. You must include the text of, or the URI or hyperlink to, the
Adapter's License You apply. You may satisfy this condition
in any reasonable manner based on the medium, means, and
context in which You Share Adapted Material.
3. You may not offer or impose any additional or different terms
or conditions on, or apply any Effective Technological
Measures to, Adapted Material that restrict exercise of the
rights granted under the Adapter's License You apply.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material,
including for purposes of Section 3(b); and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public licenses.
Notwithstanding, Creative Commons may elect to apply one of its public
licenses to material it publishes and in those instances will be
considered the "Licensor." Except for the limited purpose of indicating
that material is shared under a Creative Commons public license or as
otherwise permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the public
licenses.
Creative Commons may be contacted at creativecommons.org.
GNU GENERAL PUBLIC LICENSE VERSION 2 GNU GENERAL PUBLIC LICENSE VERSION 2

View File

@@ -1953,7 +1953,6 @@ Supported shells per host platforms:
* Harbour [internal documents](doc/) * Harbour [internal documents](doc/)
* [Wikipedia](https://en.wikipedia.org/wiki/Harbour_compiler) * [Wikipedia](https://en.wikipedia.org/wiki/Harbour_compiler)
---
This document Copyright &copy; 2009-2015 Viktor Szakats (vszakats.net/harbour)<br /> This document Copyright &copy;&nbsp;2009&ndash;present Viktor Szakats (vszakats.net/harbour)<br />
Licensed under [Creative Commons Attribution-ShareAlike 3.0](http://creativecommons.org/licenses/by-sa/3.0/)<br /> [![Creative Commons Attribution-ShareAlike 4.0](https://mirrors.creativecommons.org/presskit/buttons/80x15/svg/by-sa.svg)](https://creativecommons.org/licenses/by-sa/4.0/)
See [LICENSE](LICENSE.txt).

View File

@@ -111,7 +111,7 @@ STATIC FUNCTION CheckFile( cName, /* @ */ aErr, lApplyFixes )
"*.po", ; "*.po", ;
"*.md", ; "*.md", ;
"*.html", ; "*.html", ;
"*/hb-charmap.def", ; /* TOFIX: Use 8.3 name */ "*/hb-charmap.def", ; /* FIXME: Use 8.3 name */
"debian/*", ; "debian/*", ;
"package/*", ; "package/*", ;
"lib/3rd/*", ; "lib/3rd/*", ;
@@ -494,7 +494,7 @@ STATIC FUNCTION StripCStrings( cFile )
LOCAL tmp LOCAL tmp
DO WHILE ( tmp := hb_BAt( '"', cFile, nPos ) ) > 0 DO WHILE ( tmp := hb_BAt( '"', cFile, nPos ) ) > 0
/* TOFIX: imprecise escaped char detection */ /* FIXME: imprecise escaped char detection */
IF ( !( hb_BSubStr( cFile, tmp - 1, 1 ) == "\" ) .OR. ; IF ( !( hb_BSubStr( cFile, tmp - 1, 1 ) == "\" ) .OR. ;
hb_BSubStr( cFile, tmp - 2, 2 ) == "\\" ) .AND. ; hb_BSubStr( cFile, tmp - 2, 2 ) == "\\" ) .AND. ;
!( hb_BSubStr( cFile, tmp - 1, 1 ) + hb_BSubStr( cFile, tmp + 1, 1 ) == "''" ) !( hb_BSubStr( cFile, tmp - 1, 1 ) + hb_BSubStr( cFile, tmp + 1, 1 ) == "''" )

View File

@@ -73,12 +73,12 @@ AR_RULE = ( $(AR) $(ARFLAGS) $(HB_AFLAGS) $(HB_USER_AFLAGS) rc $(LIB_DIR)/$@ $(^
DY := $(CC) DY := $(CC)
DFLAGS += -shared -Wl,-G $(LIBPATHS) DFLAGS += -shared -Wl,-G $(LIBPATHS)
# TOFIX: CHECKME, there was space between -o and output name # FIXME: CHECKME, there was space between -o and output name
#DY_OUT := -o$(subst x,x, ) #DY_OUT := -o$(subst x,x, )
DY_OUT := $(LD_OUT) DY_OUT := $(LD_OUT)
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS),-l$(lib)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS),-l$(lib))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
#define dynlib_object #define dynlib_object
# @$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp # @$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -33,14 +33,14 @@ AR_RULE = $(AR) $(ARFLAGS) $(HB_AFLAGS) $(HB_USER_AFLAGS) $(LIB_DIR)/$@ $(foreac
ifeq ($(HB_SHELL),dos) ifeq ($(HB_SHELL),dos)
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
# It causes that every command will be separated by LF # It causes that every command will be separated by LF
define link_file define link_file
@$(ECHO) $(ECHOQUOTE)FILE $(file)$(ECHOQUOTE) >> __link__.tmp @$(ECHO) $(ECHOQUOTE)FILE $(file)$(ECHOQUOTE) >> __link__.tmp
endef endef
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define link_lib define link_lib
@$(ECHO) $(ECHOQUOTE)LIB $(lib)$(ECHOQUOTE) >> __link__.tmp @$(ECHO) $(ECHOQUOTE)LIB $(lib)$(ECHOQUOTE) >> __link__.tmp
@@ -55,7 +55,7 @@ ifeq ($(HB_SHELL),dos)
LD_RULE = $(link_exe_file) $(HB_USER_LDFLAGS) LD_RULE = $(link_exe_file) $(HB_USER_LDFLAGS)
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define lib_object define lib_object
@$(ECHO) $(ECHOQUOTE)-+$(file)$(ECHOQUOTE) >> __lib__.tmp @$(ECHO) $(ECHOQUOTE)-+$(file)$(ECHOQUOTE) >> __lib__.tmp

View File

@@ -61,7 +61,7 @@ LDFLAGS += $(LIBPATHS)
AR := $(HB_CCPATH)$(HB_CCPREFIX)ar AR := $(HB_CCPATH)$(HB_CCPREFIX)ar
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define library_object define library_object
@$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __lib__.tmp @$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __lib__.tmp
@@ -79,7 +79,7 @@ DFLAGS += -shared $(LIBPATHS)
DY_OUT := $(LD_OUT) DY_OUT := $(LD_OUT)
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),-l$(lib)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),-l$(lib))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -44,7 +44,7 @@ DFLAGS += -dynamic -flat_namespace -undefined warning -multiply_defined suppress
DY_OUT := -o$(subst x,x, ) DY_OUT := -o$(subst x,x, )
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS),-l$(lib)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS),-l$(lib))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -69,7 +69,7 @@ LD_OUT := -o
LIBPATHS := $(foreach dir,$(LIB_DIR) $(SYSLIBPATHS),-L$(dir)) LIBPATHS := $(foreach dir,$(LIB_DIR) $(SYSLIBPATHS),-L$(dir))
LDLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),-l$(lib)) LDLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),-l$(lib))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
# It causes that every command will be separated by LF # It causes that every command will be separated by LF
define lib_object define lib_object
@$(ECHO) $(ECHOQUOTE)ADDMOD $(file)$(ECHOQUOTE) >> __lib__.tmp @$(ECHO) $(ECHOQUOTE)ADDMOD $(file)$(ECHOQUOTE) >> __lib__.tmp
@@ -88,7 +88,7 @@ define create_library
$(ARSTRIP) $(ARSTRIP)
endef endef
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define link_file define link_file
@$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __link__.tmp @$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __link__.tmp
@@ -120,7 +120,7 @@ ifeq ($(HB_BUILD_DYN),dostest)
DFLAGS += --whole-archive DFLAGS += --whole-archive
DLIBS := DLIBS :=
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -97,7 +97,7 @@ ifeq ($(HB_BUILD_DYN),dostest)
DLIBS_COMMA := DLIBS_COMMA :=
endif endif
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)FILE '$(file)'$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)FILE '$(file)'$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -53,7 +53,7 @@ DFLAGS += -shared $(LIBPATHS)
DY_OUT := -o$(subst x,x, ) DY_OUT := -o$(subst x,x, )
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS),-l$(lib)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS),-l$(lib))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -48,7 +48,7 @@ ifeq ($(HB_SHELL),sh)
AR_RULE = ( $(AR) $(ARFLAGS) $(HB_AFLAGS) $(HB_USER_AFLAGS) rcs $(LIB_DIR)/$@ $(^F) $(ARSTRIP) ) || ( $(RM) $(LIB_DIR)/$@ && $(FALSE) ) AR_RULE = ( $(AR) $(ARFLAGS) $(HB_AFLAGS) $(HB_USER_AFLAGS) rcs $(LIB_DIR)/$@ $(^F) $(ARSTRIP) ) || ( $(RM) $(LIB_DIR)/$@ && $(FALSE) )
else else
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define library_object define library_object
@$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __lib__.tmp @$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __lib__.tmp
@@ -71,7 +71,7 @@ ifeq ($(HB_SHELL),sh)
DY_RULE = $(DY) $(DFLAGS) -Wl,-soname,$(DYN_NAME_CPT) $(HB_USER_DFLAGS) $(DY_OUT)$(DYN_DIR)/$@ $^ $(DLIBS) $(DYSTRIP) && ([ "$(@F)" = "$(notdir $(DYN_FILE_NVR))" ] || $(LN) $(@F) $(DYN_FILE_NVR)) && ([ "$(@F)" = "$(notdir $(DYN_FILE_CPT))" ] || $(LN) $(@F) $(DYN_FILE_CPT)) DY_RULE = $(DY) $(DFLAGS) -Wl,-soname,$(DYN_NAME_CPT) $(HB_USER_DFLAGS) $(DY_OUT)$(DYN_DIR)/$@ $^ $(DLIBS) $(DYSTRIP) && ([ "$(@F)" = "$(notdir $(DYN_FILE_NVR))" ] || $(LN) $(@F) $(DYN_FILE_NVR)) && ([ "$(@F)" = "$(notdir $(DYN_FILE_CPT))" ] || $(LN) $(@F) $(DYN_FILE_CPT))
else else
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -49,7 +49,7 @@ DFLAGS += -shared $(LIBPATHS)
DY_OUT := -o$(subst x,x, ) DY_OUT := -o$(subst x,x, )
DLIBS := $(foreach lib,$(SYSLIBS),-l$(lib)) DLIBS := $(foreach lib,$(SYSLIBS),-l$(lib))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -62,7 +62,7 @@ LDLIBS += $(foreach lib,$(LIBS),$(LIB_DIR)/$(lib))
#DY_OUT := #DY_OUT :=
#DLIBS := #DLIBS :=
# #
## NOTE: The empty line directly before 'endef' HAVE TO exist! ## NOTE: The empty line directly before 'endef' HAS TO exist!
#define dynlib_object #define dynlib_object
# @$(ECHO) $(ECHOQUOTE)FILE '$(file)'$(ECHOQUOTE) >> __dyn__.tmp # @$(ECHO) $(ECHOQUOTE)FILE '$(file)'$(ECHOQUOTE) >> __dyn__.tmp
# #

View File

@@ -73,7 +73,7 @@ DY_OUT :=
DLIBS := $(HB_USER_LIBS) DLIBS := $(HB_USER_LIBS)
DLIBS += $(foreach lib,$(LIBS),$(LIB_DIR)/$(lib)) DLIBS += $(foreach lib,$(LIBS),$(LIB_DIR)/$(lib))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)FILE '$(file)'$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)FILE '$(file)'$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -179,7 +179,7 @@ PROCEDURE Main( ... )
mk_hb_FLinkSym( "harbour" + hb_ps() + cDynVersionFull, hb_DirSepToOS( GetEnvC( "HB_INSTALL_DYN" ) ) + hb_ps() + ".." + hb_ps() + cDynVersionFull ) mk_hb_FLinkSym( "harbour" + hb_ps() + cDynVersionFull, hb_DirSepToOS( GetEnvC( "HB_INSTALL_DYN" ) ) + hb_ps() + ".." + hb_ps() + cDynVersionFull )
CASE GetEnvC( "HB_INSTALL_DYN" ) == "/usr/local/harbour/lib" CASE GetEnvC( "HB_INSTALL_DYN" ) == "/usr/local/harbour/lib"
/* TOFIX: Rewrite this in .prg: /* FIXME: Rewrite this in .prg:
ld="/usr/lib" ld="/usr/lib"
if [ -n "${HB_INST_PKGPREF}" ] || [ -w $ld ] if [ -n "${HB_INST_PKGPREF}" ] || [ -w $ld ]
then then

View File

@@ -85,7 +85,7 @@ DFLAGS += -Xpic -Wl, -Xshared -Wl, -Xdynamic $(DLIBPATHS)
DY_OUT := -o$(subst x,x, ) DY_OUT := -o$(subst x,x, )
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS_DYN),-l$(lib)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS_DYN),-l$(lib))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -66,7 +66,7 @@ DFLAGS += -shared $(DLIBPATHS)
DY_OUT := -o$(subst x,x, ) DY_OUT := -o$(subst x,x, )
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS_DYN),-l$(lib)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS_DYN),-l$(lib))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -59,7 +59,7 @@ LDFLAGS += $(LIBPATHS)
AR := $(HB_CCPATH)$(HB_CCPREFIX)ar AR := $(HB_CCPATH)$(HB_CCPREFIX)ar
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define library_object define library_object
@$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __lib__.tmp @$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __lib__.tmp
@@ -77,7 +77,7 @@ DFLAGS += -shared $(LIBPATHS)
DY_OUT := $(LD_OUT) DY_OUT := $(LD_OUT)
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),-l$(lib)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),-l$(lib))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -105,7 +105,7 @@ DFLAGS += -nologo -dll -subsystem:windowsce -nodefaultlib:oldnames.lib $(LIBPATH
DY_OUT := $(LD_OUT) DY_OUT := $(LD_OUT)
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),$(lib)$(LIB_EXT)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),$(lib)$(LIB_EXT))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -53,7 +53,7 @@ DFLAGS += -nologo -dll $(LIBPATHS)
DY_OUT := $(LD_OUT) DY_OUT := $(LD_OUT)
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),$(lib)$(LIB_EXT)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),$(lib)$(LIB_EXT))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -121,7 +121,7 @@ ifneq ($(HB_SHELL),sh)
# are only needed to support pre-Windows XP systems, where # are only needed to support pre-Windows XP systems, where
# limit is 2047 chars. [vszakats] # limit is 2047 chars. [vszakats]
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define library_object define library_object
@$(ECHO) $(ECHOQUOTE)-+$(subst /,$(ECHOBACKSLASH),$(file)) $(LINECONT)$(ECHOQUOTE) >> __lib__.tmp @$(ECHO) $(ECHOQUOTE)-+$(subst /,$(ECHOBACKSLASH),$(file)) $(LINECONT)$(ECHOQUOTE) >> __lib__.tmp
@@ -153,7 +153,7 @@ else
DLIBS := $(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS) cw32mt import32 DLIBS := $(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS) cw32mt import32
endif endif
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)$(subst /,$(ECHOBACKSLASH),$(file)) +$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)$(subst /,$(ECHOBACKSLASH),$(file)) +$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -53,7 +53,7 @@ DFLAGS += -nologo -dll -subsystem:console $(LIBPATHS)
DY_OUT := $(LD_OUT) DY_OUT := $(LD_OUT)
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS),$(lib)$(LIB_EXT)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS),$(lib)$(LIB_EXT))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -107,7 +107,7 @@ LDFLAGS += $(LIBPATHS)
AR := $(HB_CCPATH)$(HB_CCPREFIX)ar AR := $(HB_CCPATH)$(HB_CCPREFIX)ar
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define library_object define library_object
@$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __lib__.tmp @$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file))$(ECHOQUOTE) >> __lib__.tmp
@@ -125,7 +125,7 @@ DFLAGS += -shared $(LIBPATHS)
DY_OUT := $(LD_OUT) DY_OUT := $(LD_OUT)
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS),-l$(lib)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS),-l$(lib))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)INPUT($(subst \,/,$(file)))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -89,7 +89,7 @@ DFLAGS += -nologo -dll -subsystem:console $(LIBPATHS)
DY_OUT := $(LD_OUT) DY_OUT := $(LD_OUT)
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS),$(lib)$(LIB_EXT)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS),$(lib)$(LIB_EXT))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -52,7 +52,7 @@ DFLAGS += -nologo -dll $(LIBPATHS)
DY_OUT := $(LD_OUT) DY_OUT := $(LD_OUT)
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS),$(lib)$(LIB_EXT)) DLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS),$(lib)$(LIB_EXT))
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)$(file)$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -79,7 +79,7 @@ else
DLIBS_COMMA := DLIBS_COMMA :=
endif endif
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)FILE '$(file)'$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)FILE '$(file)'$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -61,7 +61,7 @@ else
DYNFIX := DYNFIX :=
endif endif
# NOTE: The empty line directly before 'endef' HAVE TO exist! # NOTE: The empty line directly before 'endef' HAS TO exist!
define dynlib_object define dynlib_object
@$(ECHO) $(ECHOQUOTE)$(subst /,\,$(file))$(ECHOQUOTE) >> __dyn__.tmp @$(ECHO) $(ECHOQUOTE)$(subst /,\,$(file))$(ECHOQUOTE) >> __dyn__.tmp

View File

@@ -1016,7 +1016,7 @@ HB_FUNC( WVG_ADDTOOLBARBUTTON )
tbb.dwData = 0; tbb.dwData = 0;
tbb.iString = iNewString; tbb.iString = iNewString;
/* TOFIX: Convertion of LRESULT to HB_BOOL */ /* FIXME: Convertion of LRESULT to HB_BOOL */
bSuccess = ( HB_BOOL ) SendMessage( hWndTB, TB_ADDBUTTONS, ( WPARAM ) 1, ( LPARAM ) ( LPTBBUTTON ) &tbb ); bSuccess = ( HB_BOOL ) SendMessage( hWndTB, TB_ADDBUTTONS, ( WPARAM ) 1, ( LPARAM ) ( LPTBBUTTON ) &tbb );
#if ! defined( HB_OS_WIN_CE ) #if ! defined( HB_OS_WIN_CE )
SendMessage( hWndTB, TB_SETPADDING, ( WPARAM ) 0, ( LPARAM ) MAKELPARAM( 10, 10 ) ); SendMessage( hWndTB, TB_SETPADDING, ( WPARAM ) 0, ( LPARAM ) MAKELPARAM( 10, 10 ) );
@@ -1036,7 +1036,7 @@ HB_FUNC( WVG_ADDTOOLBARBUTTON )
tbb.dwData = 0; tbb.dwData = 0;
tbb.iString = 0; tbb.iString = 0;
/* TOFIX: Convertion of LRESULT to HB_BOOL */ /* FIXME: Convertion of LRESULT to HB_BOOL */
bSuccess = ( HB_BOOL ) SendMessage( hWndTB, TB_ADDBUTTONS, ( WPARAM ) 1, ( LPARAM ) ( LPTBBUTTON ) &tbb ); bSuccess = ( HB_BOOL ) SendMessage( hWndTB, TB_ADDBUTTONS, ( WPARAM ) 1, ( LPARAM ) ( LPTBBUTTON ) &tbb );
hb_retl( bSuccess ); hb_retl( bSuccess );
return; return;

View File

@@ -57,7 +57,7 @@ FUNCTION INIT_PORT( cPort, nBaud, nData, nParity, nStop, nBufferSize )
hb_mutexLock( s_hbcomm_mutex ) hb_mutexLock( s_hbcomm_mutex )
/* TOFIX: We should get that number from core to avoid /* FIXME: We should get that number from core to avoid
getting mixed up with com port access outside this getting mixed up with com port access outside this
compatibility interface. [vszakats] */ compatibility interface. [vszakats] */
nPort := Len( s_hPort ) + 1 nPort := Len( s_hPort ) + 1

View File

@@ -543,7 +543,7 @@ METHOD Refresh() CLASS TFbQuery
IF HB_ISARRAY( qry ) IF HB_ISARRAY( qry )
::numcols := qry[ 4 ] ::numcols := qry[ 4 ]
/* TOFIX: This is faulty code. ::aStruct will become zero length, out of sync with ::numcols. */ /* FIXME: This is faulty code. ::aStruct will become zero length, out of sync with ::numcols. */
::aStruct := StructConvert( qry[ 6 ], ::db, ::dialect ) ::aStruct := StructConvert( qry[ 6 ], ::db, ::dialect )
::lError := .F. ::lError := .F.

View File

@@ -45,7 +45,7 @@
* *
*/ */
/* TOFIX: To use strings (or other solutions) for remaining raw pointers. */ /* FIXME: To use strings (or other solutions) for remaining raw pointers. */
#include "hbapi.h" #include "hbapi.h"
#include "hbapiitm.h" #include "hbapiitm.h"

View File

@@ -53,7 +53,7 @@
#define RF_STATE_CODE 3 #define RF_STATE_CODE 3
#define RF_STATE_RET 4 #define RF_STATE_RET 4
// TOFIX: // FIXME:
// 1. in PP commands "<var>" should not be converted to "< var >" // 1. in PP commands "<var>" should not be converted to "< var >"
// 2. To add a space between "!" operator and its argument // 2. To add a space between "!" operator and its argument
// unless it's beginning with a parenthesis: // unless it's beginning with a parenthesis:
@@ -673,7 +673,7 @@ METHOD ConvertCmd( cLine, nBegin, nEnd, lFirstOnly ) CLASS HBFormatCode
IF ::lCase IF ::lCase
IF ! HB_ISNUMERIC( nBegin ) /* TOFIX: Temporary hack to avoid RTE when processing contrib/hbhttpd/core.prg */ IF ! HB_ISNUMERIC( nBegin ) /* FIXME: Temporary hack to avoid RTE when processing contrib/hbhttpd/core.prg */
::nErr := 1 ::nErr := 1
::cLineErr := cLine ::cLineErr := cLine
RETURN .F. RETURN .F.

View File

@@ -47,6 +47,7 @@
#require "hbformat" #require "hbformat"
#include "directry.ch" #include "directry.ch"
#include "hbver.ch"
ANNOUNCE HB_GTSYS ANNOUNCE HB_GTSYS
REQUEST HB_GT_CGI_DEFAULT REQUEST HB_GT_CGI_DEFAULT
@@ -61,7 +62,7 @@ PROCEDURE Main( ... )
#endif #endif
aParams := hb_AParams() aParams := hb_AParams()
IF Empty( aParams ) .OR. ( Left( cFileName := ATail( aParams ), 1 ) $ "@/-" ) IF Empty( aParams ) .OR. Left( cFileName := ATail( aParams ), 1 ) $ "@/-"
About() About()
RETURN RETURN
ENDIF ENDIF
@@ -139,8 +140,8 @@ STATIC PROCEDURE DirEval( cInitDir, cMask, lRecur, bCode )
FOR EACH file IN Directory( cInitDir + cMask, "HSD" ) FOR EACH file IN Directory( cInitDir + cMask, "HSD" )
IF "D" $ file[ F_ATTR ] IF "D" $ file[ F_ATTR ]
IF !( "." == file[ F_NAME ] ) .AND. ; IF ! "." == file[ F_NAME ] .AND. ;
!( ".." == file[ F_NAME ] ) .AND. lRecur ! ".." == file[ F_NAME ] .AND. lRecur
DirEval( cInitDir + file[ F_NAME ], cMask, lRecur, bCode ) DirEval( cInitDir + file[ F_NAME ], cMask, lRecur, bCode )
ENDIF ENDIF
ELSE ELSE
@@ -156,9 +157,13 @@ STATIC PROCEDURE About()
OutStd( ; OutStd( ;
"Harbour Source Formatter " + HBRawVersion() + hb_eol() + ; "Harbour Source Formatter " + HBRawVersion() + hb_eol() + ;
"Copyright (c) 2009-2016, Alexander S.Kresin" + hb_eol() + ; "Copyright (c) 2010-" + ;
"http://harbour-project.org/" + hb_eol() + ; "2016" + ", " + ;
hb_eol() + ; hb_Version( HB_VERSION_URL_BASE ) + hb_eol() + ;
"Copyright (c) 2009, Alexander S.Kresin" + hb_eol() + ;
hb_eol() )
OutStd( ;
"Syntax: hbformat [options] [@config] <file[s]>" + hb_eol() + ; "Syntax: hbformat [options] [@config] <file[s]>" + hb_eol() + ;
hb_eol() ) hb_eol() )

View File

@@ -917,7 +917,7 @@ STATIC FUNCTION HttpDateFormat( tDate )
{ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }[ DoW( tDate ) ] + ", " + ; { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }[ DoW( tDate ) ] + ", " + ;
PadL( Day( tDate ), 2, "0" ) + " " + ; PadL( Day( tDate ), 2, "0" ) + " " + ;
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }[ Month( tDate ) ] + ; { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }[ Month( tDate ) ] + ;
" " + PadL( Year( tDate ), 4, "0" ) + " " + hb_TToC( tDate, "", "HH:MM:SS" ) + " GMT" // TOFIX: time zone " " + PadL( Year( tDate ), 4, "0" ) + " " + hb_TToC( tDate, "", "HH:MM:SS" ) + " GMT" // FIXME: time zone
STATIC FUNCTION HttpDateUnformat( cDate, tDate ) STATIC FUNCTION HttpDateUnformat( cDate, tDate )

View File

@@ -30,9 +30,11 @@
- add support for subnet masks in allow/block lists, f.e. 172.16.0.0/12, and same for IPv6 */ - add support for subnet masks in allow/block lists, f.e. 172.16.0.0/12, and same for IPv6 */
#include "fileio.ch" #include "fileio.ch"
#include "inkey.ch"
#include "hbhrb.ch" #include "hbhrb.ch"
#include "hbsocket.ch" #include "hbsocket.ch"
#include "hbver.ch"
#include "hbnetio.ch" #include "hbnetio.ch"
@@ -284,7 +286,7 @@ PROCEDURE netiosrv_Main( lUI, ... )
ENDIF ENDIF
/* Command prompt */ /* Command prompt */
DO WHILE ! netiosrv[ _NETIOSRV_lQuit ] .and. inkey() != 27 DO WHILE ! netiosrv[ _NETIOSRV_lQuit ] .AND. inkey() != 27
hb_idleSleep( 5 ) hb_idleSleep( 5 )
ENDDO ENDDO
@@ -833,8 +835,10 @@ STATIC PROCEDURE HB_Logo()
OutStd( ; OutStd( ;
"Harbour NETIO Server " + StrTran( Version(), "Harbour " ) + hb_eol() + ; "Harbour NETIO Server " + StrTran( Version(), "Harbour " ) + hb_eol() + ;
"Copyright (c) 2009-2016, Przemyslaw Czerpak, Viktor Szakats" + hb_eol() + ; "Copyright (c) 2009-" + ;
"http://harbour-project.org/" + hb_eol() + ; "2016" + ", " + ;
"Przemyslaw Czerpak, Viktor Szakats" + hb_eol() + ;
hb_Version( HB_VERSION_URL_BASE ) + hb_eol() + ;
hb_eol() ) hb_eol() )
RETURN RETURN

View File

@@ -20,6 +20,8 @@
* *
*/ */
#include "hbver.ch"
#define _NETIOMGM_IPV4_DEF "127.0.0.1" #define _NETIOMGM_IPV4_DEF "127.0.0.1"
#define _NETIOMGM_PORT_DEF 2940 #define _NETIOMGM_PORT_DEF 2940
@@ -261,8 +263,8 @@ STATIC PROCEDURE DisconnectLow( netiocli )
RETURN RETURN
STATIC FUNCTION MyClientInfo() STATIC FUNCTION MyClientInfo()
RETURN { ;
RETURN { "OS()" => OS() , ; "OS()" => OS() , ;
"Version()" => Version() , ; "Version()" => Version() , ;
"hb_Compiler()" => hb_Compiler() , ; "hb_Compiler()" => hb_Compiler() , ;
"NetName()" => NetName() , ; "NetName()" => NetName() , ;
@@ -329,8 +331,10 @@ STATIC FUNCTION XToStrX( xValue )
STATIC PROCEDURE cmdAbout( netiocli ) STATIC PROCEDURE cmdAbout( netiocli )
hbnetiocon_dispevent( netiocli, "Harbour NETIO Server Management Console " + StrTran( Version(), "Harbour " ) ) hbnetiocon_dispevent( netiocli, "Harbour NETIO Server Management Console " + StrTran( Version(), "Harbour " ) )
hbnetiocon_dispevent( netiocli, "Copyright (c) 2009-2015, Viktor Szakats" ) hbnetiocon_dispevent( netiocli, "Copyright (c) 2009-" + ;
hbnetiocon_dispevent( netiocli, "http://harbour-project.org/" ) "2015" + ", " + ;
"Viktor Szakats" )
hbnetiocon_dispevent( netiocli, hb_Version( HB_VERSION_URL_BASE ) )
RETURN RETURN

View File

@@ -347,7 +347,7 @@ METHOD new( pDB, pStmt ) CLASS hdbcSQLTResultSet
::pDB := pDB ::pDB := pDB
::pStmt := pStmt ::pStmt := pStmt
::pRes := pStmt:pRes /* TOFIX ! */ ::pRes := pStmt:pRes /* FIXME ! */
::nRows := 100 ::nRows := 100

View File

@@ -170,7 +170,7 @@ HB_FUNC( WIN_DRAWBITMAP )
BITMAPFILEHEADER * pbmfh = ( BITMAPFILEHEADER * ) hb_parc( 2 ); BITMAPFILEHEADER * pbmfh = ( BITMAPFILEHEADER * ) hb_parc( 2 );
int iType = hbwin_bitmapType( pbmfh, nSize ); int iType = hbwin_bitmapType( pbmfh, nSize );
/* TOFIX: No check is done on 2nd parameter which is a large security hole /* FIXME: No check is done on 2nd parameter which is a large security hole
and may cause GPF in simple error cases. and may cause GPF in simple error cases.
[vszakats] */ [vszakats] */
if( hbwin_bitmapIsSupported( hDC, iType, pbmfh, nSize ) == 0 ) if( hbwin_bitmapIsSupported( hDC, iType, pbmfh, nSize ) == 0 )

View File

@@ -838,7 +838,7 @@ FUNCTION Greek2Html( cText )
t_aGreek := InitGreek() t_aGreek := InitGreek()
ENDIF ENDIF
FOR I := 1 TO Len( cText ) FOR I := 1 TO Len( cText )
cStr += t_aGreek[ Asc( SubStr( cText, i, 1 ) ) ] /* TOFIX: for unicode */ cStr += t_aGreek[ Asc( SubStr( cText, i, 1 ) ) ] /* FIXME: for unicode */
NEXT NEXT
RETURN cStr RETURN cStr

View File

@@ -354,7 +354,7 @@ METHOD New( cTitle, cLinkTitle, cCharSet, aScriptSRC, ;
::cStr += ">" + CRLF() ::cStr += ">" + CRLF()
ENDIF ENDIF
#if 0 #if 0
/* TOFIX: Luiz please review it */ /* FIXME: Luiz please review it */
::cStr += ; ::cStr += ;
' <link title="' + cLinkTitle + '"' + CRLF() + ; ' <link title="' + cLinkTitle + '"' + CRLF() + ;
' href="mailto:culik@sl.conex.net" >' + CRLF() + ; ' href="mailto:culik@sl.conex.net" >' + CRLF() + ;

View File

@@ -149,7 +149,7 @@ HB_FUNC( ASPLICE )
} }
} }
/* TOFIX: Move this to hbxpp library */ /* FIXME: Move this to hbxpp library */
/* Synonym of ASplice() Xbase++ compatibility (extended with optional replacemenet values) */ /* Synonym of ASplice() Xbase++ compatibility (extended with optional replacemenet values) */
HB_FUNC_TRANSLATE( AREMOVE, ASPLICE ) HB_FUNC_TRANSLATE( AREMOVE, ASPLICE )

View File

@@ -2983,7 +2983,7 @@ STATIC FUNCTION Text2Array( cString, nWordWrapCol )
ENDDO ENDDO
DO WHILE nRetLen < ncSLen DO WHILE nRetLen < ncSLen
/* TOFIX: Note that hb_tokenGet() is not able to cope with delimiters longer than one char */ /* FIXME: Note that hb_tokenGet() is not able to cope with delimiters longer than one char */
// Dos - OS/2 - Windows have CRLF as EOL // Dos - OS/2 - Windows have CRLF as EOL
IF nEOLLen > 1 IF nEOLLen > 1
cLine := StrTran( hb_tokenPtr( @cString, @nTokPos, cEOL ), SubStr( cEOL, 2 ) ) cLine := StrTran( hb_tokenPtr( @cString, @nTokPos, cEOL ), SubStr( cEOL, 2 ) )
@@ -3088,4 +3088,4 @@ METHOD BrowseText( nPassedKey, lHandleOneKey ) CLASS XHBEditor
RETURN NIL RETURN NIL
STATIC FUNCTION __SoftCR() STATIC FUNCTION __SoftCR()
RETURN hb_BChar( 141 ) + Chr( 10 ) /* TOFIX: Won't work in UTF-8 mode */ RETURN hb_BChar( 141 ) + Chr( 10 ) /* FIXME: Won't work in UTF-8 mode */

2
debian/control vendored
View File

@@ -20,7 +20,7 @@ Description: Compiler for the xBase superset language often referred to as Clipp
compiler CA-Cl*pper). compiler CA-Cl*pper).
. .
Harbour is a cross platform compiler and is known to compile and run on Harbour is a cross platform compiler and is known to compile and run on
MS-DOS, MS Windows, OS/2 and GNU/Linux, *BSD systems, Mac OS X, HP-UX and MS-DOS, MS Windows, OS/2 and GNU/Linux, *BSD systems, macOS, HP-UX and
other *nixes other *nixes
. .
The main advantage Harbour has over other Clipper compilers is that it The main advantage Harbour has over other Clipper compilers is that it

784
debian/copyright vendored
View File

@@ -24,7 +24,7 @@ THE HARBOUR PROJECT LIBRARY LICENSE
=================================== ===================================
Note: This license applies to most of the files in the include directory, Note: This license applies to most of the files in the include directory,
source directory, and subdirectories. /src, /contrib, /extras directories, and their subdirectories.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -85,14 +85,14 @@ Note: This license applies to the files where the content
explicitly indicates so. explicitly indicates so.
These works are licensed under the Creative Commons Attribution-ShareAlike These works are licensed under the Creative Commons Attribution-ShareAlike
License. To view a copy of this license, visit 4.0 International License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to https://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305,
USA. A summary of the license and the full legal text is included USA. A summary of the license and the full legal text is included
after this text. If you wish to distribute some or all of these works after this text. If you wish to distribute some or all of these works
under different terms, please contact respective author(s). under different terms, please contact respective author(s).
License summary: Creative Commons Attribution-ShareAlike 3.0 Unported License summary: Creative Commons Attribution-ShareAlike 4.0 International
-*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*-
@@ -123,421 +123,431 @@ Under the following conditions:
-*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*-
Creative Commons Legal Code: Attribution-ShareAlike 3.0 Unported Attribution-ShareAlike 4.0 International
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE =======================================================================
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
DAMAGES RESULTING FROM ITS USE.
License: Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS Using Creative Commons Public Licenses
CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS
PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE
WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS
PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND Creative Commons public licenses provide a standard set of terms and
AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS conditions that creators and other rights holders may use to share
LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU original works of authorship and other material subject to copyright
THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH and certain other rights specified in the public license below. The
TERMS AND CONDITIONS. following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
1. Definitions Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
a. "Adaptation" means a work based upon the Work, or upon the Work Considerations for the public: By using one of our public
and other pre-existing works, such as a translation, adaptation, licenses, a licensor grants the public permission to use the
derivative work, arrangement of music or other alterations of a licensed material under specified terms and conditions. If
literary or artistic work, or phonogram or performance and the licensor's permission is not necessary for any reason--for
includes cinematographic adaptations or any other form in which example, because of any applicable exception or limitation to
the Work may be recast, transformed, or adapted including in any copyright--then that use is not regulated by the license. Our
form recognizably derived from the original, except that a work licenses grant only permissions under copyright and certain
that constitutes a Collection will not be considered an other rights that a licensor has authority to grant. Use of
Adaptation for the purpose of this License. For the avoidance of the licensed material may still be restricted for other
doubt, where the Work is a musical work, performance or reasons, including because others have copyright or other
phonogram, the synchronization of the Work in timed-relation rights in the material. A licensor may make special requests,
with a moving image ("synching") will be considered an such as asking that all changes be marked or described.
Adaptation for the purpose of this License. Although not required by our licenses, you are encouraged to
respect those requests where reasonable. More_considerations
for the public:
wiki.creativecommons.org/Considerations_for_licensees
b. "Collection" means a collection of literary or artistic works, =======================================================================
such as encyclopedias and anthologies, or performances,
phonograms or broadcasts, or other works or subject matter other
than works listed in Section 1(f) below, which, by reason of the
selection and arrangement of their contents, constitute
intellectual creations, in which the Work is included in its
entirety in unmodified form along with one or more other
contributions, each constituting separate and independent works
in themselves, which together are assembled into a collective
whole. A work that constitutes a Collection will not be
considered an Adaptation (as defined below) for the purposes of
this License.
c. "Creative Commons Compatible License" means a license that is Creative Commons Attribution-ShareAlike 4.0 International Public
listed at http://creativecommons.org/compatiblelicenses that has License
been approved by Creative Commons as being essentially
equivalent to this License, including, at a minimum, because
that license: (i) contains terms that have the same purpose,
meaning and effect as the License Elements of this License; and,
(ii) explicitly permits the relicensing of adaptations of works
made available under that license under this License or a
Creative Commons jurisdiction license with the same License
Elements as this License.
d. "Distribute" means to make available to the public the original By exercising the Licensed Rights (defined below), You accept and agree
and copies of the Work or Adaptation, as appropriate, through to be bound by the terms and conditions of this Creative Commons
sale or other transfer of ownership. Attribution-ShareAlike 4.0 International Public License ("Public
License"). To the extent this Public License may be interpreted as a
contract, You are granted the Licensed Rights in consideration of Your
acceptance of these terms and conditions, and the Licensor grants You
such rights in consideration of benefits the Licensor receives from
making the Licensed Material available under these terms and
conditions.
e. "License Elements" means the following high-level license
attributes as selected by Licensor and indicated in the title of
this License: Attribution, ShareAlike.
f. "Licensor" means the individual, individuals, entity or entities Section 1 -- Definitions.
that offer(s) the Work under the terms of this License.
g. "Original Author" means, in the case of a literary or artistic a. Adapted Material means material subject to Copyright and Similar
work, the individual, individuals, entity or entities who Rights that is derived from or based upon the Licensed Material
created the Work or if no individual or entity can be and in which the Licensed Material is translated, altered,
identified, the publisher; and in addition (i) in the case of a arranged, transformed, or otherwise modified in a manner requiring
performance the actors, singers, musicians, dancers, and other permission under the Copyright and Similar Rights held by the
persons who act, sing, deliver, declaim, play in, interpret or Licensor. For purposes of this Public License, where the Licensed
otherwise perform literary or artistic works or expressions of Material is a musical work, performance, or sound recording,
folklore; (ii) in the case of a phonogram the producer being the Adapted Material is always produced where the Licensed Material is
person or legal entity who first fixes the sounds of a synched in timed relation with a moving image.
performance or other sounds; and, (iii) in the case of
broadcasts, the organization that transmits the broadcast.
h. "Work" means the literary and/or artistic work offered under the b. Adapter's License means the license You apply to Your Copyright
terms of this License including without limitation any and Similar Rights in Your contributions to Adapted Material in
production in the literary, scientific and artistic domain, accordance with the terms and conditions of this Public License.
whatever may be the mode or form of its expression including
digital form, such as a book, pamphlet and other writing; a
lecture, address, sermon or other work of the same nature; a
dramatic or dramatico-musical work; a choreographic work or
entertainment in dumb show; a musical composition with or
without words; a cinematographic work to which are assimilated
works expressed by a process analogous to cinematography; a work
of drawing, painting, architecture, sculpture, engraving or
lithography; a photographic work to which are assimilated works
expressed by a process analogous to photography; a work of
applied art; an illustration, map, plan, sketch or
three-dimensional work relative to geography, topography,
architecture or science; a performance; a broadcast; a
phonogram; a compilation of data to the extent it is protected
as a copyrightable work; or a work performed by a variety or
circus performer to the extent it is not otherwise considered a
literary or artistic work.
i. "You" means an individual or entity exercising rights under this c. BY-SA Compatible License means a license listed at
License who has not previously violated the terms of this creativecommons.org/compatiblelicenses, approved by Creative
License with respect to the Work, or who has received express Commons as essentially the equivalent of this Public License.
permission from the Licensor to exercise rights under this
License despite a previous violation.
j. "Publicly Perform" means to perform public recitations of the d. Copyright and Similar Rights means copyright and/or similar rights
Work and to communicate to the public those public recitations, closely related to copyright including, without limitation,
by any means or process, including by wire or wireless means or performance, broadcast, sound recording, and Sui Generis Database
public digital performances; to make available to the public Rights, without regard to how the rights are labeled or
Works in such a way that members of the public may access these categorized. For purposes of this Public License, the rights
Works from a place and at a place individually chosen by them; specified in Section 2(b)(1)-(2) are not Copyright and Similar
to perform the Work to the public by any means or process and Rights.
the communication to the public of the performances of the Work,
including by public digital performance; to broadcast and
rebroadcast the Work by any means including signs, sounds or
images.
k. "Reproduce" means to make copies of the Work by any means e. Effective Technological Measures means those measures that, in the
including without limitation by sound or visual recordings and absence of proper authority, may not be circumvented under laws
the right of fixation and reproducing fixations of the Work, fulfilling obligations under Article 11 of the WIPO Copyright
including storage of a protected performance or phonogram in Treaty adopted on December 20, 1996, and/or similar international
digital form or other electronic medium. agreements.
2. Fair Dealing Rights. f. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
Nothing in this License is intended to reduce, limit, or restrict g. License Elements means the license attributes listed in the name
any uses free from copyright or rights arising from limitations or of a Creative Commons Public License. The License Elements of this
exceptions that are provided for in connection with the copyright Public License are Attribution and ShareAlike.
protection under copyright law or other applicable laws.
3. License Grant. h. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
Subject to the terms and conditions of this License, Licensor
hereby grants You a worldwide, royalty-free, non-exclusive,
perpetual (for the duration of the applicable copyright) license to
exercise the rights in the Work as stated below:
a. to Reproduce the Work, to incorporate the Work into one or more
Collections, and to Reproduce the Work as incorporated in the
Collections;
b. to create and Reproduce Adaptations provided that any such
Adaptation, including any translation in any medium, takes
reasonable steps to clearly label, demarcate or otherwise
identify that changes were made to the original Work. For
example, a translation could be marked "The original work was
translated from English to Spanish," or a modification could
indicate "The original work has been modified.";
c. to Distribute and Publicly Perform the Work including as
incorporated in Collections; and,
d. to Distribute and Publicly Perform Adaptations.
e. For the avoidance of doubt:
i. Non-waivable Compulsory License Schemes. In those
jurisdictions in which the right to collect royalties
through any statutory or compulsory licensing scheme
cannot be waived, the Licensor reserves the exclusive
right to collect such royalties for any exercise by You of
the rights granted under this License;
ii. Waivable Compulsory License Schemes. In those
jurisdictions in which the right to collect royalties
through any statutory or compulsory licensing scheme can
be waived, the Licensor waives the exclusive right to
collect such royalties for any exercise by You of the
rights granted under this License; and,
iii. Voluntary License Schemes. The Licensor waives the right
to collect royalties, whether individually or, in the
event that the Licensor is a member of a collecting
society that administers voluntary licensing schemes, via
that society, from any exercise by You of the rights
granted under this License.
The above rights may be exercised in all media and formats whether
now known or hereafter devised. The above rights include the right
to make such modifications as are technically necessary to exercise
the rights in other media and formats. Subject to Section 8(f), all
rights not expressly granted by Licensor are hereby reserved.
4. Restrictions.
The license granted in Section 3 above is expressly made subject to
and limited by the following restrictions:
a. You may Distribute or Publicly Perform the Work only under the
terms of this License. You must include a copy of, or the
Uniform Resource Identifier (URI) for, this License with every
copy of the Work You Distribute or Publicly Perform. You may not
offer or impose any terms on the Work that restrict the terms of
this License or the ability of the recipient of the Work to
exercise the rights granted to that recipient under the terms of
the License. You may not sublicense the Work. You must keep
intact all notices that refer to this License and to the
disclaimer of warranties with every copy of the Work You
Distribute or Publicly Perform. When You Distribute or Publicly
Perform the Work, You may not impose any effective technological
measures on the Work that restrict the ability of a recipient of
the Work from You to exercise the rights granted to that
recipient under the terms of the License. This Section 4(a)
applies to the Work as incorporated in a Collection, but this
does not require the Collection apart from the Work itself to be
made subject to the terms of this License. If You create a
Collection, upon notice from any Licensor You must, to the
extent practicable, remove from the Collection any credit as
required by Section 4(c), as requested. If You create an
Adaptation, upon notice from any Licensor You must, to the
extent practicable, remove from the Adaptation any credit as
required by Section 4(c), as requested.
b. You may Distribute or Publicly Perform an Adaptation only under
the terms of: (i) this License; (ii) a later version of this
License with the same License Elements as this License; (iii) a
Creative Commons jurisdiction license (either this or a later
license version) that contains the same License Elements as this
License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative
Commons Compatible License. If you license the Adaptation under
one of the licenses mentioned in (iv), you must comply with the
terms of that license. If you license the Adaptation under the
terms of any of the licenses mentioned in (i), (ii) or (iii)
(the "Applicable License"), you must comply with the terms of
the Applicable License generally and the following provisions:
(I) You must include a copy of, or the URI for, the Applicable
License with every copy of each Adaptation You Distribute or
Publicly Perform; (II) You may not offer or impose any terms on
the Adaptation that restrict the terms of the Applicable License
or the ability of the recipient of the Adaptation to exercise
the rights granted to that recipient under the terms of the
Applicable License; (III) You must keep intact all notices that
refer to the Applicable License and to the disclaimer of
warranties with every copy of the Work as included in the
Adaptation You Distribute or Publicly Perform; (IV) when You
Distribute or Publicly Perform the Adaptation, You may not
impose any effective technological measures on the Adaptation
that restrict the ability of a recipient of the Adaptation from
You to exercise the rights granted to that recipient under the
terms of the Applicable License. This Section 4(b) applies to
the Adaptation as incorporated in a Collection, but this does
not require the Collection apart from the Adaptation itself to
be made subject to the terms of the Applicable License.
c. If You Distribute, or Publicly Perform the Work or any
Adaptations or Collections, You must, unless a request has been
made pursuant to Section 4(a), keep intact all copyright notices
for the Work and provide, reasonable to the medium or means You
are utilizing: (i) the name of the Original Author (or
pseudonym, if applicable) if supplied, and/or if the Original
Author and/or Licensor designate another party or parties (e.g.,
a sponsor institute, publishing entity, journal) for attribution
("Attribution Parties") in Licensor's copyright notice, terms of
service or by other reasonable means, the name of such party or
parties; (ii) the title of the Work if supplied; (iii) to the
extent reasonably practicable, the URI, if any, that Licensor
specifies to be associated with the Work, unless such URI does
not refer to the copyright notice or licensing information for
the Work; and (iv) , consistent with Ssection 3(b), in the case
of an Adaptation, a credit identifying the use of the Work in
the Adaptation (e.g., "French translation of the Work by
Original Author," or "Screenplay based on original Work by
Original Author"). The credit required by this Section 4(c) may
be implemented in any reasonable manner; provided, however, that
in the case of a Adaptation or Collection, at a minimum such
credit will appear, if a credit for all contributing authors of
the Adaptation or Collection appears, then as part of these
credits and in a manner at least as prominent as the credits for
the other contributing authors. For the avoidance of doubt, You
may only use the credit required by this Section for the purpose
of attribution in the manner set out above and, by exercising
Your rights under this License, You may not implicitly or
explicitly assert or imply any connection with, sponsorship or
endorsement by the Original Author, Licensor and/or Attribution
Parties, as appropriate, of You or Your use of the Work, without
the separate, express prior written permission of the Original
Author, Licensor and/or Attribution Parties.
d. Except as otherwise agreed in writing by the Licensor or as may
be otherwise permitted by applicable law, if You Reproduce,
Distribute or Publicly Perform the Work either by itself or as
part of any Adaptations or Collections, You must not distort,
mutilate, modify or take other derogatory action in relation to
the Work which would be prejudicial to the Original Author's
honor or reputation. Licensor agrees that in those jurisdictions
(e.g. Japan), in which any exercise of the right granted in
Section 3(b) of this License (the right to make Adaptations)
would be deemed to be a distortion, mutilation, modification or
other derogatory action prejudicial to the Original Author's
honor and reputation, the Licensor will waive or not assert, as
appropriate, this Section, to the fullest extent permitted by
the applicable national law, to enable You to reasonably
exercise Your right under Section 3(b) of this License (right to
make Adaptations) but not otherwise.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING,
LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR
WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED,
STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF
TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE,
NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY,
OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT
DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED
WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability.
EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL
LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT
OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate
automatically upon any breach by You of the terms of this
License. Individuals or entities who have received Adaptations
or Collections from You under this License, however, will not
have their licenses terminated provided such individuals or
entities remain in full compliance with those licenses. Sections
1, 2, 5, 6, 7, and 8 will survive any termination of this
License. License.
b. Subject to the above terms and conditions, the license granted i. Licensed Rights means the rights granted to You subject to the
here is perpetual (for the duration of the applicable copyright terms and conditions of this Public License, which are limited to
in the Work). Notwithstanding the above, Licensor reserves the all Copyright and Similar Rights that apply to Your use of the
right to release the Work under different license terms or to Licensed Material and that the Licensor has authority to license.
stop distributing the Work at any time; provided, however that
any such election will not serve to withdraw this License (or
any other license that has been, or is required to be, granted
under the terms of this License), and this License will continue
in full force and effect unless terminated as stated above.
8. Miscellaneous j. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
a. Each time You Distribute or Publicly Perform the Work or a k. Share means to provide material to the public by any means or
Collection, the Licensor offers to the recipient a license to process that requires permission under the Licensed Rights, such
the Work on the same terms and conditions as the license granted as reproduction, public display, public performance, distribution,
to You under this License. dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
b. Each time You Distribute or Publicly Perform an Adaptation, l. Sui Generis Database Rights means rights other than copyright
Licensor offers to the recipient a license to the original Work resulting from Directive 96/9/EC of the European Parliament and of
on the same terms and conditions as the license granted to You the Council of 11 March 1996 on the legal protection of databases,
under this License. as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
c. If any provision of this License is invalid or unenforceable m. You means the individual or entity exercising the Licensed Rights
under applicable law, it shall not affect the validity or under this Public License. Your has a corresponding meaning.
enforceability of the remainder of the terms of this License,
and without further action by the parties to this agreement,
such provision shall be reformed to the minimum extent necessary
to make such provision valid and enforceable.
d. No term or provision of this License shall be deemed waived and
no breach consented to unless such waiver or consent shall be in
writing and signed by the party to be charged with such waiver
or consent.
e. This License constitutes the entire agreement between the Section 2 -- Scope.
parties with respect to the Work licensed here. There are no
understandings, agreements or representations with respect to
the Work not specified here. Licensor shall not be bound by any
additional provisions that may appear in any communication from
You. This License may not be modified without the mutual written
agreement of the Licensor and You.
f. The rights granted under, and the subject matter referenced, in a. License grant.
this License were drafted utilizing the terminology of the Berne
Convention for the Protection of Literary and Artistic Works (as
amended on September 28, 1979), the Rome Convention of 1961, the
WIPO Copyright Treaty of 1996, the WIPO Performances and
Phonograms Treaty of 1996 and the Universal Copyright Convention
(as revised on July 24, 1971). These rights and subject matter
take effect in the relevant jurisdiction in which the License
terms are sought to be enforced according to the corresponding
provisions of the implementation of those treaty provisions in
the applicable national law. If the standard suite of rights
granted under applicable copyright law includes additional
rights not granted under this License, such additional rights
are deemed to be included in the License; this License is not
intended to restrict the license of any rights under applicable
law.
Creative Commons Notice 1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
Creative Commons is not a party to this License, and makes no warranty a. reproduce and Share the Licensed Material, in whole or
whatsoever in connection with the Work. Creative Commons will not be in part; and
liable to You or any party on any legal theory for any damages
whatsoever, including without limitation any general, special,
incidental or consequential damages arising in connection to this
license. Notwithstanding the foregoing two (2) sentences, if Creative
Commons has expressly identified itself as the Licensor hereunder, it
shall have all rights and obligations of Licensor.
Except for the limited purpose of indicating to the public that the b. produce, reproduce, and Share Adapted Material.
Work is licensed under the CCPL, Creative Commons does not authorize
the use by either party of the trademark "Creative Commons" or any
related trademark or logo of Creative Commons without the prior
written consent of Creative Commons. Any permitted use will be in
compliance with Creative Commons' then-current trademark usage
guidelines, as may be published on its website or otherwise made
available upon request from time to time. For the avoidance of doubt,
this trademark restriction does not form part of the License.
Creative Commons may be contacted at http://creativecommons.org/. 2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. Additional offer from the Licensor -- Adapted Material.
Every recipient of Adapted Material from You
automatically receives an offer from the Licensor to
exercise the Licensed Rights in the Adapted Material
under the conditions of the Adapter's License You apply.
c. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
b. ShareAlike.
In addition to the conditions in Section 3(a), if You Share
Adapted Material You produce, the following conditions also apply.
1. The Adapter's License You apply must be a Creative Commons
license with the same License Elements, this version or
later, or a BY-SA Compatible License.
2. You must include the text of, or the URI or hyperlink to, the
Adapter's License You apply. You may satisfy this condition
in any reasonable manner based on the medium, means, and
context in which You Share Adapted Material.
3. You may not offer or impose any additional or different terms
or conditions on, or apply any Effective Technological
Measures to, Adapted Material that restrict exercise of the
rights granted under the Adapter's License You apply.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material,
including for purposes of Section 3(b); and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public licenses.
Notwithstanding, Creative Commons may elect to apply one of its public
licenses to material it publishes and in those instances will be
considered the "Licensor." Except for the limited purpose of indicating
that material is shared under a Creative Commons public license or as
otherwise permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the public
licenses.
Creative Commons may be contacted at creativecommons.org.
GNU GENERAL PUBLIC LICENSE VERSION 2 GNU GENERAL PUBLIC LICENSE VERSION 2

View File

@@ -1,3 +1,5 @@
https://en.wikipedia.org/wiki/C_standard_library
+++Date last modified: 1997-07-05 +++Date last modified: 1997-07-05

View File

@@ -59,43 +59,43 @@ Note:
to enumerator item changes the original string only if it was passed to enumerator item changes the original string only if it was passed
to FOR EACH statement by reference, i.e.: to FOR EACH statement by reference, i.e.:
FOR EACH c IN @string FOR EACH c IN @string
IF ! isAlpha( c ) IF IsAlpha( c )
c := "*" c := Upper( c )
ELSE ELSE
c := upper( c ) c := "*"
ENDIF ENDIF
NEXT NEXT
- after the loop the controlling variable(s) restore the value which - after the loop the controlling variable(s) restore the value which
they had before entering the loop they had before entering the loop
- the enumerator variable supports the following properties - the enumerator variable supports the following properties
:__enumIndex - the loop counter for variable :__enumIndex() - the loop counter for variable
:__enumKey - the hash key value of traversed hash item pair :__enumKey() - the hash key value of traversed hash item pair
:__enumBase - the value that is being traversed :__enumBase() - the value that is being traversed
:__enumValue - the value of variable :__enumValue() - the value of variable
:__enumIsFirst - is it the first enumerated item? :__enumIsFirst() - is it the first enumerated item?
:__enumIsLast - is it the last enumerated item? :__enumIsLast() - is it the last enumerated item?
- defining new class or overloading existing one user can define - defining new class or overloading existing one user can define
his own behavior of FOR EACH iterating overloading chosen of above his own behavior of FOR EACH iterating overloading chosen of above
methods and/or the following ones: methods and/or the following ones:
:__enumStart :__enumStart()
:__enumSkip :__enumSkip()
:__enumStop :__enumStop()
By default FOR EACH iterate all object instance variables By default FOR EACH iterate all object instance variables
for example: for example:
a := 'A' a := "A"
b := 'B' b := "B"
FOR EACH a, b IN { 1, 2, 3, 4 }, "abcd" FOR EACH a, b IN { 1, 2, 3, 4 }, "abcd"
? a, b //prints: 1 a ? a, b // prints: 1 a
// 2 b // 2 b
// 3 c // 3 c
// 4 d // 4 d
NEXT NEXT
? a, b //prints: A B ? a, b // prints: A B
// you can use EXIT statement inside the loop // you can use EXIT statement inside the loop
FOR EACH a IN { 1, 2, 3, 4 } FOR EACH a IN { 1, 2, 3, 4 }
IF a:__enumindex == 3 IF a:__enumIndex() == 3
? a ? a
EXIT EXIT
ENDIF ENDIF
@@ -107,13 +107,13 @@ for example:
a *= 2 a *= 2
str := Upper( str ) str := Upper( str )
NEXT NEXT
// now 'arr' stores { 2, 4, 6 } // now `arr` stores { 2, 4, 6 }
// howerer 'str' still stores "abc" // however `str` still stores "abc"
Notice the difference: Notice the difference:
FOR EACH a IN someValue FOR EACH a IN someValue
? a:__enumindex //prints current value of the index ? a:__enumIndex() // prints current value of the index
? (a):__enumindex //sends '__enumindex' message to the current value ? ( a ):__enumIndex() // sends `__enumindex()` message to the current value
NEXT NEXT
@@ -129,7 +129,7 @@ Harbour supports the following statement:
form of sending messages to the object. You can use the syntax form of sending messages to the object. You can use the syntax
:message( [params] ) :message( [params] )
:property :property
to send messages to the object specified by 'expression' to send messages to the object specified by `expression`
for example: for example:
WITH OBJECT myobj:a[ 1 ]:myitem WITH OBJECT myobj:a[ 1 ]:myitem
@@ -142,7 +142,7 @@ for example:
myobj:a[ 1 ]:myitem:value := 9 myobj:a[ 1 ]:myitem:value := 9
Inside WITH OBJECT/END you can access (or even assign a new object) Inside WITH OBJECT/END you can access (or even assign a new object)
using a special reserved property :__withobject using a special reserved property :__withObject()
The runtime error will be generated at the time of message The runtime error will be generated at the time of message
sending (or property access/assign) if <objexpression> sending (or property access/assign) if <objexpression>
@@ -150,16 +150,16 @@ for example:
for example: for example:
CREATE CLASS foo CREATE CLASS foo
VAR name INIT 'FOO' VAR name INIT "FOO"
ENDCLASS ENDCLASS
CREATE CLASS bar CREATE CLASS bar
VAR name INIT 'BAR' VAR name INIT "BAR"
ENDCLASS ENDCLASS
WITH OBJECT foo():new() WITH OBJECT foo():new()
? :name //prints 'FOO' ? :name // prints `FOO`
? :__withobject:name //also prints 'FOO' ? :__withObject():name // also prints `FOO`
? :__withobject := bar():new() ? :__withObject := bar():new()
? :name //prints 'BAR' ? :name // prints `BAR`
ENDWITH ENDWITH

View File

@@ -93,6 +93,6 @@ Exceptions:
[ Copyright (c) 1999-2009 Viktor Szakats (vszakats.net/harbour) [ Copyright (c) 1999-2009 Viktor Szakats (vszakats.net/harbour)
Licensed under Creative Commons Attribution-ShareAlike 3.0: Licensed under Creative Commons Attribution-ShareAlike 4.0:
http://creativecommons.org/licenses/by-sa/3.0/ <https://creativecommons.org/licenses/by-sa/4.0/>
See COPYING.txt. ] See LICENSE.txt ]

View File

@@ -47,9 +47,9 @@ optimized at compile time:
hb_mutexCreate() hb_mutexCreate()
2. Expresion optimization: 2. Expression optimization:
Just like Clipper Harbour compiler can optimize some expresions if Just like Clipper Harbour compiler can optimize some expressions if
arguments are well known and can be calculated at compile time: arguments are well known and can be calculated at compile time:
- Clipper compatible: - Clipper compatible:
@@ -144,7 +144,7 @@ arguments are well known and can be calculated at compile time:
<nConst1> ^ <nConst2> => <nConst> <nConst1> ^ <nConst2> => <nConst>
<aValue> [ <nConst> ] => <xArrayItem> <aValue> [ <nConst> ] => <xArrayItem>
( <expr> ) => <expr> // it allows to optimize ( <expr> ) => <expr> // it allows to optimize
// expresions like: 1+(2) // expressions like: 1+(2)
- Harbour syntax extensions not supported by Clipper, enabled by -ko - Harbour syntax extensions not supported by Clipper, enabled by -ko
compiler switch: compiler switch:
@@ -157,8 +157,8 @@ arguments are well known and can be calculated at compile time:
i.e.: i.e.:
iif( dData == NIL, dDate, aVal[ 1 ] ) := date() iif( dData == NIL, dDate, aVal[ 1 ] ) := date()
iif( empty( x ), aVal[ 2 ], nTmp ) += 10 iif( empty( x ), aVal[ 2 ], nTmp ) += 10
? iif( f1(), nVal1, nVal2 ) ++ ? iif( f1(), nVal1, nVal2 )++
? -- iif( f2(), aVal[ 1 ], hVal[ "abc" ] ) ? --iif( f2(), aVal[ 1 ], hVal[ "abc" ] )
- Harbour extensions which may disable RT errors in wrong expressions - Harbour extensions which may disable RT errors in wrong expressions
or can change used operators using basic math rules. Enabled by -ko or can change used operators using basic math rules. Enabled by -ko
@@ -198,11 +198,11 @@ Unlike Clipper Harbour tries to optimize all expressions.
If some code needs strict Clipper behavior then it can be forced by using If some code needs strict Clipper behavior then it can be forced by using
-kc Harbour compiler switch. It disables Harbour extensions and enables -kc Harbour compiler switch. It disables Harbour extensions and enables
replicating some Clipper bugs like optimizing "" $ <cConst> to .T. at replicating some Clipper bugs like optimizing "" $ <cConst> to .T. at
compile time (at runtime and in macrocompiler it's always .F. in Clipper compile time (at runtime and in macro-compiler it's always .F. in Clipper
and Harbour). and Harbour).
Expressions fully optimized to constant values at compile time can be used Expressions fully optimized to constant values at compile time can be used
to intialize static variables, f.e.: to initialize static variables, f.e.:
static s_var := ( 1 + 2 / 3 ) static s_var := ( 1 + 2 / 3 )
Clipper does not optimize expression used in LOCAL, PRIVATE and Clipper does not optimize expression used in LOCAL, PRIVATE and
@@ -233,11 +233,11 @@ or:
or: or:
? &cLocalPref.func&cPriv1( cPriv2, &cStatic ) ? &cLocalPref.func&cPriv1( cPriv2, &cStatic )
etc. etc.
If possible then for macrocodeblocks Harbour compiler tries to If possible then for macro-codeblocks Harbour compiler tries to
generate early eval code in which macros are expanded when codeblock generate early eval code in which macros are expanded when codeblock
is created. Otherwise macros are expanded each time codeblock is is created. Otherwise macros are expanded each time codeblock is
evaluated. evaluated.
This feature can be useful also in porting some other xbase compatible This feature can be useful also in porting some other xBase compatible
code to Harbour because some compilers just like xHarbour accepted code to Harbour because some compilers just like xHarbour accepted
in some limited way officially unsupported syntax with macros using in some limited way officially unsupported syntax with macros using
declared symbols. declared symbols.
@@ -247,7 +247,7 @@ declared symbols.
Harbour has additional optimization phase which operates on generated PCODE. Harbour has additional optimization phase which operates on generated PCODE.
It can also reduce expressions, joins jumps, removes death or meaningless It can also reduce expressions, joins jumps, removes death or meaningless
code which can appear after all other optimizations and were not optimized code which can appear after all other optimizations and were not optimized
by expression optimizer. It can also optimize readonly local variables by expression optimizer. It can also optimize read-only local variables
keeping the QSelf() value. QSelf() is not real function call but very fast keeping the QSelf() value. QSelf() is not real function call but very fast
single PCODE often used in OOP code. Harbour can replace local variables single PCODE often used in OOP code. Harbour can replace local variables
keeping it by direct QSelf() usage. keeping it by direct QSelf() usage.

View File

@@ -48,14 +48,18 @@ to it. This is caused by the fact that a inner codeblock can be created during
evaluation of outer codeblock when local variables don't exist like in this evaluation of outer codeblock when local variables don't exist like in this
example: example:
PROCEDUE Main() PROCEDURE Main()
PRIVATE foo, bar PRIVATE foo, bar
Test() Test()
Eval( foo ) Eval( foo )
Eval( bar ) Eval( bar )
RETURN
PROCEDURE Test() PROCEDURE Test()
LOCAL a := "FOO", b := "BAR" LOCAL a := "FOO", b := "BAR"
foo := {|| a + ( bar := Eval( {|| b } ) ) } foo := {|| a + ( bar := Eval( {|| b } ) ) }
@@ -73,14 +77,15 @@ used. The negative value is used as an index to distinguish it from the
reference to a codeblock parameter. reference to a codeblock parameter.
Incompatbility with the Clipper. Incompatibility with the Clipper.
1) Detached locals passed by reference 1. Detached locals passed by reference
There is a little difference between the handling of variables passed by There is a little difference between the handling of variables passed by
the reference in a codeblock. the reference in a codeblock.
The following code explains it (thanks to David G. Holm) The following code explains it (thanks to David G. Holm)
PROCEDURE Main() PROCEDURE Main()
LOCAL nTest LOCAL nTest
LOCAL bBlock1 := MakeBlock() LOCAL bBlock1 := MakeBlock()
LOCAL bBlock2 := {|| DoThing( @nTest ), QOut( "From Main: ", nTest ) } LOCAL bBlock2 := {|| DoThing( @nTest ), QOut( "From Main: ", nTest ) }
@@ -91,14 +96,16 @@ PROCEDURE Main()
RETURN RETURN
FUNCTION MakeBlock() FUNCTION MakeBlock()
LOCAL nTest LOCAL nTest
RETURN {|| DoThing( @nTest ), QOut( "From MakeBlock: ", nTest ) } RETURN {|| DoThing( @nTest ), QOut( "From MakeBlock: ", nTest ) }
FUNCTION DoThing( n ) PROCEDURE DoThing( n )
n := 42 n := 42
RETURN NIL RETURN
In Clipper it produces: In Clipper it produces:
@@ -109,18 +116,22 @@ From Main: 42
From MakeBlock: 42 From MakeBlock: 42
From Main: 42 From Main: 42
2) Scope of undeclared variables 2. Scope of undeclared variables
Consider the following code: Consider the following code:
PROCEDURE Main() PROCEDURE Main()
LOCAL cb
cb := Detach() LOCAL cb := Detach()
? Eval( cb, 10 ) ? Eval( cb, 10 )
RETURN RETURN
FUNCTION Detach() FUNCTION Detach()
LOCAL b := {| x | x + a } LOCAL b := {| x | x + a }
LOCAL a := 0 LOCAL a := 0
RETURN b RETURN b
In Clipper the 'a' variable in a codeblock has the *local* scope however in In Clipper the 'a' variable in a codeblock has the *local* scope however in
@@ -130,10 +141,13 @@ this code will print 10 and in Harbour it will raise 'argument error' in
This will be true also when the 'a' variable will be declared as PRIVATE This will be true also when the 'a' variable will be declared as PRIVATE
PROCEDURE Main() PROCEDURE Main()
LOCAL cb LOCAL cb
PRIVATE a PRIVATE a
cb := Detach() cb := Detach()
? Eval( cb, 10 ) ? Eval( cb, 10 )
RETURN RETURN
The above code also prints 10 in Clipper (even if compiled with -a or -v The above code also prints 10 in Clipper (even if compiled with -a or -v

View File

@@ -1,7 +1,7 @@
/* Please note the following comments we may use everywhere /* Please note the following comments we may use everywhere
NOTE: Notes NOTE: Notes
TODO: something should be added here TODO: something should be added here
TOFIX: something needs to be fixed FIXME: something needs to be fixed
OBSOLETE: something could be removed from here OBSOLETE: something could be removed from here
QUESTION: I had some questions at this point but I could not get an answer QUESTION: I had some questions at this point but I could not get an answer
OPT: something is commented out to improve performance OPT: something is commented out to improve performance
@@ -76,13 +76,7 @@ Code Implementation
Function calls in assert conditions may also cause this problem, if Function calls in assert conditions may also cause this problem, if
they modify one of their arguments or global variables. they modify one of their arguments or global variables.
[7] When commenting out code using a #if statement, do NOT use 0 only. Instead [7] Use hb_xgrab()/hb_xalloc(), hb_xfree(), hb_xrealloc(), hb_xsize() to
use "<cvs username here>_0". For example, #if FOO_0, where FOO is your
cvs user foo. This allows easier tracking of why code was commented out,
especially in bundled libraries.
[8] Use hb_xgrab()/hb_xalloc(), hb_xfree(), hb_xrealloc(), hb_xsize() to
manage memory allocations. These functions implement an internal manage memory allocations. These functions implement an internal
"safety-net" mechanism that ensures the deallocation of any unfreed "safety-net" mechanism that ensures the deallocation of any unfreed
memory at the end of an application. They also provide useful memory at the end of an application. They also provide useful
@@ -113,7 +107,7 @@ Naming Conventions
[4] Static variables should be prefixed with 's_' [4] Static variables should be prefixed with 's_'
[5] Global variables (variables shared beetwen modules) should be [5] Global variables (variables shared between modules) should be
prefixed with 'hb_<module_prefix>', e.g. hb_vm_bDebug, hb_gc_pStart prefixed with 'hb_<module_prefix>', e.g. hb_vm_bDebug, hb_gc_pStart
@@ -126,7 +120,7 @@ Syntax and indentation
accept C++-style comments in C code, you have to ensure that your accept C++-style comments in C code, you have to ensure that your
code would compile with other compilers as well. code would compile with other compilers as well.
[2] Don't use K&R-style. Of course, we can't and don't want to [2] Do not use K&R-style. Of course, we cannot and do not want to
force anybody to use a style he or she is not used to, but, force anybody to use a style he or she is not used to, but,
at the very least, when you write code that goes into the core at the very least, when you write code that goes into the core
of Harbour or one of its standard modules, please don't use the K&R of Harbour or one of its standard modules, please don't use the K&R
@@ -169,8 +163,8 @@ Documentation
[1] Whenever be possible document yourself functions you developed. [1] Whenever be possible document yourself functions you developed.
Usually it's hard to understand code written by other person, moreover Usually it's hard to understand code written by other person, moreover
when it involves some obscure algorithm, system's vars or attributes when it involves some obscure algorithm, system's vars or attributes
or data unavailable for the documentator. or data unavailable for the documentation writers.
This is particularly evident for low level functions. This is particularly evident for low-level functions.
[2] After some time function was written, work becomes more difficult because [2] After some time function was written, work becomes more difficult because
it's needed to read the code several times (even for the own developer). it's needed to read the code several times (even for the own developer).
@@ -192,11 +186,11 @@ Documentation
[6] If you are the developer of the function, and you are using system's [6] If you are the developer of the function, and you are using system's
functions or vars undocumented, please explain it as much as possible. functions or vars undocumented, please explain it as much as possible.
If you use a obscure or strange algorithm (i.e md5 ) please explain what If you use a obscure or strange algorithm please explain what it does
it does and how it works. and how it works.
[7] Notes, remarks and explainings enclose always between the /* */ pair, [7] Notes, remarks and explaining enclose always between the /* */ pair,
please don't use the double bar // because it difficults portability. please don't use the double bar // because it may break portability.
[8] Remember... documentation it's a much time consuming work, usually [8] Remember... documentation it's a much time consuming work, usually
takes more time writing the documentation of a function that writing takes more time writing the documentation of a function that writing

View File

@@ -38,25 +38,25 @@ destroyed by Garbage Collector in a special way. GC scans all items known
to HVM and marks them as used, then destroys all items which are not marked. to HVM and marks them as used, then destroys all items which are not marked.
The reference counters in such items are greater then zero and cannot The reference counters in such items are greater then zero and cannot
be directly used to detect bugs in a user code. So GC collects all be directly used to detect bugs in a user code. So GC collects all
unaccessible items and then executes cleanup functions for each of them, inaccessible items and then executes cleanup functions for each of them,
and finally checks if reference counters reached zero before it will and finally checks if reference counters reached zero before it will
free the memory blocks. If they didn't then RT error is generated for free the memory blocks. If they didn't then RT error is generated for
the first memory block. All items which are still accessible, are not the first memory block. All items which are still accessible, are not
freed and if GC can recognize a type of an item then it will also try to freed and if GC can recognize a type of an item then it will also try to
convert it to some empty form (f.e. empty array). convert it to some empty form (f.e. empty array).
The destructors are executed from cleanup functions so they all will be The destructors are executed from cleanup functions so they all will be
executed and then, if there is sth wrong, RT error will be generated for executed and then, if there is something wrong, RT error will be generated
the first memory block which was copied to some external structures. for the first memory block which was copied to some external structures.
Please note that the order in which destructors are executed by GC Please note that the order in which destructors are executed by GC
can be diffrent then some logical order defined by an application. HVM can be different then some logical order defined by an application. HVM
does not know anything about programmer's ideas so a programmer has to does not know anything about programmer's ideas so a programmer has to
create a code which will be safe for such situations. HVM only guaranties create a code which will be safe for such situations. HVM only guaranties
that destructors will be executed only once for each object. that destructors will be executed only once for each object.
This also cannot break HVM integrity for standard object items which are This also cannot break HVM integrity for standard object items which are
represented as arrays. But if the problem is inside cleanup function of represented as arrays. But if the problem is inside cleanup function of
a GC POINTER item, which has a structure unknown to HVM, then any further a GC POINTER item, which has a structure unknown to HVM, then any further
behavior can be unpredictible if a programmer, who created such pointer behavior can be unpredictable if a programmer, who created such pointer
items, doesn't support such situation himslef in his C code. It's a good items, doesn't support such situation himself in his C code. It's a good
practice to add some type of marker to body of memory allocated by practice to add some type of marker to body of memory allocated by
hb_gcAlloc() to detect bugs in .prg code destructors which may keep hb_gcAlloc() to detect bugs in .prg code destructors which may keep
pointers to freed POINTER item (these could be destructors of differ pointers to freed POINTER item (these could be destructors of differ
@@ -71,7 +71,7 @@ situation.
In summary, Harbour destructor implementation should be able to detect In summary, Harbour destructor implementation should be able to detect
bugs in destructor and keep HVM integrity. But we are not able to bugs in destructor and keep HVM integrity. But we are not able to
guarantiee that nothing wrong will happen with 3-rd party code which guarantee that nothing wrong will happen with 3rd party code which
uses POINTER items scanned by GC, which are not safe for .prg code uses POINTER items scanned by GC, which are not safe for .prg code
bugs in destructors and repeated cleanup function execution. bugs in destructors and repeated cleanup function execution.
@@ -88,9 +88,9 @@ some other structures, the object destructors will not be executed.
Clearing STATIC variables before closing classy subsystem will not help Clearing STATIC variables before closing classy subsystem will not help
because STATIC variables are integral part of this subsystem. because STATIC variables are integral part of this subsystem.
Anomalies and excpetions Anomalies and exceptions
------------------------ ------------------------
In some situations HVM may clear items when exception apear, f.e. In some situations HVM may clear items when exception appear, f.e.
BREAK or QUIT request. In such case executing the exception type BREAK or QUIT request. In such case executing the exception type
is stored and destructors are executed and finally the exception is stored and destructors are executed and finally the exception
restored. But in destructors code new exception can appear. In such restored. But in destructors code new exception can appear. In such

View File

@@ -4,11 +4,11 @@ Harbour directory structure
Follow are the various directories that exist under the Harbour tree. Follow are the various directories that exist under the Harbour tree.
<harbour> - Main Harbour directory. Contain all the various <root> - Main Harbour directory. Contains all the various
| make file and Changelog (=changes history) files. | make file and Changelog (=changes history) file.
| |
+---bin - Executable and build scripts. +---bin - Executable and helper scripts.
| Should contain harbour and other executables. (*) | Should contain Harbour and other executables. (*)
| |
+---config - Configuration Files (.mk) for the GNU Make system. +---config - Configuration Files (.mk) for the GNU Make system.
| | | |
@@ -32,7 +32,7 @@ Follow are the various directories that exist under the Harbour tree.
| |
+---debian - Packaging information for Debian GNU/Linux. +---debian - Packaging information for Debian GNU/Linux.
| |
+---doc - Documentation and white-paper. +---doc - Documentation and white-papers.
| | | |
| +---en - English documentation. | +---en - English documentation.
| |
@@ -44,7 +44,7 @@ Follow are the various directories that exist under the Harbour tree.
| | | |
| +---codepage - National codepage collection. | +---codepage - National codepage collection.
| | | |
| +---common - Common function and Expression Optimizer. | +---common - Common function and expression optimizer.
| | | |
| +---compiler - Harbour compiler module. | +---compiler - Harbour compiler module.
| | | |
@@ -53,11 +53,10 @@ Follow are the various directories that exist under the Harbour tree.
| +---hbextern - Library with all function binding available for | +---hbextern - Library with all function binding available for
| | .prg code | | .prg code
| | | |
| +---3rd/pcre - Harbour implementation of the Perl Compatible | +---3rd - Locally hosted copies of 3rd party libraries
| | Regular Expressions (PCRE) library. | | required by core code or deemed important enough
| | | | to be provided as part of core.
| +---3rd/zlib - Harbour implementation of the ZLIB data | | (plays a role primarily on non-*nix systems)
| | compression library.
| | | |
| +---lang - National language message support files. | +---lang - National language message support files.
| | | |
@@ -65,7 +64,7 @@ Follow are the various directories that exist under the Harbour tree.
| | | |
| +---main - Harbour compiler main source. | +---main - Harbour compiler main source.
| | | |
| +---pp - Harbour Preprocessor. | +---pp - Harbour preprocessor.
| | | |
| +---rdd - Replaceable Database Driver (RDD). | +---rdd - Replaceable Database Driver (RDD).
| | | | | |
@@ -77,7 +76,7 @@ Follow are the various directories that exist under the Harbour tree.
| | | | | |
| | +---dbfntx - DBFNTX RDD. | | +---dbfntx - DBFNTX RDD.
| | | | | |
| | +---hbsix - SIX compatible functions. | | +---hbsix - SIx compatible functions.
| | | | | |
| | +---hsx - HiPer-SEEK / CFTS compatible library. | | +---hsx - HiPer-SEEK / CFTS compatible library.
| | | | | |
@@ -87,7 +86,7 @@ Follow are the various directories that exist under the Harbour tree.
| | | | | |
| | +---example - Usage examples. | | +---example - Usage examples.
| | | | | |
| | +---rdds - A set of simple RDD's all written in PRG. | | +---rdds - A set of simple RDDs all written in PRG.
| | | |
| +---rtl - Run-Time libraries functions and various General | +---rtl - Run-Time libraries functions and various General
| | | Terminal (GT) implementation | | | Terminal (GT) implementation
@@ -96,11 +95,11 @@ Follow are the various directories that exist under the Harbour tree.
| | | | | |
| | +---gtcrs - GT subsystem based on ncurses. | | +---gtcrs - GT subsystem based on ncurses.
| | | | | |
| | +---gtdos - GT subsystem for MS-DOS compilers. | | +---gtdos - GT subsystem for MS-DOS platform.
| | | | | |
| | +---gtgui - Minimal GT for Windows GUI programs. | | +---gtgui - Minimal GT for Windows GUI programs.
| | | | | |
| | +---gtos2 - GT subsystem for OS/2 compilers. | | +---gtos2 - GT subsystem for OS/2 platform.
| | | | | |
| | +---gtpca - GT subsystem for ANSI terminals. | | +---gtpca - GT subsystem for ANSI terminals.
| | | | | |
@@ -124,11 +123,11 @@ Follow are the various directories that exist under the Harbour tree.
| +---vm - Harbour Virtual Machine and internal Run-Time | +---vm - Harbour Virtual Machine and internal Run-Time
| | library functions. | | library functions.
| | | |
| +---mainstd - mainstd library for MinGW build. | +---mainstd - mainstd helper library.
| | | |
| +---mainwin - mainwin library for MinGW build. | +---mainwin - mainwin helper library.
| | | |
| +---vmmt - GNU Makefile for creating the multithreaded version | +---vmmt - GNU Makefile for creating the multi-threaded version
| of the VM library. | of the VM library.
| |
+---tests - Test programs. +---tests - Test programs.
@@ -138,7 +137,7 @@ Follow are the various directories that exist under the Harbour tree.
| | | |
| +---hbpptest - Regression tests for the preprocessor. | +---hbpptest - Regression tests for the preprocessor.
| | | |
| +---mt - Various multithreading tests. | +---mt - Various multi-threading tests.
| | | |
| +---multifnc - Overloading C functions test. | +---multifnc - Overloading C functions test.
| | | |

View File

@@ -1,18 +1,18 @@
INTRODUCTION INTRODUCTION
============ ============
This file explains the philosophy for the GNU-make based build system This file explains the philosophy for the GNU Make based build system
for Harbour, and gives instructions on how to use it. for Harbour, and gives instructions on how to use it.
PHILOSOPHY PHILOSOPHY
========== ==========
This build system is based on GNU-make, the idea being that GNU-make This build system is based on GNU Make, the idea being that GNU Make
is freely available for every platform you can dream up, and it is is free software, available for every platform you can dream up, and it is
usually more powerful than any native make. usually more powerful than any native make.
Each directory in the project contains one makefile, called Makefile, Each directory in the project contains one Makefile, called Makefile,
which lists the data (file names, directory names, etc.) that is used which lists the data (file names, directory names, etc.) that is used
to determine how to bring every target up to date within that to determine how to bring every target up to date within that
directory. There are no rules in the Makefiles, to keep them directory. There are no rules in the Makefiles, to keep them
@@ -23,7 +23,6 @@ For example, the following was the Makefile for an early version
of the VM library: of the VM library:
-- Cut here --------------------------------------- -- Cut here ---------------------------------------
ROOT := ../../ ROOT := ../../
C_SOURCES := \ C_SOURCES := \
@@ -51,7 +50,6 @@ What this means is:
Let's look at another Makefile, this one for the Harbour compiler: Let's look at another Makefile, this one for the Harbour compiler:
-- Cut here --------------------------------------- -- Cut here ---------------------------------------
ROOT := ../../ ROOT := ../../
YACC_SOURCE := harbour.y YACC_SOURCE := harbour.y
@@ -113,8 +111,8 @@ files compiled with gcc). This has two advantages:
USAGE USAGE
===== =====
To use the system, you need to install GNU-make 3.81 or later on your To use the system, you need to install GNU Make 3.81 or later on your
system. To check this, type "make -v"; you should see system. To check this, type `make -v`; you should see
GNU Make 3.81 GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc. Copyright (C) 2006 Free Software Foundation, Inc.
@@ -123,63 +121,47 @@ system. To check this, type "make -v"; you should see
Then, you must set a couple of environment variables that indicate Then, you must set a couple of environment variables that indicate
your platform and compiler. your platform and compiler.
For gcc on Windows with the Cygwin library: For MinGW (GCC port for Windows):
Notes: The CYGWIN environment variable must include "noglob" in order
to avoid having Harbour or programs created with Harbour expand
wildcard command line arguments (this is checked at run-time!)
HB_PLATFORM win
HB_COMPILER gcc
CYGWIN noglob
For gcc on Windows with the MinGW library:
HB_PLATFORM win HB_PLATFORM win
HB_COMPILER mingw HB_COMPILER mingw
For MSVC on Windows: For MSVC on Windows:
Notes: gnu make is case sensitive! If your editor converts Notes: GNU Make is case sensitive! If your editor converts
harbour.c to HARBOUR.C when it saves the file, then gnu make harbour.c to HARBOUR.C when it saves the file, then GNU Make
_will_not_work. _will_not_work.
If you have MAKE_MODE in your dos environment, make sure it is If you have MAKE_MODE in your dos environment, make sure it is
not set to unix not set to Unix
For best results, also set: For best results, also set:
HB_PLATFORM win HB_PLATFORM win
HB_COMPILER msvc HB_COMPILER msvc
For GCC on BSD:
HB_PLATFORM bsd
HB_COMPILER gcc
Notes:
1) You have to have bison and gmake installed in order to build
Harbour for BSD. The file doc/howtobsd.txt gives an overview
of what is required.
For GCC on Linux: For GCC on Linux:
HB_PLATFORM linux HB_PLATFORM linux
HB_COMPILER gcc HB_COMPILER gcc
Notes:
1) If you want to take advantage of compiler cache programs Note: If you want to take advantage of compiler cache programs
(such as http://ccaache.samba.org), you may set environment (such as https://ccache.samba.org), you may set environment
variable HB_CCACHE with the value containing the name of program. variable HB_CCACHE with the value containing the name of program.
For GCC on BSD:
HB_PLATFORM bsd
HB_COMPILER gcc
Note: You have to have bison and gmake installed in order to build
Harbour for BSD. The file doc/howtobsd.txt gives an overview
of what is required.
For GCC on OS/2 for VIO mode: For GCC on OS/2 for VIO mode:
Note: You must point C_INCLUDE_PATH to the EMX include directory and Note: You must point C_INCLUDE_PATH to the EMX include directory and
you must also point LIBRARY_PATH to the EMX library directory. you must also point LIBRARY_PATH to the EMX library directory.
HB_PLATFORM os2 HB_PLATFORM os2
HB_COMPILER gcc HB_COMPILER gcc
For Borland C++
HB_PLATFORM win
HB_COMPILER bcc
For DJGPP (GCC port for MS-DOS) For DJGPP (GCC port for MS-DOS)
HB_PLATFORM dos HB_PLATFORM dos
HB_COMPILER djgpp HB_COMPILER djgpp
For Watcom C/C++ 10.x (default Makefile creates DOS4G extender executables)
HB_PLATFORM dos
HB_COMPILER watcom
The most used targets are these: The most used targets are these:
* all: Same as typing "make" without arguments. It will usually try to * all: Same as typing "make" without arguments. It will usually try to
@@ -197,8 +179,8 @@ See README.md about details.
You can build and/or run any program in tests/working by using hbmk2 You can build and/or run any program in tests/working by using hbmk2
and hbrun. For example, 'hbmk2 scroll.prg -run' will build the scroll.prg and hbrun. For example, `hbmk2 scroll.prg -run` will build the scroll.prg
program and then run it. 'hbrun scroll.prg' will run the program as program and then run it. `hbrun scroll.prg` will run the program as
a script. You can also pass parameters to the program. For example, a script. You can also pass parameters to the program. For example,
'hbrun readfile.prg harbour.ini' will rebuild the readfile.prg program `hbrun readfile.prg harbour.ini` will rebuild the readfile.prg program
and run it with 'harbour.ini' as a command line parameter. and run it with `harbour.ini` as a command-line parameter.

View File

@@ -14,7 +14,7 @@ implementation of the _gt functions. These are functions named with
gtxxxxxx convention and are called by the _gt functions in gtapi.c. gtxxxxxx convention and are called by the _gt functions in gtapi.c.
I've provided the following files to implement the console functions: I've provided the following files to implement the console functions:
gtdos.c - MS-DOS implemenation gtdos.c - MS-DOS implementation
gtwin.c - Windows implementation gtwin.c - Windows implementation
gtos2.c - OS/2 implementation gtos2.c - OS/2 implementation
gtxxx.c - Generic template for implementation gtxxx.c - Generic template for implementation
@@ -22,7 +22,7 @@ gtxxx.c - Generic template for implementation
If you wish to port the gt functions to another platform, just take the If you wish to port the gt functions to another platform, just take the
gtxxx.c and populate it with calls to your OSes functions. Call the file gtxxx.c and populate it with calls to your OSes functions. Call the file
something appropriate (gtmac.c, gtnext.c or whatever) and add it to something appropriate (gtmac.c, gtnext.c or whatever) and add it to
that platforms makefile. that platforms Makefile.
The API supports a dozen or so compilers on three platforms. You only The API supports a dozen or so compilers on three platforms. You only
have to change the gtxxx.c files to implement your platform. have to change the gtxxx.c files to implement your platform.
@@ -40,19 +40,19 @@ directly anyway. Just compile gtapi.c alone with a #define of TEST to see
the output (or build a PRG test if you want). the output (or build a PRG test if you want).
You must include gtapi.c and one of the platform implementation files You must include gtapi.c and one of the platform implementation files
to compile sucessfully! to compile successfully!
There are exceptions for various compilers in the platform implementation There are exceptions for various compilers in the platform implementation
files so if you're using a compiler that doesn't support certain routines files so if you're using a compiler that doesn't support certain routines
or syntax just stick in your changes and surround it with an or syntax just stick in your changes and surround it with an
#if defined(__XXX__) call. `#if defined( __XXX__ )` call.
This is a complete set of gt functions as defined by Clipper. That is This is a complete set of gt functions as defined by Clipper. That is
there are no new _gt functions added. But this is not a complete there are no new _gt functions added. But this is not a complete
implementation. I do not know what _gtBegin or _gtEnd will do for implementation. I do not know what _gtBegin() or _gtEnd() will do for
instance. Yes, they buffer the display but what does that really mean instance. Yes, they buffer the display but what does that really mean
under the covers? Perhaps someone needs to implement a screen buffer under the covers? Perhaps someone needs to implement a screen buffer
to write to in order to achive this but the issue that immediately comes to write to in order to achieve this but the issue that immediately comes
to mind is how to initialize the size of this buffer? to mind is how to initialize the size of this buffer?
The files are attached but I will NOT be checking them into cvs for the The files are attached but I will NOT be checking them into cvs for the
@@ -63,20 +63,20 @@ overwrite someones code. If the author wants to remove his file and check
this in then be my guest. this in then be my guest.
2. This is my vision of how "I" think the gt API should be implemented. 2. This is my vision of how "I" think the gt API should be implemented.
Perhaps it isn't Antonio's or anyone elses so review it and if you feel Perhaps it isn't Antonio's or anyone else's so review it and if you feel
that it deserves being put into Harbour I'll leave that up to you. that it deserves being put into Harbour I'll leave that up to you.
TODO: TODO:
The following functions are not implemented in gtapi.c: The following functions are not implemented in gtapi.c:
_gtPostExt _gtPostExt()
_gtPreExt _gtPreExt()
_gtScroll _gtScroll()
_gtSetBlink _gtSetBlink()
_gtSetMode _gtSetMode()
The following functions don't work in gtapi.c: The following functions don't work in gtapi.c:
_gtSave _gtSave()
_gtRestore _gtRestore()
Two Harbour functions are included in the gtapi.c file, Two Harbour functions are included in the gtapi.c file,
Row() and Col() to get started. Row() and Col() to get started.
@@ -171,12 +171,15 @@ For example, compile this code:
/*** t.prg ***/ /*** t.prg ***/
REQUEST HB_GT_WIN REQUEST HB_GT_WIN
REQUEST HB_GT_WVT REQUEST HB_GT_WVT
PROCEDURE Main() PROCEDURE Main()
? hb_gtVersion(), hb_gtVersion( 1 ) ? hb_gtVersion(), hb_gtVersion( 1 )
Tone( 200, 3 ) Tone( 200, 3 )
Tone( 300, 3 ) Tone( 300, 3 )
Tone( 500, 3 ) Tone( 500, 3 )
Inkey( 0 ) Inkey( 0 )
RETURN RETURN
and link it as Windows GUI application. Then simply execute: and link it as Windows GUI application. Then simply execute:
@@ -213,19 +216,19 @@ driver in GUI application. You can even create mixed GUI/CUI code in one
program. program.
And finally, the Tone() function problem. And finally, the Tone() function problem.
Low level TONE code is part of GT driver. In the past, GUI libraries in Low-level Tone() code is part of GT driver. In the past, GUI libraries in
Windows were linked the whole GTWIN driver and only TONE were used. It Windows were linked the whole GTWIN driver and only Tone() were used. It
was possible because someone blocked GTWIN to work with application was possible because someone blocked GTWIN to work with application
linked as Windows GUI programs. Now, GTWIN can be used with any linked as Windows GUI programs. Now, GTWIN can be used with any
applications, and I do not want reduce its functionality. So GUI applications, and I do not want reduce its functionality. So GUI
libraries which needs TONE should have their own GT driver which will libraries which needs Tone() should have their own GT driver which will
support it. Now, such GT driver can also give much more features for support it. Now, such GT driver can also give much more features for
final users, because it allow to integrate GUI library with standard final users, because it allow to integrate GUI library with standard
Clipper screen functions. Clipper screen functions.
How to create such base GUI GT driver? How to create such base GUI GT driver?
See as example GTGUI in src/rtl/gtgui/gtgui.c See as example GTGUI in src/rtl/gtgui/gtgui.c
It supports only TONE and CLIPBOARD operations. It supports only Tone() and CLIPBOARD operations.
GUI libraries can use it or create other GT driver inheriting from GUI libraries can use it or create other GT driver inheriting from
this one. this one.
@@ -237,16 +240,16 @@ gtnul - base GT driver from which each other inherits.
It's present on all platforms and i always linked. It's present on all platforms and i always linked.
gtcgi - very simple GT driver which does not make any output gtcgi - very simple GT driver which does not make any output
formatting and simply send it as to stdout. formatting and simply send it as to STDOUT.
Supported by all platforms. Supported by all platforms.
gtstd - it uses stdout output but tries to support full screen output but gtstd - it uses STDOUT output but tries to support full screen output but
without collor support and cursor shape. It format text to number without color support and cursor shape. It format text to number
of row and columns if is able to detect these values on given of row and columns if is able to detect these values on given
platform. platform.
Supported by all platforms. Supported by all platforms.
gtpca - It's PCANSI terminal GT - it works in similar way to ANSI GT gtpca - It's PC-ANSI terminal GT - it works in similar way to ANSI GT
driver in Clipper though keyboard input is not fully supported. driver in Clipper though keyboard input is not fully supported.
Now GTTRM can make all GTPCA job and much more. Now GTTRM can make all GTPCA job and much more.
Supported by all platforms. Supported by all platforms.
@@ -258,7 +261,7 @@ gtdos - GT driver for MS-DOS - it uses BIOS and direct hardware screen output
Clipper compatible. Clipper compatible.
Supported only by MS-DOS builds. Supported only by MS-DOS builds.
gtos2 - GT driver for OS/2 - It's sth like GTWIN but for other OS. gtos2 - GT driver for OS/2 - It's similar to GTWIN but for another OS.
Supported only by OS/2 builds. Supported only by OS/2 builds.
gtwin - GT driver for MS-Windows console window. gtwin - GT driver for MS-Windows console window.
@@ -302,14 +305,14 @@ gtwvt - GT driver for MS-Windows. It creates its own GUI window
gtwvg - GUI emulation of GTWVT. It implements itself on top of GTWVT. gtwvg - GUI emulation of GTWVT. It implements itself on top of GTWVT.
GTWVG ( WVTGUI in xHarbour ) offers functions and classes to GTWVG ( WVTGUI in xHarbour ) offers functions and classes to
present a console application look like a windows one. present a console application look like a windows one.
It renderes GUI elements on top of Clipper elements It renders GUI elements on top of Clipper elements
( GETS, BROWSERS, BOXES, LINES ) which makes them ( GETS, BROWSERS, BOXES, LINES ) which makes them
feel like a Windows element. GTWVG can be used with existing feel like a Windows element. GTWVG can be used with existing
code just adding some more code but without sacrificing or code just adding some more code but without sacrificing or
modifying old one. modifying old one.
Also all IO commands can be rendered on top of the GUI elements Also all IO commands can be rendered on top of the GUI elements
gtxwc - GT driver for X-Window. It's like GTWVT but for nixes. gtxwc - GT driver for X-Window. It's like GTWVT but for nixes.
Additionaly it has set of predefined vector characters Additionally it has set of predefined vector characters
(box and arrow drawing characters) which can be used (box and arrow drawing characters) which can be used
instead of the one defined in font. It means that you instead of the one defined in font. It means that you
will have all boxes and arrows you know from MS-DOS and CP437 will have all boxes and arrows you know from MS-DOS and CP437
@@ -318,12 +321,12 @@ gtxwc - GT driver for X-Window. It's like GTWVT but for nixes.
for simple program which demonstrates it. for simple program which demonstrates it.
Supported by POSIX systems (mostly different *nixes) Supported by POSIX systems (mostly different *nixes)
gtalleg- GT driver which uses alegro library for input/output. gtalleg- GT driver which uses Allegro library for input/output.
It's also GUI driver which support HB_GFX*() drawing. It's also GUI driver which support HB_GFX*() drawing.
Multi platform, works on all platforms for which allegro Multi platform, works on all platforms for which allegro
library has been ported: MS-Win, MS-DOS, VESA, X11, FB, SDL, ... library has been ported: MS-Windows, MS-DOS, VESA, X11, FB, SDL, ...
gtgui - pseudo GT driver which adds to GTNUL Clipboard and Tone gtgui - pseudo GT driver which adds to GTNUL Clipboard and Tone()
functionality. If you are using some MS-Windows GUI library functionality. If you are using some MS-Windows GUI library
and you still want to use Tone() function or HB_GTI_CLIPBOARD and you still want to use Tone() function or HB_GTI_CLIPBOARD
actions then link this GT driver with your application. actions then link this GT driver with your application.

View File

@@ -3,12 +3,12 @@
A GT Slang driver for Harbour (gtsln) is based on a S-Lang library written A GT Slang driver for Harbour (gtsln) is based on a S-Lang library written
by John E. Davis. It was developed using Slang version 1.41, although prior by John E. Davis. It was developed using Slang version 1.41, although prior
versions of Slang up to 1.22 should also work, but they are not recomended versions of Slang up to 1.22 should also work, but they are not recommended
because of some bugs they have. because of some bugs they have.
The main OS it is developed to be used on is Linux. Slang was ported to The main OS it is developed to be used on is Linux. Slang was ported to
other OSes so it should be possible to use it on other systems too. I've other OSes so it should be possible to use it on other systems too. I've
also successfully compiled and testd gtsln under MS-DOS but I don't think it also successfully compiled and tested gtsln under MS-DOS but I don't think it
makes any sense to use it on that system instead of gtdos, due to its makes any sense to use it on that system instead of gtdos, due to its
limitations and incompatibilities with CA-Cl*pper (see below), so I removed limitations and incompatibilities with CA-Cl*pper (see below), so I removed
MS-DOS support. MS-DOS support.
@@ -16,7 +16,7 @@ MS-DOS support.
A gt Slang driver is a second driver which can be used on Unix based OSes. A gt Slang driver is a second driver which can be used on Unix based OSes.
The first one is a gt driver based on a curses library (gtcrs). Due to the The first one is a gt driver based on a curses library (gtcrs). Due to the
fact that curses is a standard library on Unix like systems, gtcrs should fact that curses is a standard library on Unix like systems, gtcrs should
be considerd as a primary gt driver for such OSes. be considered as a primary gt driver for such OSes.
@@ -24,12 +24,12 @@ Compiling a gt slang driver ...
-------------------------------- --------------------------------
The driver should be automaticly compiled when you build Harbour from The driver should be automatically compiled when you build Harbour from
sourcees, regardless of what gt driver you've chosen by setting HB_GT_LIB. sources, regardless of what gt driver you've chosen by setting HB_GT_LIB.
Succesfull compilation requires Slang library and Slang header files Successful compilation requires Slang library and Slang header files
properly installed on your system. The driver expects Slang header files properly installed on your system. The driver expects Slang header files
to be placed in <system_default_inc_dir>/slang/ directory on Linux based to be placed in <system_default_inc_dir>/slang/ directory on Linux based
systems ( this usualy means /usr/include/slang on most of them ) and systems ( this usually means /usr/include/slang on most of them ) and
<system_default_inc_dir> on other systems (which is usually /usr/include). <system_default_inc_dir> on other systems (which is usually /usr/include).
To build programs (by using a bld.sh script from Harbour sources), which To build programs (by using a bld.sh script from Harbour sources), which
@@ -54,25 +54,25 @@ It assumes national characters are placed in an upper 128 bytes of ASCII
table from a normal character set. "Normal" means not "alternate character table from a normal character set. "Normal" means not "alternate character
set" here, because "alternate character set" is generally used to display set" here, because "alternate character set" is generally used to display
graphics characters. It also assumes national characters can be entered graphics characters. It also assumes national characters can be entered
for example by pressing an ALTR key and a particular key on a keyboard to for example by pressing an <AltR> key and a particular key on a keyboard
get a desired national character. If this is impossible on some terminals to get a desired national character. If this is impossible on some terminals
due to their lack of posibilities, an alternate method which uses Dead due to their lack of possibilities, an alternate method which uses Dead
keys, is implemented. To be able to see and to enter national characters keys, is implemented. To be able to see and to enter national characters
one should : one should :
- have a proper font table loaded - have a proper font table loaded
- optionaly have a software installed to allow enter national characters - optionally have a software installed to allow enter national characters
in whatever way they should be entered in whatever way they should be entered
- have an environment variable HRBNATIONCHARS properly set (see below) - have an environment variable HRBNATIONCHARS properly set (see below)
- optionaly have a HRBNATIONDEADKEY defined (see below) - optionally have a HRBNATIONDEADKEY defined (see below)
An environment variable HRBNATIONCHARS should contain a list of character An environment variable HRBNATIONCHARS should contain a list of character
pairs. A first character from each pair sholud be a character from a lower pairs. A first character from each pair should be a character from a lower
128 bytes of ASCII table, which should be pressed after a Dead Key was 128 bytes of ASCII table, which should be pressed after a Dead Key was
pressed, to get a desired national character. The second character is a pressed, to get a desired national character. The second character is a
national character itself. Those pairs should be defined even if a Dead national character itself. Those pairs should be defined even if a Dead
key is not used (because a terminal supports other method of entering key is not used (because a terminal supports other method of entering
national characters - for example ALTR+letter). national characters - for example <AltR + letter>).
If a terminal does not support entering national characters by using an If a terminal does not support entering national characters by using an
ALT key (or the other similar) an environment variable HRBNATIONDEADKEY ALT key (or the other similar) an environment variable HRBNATIONDEADKEY
@@ -81,7 +81,7 @@ can be defined. It should contain a character which should be pressed
national character. national character.
The reason I am using HRBNATIONCHARS envvar is simple. I want to give a The reason I am using HRBNATIONCHARS envvar is simple. I want to give a
better graphics chars support when the same code is ocupied by a nation better graphics chars support when the same code is occupied by a nation
char and by a graphics char. Because on terminals there are usually two char and by a graphics char. Because on terminals there are usually two
glyph's character sets (normal and alternate) knowing nation's characters glyph's character sets (normal and alternate) knowing nation's characters
codes, I can switch to normal character set when a nation character code codes, I can switch to normal character set when a nation character code
@@ -104,7 +104,7 @@ This implementation works better than it would ever work in MS-DOS where
there is no way to do such tricks (because there is only one glyph's there is no way to do such tricks (because there is only one glyph's
character set without VGA tricks). character set without VGA tricks).
Using environment variables gives a configuration fexibility to Harbour Using environment variables gives a configuration flexibility to Harbour
programs for different users and different code pages. To change a code programs for different users and different code pages. To change a code
page one should only change HRBNATIONCHARS var (if a Dead key is used) page one should only change HRBNATIONCHARS var (if a Dead key is used)
and this can be done from a script which runs a Harbour program. and this can be done from a script which runs a Harbour program.
@@ -123,8 +123,8 @@ HRBNATIONCHARS should be defined as :
where AĄ is a first pair, CĆ is a second pair and so on where AĄ is a first pair, CĆ is a second pair and so on
Suppose also we are working on a terminal which does not allow to enter Suppose also we are working on a terminal which does not allow to enter
national characters by pressing ALTR+A, ALTR+C, ALTR+E. Because we like national characters by pressing <AltR+A>, <AltR+C>, <AltR+E>. Because we
a character '`' (\140 in octal), we arbitrary choose it as a Dead key. like a character '`' (\140 in octal), we arbitrary choose it as a Dead key.
So we define HRBNATIONDEADKEY as : So we define HRBNATIONDEADKEY as :
@@ -139,13 +139,13 @@ and so on. To get '`' character we need to double press `.
Limitations, incomatibilities with CA-Cl*pper, errors ... Limitations, incompatibilities with CA-Cl*pper, errors ...
-------------------------------------------------------- --------------------------------------------------------
The driver is rather limited in comparison to other Harbour gt drivers and The driver is rather limited in comparison to other Harbour gt drivers and
has many incompatibilities with CA-Cl*pper. Some of those limitations and in- has many incompatibilities with CA-Cl*pper. Some of those limitations and
compatibilities are caused by an Unix behavior, others are caused by a Slang incompatibilities are caused by an Unix behavior, others are caused by a Slang
implementation. There are also some caused by a gt layer design. Not to implementation. There are also some caused by a gt layer design. Not to
mention that there are probably some caused by my lack of knowledge. mention that there are probably some caused by my lack of knowledge.
@@ -158,17 +158,17 @@ Here is a (probably not complete) list of them :
fact the previous problem, just worded differently) fact the previous problem, just worded differently)
- you can't display characters with values below 32 (control characters). - you can't display characters with values below 32 (control characters).
It is a very important limitation because you can't use many usefull It is a very important limitation because you can't use many useful
chars which you used under CA-Cl*pper. This is an OS limitation which chars which you used under CA-Cl*pper. This is an OS limitation which
Slang also inherits Slang also inherits
- displaying chars above 128 widely depends on terminal posibilities. - displaying chars above 128 widely depends on terminal possibilities.
Because of this on xterm I set all frame chars to a single frame Because of this on xterm I set all frame chars to a single frame
(this means - double and mixed frames are shown as a single frame). (this means - double and mixed frames are shown as a single frame).
You should not expect to see chars above 128 shown properly in all You should not expect to see chars above 128 shown properly in all
cases. cases.
- a screen is automaticly cleared on program's startup (you can't inherit - a screen is automatically cleared on program's startup (you can't inherit
it from a system) and a cursor is set at 0,0 it from a system) and a cursor is set at 0,0
- when you run external programs a screen is restored after execution so - when you run external programs a screen is restored after execution so
@@ -176,8 +176,8 @@ Here is a (probably not complete) list of them :
programs programs
- you can't expect cursor hiding and cursor style changing to work at - you can't expect cursor hiding and cursor style changing to work at
all. Although on a textmode Linux console it works, this is a Linux all. Although on a text-mode Linux console it works, this is a Linux
textmode hack only and it is hardcoded. For example on xterm only text-mode hack only and it is hardcoded. For example on xterm only
cursor hiding works well. cursor hiding works well.
- it is not guaranteed that programs which use DispBegin() and DispEnd() - it is not guaranteed that programs which use DispBegin() and DispEnd()
@@ -195,7 +195,7 @@ Here is a (probably not complete) list of them :
- keyboard handling is VERY LIMITED. Generally you should not expect - keyboard handling is VERY LIMITED. Generally you should not expect
ALT+key, CTRL+F<n> and CTRL+<specialkeys> combinations to work at all ALT+key, CTRL+F<n> and CTRL+<specialkeys> combinations to work at all
although they work on a textmode Linux console. This is a very big although they work on a text-mode Linux console. This is a very big
problem and at least any solution should be developed to emulate this. problem and at least any solution should be developed to emulate this.
One attempt is a Dead key workaround I've implemented for national One attempt is a Dead key workaround I've implemented for national
characters and a Meta key to simulate Alt key. By default as a Meta characters and a Meta key to simulate Alt key. By default as a Meta
@@ -209,7 +209,7 @@ Here is a (probably not complete) list of them :
- currently there is no mouse support. This is a TODO item - currently there is no mouse support. This is a TODO item
- Out<XXX>() functions do not work well. This is caused by a design of - Out<XXX>() functions do not work well. This is caused by a design of
a gt layer where writing directly to stdout is done outside Slang, a gt layer where writing directly to STDOUT is done outside Slang,
so Slang can't maintain screen changes properly. so Slang can't maintain screen changes properly.
- redirecting Out<XXX>() to a file results in writing control chars - redirecting Out<XXX>() to a file results in writing control chars
@@ -226,9 +226,9 @@ Terminfo database ...
Slang gt driver is based on a terminfo database so it is very important to Slang gt driver is based on a terminfo database so it is very important to
have it properly set. Most problems are related to a broken terminfo file. have it properly set. Most problems are related to a broken terminfo file.
I don't have general advice about that. You are supposed to help yourself. I don't have general advice about that. You are supposed to help yourself.
The only thing you should know is that you must not have sequences for F11 The only thing you should know is that you must not have sequences for <F11>
and F12 function keys set in a terminfo file if you want to use SHFT+F<n> and <F12> function keys set in a terminfo file if you want to use <Shift+Fn>
and CTRL+F<n> keys (of course they all should be defined there). and <Ctrl+Fn> keys (of course they all should be defined there).
@@ -236,7 +236,7 @@ Why use gt slang driver ...
----------------------------- -----------------------------
Well, personaly I find only two reasons. When CA-Cl*pper compatibility and Well, personally I find only two reasons. When CA-Cl*pper compatibility and
current limitations are not a problem, gtsln is a little bit faster than current limitations are not a problem, gtsln is a little bit faster than
gtcrs and my experiences show that sometimes it works a little bit better gtcrs and my experiences show that sometimes it works a little bit better
than gtcrs on real terminals (tested on wy60 where gtcrs did not handle than gtcrs on real terminals (tested on wy60 where gtcrs did not handle
@@ -247,14 +247,14 @@ the keyboard well).
TODO TODO
------ ------
- keyboard emulation on terminals with lack of posibilities - keyboard emulation on terminals with lack of possibilities
- support for mouse on Linux text console and on xterm - support for mouse on Linux text console and on xterm
- fix a problem with redirecting output to a file or a pipe - fix a problem with redirecting output to a file or a pipe
- find a way to inherit screen from a system at startup - find a way to inherit screen from a system at startup
(is it possible at all ?) (is it possible at all ?)
- sound support on Linux using native sound system (Alsa ?) - sound support on Linux using native sound system (Alsa ?)
- support for sound on other systems than Linux - support for sound on other systems than Linux
- fix working on monochorme terminals - fix working on monochrome terminals
- add a PC video card hardware emulation - add a PC video card hardware emulation
@@ -263,5 +263,5 @@ TODO
PS. PS.
I want to appologize for any english errors I want to apologize for any English errors
and any technical errors in this text. and any technical errors in this text.

View File

@@ -48,6 +48,8 @@ HEADER EXAMPLES
=============== ===============
/* $DOC$ /* $DOC$
$AUTHOR$
Copyright YYYY FirstName LastName <me@example.org>
$NAME$ $NAME$
IsLeapYr() IsLeapYr()
$CATEGORY$ $CATEGORY$
@@ -87,6 +89,8 @@ HEADER EXAMPLES
*/ */
/* $DOC$ /* $DOC$
$AUTHOR$
Copyright YYYY FirstName LastName <me@example.org>
$TEMPLATE$ $TEMPLATE$
Function Function
$NAME$ $NAME$

View File

@@ -8,13 +8,13 @@ By Przemyslaw Czerpak (druzus/at/priv.onet.pl)
with the above unused empty directories will be removed with the above unused empty directories will be removed
from your repository copy. from your repository copy.
Please check if all your files are unmodified. You can redirect Please check if all your files are unmodified. You can redirect
stdout output from cvs command to a file to see if all files are STDOUT output from cvs command to a file to see if all files are
exactly the same. exactly the same.
2. Update files which contain harbour release number. Now these are: 2. Update files which contain Harbour release number. Now these are:
harbour.spec harbour.spec
include/hbver.h include/hbver.h
3. Set proper release date in NEWS (found as doc/oldnews.txt) and 3. Set proper release date in NEWS (found as doc/oldnews.txt) and
if necessary update release informations. Also add the exact if necessary update release information. Also add the exact
tag name to this file, for example "tag: build46". tag name to this file, for example "tag: build46".
4. Update ChangeLog.txt and commit your modifications. 4. Update ChangeLog.txt and commit your modifications.
5. Update hbver.h with ChangeLog.txt file ID and your last entry ID. 5. Update hbver.h with ChangeLog.txt file ID and your last entry ID.

View File

@@ -14,36 +14,40 @@ Content
========================================================= =========================================================
by Viktor Szakats by Viktor Szakats
1) Read the Harbour README.md, monitor the development mailing list, 1. Read the Harbour README.md, monitor the development mailing list,
consult with the developers, make contributions. This way your chances consult with the developers, make contributions. This way your chances
are high to get a R/W access to the repository. are high to get a R/W access to the repository.
2) Before uploading anything you'll need push permission for the 2. Before uploading anything you'll need push permission for the
Harbour Git server. To get this please make a request on the development Harbour Git server. To get this please make a request on the development
list. Note that getting Developer status is not an automatic process. list. Note that getting Developer status is not an automatic process.
3) You'll need an Git client for your platform. 2. You'll need an Git client for your platform.
4) Do a 'git clone' to get your own local development Git repository. 3. Do a 'git clone' to get your own local development Git repository.
1.2 Here's how to upload your changes to the Git server 1.2 Here's how to upload your changes to the Git server
======================================================= =======================================================
by Viktor Szakats by Viktor Szakats
1) Make the changes in the source 1. Make the changes in the source
2) Do a 'git pull' 2. Do a 'git pull'
3) Resolve any conflicts 3. Resolve any conflicts
4) Run 'hbrun bin/commit' to check any commit pre-checks 4. Run 'hbrun bin/commit' to check any commit pre-checks
and to create new ChangeLog.txt entry template and to create new ChangeLog.txt entry template
5) Edit ChangeLog.txt with a text editor (do not use notepad.exe) 5. Edit ChangeLog.txt with a text editor (do not use notepad.exe)
6) Copy the last ChangeLog.txt entry to the clipboard 6. Copy the last ChangeLog.txt entry to the clipboard
If it's a single atomic change, it's better to copy only If it's a single atomic change, it's better to copy only
the description itself without the entry header and list the description itself without the entry header and list
of files. of files.
7) Do a 'git commit [-a]' 7. Do a 'git commit [-a]'
8) Paste clipboard content to the text editor that popped up 8. Paste clipboard content to the text editor that popped up
9) Save and exit in editor 9. Save and exit in editor
10) Git is now committing 10. Git is now committing
11) Do a 'git push' to publish your changes online to the 11. Do a 'git push' to publish your changes online to the
master repository master repository
NOTE:
- Run once 'git config --global core.autocrlf true' on Windows
- Run once 'git config --global core.autocrlf input' on *nix
1.3 Here's how to format your ChangeLog.txt entries 1.3 Here's how to format your ChangeLog.txt entries
=================================================== ===================================================
by Viktor Szakats by Viktor Szakats
@@ -54,11 +58,24 @@ by Viktor Szakats
Describe what you've changed, the reasons, and other comments Describe what you've changed, the reasons, and other comments
and explanations you find useful. and explanations you find useful.
- To refer to a commit, simply include the commit hash in the
text. If you refer to a commit in another fork,
include the whole (GitHub) URL of the commit.
- To refer to an issue, include issue number prefixed with
a # character. If you include the word "fixes", "fixed"
or similar, the issue will automatically be closed.
See more here:
https://help.github.com/articles/writing-on-github#references
- In case of incompatible changes visible on the user-level, - In case of incompatible changes visible on the user-level,
add the word 'INCOMPATIBLE' to the text. add the word 'INCOMPATIBLE' to the text.
- Mark comments suggesting further fixes with 'TOFIX: ', further - In case some translatable strings have changed,
todos as 'TODO: ', and update these to '[DONE]' when implemented. add the word '[TRANSLATION]' to the text.
- Mark comments suggesting further fixes with 'FIXME: ', further
TODOs as 'TODO: ', and update these to '[DONE]' when implemented.
- Mark changes to merge with different branch as '[TOMERGE x.0]'. - Mark changes to merge with different branch as '[TOMERGE x.0]'.
Changes these to '[MERGED x.0]' when merge is completed. Changes these to '[MERGED x.0]' when merge is completed.
@@ -68,13 +85,13 @@ by Viktor Szakats
1.4 Here's how to use the Git server in read-only mode 1.4 Here's how to use the Git server in read-only mode
====================================================== ======================================================
git clone git://github.com/harbour/core.git harbour-core git clone https://github.com/harbour/core.git harbour-core
1.5 Things to do to avoid damaging the Git repository 1.5 Things to do to avoid damaging the Git repository
===================================================== =====================================================
by David G. Holm by David G. Holm
1) Always do your Harbour development using your local source tree. Do not 1. Always do your Harbour development using your local source tree. Do not
do your development outside your local source tree and then copy your do your development outside your local source tree and then copy your
changes into your local source tree to commit them, because that leads changes into your local source tree to commit them, because that leads
easily to accidentally overwriting changes made by others, because easily to accidentally overwriting changes made by others, because
@@ -83,7 +100,7 @@ by David G. Holm
your local source tree, changes made by others will be merged with your your local source tree, changes made by others will be merged with your
changes and you only need to recompile and retest before committing. changes and you only need to recompile and retest before committing.
2) Always run 'git pull' from the 'harbour' directory before you run 2. Always run 'git pull' from the 'harbour' directory before you run
'git commit'. Run 'hbmk2 bin/commit' before committing, which will 'git commit'. Run 'hbmk2 bin/commit' before committing, which will
create a new entry at the top of ChangeLog.txt, which you can then create a new entry at the top of ChangeLog.txt, which you can then
edit with the description of changes. edit with the description of changes.
@@ -99,7 +116,7 @@ by David G. Holm
and the commit. and the commit.
[ Copyright (c) 1999-2013 Viktor Szakats (vszakats.net/harbour) [ Copyright (c) 1999-2014 Viktor Szakats (vszakats.net/harbour)
Licensed under Creative Commons Attribution-ShareAlike 3.0: Licensed under Creative Commons Attribution-ShareAlike 4.0:
http://creativecommons.org/licenses/by-sa/3.0/ https://creativecommons.org/licenses/by-sa/4.0/
See COPYING.txt. ] See LICENSE.txt. ]

View File

@@ -10,7 +10,7 @@ They can be emulated by fcntl() or flock() locks. Harbour uses flock()
in systems where it does not create conflicts with fcntl() locks used in systems where it does not create conflicts with fcntl() locks used
to synchronize file access by different processes in shared mode. to synchronize file access by different processes in shared mode.
Currently it's enabled by default only in Linux (tests with *BSD systems Currently it's enabled by default only in Linux (tests with *BSD systems
and MacOSX showed that it interacts with fcntl locks causing deadlocks). and macOS showed that it interacts with fcntl locks causing deadlocks).
On other POSIX systems Harbour uses fcntl() read and write locks at On other POSIX systems Harbour uses fcntl() read and write locks at
address 0x7fffffff (size 1) to simulate shared and exclusive mode. address 0x7fffffff (size 1) to simulate shared and exclusive mode.
@@ -126,13 +126,13 @@ CDX WRITE LOCK: @0xfffeffff : 0x10001
prepare the index modification in memory and before writing to prepare the index modification in memory and before writing to
index file lock @0xffff0000 : 0x10000 index file lock @0xffff0000 : 0x10000
to eliminate starvation effect caused by many readers to eliminate starvation effect caused by many readers
on each 16-th read lock reading process tries to lock write on each 16th read lock reading process tries to lock write
area @0xfffeffff : 1 instead and then sets normal read lock area @0xfffeffff : 1 instead and then sets normal read lock
In Harbour it's DB_DBFLOCK_COMIX. In Harbour it's DB_DBFLOCK_COMIX.
HARBOUR 32-bit locking Harbour 32-bit locking
====================== ======================
all locks are exclusive (*), in index shared locks are emulated all locks are exclusive (*), in index shared locks are emulated
@@ -148,13 +148,13 @@ CDX WRITE LOCK: @0xfffeffff : 0x10001
prepare the index modification in memory and before writing to prepare the index modification in memory and before writing to
index file lock @0xffff0000 : 0x10000 index file lock @0xffff0000 : 0x10000
to eliminate starvation effect caused by many readers to eliminate starvation effect caused by many readers
on each 16-th read lock reading process tries to lock write on each 16th read lock reading process tries to lock write
area @0xfffeffff : 1 instead and then sets normal read lock area @0xfffeffff : 1 instead and then sets normal read lock
In Harbour it's DB_DBFLOCK_HB32. In Harbour it's DB_DBFLOCK_HB32.
HARBOUR 64-bit locking Harbour 64-bit locking
====================== ======================
all locks are exclusive (*), in index shared locks are emulated all locks are exclusive (*), in index shared locks are emulated
@@ -170,7 +170,7 @@ CDX WRITE LOCK: @0x7fffffff00000000 : 0x10001
prepare the index modification in memory and before writing to prepare the index modification in memory and before writing to
index file lock @0x7fffffff00000001 : 0x10000 index file lock @0x7fffffff00000001 : 0x10000
to eliminate starvation effect caused by many readers to eliminate starvation effect caused by many readers
on each 16-th read lock reading process tries to lock write on each 16th read lock reading process tries to lock write
area @0x7fffffff00000000 : 1 instead and then sets normal read lock area @0x7fffffff00000000 : 1 instead and then sets normal read lock
In Harbour it's DB_DBFLOCK_HB64. In Harbour it's DB_DBFLOCK_HB64.

View File

@@ -1,12 +1,11 @@
/* This work is licensed under the Creative Commons Attribution-ShareAlike /* This work is licensed under the Creative Commons Attribution-ShareAlike
License. To view a copy of this license, visit 4.0 International License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to https://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305,
USA. A summary of the license and the full legal text is included USA. A summary of the license and the full legal text is included
in file: LICENSE.txt. If you wish to distribute some or all of this in file: LICENSE.txt. If you wish to distribute some or all of this
work under different terms, please contact respective author(s). work under different terms, please contact respective author(s).
The license applies to all entries on or after Version 1.1.0. The license applies to all entries on or after Version 1.1.0. */
*/
Version 3.0.0 (2011-07-17) Version 3.0.0 (2011-07-17)
@@ -61,7 +60,7 @@ General
- HB_PLATFORM=w32 -> HB_PLATFORM=win - HB_PLATFORM=w32 -> HB_PLATFORM=win
- CCPATH -> HB_CCPREFIX - CCPATH -> HB_CCPREFIX
- CCPREFIX -> HB_CCPATH - CCPREFIX -> HB_CCPATH
- GNU-make system revised to give optimal support -j<n> - GNU Make system revised to give optimal support -j<n>
multi-threaded parallel builds, which can dramatically multi-threaded parallel builds, which can dramatically
increase build speed in multi-core/multi-CPU systems. increase build speed in multi-core/multi-CPU systems.
- HB_WINCE -> HB_OS_WIN_CE - HB_WINCE -> HB_OS_WIN_CE
@@ -76,7 +75,7 @@ General
(old ones still work for compatibility, but please (old ones still work for compatibility, but please
switch your code to use the new ones) switch your code to use the new ones)
- Fixed dynamic library creation on Solaris OSes. - Fixed dynamic library creation on Solaris OSes.
- hbrun will now open .dbf files when passed on the command line. - hbrun will now open .dbf files when passed on the command-line.
- Added web-server written in Harbour: uHTTPD - Added web-server written in Harbour: uHTTPD
- POCC WinCE builds are now supported. - POCC WinCE builds are now supported.
- Open Watcom 1.8 (RC3) compiler is now supported. - Open Watcom 1.8 (RC3) compiler is now supported.
@@ -91,7 +90,6 @@ General
compatibility, you can turn it off manually by #defining compatibility, you can turn it off manually by #defining
HB_LEGACY_OFF. (HB_USER_CFLAGS=-DHB_LEGACY_OFF) HB_LEGACY_OFF. (HB_USER_CFLAGS=-DHB_LEGACY_OFF)
- New Harbour homepage, thanks to Vailton Renato. - New Harbour homepage, thanks to Vailton Renato.
http://harbour-project.org/
- GNU Make system now supports parallel builds. - GNU Make system now supports parallel builds.
(needs GNU Make newer than 3.79.1) (needs GNU Make newer than 3.79.1)
- GNU Make system allows to install in Harbour source tree on all platforms. - GNU Make system allows to install in Harbour source tree on all platforms.
@@ -110,7 +108,7 @@ General
Harbour on Windows, so this is now a requirement for a proper build. Harbour on Windows, so this is now a requirement for a proper build.
- hb-mkslib.sh renamed to hb-mkdyn.sh. Old name stil works, but it's - hb-mkslib.sh renamed to hb-mkdyn.sh. Old name stil works, but it's
now deprecated. now deprecated.
- x64 msvc compiler got a distinct HB_COMPILER value: msvc64. - x86_64 msvc compiler got a distinct HB_COMPILER value: msvc64.
- msvcce compiler made compatible with older MSVC/WinCE versions. - msvcce compiler made compatible with older MSVC/WinCE versions.
- Added support for Intel(R) C++ compiler (icc) on Linux and Windows. - Added support for Intel(R) C++ compiler (icc) on Linux and Windows.
- Added new README.md document giving a quick describing of the build - Added new README.md document giving a quick describing of the build
@@ -127,7 +125,7 @@ General
- Cygwin renamed from gcc to cygwin. (NOTE: Cygwin doesn't work since - Cygwin renamed from gcc to cygwin. (NOTE: Cygwin doesn't work since
some versions, and support may be removed in the future.) some versions, and support may be removed in the future.)
- Fixed #pragma -k? options to be case-insensitive. - Fixed #pragma -k? options to be case-insensitive.
- Explicitly bind system libraries with harbour shared library. - Explicitly bind system libraries with Harbour shared library.
RPM/DEB packages should automatically detect these dependencies. RPM/DEB packages should automatically detect these dependencies.
- Warning cleanup (minors) for Intel compiler. - Warning cleanup (minors) for Intel compiler.
- Pelles C workarounds for compiler bugs. - Pelles C workarounds for compiler bugs.
@@ -211,8 +209,8 @@ Core
- Added hb_osDecode(), hb_osEncode() C APIs. - Added hb_osDecode(), hb_osEncode() C APIs.
- hb_GetEnv() extended with 3rd parameter to control OS codepage - hb_GetEnv() extended with 3rd parameter to control OS codepage
conversion (on by default). conversion (on by default).
- Added CPU dump support for AMD64/x64. - Added CPU dump support for AMD64/x86_64.
- Added module listing on GPF for x86 and x64. - Added module listing on GPF for x86 and x86_64.
- GTXWC potential GPF fixed. - GTXWC potential GPF fixed.
- Added process handling: - Added process handling:
hb_processOpen(), hb_processValue(), hb_processClose() hb_processOpen(), hb_processValue(), hb_processClose()
@@ -263,7 +261,7 @@ Core
- Added Windows 7 and Server 2008 R2 version detection. - Added Windows 7 and Server 2008 R2 version detection.
- Replaced old hbmk.bat, hbmk bash script and Harbour Make tool with - Replaced old hbmk.bat, hbmk bash script and Harbour Make tool with
portable make tool written in Harbour: hbmk. This tool can create portable make tool written in Harbour: hbmk. This tool can create
a Harbour executable on any platforms using minimal effort. It autodetects a Harbour executable on any platforms using minimal effort. It auto-detects
OS and compiler environment. Support script and parameter files, OS and compiler environment. Support script and parameter files,
can act as a linker, C compiler, Harbour compiler, static and dynamic can act as a linker, C compiler, Harbour compiler, static and dynamic
library creator, resource compiler (on Windows). Core features are library creator, resource compiler (on Windows). Core features are
@@ -284,7 +282,7 @@ Core
Harbour help screen. Harbour help screen.
- Added support for reading FoxPro .mem files - Clipper compatibility. - Added support for reading FoxPro .mem files - Clipper compatibility.
- Fixed very old bug which disabled writing to .mem files strings - Fixed very old bug which disabled writing to .mem files strings
longer then 32Kb. longer then 32 KiB.
- hbrun now accepts .dbf file as paramater, which it will open after startup. - hbrun now accepts .dbf file as paramater, which it will open after startup.
- hbrun now accepts -v option which makes it display its own version after - hbrun now accepts -v option which makes it display its own version after
startup. startup.
@@ -294,7 +292,7 @@ Core
- Fixed __M[V]CLEAR()/ __M[V]RESTORE() to be exactly Clipper compatible - Fixed __M[V]CLEAR()/ __M[V]RESTORE() to be exactly Clipper compatible
and do not release PUBLIC GetList value. and do not release PUBLIC GetList value.
- bcc compiler in GNU Make now supports older Windows NT with limited - bcc compiler in GNU Make now supports older Windows NT with limited
command line length. command-line length.
- Removed support for following compilers: - Removed support for following compilers:
dos/bcc16, dos/rsx32, win/dmc, win/rsxnt, os2/icc, win/icc (IBM). dos/bcc16, dos/rsx32, win/dmc, win/rsxnt, os2/icc, win/icc (IBM).
- Fixed static variables indexes in the generated PCODE when static - Fixed static variables indexes in the generated PCODE when static
@@ -307,10 +305,10 @@ Core
In such case "(_INITSTATICS)" is used as function name. In such case "(_INITSTATICS)" is used as function name.
Without it debugger does not register entering such codeblocks and Without it debugger does not register entering such codeblocks and
GPFs. GPFs.
- Added support for automatic adding 1-st function with the same name - Added support for automatic adding 1st function with the same name
as compiled .prg file if some code statements are used before 1-st as compiled .prg file if some code statements are used before 1st
function/procedure declared explicitly in .prg file. Such mode can function/procedure declared explicitly in .prg file. Such mode can
be enabled by -n2 new harbour compiler switch. This switch is used be enabled by -n2 new Harbour compiler switch. This switch is used
by default by new hbmk tool. by default by new hbmk tool.
- speedtst updated to work with CA-Cl*pper. - speedtst updated to work with CA-Cl*pper.
- Added protection against pushing new private variable on HVM stack - Added protection against pushing new private variable on HVM stack
@@ -351,8 +349,8 @@ Contrib
- hbtip FTP handling fixed some accidental typos. - hbtip FTP handling fixed some accidental typos.
- hbtip new MIME types. - hbtip new MIME types.
- hbtip fixes and optimization to HB_BASE64(). - hbtip fixes and optimization to HB_BASE64().
- rddads now autodetects version 9.10. - rddads now auto-detects version 9.10.
- hbct XToC(), FToC() and CToF() fixed to be properly multiplatform. - hbct XToC(), FToC() and CToF() fixed to be properly multi-platform.
- hbct unbuffered drawing speed improvement in windowing code. - hbct unbuffered drawing speed improvement in windowing code.
- hbct DirName() fixed. - hbct DirName() fixed.
- hbct other fixes. - hbct other fixes.
@@ -361,7 +359,7 @@ Contrib
- hbwin made steps towards creating a unified Windows API wrapper layer. - hbwin made steps towards creating a unified Windows API wrapper layer.
- Added hbcrypt, hbssl and rddsql (with mysql, pgsql, fbsql plugins) - Added hbcrypt, hbssl and rddsql (with mysql, pgsql, fbsql plugins)
to contribs. to contribs.
- hbct windowing extended with new low level API, better shadow - hbct windowing extended with new low-level API, better shadow
handling. handling.
- gtwvg lots of improvements. - gtwvg lots of improvements.
- gtwvg Xbase++ compatible UI objects. - gtwvg Xbase++ compatible UI objects.
@@ -469,7 +467,7 @@ General
- Several code quality enhancements, warning fixes. - Several code quality enhancements, warning fixes.
- Doc quality fixes, formatting. - Doc quality fixes, formatting.
- Fixed so that build-time PRG_USR always overrides default - Fixed so that build-time PRG_USR always overrides default
options in GNU-make. options in GNU Make.
- Added openSUSE package requirements to doc/linux1st.txt. - Added openSUSE package requirements to doc/linux1st.txt.
- Unnecessary compiler options and lib dependencies cleaned - Unnecessary compiler options and lib dependencies cleaned
from build processes. from build processes.
@@ -508,14 +506,14 @@ General
instructions in make_vc.bat, how to initiate a WinCE build. instructions in make_vc.bat, how to initiate a WinCE build.
- Now Harbour is able to build and run properly in MSVC C mode - Now Harbour is able to build and run properly in MSVC C mode
in AMD64 (64-bit) mode. in AMD64 (64-bit) mode.
- Added experimental Pelles C WinCE GNU-make file. It doesn't - Added experimental Pelles C WinCE GNU Make file. It doesn't
yet work properly. yet work properly.
- Post batch file called from core non-GNU make files was - Post batch file called from core non-GNU make files was
renamed, please update your system if you're using them: renamed, please update your system if you're using them:
exit_err.bat -> hbmkpost.bat exit_err.bat -> hbmkpost.bat
- Added experimental MSVC WinCE GNU-make file. - Added experimental MSVC WinCE GNU Make file.
- Added Darwin autodetection to non-GNU .sh make files. - Added Darwin auto-detection to non-GNU .sh make files.
- Changed GNU-make name of MinGW WinCE compiler (HB_COMPILER) - Changed GNU Make name of MinGW WinCE compiler (HB_COMPILER)
from 'cemgw' to 'mingwce'. Please update your system, if from 'cemgw' to 'mingwce'. Please update your system, if
you've been using this directly (and not via make_*ce.sh scripts). you've been using this directly (and not via make_*ce.sh scripts).
- Memory statistics module now turned off by default for optimal - Memory statistics module now turned off by default for optimal
@@ -602,7 +600,7 @@ Core
- Fixed GPFs and leaks when using Harbour compiler -w3 switch. - Fixed GPFs and leaks when using Harbour compiler -w3 switch.
- Bad workaround added for Pelles C 5.00.1 in AMD64 mode to - Bad workaround added for Pelles C 5.00.1 in AMD64 mode to
compile the Harbour 'inet' subsystem. It won't properly compile the Harbour 'inet' subsystem. It won't properly
work, but it lets build the rest of Harbour (like hbrun.exe). work, but it lets build the rest of Harbour (like hbrun executable).
- PCRE lib upgraded to 7.8 (from 7.7) - PCRE lib upgraded to 7.8 (from 7.7)
- Fixed dbInfo( DBI_POSITIONED ) returned value. - Fixed dbInfo( DBI_POSITIONED ) returned value.
- Fixed internal error in dirty index reading. - Fixed internal error in dirty index reading.
@@ -623,7 +621,7 @@ Contrib
- gtalleg fixed to compile under several non-*nix platforms - gtalleg fixed to compile under several non-*nix platforms
(still needs more work). (still needs more work).
- xhb: hb_ArrayBlock() compatibility function added. - xhb: hb_ArrayBlock() compatibility function added.
- hbnf ft_GetE() function bad leak fixed on Win32 systems, - hbnf ft_GetE() function bad leak fixed on Windows systems,
and potential GPF on all systems. and potential GPF on all systems.
- hbwhat32 removed wintypes.ch header. Header with the same - hbwhat32 removed wintypes.ch header. Header with the same
name and identical content can be found in xhb contrib. name and identical content can be found in xhb contrib.
@@ -665,7 +663,7 @@ Contrib
other when building them using the non-GNU make system. other when building them using the non-GNU make system.
- Former hbwhat32 lib added to the default contrib list - Former hbwhat32 lib added to the default contrib list
under the name of hbwhat, compilation was fully cleaned under the name of hbwhat, compilation was fully cleaned
and fixed to support Win64 platform. INTERNETREADFILE(), and fixed to support Windows 64-bit platform. INTERNETREADFILE(),
INTERNETWRITEFILE() functions were fixed. what32.ch renamed INTERNETWRITEFILE() functions were fixed. what32.ch renamed
to hbwhat.ch. to hbwhat.ch.
- hbhpdf fixed HPDF_AddPageLabel(). - hbhpdf fixed HPDF_AddPageLabel().
@@ -886,7 +884,7 @@ Portability
- added support for shared libraries (.sl) in HPUX builds - added support for shared libraries (.sl) in HPUX builds
- added large file support (64-bit) in HPUX builds - added large file support (64-bit) in HPUX builds
- disabled in default BSD* builds DOS/Windows DENY_* flags emulation - disabled in default BSD* builds DOS/Windows DENY_* flags emulation
implemented by BSD locks - tests on FreeBSD 6.2 and MacOSX shows implemented by BSD locks - tests on FreeBSD 6.2 and OS X shows
that it badly interacts with POSIX locks and it's possible to create that it badly interacts with POSIX locks and it's possible to create
deadlock. deadlock.
@@ -940,7 +938,7 @@ internals:
- added support for dynamically set during compilation ChangeLog entry, - added support for dynamically set during compilation ChangeLog entry,
ChangeLog ID, SVN revision and compilation flags. ChangeLog ID, SVN revision and compilation flags.
Update Harbour logo message to show the exact revision number and Update Harbour logo message to show the exact revision number and
- removed non-working compiler frontends: .NET CLI and JAVA. - removed non-working compiler frontends: .NET CLI and Java.
- added support for i18n into compiler (-j[<filename>] switch) - added support for i18n into compiler (-j[<filename>] switch)
gettext compatible .pot files are generated gettext compatible .pot files are generated
@@ -970,7 +968,7 @@ API
- added C functions to access SET values (hb_setGet*()) which should be used - added C functions to access SET values (hb_setGet*()) which should be used
instead of direct accessing HB_SET structure instead of direct accessing HB_SET structure
- added hb_fsFileExists() and hb_fsDirExists() - added hb_fsFileExists() and hb_fsDirExists()
- added hb_arraySet*() functions - they should help 3-rd party developers - added hb_arraySet*() functions - they should help 3rd party developers
to eliminate using C stack level HB_ITEM and reduce usage of potentially to eliminate using C stack level HB_ITEM and reduce usage of potentially
danger function like hb_arrayGetItemPtr() danger function like hb_arrayGetItemPtr()
- added hb_itemParamStore[Forward]() functions - added hb_itemParamStore[Forward]() functions
@@ -1007,8 +1005,8 @@ DEBUGGER
RTL RTL
--- ---
- added functions for translation to/from UTF8 mode and operations - added functions for translation to/from UTF-8 mode and operations
on UTF8 strings on UTF-8 strings
- added functions for bit manipulations: HB_BIT*() and for conversions - added functions for bit manipulations: HB_BIT*() and for conversions
to/from hexadecimal format to/from hexadecimal format
- added set of functions with hb_ prefix supported extended parameters, - added set of functions with hb_ prefix supported extended parameters,
@@ -1028,7 +1026,7 @@ RTL
objects also with active exceptions objects also with active exceptions
- added missing support for _SET_FILECASE, _SET_DIRCASE switches in some - added missing support for _SET_FILECASE, _SET_DIRCASE switches in some
functions functions
- added _SET_TRIMFILENAME - when enabled low level hb_fs*() functions strip - added _SET_TRIMFILENAME - when enabled low-level hb_fs*() functions strip
trailing and leading spaces from file names to emulate DOS like behavior trailing and leading spaces from file names to emulate DOS like behavior
- added support for _SET_DEFEXTENSIONS to native all RDDs - added support for _SET_DEFEXTENSIONS to native all RDDs
- many fixes in Transform() function and fixed 64-bit integer transformation. - many fixes in Transform() function and fixed 64-bit integer transformation.
@@ -1062,7 +1060,7 @@ GT:
terminfo). It has hard coded support only for few terminals (Linux,ANSI, terminfo). It has hard coded support only for few terminals (Linux,ANSI,
XTERM) but because uses only very limited set of escape sequences then XTERM) but because uses only very limited set of escape sequences then
on most currently used terminals it works better then curses or slang on most currently used terminals it works better then curses or slang
based programs. GTTRM automatically detects ISO/UTF8 terminal mode at based programs. GTTRM automatically detects ISO/UTF-8 terminal mode at
startup and chose valid output what should also help *nix users - it startup and chose valid output what should also help *nix users - it
resolves problems with some box drawing characters and others which resolves problems with some box drawing characters and others which
are not accessible in ISO mode. It also respects /etc/harbour/hb-charmap.def are not accessible in ISO mode. It also respects /etc/harbour/hb-charmap.def
@@ -1082,7 +1080,7 @@ GT:
- fixed color string decoding to be fully Clipper compatible - fixed color string decoding to be fully Clipper compatible
- OutStd()/OutErr() respects automatic CP translation when they - OutStd()/OutErr() respects automatic CP translation when they
are not redirected to GT screen are not redirected to GT screen
- added common for all GTs CLIPBOARD support. If possible low level GT - added common for all GTs CLIPBOARD support. If possible low-level GT
drivers uses system clipboard otherwise they emulate it for Harbour drivers uses system clipboard otherwise they emulate it for Harbour
application only application only
@@ -1165,7 +1163,7 @@ Version 1.1.1 Devel Build (2007-06-14) tag: build48
constructions constructions
- added BEGIN SEQUENCE [WITH <bErrorBlock>] / RECOVER [USING <oErr>] / - added BEGIN SEQUENCE [WITH <bErrorBlock>] / RECOVER [USING <oErr>] /
ALWAYS / END ALWAYS / END
- new debugger code with low level C interface borrowed from xHarbour - new debugger code with low-level C interface borrowed from xHarbour
- added hash tables - added hash tables
- speed improvement - speed improvement
- added regular expressions - added regular expressions
@@ -1260,7 +1258,7 @@ syntax:
(FLEX version only). (FLEX version only).
- Added new compiler switch -gc3 to generate real C code output - Added new compiler switch -gc3 to generate real C code output
(instead of PCODE array called by a C wrapper). (instead of PCODE array called by a C wrapper).
- Added new command line switch -r=<max_recursive_preprocessor_passes> - Added new command-line switch -r=<max_recursive_preprocessor_passes>
- Added -undef: compiler switch (borrowed from xHarbour). - Added -undef: compiler switch (borrowed from xHarbour).
- Added support for @filelst[.clp] - partially borrowed from xHarbour. - Added support for @filelst[.clp] - partially borrowed from xHarbour.
It's not exactly the same as in Clipper because Clipper creates one It's not exactly the same as in Clipper because Clipper creates one
@@ -1339,12 +1337,12 @@ API
such code may stop to work with next Harbour versions. Without such code may stop to work with next Harbour versions. Without
hbvmopt.h the internal structures like HB_ITEM, HB_DYNS, ... are hbvmopt.h the internal structures like HB_ITEM, HB_DYNS, ... are
mapped to 'void' so there is no way to access their members so we mapped to 'void' so there is no way to access their members so we
can modify them in the future without afford for 3-rd party code. can modify them in the future without afford for 3rd party code.
- Remove default API and stack macros. Now API/stack macros can be - Remove default API and stack macros. Now API/stack macros can be
enabled by including hb_vmopt.h file. This file should be included enabled by including hb_vmopt.h file. This file should be included
ONLY by core code because binary object/libraries generated after ONLY by core code because binary object/libraries generated after
can work only with EXACTLY the same HVM compiled the same C can work only with EXACTLY the same HVM compiled the same C
alignment switches. 3-rd party code should include hbvmpub.h only. alignment switches. 3rd party code should include hbvmpub.h only.
- Added support to passing function references as HB_IT_SYMBOL. - Added support to passing function references as HB_IT_SYMBOL.
- hb_itemType() return "S" for HB_IT_SYMBOL. - hb_itemType() return "S" for HB_IT_SYMBOL.
- Message symbols are not function symbols, cleaned the HB_FS_MESSAGE - Message symbols are not function symbols, cleaned the HB_FS_MESSAGE
@@ -1400,7 +1398,7 @@ API
- Use hb_fileNameConv() instead of hb_filecase(), hb_fileNameConv() - Use hb_fileNameConv() instead of hb_filecase(), hb_fileNameConv()
is the only one function to make file name conversions dependent on is the only one function to make file name conversions dependent on
some SETs. some SETs.
- HB_MATHERRMODE() input validation logic moved to the lower level - HB_MATHERRMODE() input validation logic moved to the lower-level
function. This is a step to make this a simple Set(). function. This is a step to make this a simple Set().
- Added STRPEEK and STRPOKE FS functions covered by HB_COMPAT_FLAGSHIP - Added STRPEEK and STRPOKE FS functions covered by HB_COMPAT_FLAGSHIP
macro. macro.
@@ -1426,7 +1424,7 @@ GT:
- Added GTI_* defintions for hb_gtInfo() function. This function - Added GTI_* defintions for hb_gtInfo() function. This function
works in similar way to dbInfo() in RDD. works in similar way to dbInfo() in RDD.
- New driver GTCRS based on xHarbour and Flagship curses code. - New driver GTCRS based on xHarbour and Flagship curses code.
- New driver GTWVT for Win32 using GUI window instead of console. - New driver GTWVT for Windows using GUI window instead of console.
- New driver GTXWC for XWindow Console. - New driver GTXWC for XWindow Console.
- New driver GTALLEG for Allegro cross platform graphic libraries. - New driver GTALLEG for Allegro cross platform graphic libraries.
- Respect pure REQUEST HB_GT_NUL as user GT choice if only GTNUL - Respect pure REQUEST HB_GT_NUL as user GT choice if only GTNUL
@@ -1439,7 +1437,7 @@ Multilangual:
- Codepage: Updated UNICODE values for characters in range 1-31 to - Codepage: Updated UNICODE values for characters in range 1-31 to
keep DOS compatibility. keep DOS compatibility.
- Codepage: Renamed files (cdp*.c -> cd*.c). - Codepage: Renamed files (cdp*.c -> cd*.c).
- Codepage: Added UTF8 related functions: hb_cdpUTF8StringLength(), - Codepage: Added UTF-8 related functions: hb_cdpUTF8StringLength(),
hb_cdpStringInUTF8Length(), hb_cdpUTF8ToStrn(). hb_cdpStringInUTF8Length(), hb_cdpUTF8ToStrn().
- Moved EN lang definitions to core lang code so we always have - Moved EN lang definitions to core lang code so we always have
- HU sorting order fixed to be more compatible with Clipper. - HU sorting order fixed to be more compatible with Clipper.
@@ -1456,7 +1454,7 @@ RDD
- Rewritten DBFNTX, now it supports in practice all CDX features with - Rewritten DBFNTX, now it supports in practice all CDX features with
multi tags and many others. With rddInfo() some important new multi tags and many others. With rddInfo() some important new
features in DBFNTX can be enabled like increased maximum NTX file features in DBFNTX can be enabled like increased maximum NTX file
size up to 4TB, support structural/autoopen indexes, bounding record size up to 4 TiB, support structural/autoopen indexes, bounding record
number with index key (like in CDX format what resaolves the number with index key (like in CDX format what resaolves the
performance problem with indexes which have a lot of non unique performance problem with indexes which have a lot of non unique
keys, etc.) keys, etc.)
@@ -1506,7 +1504,7 @@ Contrib
- ADS: Added ADSCDX, ADSNTX and ADT RDDs. ADS RDD should not be longer - ADS: Added ADSCDX, ADSNTX and ADT RDDs. ADS RDD should not be longer
used, it's only for backward compatibility. used, it's only for backward compatibility.
- ADS: Call AdsFlushFileBuffers() only when _SET_HARDCOMMIT is set. - ADS: Call AdsFlushFileBuffers() only when _SET_HARDCOMMIT is set.
- ADS: Added possibility to save memo fields > 64K. - ADS: Added possibility to save memo fields > 64 KiB.
- ADS: Added support for relations in ADS* RDDs which are not - ADS: Added support for relations in ADS* RDDs which are not
supported directly by ADS or are for other non ADS* tables. supported directly by ADS or are for other non ADS* tables.
- ADS: Synced base RDD with xHarbour. - ADS: Synced base RDD with xHarbour.
@@ -1604,7 +1602,7 @@ The runtime modules
- Added Spanish Modern codepage - Added Spanish Modern codepage
- Synced HB CDP API with xHarbour - added basic Unicode support - Synced HB CDP API with xHarbour - added basic Unicode support
- Added functions hb_fsLockLarge() and hb_fsSeekLarge() which uses 64-bit - Added functions hb_fsLockLarge() and hb_fsSeekLarge() which uses 64-bit
offsets in filesys.c for files larger than 2Gb offsets in filesys.c for files larger than 2GB
RDD RDD
--- ---
@@ -1623,7 +1621,7 @@ General
------- -------
- Updated build process for Debian Linux distribution (.deb) packages. - Updated build process for Debian Linux distribution (.deb) packages.
Now hb* scripts and shared libs are created by standard make install Now hb* scripts and shared libs are created by standard make install
- Added support for Solaris (SunOS) and Darwin (Mac OS X). - Added support for Solaris (SunOS) and Darwin (OS X).
- Added support for Hewlett Packard Unix (HP_UX) and ALPHA DEC. - Added support for Hewlett Packard Unix (HP_UX) and ALPHA DEC.
- Many adds and fix in compilation scripts on all platforms. - Many adds and fix in compilation scripts on all platforms.
- Fixed some error messages - Fixed some error messages
@@ -1641,7 +1639,7 @@ The compiler
- New compiler flag -ks was added to enable support for - New compiler flag -ks was added to enable support for
strings as array of bytes. (Notice that support for strings strings as array of bytes. (Notice that support for strings
as array of bytes is disabled by default both in the Harbour compiler as array of bytes is disabled by default both in the Harbour compiler
and in harbour's runtime modules) and in Harbour's runtime modules)
- Added a new compiler switch -kJ to disable jump optimalization and - Added a new compiler switch -kJ to disable jump optimalization and
NOOP pcode removal (optimalization is enabled by default). NOOP pcode removal (optimalization is enabled by default).
- When Xbase++ mode is not used (-kc or -kch) then compiler doesn't - When Xbase++ mode is not used (-kc or -kch) then compiler doesn't
@@ -1651,7 +1649,7 @@ The compiler
- Enabled support for break[]. - Enabled support for break[].
- Fixed optimalization of far jumps (this fixes generation of pcode - Fixed optimalization of far jumps (this fixes generation of pcode
for abnormally large (DO CASE/IF/ELSEIF statements) for abnormally large (DO CASE/IF/ELSEIF statements)
- Added support to OpenWatcom DOS/Win32. - Added support to OpenWatcom DOS/Windows.
- Fixed compilation of &(exp) in normal stringify - Fixed compilation of &(exp) in normal stringify
markers (this fixes INDEX ON bug). markers (this fixes INDEX ON bug).
- Added missing support for @&macro and @M->memvar (aAdded a new - Added missing support for @&macro and @M->memvar (aAdded a new
@@ -1661,7 +1659,7 @@ The compiler
passed argument has the same name as declared parameter. passed argument has the same name as declared parameter.
- Fixed parsing of nested #defines in command/translate - Fixed parsing of nested #defines in command/translate
- Macro - Added HB_SM_ARRSTR support. - Macro - Added HB_SM_ARRSTR support.
- Clipper preproceses '**' into '^' - harbour too - Clipper preproceses '**' into '^' - Harbour too
- Added HB_COUNTER and HB_PTRDIFF types - first for reference counters and - Added HB_COUNTER and HB_PTRDIFF types - first for reference counters and
second for any pointer differences and pointer to integer conversions. second for any pointer differences and pointer to integer conversions.
- HB_EXPORT is added to ITEM API, FILE API and some other function - HB_EXPORT is added to ITEM API, FILE API and some other function
@@ -1688,7 +1686,7 @@ The runtime modules
- Added possibility to load a character mapping using HB_GT_CHARMAP() - Added possibility to load a character mapping using HB_GT_CHARMAP()
(ncurses GT only) (ncurses GT only)
- Improved recognition of xterm compatible terminals (ncurses GT only) - Improved recognition of xterm compatible terminals (ncurses GT only)
- New internal command line arguments were added to control - New internal command-line arguments were added to control
application at runtime: application at runtime:
//FLAGS:switches //FLAGS:switches
this flag controls compatibility issues of the virtual this flag controls compatibility issues of the virtual
@@ -1734,14 +1732,14 @@ The runtime modules
- Fixed to correctly return the procedure name where the codeblock was created. - Fixed to correctly return the procedure name where the codeblock was created.
- Greek and Serbian language codepage files added. - Greek and Serbian language codepage files added.
- fixed to use 'mkstemp' on Unix (no more GCC linker warnings) - fixed to use 'mkstemp' on Unix (no more GCC linker warnings)
- Fixed file find API to be compatible with CA-Cl*pper on the lower level. - Fixed file find API to be compatible with CA-Cl*pper on the lower-level.
- Fixes in TBColumn class - Fixes in TBColumn class
RDD RDD
--- ---
- Latest RDD changes synced with xHarbour. - Latest RDD changes synced with xHarbour.
- Fixed dbCreate() bug that closed an open dbf with same name as newly - Fixed dbCreate() bug that closed an open dbf with same name as newly
created dbf in a different folder. created dbf in a different directory.
- FieldPut() Fixed to accept and ignore field NIL values - FieldPut() Fixed to accept and ignore field NIL values
without runtime error. C52 compatible. without runtime error. C52 compatible.
- Added scopped relations. Now ordSetRelation() works with DBFCDX like - Added scopped relations. Now ordSetRelation() works with DBFCDX like
@@ -1832,7 +1830,7 @@ Version 0.38 Alpha Build 38 (2001-12-15) tag: build38
- ::Super(::oneVar) is now correctly interpreted - ::Super(::oneVar) is now correctly interpreted
- Freezed Scooping because it was not anymore working after the - Freezed Scooping because it was not anymore working after the
previous fix. Waiting after Alpha build 38 to fix and re-enable it previous fix. Waiting after Alpha build 38 to fix and re-enable it
- HGF (Harbour GUI multiplatform Framework) started - HGF (Harbour GUI multi-platform Framework) started
- Class HBPersistent added to RTL to provide Harbour objects persistence - Class HBPersistent added to RTL to provide Harbour objects persistence
- New PROPERTY | PERSISTENT clause added as a DATA feature - New PROPERTY | PERSISTENT clause added as a DATA feature
- New function __clsGetProperties() added. Syntax: - New function __clsGetProperties() added. Syntax:
@@ -1864,7 +1862,7 @@ Version 0.38 Alpha Build 38 (2001-12-15) tag: build38
- Hbzlib enhacements - Hbzlib enhacements
- Some debugger fixes - it is now really usable. - Some debugger fixes - it is now really usable.
- Hbmake enhacements - Hbmake enhacements
- On Win32 platforms, Harbour now supports the ability to create and - On Windows platforms, Harbour now supports the ability to create and
use .dll files. These .dll files can be used as pcode storage, use .dll files. These .dll files can be used as pcode storage,
Harbour Runtime storage, or both, and if both, can be made callable Harbour Runtime storage, or both, and if both, can be made callable
from other languages that use .dll's as fully functional standalone from other languages that use .dll's as fully functional standalone
@@ -1926,9 +1924,10 @@ Version 0.35 Alpha Build 35 (2000-08-15)
- MySQL database access contribution started - MySQL database access contribution started
- ADS RDD encryption/decryption functions added - ADS RDD encryption/decryption functions added
- New GTCGI driver - New GTCGI driver
- Improved command line parsing - Improved command-line parsing
- Alternate Lexer (SimpLex), utilizes less memory, smaller Harbour.exe - Alternate Lexer (SimpLex), utilizes less memory, smaller harbour
as well as smaller compiled applications (due to smaller macro compiler) executables as well as smaller compiled applications (due to smaller
macro compiler)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Version 0.34 Alpha Build 34 (2000-06-02) Version 0.34 Alpha Build 34 (2000-06-02)
@@ -1937,7 +1936,7 @@ Version 0.34 Alpha Build 34 (2000-06-02)
- Linux/Unix ncurses screen output and xterm mouse input support - Linux/Unix ncurses screen output and xterm mouse input support
- MEMOEDIT support started - MEMOEDIT support started
- CONTRIBs better separated from core Harbour (TOOLS moved there) - CONTRIBs better separated from core Harbour (TOOLS moved there)
- Simplified and enhanced base for multiplatform coding - Simplified and enhanced base for multi-platform coding
- Language API (link/compile time language module selection) - Language API (link/compile time language module selection)
- Several small optimizations, enhancements and fixes (compiler, macro, GT, - Several small optimizations, enhancements and fixes (compiler, macro, GT,
inkey, make and build systems, more strict compiler warnings) inkey, make and build systems, more strict compiler warnings)
@@ -1997,10 +1996,10 @@ Version 0.33 Alpha Build 33 (2000-04-07)
- Make and build files further cleaned up, enhanced, optimized, synchronized - Make and build files further cleaned up, enhanced, optimized, synchronized
etc... etc...
- Compiler and platform detection enhanced, some hacks removed, - Compiler and platform detection enhanced, some hacks removed,
multiplatform cleanups and fixes. multi-platform cleanups and fixes.
- Warning levels upped, warnings fixed, code quality raised - Warning levels upped, warnings fixed, code quality raised
- Version numbering standardized - Version numbering standardized
- Multiple source file support in Harbour command line - Multiple source file support in Harbour command-line
- HBCLIP and RUNJAVA contribution dirs added - HBCLIP and RUNJAVA contribution dirs added
- HBDOC Enhacements: New subtags for better output: <par>,</par> for paragraph - HBDOC Enhacements: New subtags for better output: <par>,</par> for paragraph
<b></b> for bold, <i></i> for italic, <em></em> for bold italic font <b></b> for bold, <i></i> for italic, <em></em> for bold italic font
@@ -2013,7 +2012,7 @@ Version 0.32 Alpha Build 32 (2000-03-07)
- New Borland make files - New Borland make files
- Many make and build processes fixes, enhancements, warning fixes - Many make and build processes fixes, enhancements, warning fixes
- Borland, MSVC and GNU-make processes don't collide anymore - Borland, MSVC and GNU Make processes don't collide anymore
- PP now supports code in header files - PP now supports code in header files
- Docs separated from the source - Docs separated from the source
- Docs enhanced - Docs enhanced
@@ -2041,7 +2040,7 @@ Version 0.31 Alpha Build 31 (2000-01-27) tag: build31
- Many changes, fixes, and enhancements to the GT API system - Many changes, fixes, and enhancements to the GT API system
- Improved SetCursor() and Set( _SET_CURSOR ) - Improved SetCursor() and Set( _SET_CURSOR )
- Added FieldBlock() and FieldWBlock() - Added FieldBlock() and FieldWBlock()
- The Harbour '-w' command line option can set the maximal level of reported - The Harbour '-w' command-line option can set the maximal level of reported
warnings. The following levels are supported currently: warnings. The following levels are supported currently:
'-w0' - no warnings '-w0' - no warnings
'-w' or '-w1' - Clipper compatible warnings '-w' or '-w1' - Clipper compatible warnings
@@ -2099,7 +2098,7 @@ Version 0.31 Alpha Build 31 (2000-01-27) tag: build31
- Added HARBOURCMD/CLIPPERCMD environment variables - Added HARBOURCMD/CLIPPERCMD environment variables
- Added support for #pragma directives - Added support for #pragma directives
- Enhanced GetEnv() function - Enhanced GetEnv() function
- Added //BUILD app command line option - Added //BUILD app command-line option
---------------------------------------------------------------------- ----------------------------------------------------------------------
Version 0.30 Alpha Build 30 (1999-09-30) Version 0.30 Alpha Build 30 (1999-09-30)
@@ -2114,20 +2113,20 @@ Version 0.30 Alpha Build 30 (1999-09-30)
- Support for FIELD variables - Support for FIELD variables
- Support for canceling the application by pressing Alt-C - Support for canceling the application by pressing Alt-C
- Enhanced ITEM API - Enhanced ITEM API
- Support for internal command line options '//' - Support for internal command-line options '//'
- Severe speed improvement - Severe speed improvement
- Better Directory() compatibility - Better Directory() compatibility
- Redirected output works now - Redirected output works now
- Even more Preprocessor compatibility - Even more Preprocessor compatibility
- Set HARBOUR= in environment to override Set CLIPPER= settings - Set HARBOUR= in environment to override Set CLIPPER= settings
- Rudimentary Unix keyboard support added - Rudimentary Unix keyboard support added
- Tone support added - Tone() support added
- SET KEY support was added - SET KEY support was added
- Extensive regression test suite added (RTL_TEST) - Extensive regression test suite added (RTL_TEST)
- Array handling fixed and made Clipper compatible - Array handling fixed and made Clipper compatible
- Ragged array declaration and initialization support added - Ragged array declaration and initialization support added
- FileSys API extensions, more C5.3 compatible functions added - FileSys API extensions, more C5.3 compatible functions added
- Compiler command line compatibility enhanced - Compiler command-line compatibility enhanced
- Internal errors made uniform - Internal errors made uniform
- Source code cleanup and formatting - Source code cleanup and formatting
- Many new functions, samples and bug fixes - Many new functions, samples and bug fixes
@@ -2141,7 +2140,7 @@ Version 0.29 Alpha Build 29 (1999-07-27)
MacIntosh MacIntosh
BC 3.1, 4.0, 4.5, 5.2 BC 3.1, 4.0, 4.5, 5.2
GCC OS/2 GCC OS/2
GCC Win32 GCC Windows
MS VC MS VC
GCC Linux / Unix GCC Linux / Unix
IBM C IBM C
@@ -2174,8 +2173,8 @@ Version 0.28 Alpha Build 28 (1999-07-18)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Version 0.27a Alpha Build 27a (1999-06-19) Version 0.27a Alpha Build 27a (1999-06-19)
- Corrected build numbers in Harbour.exe - Corrected build numbers in harbour executable
- Corrected a little bug in HScript.prg - Corrected a little bug in hscript.prg
---------------------------------------------------------------------- ----------------------------------------------------------------------
Version 0.27 Alpha Build 27 (1999-06-18) Version 0.27 Alpha Build 27 (1999-06-18)
@@ -2226,9 +2225,9 @@ Version 0.24 Alpha Build 24 (1999-06-03)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Version 0.23 Alpha Build 23 (1999-05-19) Version 0.23 Alpha Build 23 (1999-05-19)
- Harbour.exe for DOS/Windows is included now - harbour executable for DOS/Windows is included now
- The Windows libs are also included (hbw.bat to build Windows .exe's) - The Windows libs are also included (hbw.bat to build Windows executables)
- .hrb files! These files can be run with the runner.exe (Source included) - .hrb files! These files can be run with runner.exe (Source included)
- No need for a C compiler anymore to run Harbour source! - No need for a C compiler anymore to run Harbour source!
- New MAKE and BUILD files for IBM C++ 3.0 for OS/2 - New MAKE and BUILD files for IBM C++ 3.0 for OS/2
- Many fixes, Many enhancements (See ChangeLog in the Harbour directory) - Many fixes, Many enhancements (See ChangeLog in the Harbour directory)
@@ -2238,7 +2237,7 @@ Version 0.23 Alpha Build 23 (1999-05-19)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Version 0.21-2 Alpha Build 21-2 (1999-05-13) Version 0.21-2 Alpha Build 21-2 (1999-05-13)
- 32 bits OBJ's generation - 32-bit OBJ's generation
- More Clipper language compatibility - More Clipper language compatibility
- New object oriented features - New object oriented features
@@ -2281,7 +2280,7 @@ Version 0.17 Alpha Build 17 (1999-04-20)
Version 0.16 Alpha Build 16 (1999-04-17) Version 0.16 Alpha Build 16 (1999-04-17)
- New project directories structure - New project directories structure
- Added support for command line parameters - Added support for command-line parameters
- Compiler /o options changed to /g - Compiler /o options changed to /g
- /gc added (default option) - /gc added (default option)
- Changes on types.h - Changes on types.h
@@ -2322,7 +2321,7 @@ OpenClipper #9 Alpha build 9 (1999-04-01)
- Bison 1.24 is used now instead of byacc as byacc were returning - Bison 1.24 is used now instead of byacc as byacc were returning
a 'Out of space' error (parser execution is faster now!) a 'Out of space' error (parser execution is faster now!)
- We are linking using huge memory model now cause DGROUP was already - We are linking using huge memory model now cause DGROUP was already
over 64Kb over 64 KiB
---------------------------------------------------------------------- ----------------------------------------------------------------------
OpenClipper #8 Alpha build 8 (1999-03-29) OpenClipper #8 Alpha build 8 (1999-03-29)

View File

@@ -332,7 +332,7 @@ making in last days.
to macro tokens expressions starting with '&' followed by '('. to macro tokens expressions starting with '&' followed by '('.
The macro tokens are stringify in differ way. If macro The macro tokens are stringify in differ way. If macro
does not have any internal '&' characters and has at most does not have any internal '&' characters and has at most
one '.' as last character then as result non quited keyword one '.' as last character then as result non quoted keyword
is generated. Otherwise it generate strings with stripped first is generated. Otherwise it generate strings with stripped first
'&' character. '&' character.
If expression starts with '&' token followed by single If expression starts with '&' token followed by single
@@ -450,7 +450,7 @@ making in last days.
The optional match patterns are one of the weakest point of current PP. The optional match patterns are one of the weakest point of current PP.
Even such simple code: Even such simple code:
#xcommand CMD <x> [IN [GET] [PUT]] => ? #<x> #xcommand CMD <x> [IN [GET] [PUT]] => ? #<x>
CMD sth IN PUT GET CMD something IN PUT GET
Is not well preprocessed. Is not well preprocessed.
20. rule have to begin with non empty token or the rule will never be used. 20. rule have to begin with non empty token or the rule will never be used.
@@ -492,7 +492,7 @@ making in last days.
If anything substituted If anything substituted
continue continue
Do While 1-st token match some #[x]command pattern Do While 1st token match some #[x]command pattern
substitute substitute
EndDo EndDo
@@ -500,7 +500,7 @@ making in last days.
Output processed token until the last one or ; token Output processed token until the last one or ; token
If 1-st token is '#' If 1st token is '#'
continue continue
Remove all tokens in the list until the last one or ; token Remove all tokens in the list until the last one or ; token
@@ -647,15 +647,15 @@ making in last days.
Such special status can be added automatically when ; token is followed Such special status can be added automatically when ; token is followed
by # or ; is quoted by \ by # or ; is quoted by \
d. already existing xHarbour extensions: d. already existing xHarbour extensions:
#[x]unTrasnslate, #[x]unCommand #[x]untranslate, #[x]uncommand
but modified to locate match pattern which can cover exactly the same but modified to locate match pattern which can cover exactly the same
data. data.
#if #if
but working with integer to allow using 64bit ones which are broken but working with integer to allow using 64bit ones which are broken
due to conversion to double. The semantic for expressions will be due to conversion to double. The semantic for expressions will be
similar to C one with the exception to ! (not) operator precedence. similar to C one with the exception to ! (not) operator precedence.
I do not think that Clipper/xbase users are familiar with the exact I do not think that Clipper/xBase users are familiar with the exact
not operator precedence in C which is differ then the one in xbase not operator precedence in C which is differ then the one in xBase
world. world.
e. modified version of Harbour's e. modified version of Harbour's
#pragma {__text, __stream, __cstream, __endtext} #pragma {__text, __stream, __cstream, __endtext}

View File

@@ -3,32 +3,32 @@ Przemyslaw Czerpak (druzus/at/priv.onet.pl)
In Harbour preprocessor can be used in PRG code. In Harbour preprocessor can be used in PRG code.
This is list of PRG functions available for programmer. This is list of PRG functions available for programmer.
REQUEST __PP_STDRULES REQUEST __pp_StdRules
It forces including standard std.ch rules in static binaries. It forces including standard std.ch rules in static binaries.
Dynamic binaries linked with harbour dynamic library always Dynamic binaries linked with Harbour dynamic library always
includes standard PP rules. includes standard PP rules.
__PP_INIT( [<cIncludePath>] [, <cStdChFile> ] ) -> <pPP> __pp_Init( [<cIncludePath>] [, <cStdChFile> ] ) -> <pPP>
Initialize new PP context and return pointer to it. Initialize new PP context and return pointer to it.
when <cStdChFile> is empty string ("") then no default rules are when <cStdChFile> is empty string ("") then no default rules are
used and only the dynamically created #defines like __HARBOUR__, used and only the dynamically created #defines like __HARBOUR__,
__DATE__, __TIME__, __PLATFORM__* are registered. __DATE__, __TIME__, __PLATFORM__* are registered.
If <cStdChFile> is missing or NIL and standard PP rules from If <cStdChFile> is missing or NIL and standard PP rules from
std.ch are included in binaries (REQUEST __PP_STDRULES) then std.ch are included in binaries (REQUEST __pp_StdRules) then
they are used. they are used.
__PP_PATH( <pPP>, <cPath> [, <lClearPrev>] ) -> NIL __pp_Path( <pPP>, <cPath> [, <lClearPrev>] ) -> NIL
Add new (or replace previous) include paths. Add new (or replace previous) include paths.
__PP_RESET( <pPP> ) __pp_Reset( <pPP> )
Reset the PP context (remove all rules added by user or Reset the PP context (remove all rules added by user or
preprocessed code) preprocessed code)
__PP_ADDRULE( <pPP>, <cDirective> ) __pp_AddRule( <pPP>, <cDirective> )
Preprocess and execute new preprocessor directive Preprocess and execute new preprocessor directive
__PP_PROCESS( <pPP>, <cCode> ) -> <cPreprocessedCode> __pp_Process( <pPP>, <cCode> ) -> <cPreprocessedCode>
Preprocess given code and return result Preprocess given code and return result
User can create more then one PP context and then use each of them User can create more then one PP context and then use each of them
@@ -60,16 +60,19 @@ it's lines by macro compiler:
/*** testpp.prg ***/ /*** testpp.prg ***/
REQUEST __PP_STDRULES REQUEST __pp_StdRules
REQUEST __WAIT REQUEST __Wait
PROC Main()
local cLine, pPP, oErr PROCEDURE Main()
pPP := __PP_INIT()
BEGIN SEQUENCE WITH {|oErr| BREAK( oErr ) } LOCAL cLine, pPP, oErr
FOR EACH cLine IN hb_ATokens( StrTran( __PP_Process( pPP, ;
hb_MemoRead( "macro.dat" ) ), Chr( 13 ) ), Chr( 10 ) ) pPP := __pp_Init()
BEGIN SEQUENCE WITH __BreakBlock()
FOR EACH cLine IN hb_ATokens( __pp_Process( pPP, ;
hb_MemoRead( "macro.dat" ) ), .T. )
BEGIN SEQUENCE BEGIN SEQUENCE
IF !Empty( cLine ) IF ! Empty( cLine )
&cLine &cLine
ENDIF ENDIF
RECOVER USING oErr RECOVER USING oErr
@@ -83,6 +86,7 @@ it's lines by macro compiler:
? ErrMsg( oErr ) ? ErrMsg( oErr )
END SEQUENCE END SEQUENCE
? ?
RETURN RETURN
STATIC FUNCTION ErrMsg( oErr ) STATIC FUNCTION ErrMsg( oErr )
@@ -93,7 +97,7 @@ it's lines by macro compiler:
"/" + hb_ntos( oErr:subCode ), "/???" ) + ; "/" + hb_ntos( oErr:subCode ), "/???" ) + ;
iif( HB_ISSTRING( oErr:description ), ; iif( HB_ISSTRING( oErr:description ), ;
" " + oErr:description, "" ) + ; " " + oErr:description, "" ) + ;
iif( ! Empty( oErr:filename ), ; iif( ! oErr:filename == "", ;
" " + oErr:filename, ; " " + oErr:filename, ;
iif( ! Empty( oErr:operation ), ; iif( ! Empty( oErr:operation ), ;
" " + oErr:operation, "" ) ) " " + oErr:operation, "" ) )

View File

@@ -75,7 +75,7 @@ EXAMPLES
#pragma linenumber=off #pragma linenumber=off
/* #pragma -l */ /* #pragma -l */
This is the same as calling Harbour with the -l switch in the command line, This is the same as calling Harbour with the -l switch in the command-line,
but with the great benefit that if you forgot to pass the switch, it will but with the great benefit that if you forgot to pass the switch, it will
be used anyway because it is included inside the source. be used anyway because it is included inside the source.
@@ -89,7 +89,7 @@ SPECIAL PRAGMAS
=============== ===============
These pragmas allows to control the processing of PRG source within These pragmas allows to control the processing of PRG source within
the preprocessor. The special handling is done with a text enclosed the preprocessor. The special handling is done with a text enclosed
betwen the '#pragma <type>' and '#pragma __endtext' between the '#pragma <type>' and '#pragma __endtext'
#pragma __text #pragma __text
-------------- --------------
@@ -97,10 +97,10 @@ Syntax:
#pragma __text '|' [LineOutputCode] '|' [FinallyCode] '|' [StartupCode] #pragma __text '|' [LineOutputCode] '|' [FinallyCode] '|' [StartupCode]
Every line of text is stringified using '[' and ']' markers and is Every line of text is stringified using '[' and ']' markers and is
passed to 'LineOutputCode' using C '%s' formating code. The result passed to 'LineOutputCode' using C '%s' formatting code. The result
text is passed further to the syntax analyzer. The 'StartupCode' text is passed further to the syntax analyzer. The 'StartupCode'
is returned at the very beginning of procesing. The 'FinallyCode' is returned at the very beginning of processing. The 'FinallyCode'
is returned at the end. If 'LineOutputCode' is ommited then all is returned at the end. If 'LineOutputCode' is omitted then all
lines are ignored. lines are ignored.
For example, this pragma is used to implement TEXT/ENDTEXT command For example, this pragma is used to implement TEXT/ENDTEXT command
@@ -136,19 +136,19 @@ Syntax:
? ?
TEXT TO VAR v TEXT TO VAR v
This is 'example' text with ''""[] embeded This is 'example' text with ''""[] embedded
ENDTEXT ENDTEXT
The above example is preprocessed into: The above example is preprocessed into:
v:=[This is 'example' text with ''""[] embeded] v:=[This is 'example' text with ''""[] embedded]
#pragma __cstream #pragma __cstream
---------------- ----------------
Syntax: Syntax:
#pragma __cstream '|' [JoinLineCode] '|' [EndingCode] '|' [StartingCode] #pragma __cstream '|' [JoinLineCode] '|' [EndingCode] '|' [StartingCode]
This is simmilar to '#pragma __stream' with the additional convertion This is similar to '#pragma __stream' with the additional conversion
of C esc sequences e.g \n \t \r \b of C Esc sequences e.g \n \t \r \b
For example: For example:
@@ -156,18 +156,18 @@ Syntax:
#pragma __cstream|%s||<var>:= #pragma __cstream|%s||<var>:=
TEXT TO VAR v TEXT TO VAR v
This is 'example' text with ''""[] embeded and C \n This is 'example' text with ''""[] embedded and C \n
sequence sequence
ENDTEXT ENDTEXT
? v ? v
The above example is preprocessed into: The above example is preprocessed into:
v:=[This is 'example' text with ''""[] embeded and C \nsequence] v:=[This is 'example' text with ''""[] embedded and C \nsequence]
QOut(v) QOut(v)
and at runtime the following is printed: and at runtime the following is printed:
This is 'example' text with ''""[] embeded and C This is 'example' text with ''""[] embedded and C
sequence sequence
#pragma __endtext #pragma __endtext
@@ -189,7 +189,7 @@ Syntax:
This pragma sets the maximum number of preprocess iterations during This pragma sets the maximum number of preprocess iterations during
the source code translation. The default value is 1024. the source code translation. The default value is 1024.
This is the same as /r= command line switch This is the same as /r= command-line switch
For example: For example:

View File

@@ -5,7 +5,7 @@ does not generate the proper pcode for them).
So I would like to make an introduction to static variables management as So I would like to make an introduction to static variables management as
it is a sophisticated system that Harbour is going to implement. it is a sophisticated system that Harbour is going to implement.
It is something publically known that Clipper static variables are It is something publicly known that Clipper static variables are
located at the bottom of the data segment. This has caused all kinds of located at the bottom of the data segment. This has caused all kinds of
troubles. This is why when I designed Five I did it in a way that could not troubles. This is why when I designed Five I did it in a way that could not
cause any trouble in the future. cause any trouble in the future.

View File

@@ -3,8 +3,8 @@
Harbour TODO list Harbour TODO list
======================================================================= =======================================================================
Tasks for after v.1 release: Tasks for after v1.0 release:
---------------------------- -----------------------------
Assign to: Ryszard Assign to: Ryszard
Detail...: SQLRDD. Detail...: SQLRDD.
@@ -12,26 +12,6 @@ Status...: Working on it.
*** ***
Assign to: <nobody>
Detail...: Add support for virtual file handles and registering some
meta handles so it will be possible to make:
h := FOpen( "gzip:/tmp/myarchive.gz", FO_WRITE )
FWrite( h, cData )
FClose( h )
or:
h := FOpen( "tcp:some.host:port", FO_WRITE )
...
or:
h := FOpen( "|lpr -PLaserJet", FO_WRITE )
...
or:
h := FOpen( "gunzip /tmp/myarchive.gz|", FO_READ )
...
etc.
Status...: Open.
***
Assign to: Przemek Assign to: Przemek
Detail...: Define multi platform platform API for GTs which can mix Detail...: Define multi platform platform API for GTs which can mix
graphics objects with standard text output. Now it's graphics objects with standard text output. Now it's
@@ -52,7 +32,7 @@ Assign to: <nobody>
Detail...: Add NETRDD - meta RDD which will allow transport layer Detail...: Add NETRDD - meta RDD which will allow transport layer
between client application and server application with any between client application and server application with any
other chosen RDD driver. Idea similar to GTNET but for RDD other chosen RDD driver. Idea similar to GTNET but for RDD
drivers - it's sth like ADS does. drivers - it's something like ADS does.
Status...: Open. Status...: Open.
*** ***
@@ -62,7 +42,7 @@ Detail...: Extended HB_IT_POINTER. In practice we can give them the
same functionality as for objects and use them for fast same functionality as for objects and use them for fast
creation objects at C level. We can also add HB_VALTYPE() creation objects at C level. We can also add HB_VALTYPE()
function which will return the extended type name, f.e. function which will return the extended type name, f.e.
"WINDOW", "FONT", "SOCKET" or anything what 3-rd party "WINDOW", "FONT", "SOCKET" or anything what 3rd party
programmers may want to use. It will greatly simplify programmers may want to use. It will greatly simplify
writing some libraries. writing some libraries.
Status...: Open. Status...: Open.
@@ -77,14 +57,14 @@ Status...: Open.
*** ***
Assign to: Ryszard Assign to: Ryszard
Detail...: Real strong typing in the compiler. Detail...: Static/gradual ("strong") typing in the compiler.
Status...: Open. Status...: Open.
*** ***
======================================================================= =======================================================================
Harbour TOFIX list Harbour FIXME list
======================================================================= =======================================================================

View File

@@ -12,7 +12,7 @@ the C code:
HB_TRACE( level, ( "printf-style parameters", arg1, arg2 ) ); HB_TRACE( level, ( "printf-style parameters", arg1, arg2 ) );
The level specified for the HB_TRACE call affects harbour in two ways: The level specified for the HB_TRACE call affects Harbour in two ways:
compilation time and run time. compilation time and run time.
@@ -61,7 +61,7 @@ one of
with the following effect: any calls to HB_TRACE that were left by the with the following effect: any calls to HB_TRACE that were left by the
compiler and which have a level lower or equal to HB_TR_LEVEL will compiler and which have a level lower or equal to HB_TR_LEVEL will
print its arguments on stderr. print its arguments on STDERR.
EXAMPLES EXAMPLES
@@ -91,7 +91,7 @@ usually set the HB_USER_CFLAGS environment variable like this:
export HB_USER_CFLAGS='-DHB_TR_LEVEL=HB_TR_INFO' export HB_USER_CFLAGS='-DHB_TR_LEVEL=HB_TR_INFO'
or for other OS (eg: MS-DOS, Windows) or for other OS (e.g.: MS-DOS, Windows)
SET HB_USER_CFLAGS=-DHB_TR_LEVEL_INFO SET HB_USER_CFLAGS=-DHB_TR_LEVEL_INFO
@@ -101,7 +101,7 @@ can set an environment variable like this:
export HB_TR_LEVEL=HB_TR_WARNING export HB_TR_LEVEL=HB_TR_WARNING
or for other OS (eg: MS-DOS, Windows) or for other OS (e.g.: MS-DOS, Windows)
SET HB_TR_LEVEL=HB_TR_WARNING SET HB_TR_LEVEL=HB_TR_WARNING
@@ -115,8 +115,8 @@ USAGE
When Harbour is compiled/run with some level of tracing and then used When Harbour is compiled/run with some level of tracing and then used
to compile a regular Harbour application, the app will output LOTS of to compile a regular Harbour application, the app will output LOTS of
tracing information to stderr. If you are using a sensible command tracing information to STDERR. If you are using a sensible command
shell (such as bash) you can redirect stderr to a file like this: shell (such as bash) you can redirect STDERR to a file like this:
my_app 2> trace.txt my_app 2> trace.txt
@@ -124,18 +124,18 @@ shell (such as bash) you can redirect stderr to a file like this:
REDIRECTION REDIRECTION
=========== ===========
The output generated while tracing goes to stderr by default. You can The output generated while tracing goes to STDERR by default. You can
control this at run-time by setting the environment variable control this at run-time by setting the environment variable
HB_TR_OUTPUT to the name of a file where you would like the tracing HB_TR_OUTPUT to the name of a file where you would like the tracing
output to be directed. If there is any problem opening the file for output to be directed. If there is any problem opening the file for
writing, the output reverts to stderr. writing, the output reverts to STDERR.
When it happens an error and the controller of errors of harbour cannot When it happens an error and the controller of errors of Harbour cannot
intercept it (eg: GPF), it can happen that part of information of tracing intercept it (e.g.: GPF), it can happen that part of information of tracing
it is not written. This problem is avoided setting the environment it is not written. This problem is avoided setting the environment
variable HB_TR_FLUSH to 1 (one). This makes that every time that one variable HB_TR_FLUSH to 1 (one). This makes that every time that one
record is sent to write, don't remain in the buffer, but rather it is record is sent to write, don't remain in the buffer, but rather it is
writen in the file before continuing with the execution. written in the file before continuing with the execution.
This set can produce an important reduction of speed of execution. This set can produce an important reduction of speed of execution.
TRACING THE PREPROCESSOR AND COMPILER TRACING THE PREPROCESSOR AND COMPILER

View File

@@ -69,5 +69,5 @@ The following functions mean something :
date format is British, using @E displays the date in date format is British, using @E displays the date in
American. Harbour always treats @E as British. American. Harbour always treats @E as British.
So is Harbour's behaviour a bug fix or a bug? So is Harbour's behavior a bug fix or a bug?
*/ */

View File

@@ -1,13 +1,13 @@
The Harbour virtual machine (VM) The Harbour virtual machine (VM)
Question : Question:
If a VM description is desirable, how should it be structured? (I If a VM description is desirable, how should it be structured? (I
propose plain text, with two main sections: VM description, Opcodes. The propose plain text, with two main sections: VM description, Opcodes. The
"Opcodes" section would describe every opcode: mnemonic, code, operands, "Opcodes" section would describe every opcode: mnemonic, code, operands,
description. I think I can maintain this section.) description. I think I can maintain this section.)
Answer : Answer:
The VM is formed by the main execution loop and several subsystems, each of The VM is formed by the main execution loop and several subsystems, each of
which could be theoretically replaced, supposing that you respect the which could be theoretically replaced, supposing that you respect the
@@ -47,9 +47,9 @@ will be optimized by the dynamic symbol table.
The dynamic symbol table: Dynamically generated from the startup subsystem The dynamic symbol table: Dynamically generated from the startup subsystem
at the beginning of the application. It organizes in an efficient way the at the beginning of the application. It organizes in an efficient way the
static symbol table creating an alphabetical index that allows a dicotomic static symbol table creating an alphabetical index that allows a dichotomic
search of symbols. This subsystem is responsible for quick access to symbols search of symbols. This subsystem is responsible for quick access to symbols
(functions, variables, fields and workareas aliases). (functions, variables, fields and work areas aliases).
The static and public variables: Responsible for storing public and static The static and public variables: Responsible for storing public and static
variables. variables.
@@ -58,7 +58,7 @@ The memory: Responsible for allocating, reallocating, locking, unlocking and
freeing memory. freeing memory.
The extend system: Defines the interface (_parc(), ..., _retc() ) from low The extend system: Defines the interface (_parc(), ..., _retc() ) from low
level (C language) to high level (Clipper language). This subsystem is level (C language) to high-level (Clipper language). This subsystem is
responsible for connecting in a proper way C language functions to the responsible for connecting in a proper way C language functions to the
entire application. entire application.
@@ -74,14 +74,14 @@ runtime.
The macro subsystem: it implements a reduced compiler that may be used at The macro subsystem: it implements a reduced compiler that may be used at
runtime to generate pcode to be used by the application. In fact it is a runtime to generate pcode to be used by the application. In fact it is a
portion of the harbour yacc specifications. portion of the Harbour yacc specifications.
The workareas subsystem: Responsible for databases management. It defines The work areas subsystem: Responsible for databases management. It defines
the locations where the used workareas will be stored and provides all the the locations where the used work areas will be stored and provides all the
functions to access those workareas. It also implements the interface to the functions to access those work areas. It also implements the interface to the
replaceable database drivers. replaceable database drivers.
Question : Question:
Will Harbour opcodes mimic the Clipper ones? (will there be a 1:1 Will Harbour opcodes mimic the Clipper ones? (will there be a 1:1
relation between them?) If so, are Clipper opcodes described somewhere? relation between them?) If so, are Clipper opcodes described somewhere?
@@ -89,7 +89,7 @@ relation between them?) If so, are Clipper opcodes described somewhere?
Answer: Answer:
Clipper language pcode opcodes Clipper language pcode opcodes
DEFINE NAME VALOR BYTES DEFINE NAME VALUE BYTES
#define NOP 0x00 1 #define NOP 0x00 1
#define PUSHC 0x01 3 + literal #define PUSHC 0x01 3 + literal
#define PUSHN 0x05 3 #define PUSHN 0x05 3
@@ -277,7 +277,7 @@ Answer:
#define SETPOSBS 0xCF 1 #define SETPOSBS 0xCF 1
Harbour will not implement all of them as we want to provide the highest Harbour will not implement all of them as we want to provide the highest
freedom to programers to extend and modify Harbour as needed. In example: freedom to programmers to extend and modify Harbour as needed. In example:
Clipper language uses opcodes for: Row(), Col(), Upper(), Space(), Clipper language uses opcodes for: Row(), Col(), Upper(), Space(),
Replicate(), Inkey(), Year(), Month(), etc... where we may just call a Replicate(), Inkey(), Year(), Month(), etc... where we may just call a
standard C function, that uses the standard extend system and that may be standard C function, that uses the standard extend system and that may be
@@ -285,15 +285,15 @@ easily modified. So Harbour will use much less opcodes than the Clipper
language. This will also help to have a simpler and easier to maintain language. This will also help to have a simpler and easier to maintain
compiler and VM. compiler and VM.
Question : Question:
I see that, for example, Harbour has an opcode named "PUSHWORD"(06), I see that, for example, Harbour has an opcode named "PUSHWORD"(06),
while Valkyre calls it "PUSHW"(3B): Different names, different codes. while Valkyrie calls it "PUSHW"(3B): Different names, different codes.
Isn't it desirable that Harbour pCode be binary-compatible with Clipper? I Isn't it desirable that Harbour pcode be binary-compatible with Clipper? I
mean, by doing so, Harbour VM could interpret Clipper pCode and mean, by doing so, Harbour VM could interpret Clipper pcode and
vice-versa. vice versa.
Answer : Answer:
Harbour opcodes are defined in hbpcode.h. We are trying to use very easy to Harbour opcodes are defined in hbpcode.h. We are trying to use very easy to
remember mnemonics, so PUSHWORD seems easier than PUSHW. The opcodes values remember mnemonics, so PUSHWORD seems easier than PUSHW. The opcodes values
@@ -304,7 +304,7 @@ speed may increase. Clipper uses it).
We are not fully implementing the Clipper language OBJs model (i.e. to We are not fully implementing the Clipper language OBJs model (i.e. to
provide identifiers names length higher than 10 chars) so Harbour OBJs will provide identifiers names length higher than 10 chars) so Harbour OBJs will
not be supported by Clipper and viceversa. not be supported by Clipper and vice versa.
sorry for such a long message :-) sorry for such a long message :-)

View File

@@ -1,84 +1,77 @@
Windows DLLs with Harbour code # Windows DLLs with Harbour code
==============================
Programs created with Clipper or Harbour are traditionally a Programs created with Clipper or Harbour are traditionally a
monolithic EXE containing all executable code. This includes monolithic executable containing all executable code. This includes
the Virtual Machine (VM) and the RunTime Library (RTL) as well as the Virtual Machine (VM) and the Runtime Library (RTL) as well as
your own code. Running under Windows with Harbour, you your own code. Running under Windows with Harbour, you
can now also create and use Windows DLLs that contain PRG code. can now also create and use Windows DLLs that contain PRG code.
Harbour supports Windows DLLs in 3 ways. Harbour supports Windows DLLs in 3 ways.
1) Self-contained DLLs containing functions from any platform. 1. Self-contained DLLs containing functions from any platform.
(These are not what we call a "harbour.dll", although they may (These are not what we call a "harbour.dll", although they may
be named that. The DLL entry points are different.) be named that. The DLL entry points are different.)
These have the VM/RTL inside them and can be used by any other These have the VM/RTL inside them and can be used by any other
Windows program. You can create a .lib for static linking, Windows program. You can create a library for static linking,
or use GetProcAddress as in any standard Windows DLL. or use GetProcAddress() as in any standard Windows DLL.
Calling Harbour/Prg functions directly is limited to Calling Harbour/.prg functions directly is limited to
those that take no parameters unless you include C functions those that take no parameters unless you include C functions
in the DLL that take parameters and then call the PRG-level in the DLL that take parameters and then call the PRG-level
code. code.
To do static linking, do this to create the .lib: To do static linking, do this to create the library:
implib harbour.lib harbour.dll hbmk2 -hbimplib 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 executables using a harbour.dll
2) PCode EXEs using a Harbour.dll A harbour.dll is designed to be called from a Harbour app.
A pcode executable is a small Harbour executable that does not
A Harbour.dll is designed to be called from a Harbour app. contain the VM/RTL. To execute its functions, it must load and access
A pcode EXE is a small Harbour executable that does not contain the a harbour.dll.
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 If you want dynamic linking, then use this to execute a Harbour
dynamically loaded pcode DLL function or procedure: dynamically loaded pcode DLL function or procedure:
HB_DllDo( <cFuncName> [,<params...>] ) --> [<uResult>] hb_LibDo( <cFuncName>[, <params...>] ) --> [<uResult>]
This lets you have all your common code in a DLL, and have lots 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 of small executables that use it. Realize however that, even though
may be a nice way to manage your code, each EXE may this may be a nice way to manage your code, each executable may
load its own image of the Harbour.dll into memory at runtime. 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 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 executables over monolithic executables. But it may be a worthwhile
benefit to have lots of replaceable small exes. maintenance benefit to have lots of replaceable small exes.
3) PCode DLLs used from traditional EXEs 3. PCode DLLs used from traditional executables
A pcode DLL does not contain the VM/RTL. A pcode DLL does not contain the VM/RTL.
It is a library of Harbour-compiled PRG code that uses 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 of the executable that calls it. This has the benefit of having
replaceable modules in DLLs that don't necessarily require updating replaceable modules in DLLs that don't necessarily require updating
your EXE. your executable.
The following is clipped from a msg by Antonio Linares to the Harbour The following is clipped from a msg by Antonio Linares to the Harbour
developer list explaining some of the details: developer list explaining some of the details:
Please notice that there are three different Windows DLL entry points: 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 * src/vm/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 code, as DLLs, that may be used from other
To produce Harbour.dll, to be just used from small pcode Harbour EXEs programming languages applications (as VB, Delphi, C++, etc...)
> * maindllp.c Windows pcode DLL entry point and VM/RTL routing * src/vm/maindllh.c Windows Harbour DLL entry point (harbour.dll)
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. To produce harbour.dll, to be just used from small pcode Harbour
executables.
You may use maindll.c, maindllh.c or maindllp.c based on * src/vm/maindllp.c Windows pcode DLL entry point and VM/RTL routing functions
your needs.
If you are looking to build a Harbour.dll, then you must use To produce small pcode DLLs, to be used just from Harbour executable
maindllh.c 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 executables, 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.

View File

@@ -12,7 +12,7 @@
# https://www.gurulabs.com/media/files/courseware-samples/GURULABS-RPM-GUIDE-v1.0.PDF # https://www.gurulabs.com/media/files/courseware-samples/GURULABS-RPM-GUIDE-v1.0.PDF
# --------------------------------------------------------------- # ---------------------------------------------------------------
# TOFIX: Contrib packages with dependencies will be packaged # FIXME: Contrib packages with dependencies will be packaged
# into separate .rpms, but their headers will be packaged # into separate .rpms, but their headers will be packaged
# into the core Harbour package. This f.e. makes it impossible # into the core Harbour package. This f.e. makes it impossible
# to detect a Harbour contrib package by checking the existence # to detect a Harbour contrib package by checking the existence

View File

@@ -260,8 +260,11 @@ void hb_compPrintLogo( HB_COMP_DECL )
{ {
char * szVer = hb_verHarbour(); char * szVer = hb_verHarbour();
#define HB_VER_COMMIT_YEAR "2016"
#define HB_VER_ORIGIN_URL "http://harbour-project.org/"
hb_compOutStd( HB_COMP_PARAM, szVer ); hb_compOutStd( HB_COMP_PARAM, szVer );
hb_compOutStd( HB_COMP_PARAM, hb_compOutStd( HB_COMP_PARAM,
"\nCopyright (c) 1999-2016, http://harbour-project.org/\n" ); "\nCopyright (c) 1999-" HB_VER_COMMIT_YEAR ", " HB_VER_ORIGIN_URL "\n" );
hb_xfree( szVer ); hb_xfree( szVer );
} }

View File

@@ -48,6 +48,8 @@
#include "hbapi.h" #include "hbapi.h"
#define _DEFAULT_ORIGIN_URL "http://harbour-project.org/"
int hb_verRevision( void ) int hb_verRevision( void )
{ {
return 0; return 0;
@@ -196,7 +198,7 @@ static void hb_pp_generateRules( FILE * fout, PHB_PP_STATE pState, const char *
fprintf( fout, "/*\n" fprintf( fout, "/*\n"
" * Built-in preprocessor rules.\n" " * Built-in preprocessor rules.\n"
" *\n" " *\n"
" * Copyright 2006-2016 Przemyslaw Czerpak <druzus / at / priv.onet.pl>\n" " * Copyright 2006-present Przemyslaw Czerpak <druzus / at / priv.onet.pl>\n"
" *\n" " *\n"
" * This file is generated automatically by Harbour preprocessor\n" " * This file is generated automatically by Harbour preprocessor\n"
" * and is covered by the same license as Harbour PP\n" " * and is covered by the same license as Harbour PP\n"
@@ -318,7 +320,10 @@ static char * hb_pp_escapeString( char * szString )
return szResult; return szResult;
} }
static int hb_pp_generateVerInfo( char * szVerFile, int iRevID, char * szChangeLogID, char * szLastEntry ) static int hb_pp_generateVerInfo( char * szVerFile,
int iRevID,
char * szChangeLogID,
char * szLastEntry )
{ {
int iResult = 0; int iResult = 0;
FILE * fout; FILE * fout;
@@ -339,7 +344,7 @@ static int hb_pp_generateVerInfo( char * szVerFile, int iRevID, char * szChangeL
fprintf( fout, "/*\n" fprintf( fout, "/*\n"
" * Version information and build time switches.\n" " * Version information and build time switches.\n"
" *\n" " *\n"
" * Copyright 2008-2016 Przemyslaw Czerpak <druzus / at / priv.onet.pl>\n" " * Copyright 2008-present Przemyslaw Czerpak <druzus / at / priv.onet.pl>\n"
" *\n" " *\n"
" * This file is generated automatically by Harbour preprocessor\n" " * This file is generated automatically by Harbour preprocessor\n"
" * and is covered by the same license as Harbour PP\n" " * and is covered by the same license as Harbour PP\n"
@@ -786,7 +791,7 @@ int main( int argc, char * argv[] )
{ {
printf( "Harbour Preprocessor %d.%d.%d%s\n", printf( "Harbour Preprocessor %d.%d.%d%s\n",
HB_VER_MAJOR, HB_VER_MINOR, HB_VER_RELEASE, HB_VER_STATUS ); HB_VER_MAJOR, HB_VER_MINOR, HB_VER_RELEASE, HB_VER_STATUS );
printf( "Copyright (c) 1999-2016, http://harbour-project.org/\n" ); printf( "Copyright (c) 1999-present, %s\n", _DEFAULT_ORIGIN_URL );
} }
if( szFile ) if( szFile )

View File

@@ -264,7 +264,7 @@ METHOD HandleUserKey( nKey, nUdfReturn ) CLASS HBMemoEditor
OTHERWISE OTHERWISE
// TOFIX: Not CA-Cl*pper compatible, see teditor.prg // FIXME: Not CA-Cl*pper compatible, see teditor.prg
IF ( nUdfReturn >= 1 .AND. nUdfReturn <= 31 ) .OR. nUdfReturn == K_ALT_W IF ( nUdfReturn >= 1 .AND. nUdfReturn <= 31 ) .OR. nUdfReturn == K_ALT_W
::super:Edit( nUdfReturn ) ::super:Edit( nUdfReturn )
ELSE ELSE

View File

@@ -55,7 +55,7 @@
#include "inkey.ch" #include "inkey.ch"
#include "setcurs.ch" #include "setcurs.ch"
/* TOFIX: Leave this here, until this code is cleaned off of RTEs */ /* FIXME: Leave this here, until this code is cleaned off of RTEs */
#pragma linenumber=on #pragma linenumber=on
#define _REFRESH_NONE 0 #define _REFRESH_NONE 0
@@ -564,14 +564,14 @@ METHOD Edit( nPassedKey ) CLASS HBEditor
// if it's a movement key ::MoveCursor() handles it // if it's a movement key ::MoveCursor() handles it
CASE nKeyStd == K_CTRL_B .OR. nKeyStd == K_ALT_B CASE nKeyStd == K_CTRL_B .OR. nKeyStd == K_ALT_B
/* TOFIX: K_ALT_B is not Cl*pper compatible, added as workaround /* FIXME: K_ALT_B is not Cl*pper compatible, added as workaround
for missing in some GTs extended keycodes which are for missing in some GTs extended keycodes which are
necessary to resolve K_CTRL_B and K_CTRL_RIGHT keycode necessary to resolve K_CTRL_B and K_CTRL_RIGHT keycode
conflict */ conflict */
::ReformParagraph() ::ReformParagraph()
CASE nKeyStd == K_CTRL_W .OR. nKeyStd == K_ALT_W CASE nKeyStd == K_CTRL_W .OR. nKeyStd == K_ALT_W
/* TOFIX: K_ALT_W is not Cl*pper compatible, added as workaround /* FIXME: K_ALT_W is not Cl*pper compatible, added as workaround
for missing in some GTs extended keycodes which are for missing in some GTs extended keycodes which are
necessary to resolve K_CTRL_W and K_CTRL_END keycode necessary to resolve K_CTRL_W and K_CTRL_END keycode
conflict */ conflict */

View File

@@ -54,7 +54,7 @@
#include "inkey.ch" #include "inkey.ch"
#include "button.ch" #include "button.ch"
/* TOFIX: ::Minus [vszakats] */ /* FIXME: ::Minus [vszakats] */
#define GET_CLR_UNSELECTED 0 #define GET_CLR_UNSELECTED 0
#define GET_CLR_ENHANCED 1 #define GET_CLR_ENHANCED 1
@@ -1208,7 +1208,7 @@ METHOD PutMask( xValue, lEdit ) CLASS Get
IF lEdit .AND. ::cType == "N" .AND. ! Empty( cPicMask ) IF lEdit .AND. ::cType == "N" .AND. ! Empty( cPicMask )
FOR nFor := 1 TO ::nMaxLen FOR nFor := 1 TO ::nMaxLen
cChar := SubStr( cPicMask, nFor, 1 ) cChar := SubStr( cPicMask, nFor, 1 )
IF cChar $ ",." .AND. SubStr( cBuffer, nFor, 1 ) $ ",." // " " TOFIX IF cChar $ ",." .AND. SubStr( cBuffer, nFor, 1 ) $ ",." // " " FIXME
IF "E" $ cPicFunc IF "E" $ cPicFunc
cChar := iif( cChar == ",", ".", "," ) cChar := iif( cChar == ",", ".", "," )
ENDIF ENDIF

View File

@@ -129,7 +129,7 @@ HB_FUNC( HB_VERSION )
case HB_VERSION_BITWIDTH: hb_retni( ( int ) sizeof( void * ) * 8 ); break; case HB_VERSION_BITWIDTH: hb_retni( ( int ) sizeof( void * ) * 8 ); break;
case HB_VERSION_MT: hb_retl( hb_vmIsMt() ); break; case HB_VERSION_MT: hb_retl( hb_vmIsMt() ); break;
case HB_VERSION_SHARED: /* TOFIX: This only works when platforms has separate case HB_VERSION_SHARED: /* FIXME: This only works when platforms has separate
compilation pass for harbour dynlib build - compilation pass for harbour dynlib build -
it is 32-bit Windows. */ it is 32-bit Windows. */

View File

@@ -167,8 +167,10 @@ STATIC PROCEDURE Logo()
OutStd( ; OutStd( ;
"Harbour i18n .pot/.hbl file manager " + HBRawVersion() + hb_eol() + ; "Harbour i18n .pot/.hbl file manager " + HBRawVersion() + hb_eol() + ;
"Copyright (c) 2009-2016, Przemyslaw Czerpak" + hb_eol() + ; "Copyright (c) 2009-" + ;
"http://harbour-project.org/" + hb_eol() + ; "2016" + ", " + ;
"Przemyslaw Czerpak" + hb_eol() + ;
hb_Version( HB_VERSION_URL_BASE ) + hb_eol() + ;
hb_eol() ) hb_eol() )
RETURN RETURN

File diff suppressed because it is too large Load Diff

View File

@@ -360,7 +360,7 @@ msgstr "Harbour alaprendszer"
#, c-format #, c-format
msgid "Translation (%1$s): (add your name here)" msgid "Translation (%1$s): (add your name here)"
msgstr "Magyar (%1$s) fordítás: Copyright (c) 2009-2016, Viktor Szakats" msgstr "Magyar (%1$s) fordítás: Copyright (c) 2009-present, Viktor Szakats"
#, c-format #, c-format
msgid "unknown platform" msgid "unknown platform"

View File

@@ -71,10 +71,6 @@
/* Don't change the position of this #include. */ /* Don't change the position of this #include. */
#include "rt_vars.ch" #include "rt_vars.ch"
#ifndef __HARBOUR__
#xtranslate hb_eol() => ( Chr( 13 ) + Chr( 10 ) )
#endif
#define TEST_RESULT_COL1_WIDTH 1 #define TEST_RESULT_COL1_WIDTH 1
#define TEST_RESULT_COL2_WIDTH 20 #define TEST_RESULT_COL2_WIDTH 20
#define TEST_RESULT_COL3_WIDTH 40 #define TEST_RESULT_COL3_WIDTH 40
@@ -98,13 +94,20 @@ STATIC s_lDBFAvail := .F.
ANNOUNCE HB_GTSYS ANNOUNCE HB_GTSYS
REQUEST HB_GT_CGI_DEFAULT REQUEST HB_GT_CGI_DEFAULT
#define COPYRIGHT_YEAR "2016"
#else
#define COPYRIGHT_YEAR "present"
#xtranslate hb_eol() => ( Chr( 13 ) + Chr( 10 ) )
#endif #endif
PROCEDURE Main( cPar1, cPar2, cPar3 ) PROCEDURE Main( cPar1, cPar2, cPar3 )
OutStd( "Harbour Regression Test Suite" + hb_eol() +; OutStd( ;
"Copyright (c) 1999-2016, Viktor Szakats" + hb_eol() +; "Harbour Compatibility and Regression Test Suite" + hb_eol() + ;
"http://harbour-project.org/" + hb_eol() ) "Copyright (c) 1999-" + COPYRIGHT_YEAR + ", " + ;
"Viktor Szakats" + hb_eol() )
IF cPar1 == NIL IF cPar1 == NIL
cPar1 := "" cPar1 := ""
@@ -130,7 +133,6 @@ PROCEDURE Main( cPar1, cPar2, cPar3 )
" -all Display all tests, not only the failures." + hb_eol() + ; " -all Display all tests, not only the failures." + hb_eol() + ;
" -noalt Ignore alternative results." + hb_eol() + ; " -noalt Ignore alternative results." + hb_eol() + ;
" -skip:<list> Skip the listed test numbers." + hb_eol() ) " -skip:<list> Skip the listed test numbers." + hb_eol() )
RETURN RETURN
ENDIF ENDIF