Importación inicial

git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jcl@16 c37d764d-f447-7644-a108-883140d013fb
This commit is contained in:
David Arranz 2009-02-27 12:18:04 +00:00
parent 7c53c52f9e
commit 84299d30d6
2167 changed files with 573926 additions and 0 deletions

View File

@ -0,0 +1 @@
Install Latest /MultipleProfiles

View File

@ -0,0 +1,20 @@
@echo off
echo Launching JCL installer...
start .\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9
if ERRORLEVEL 1 goto FailStart
goto FINI
:FailStart
.\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9
goto FINI
:FailedCompile
echo.
echo.
echo An error occured while compiling the installer. Installation aborted.
echo.
pause
:FINI

View File

@ -0,0 +1,42 @@
@echo off
SET DELPHIVERSION=%1
cd install
::jpp prototypes
..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui\ prototypes\JediGUIMain.pas
if ERRORLEVEL 1 goto FailedCompile
..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui\ prototypes\JediGUIReadme.pas
if ERRORLEVEL 1 goto FailedCompile
..\devtools\jpp.exe -c -dVCL -dMSWINDOWS -uVisualCLX -uUnix -uKYLIX -xVclGui\ prototypes\JediGUIInstall.pas
if ERRORLEVEL 1 goto FailedCompile
:: compile installer
build\dcc32ex.exe --runtime-package-rtl --runtime-package-vcl --preserve-config -q -w -dJCLINSTALL -E..\bin -I..\source\include -U..\source\common;..\source\windows JediInstaller.dpr
if ERRORLEVEL 1 goto FailedCompile
echo Launching JCL installer...
start ..\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9
if ERRORLEVEL 1 goto FailStart
goto FINI
:FailStart
..\bin\JediInstaller.exe %2 %3 %4 %5 %6 %7 %8 %9
goto FINI
:FailedCompile
echo.
echo.
echo An error occured while compiling the installer. Installation aborted.
echo.
pause
:FINI
cd ..
SET DELPHIVERSION=

View File

@ -0,0 +1,71 @@
JEDI Code Library v 1.104 Installation
Supported development tools versions:
- Delphi 2009 and C++Builder 2009
- CodeGear RAD Studio 2007 (also known as Delphi 2007 for Win32, C++Builder 2007)
- Borland Developer Studio 2006 (also known as Delphi 2006, C++Builder 2006)
- Borland Kylix 3
- Borland Delphi 7
- Borland Delphi 6 Update Pack #2 (including Personal Edition)
- Borland Delphi 5 Update Pack #1
- Borland C++ Builder 6
- Borland C++ Builder 5
For more detailed information, see docs\Readme.html.
Please make sure you have installed latest update packs. You can download them
from CodeGear Support web page:
Delphi: http://support.codegear.com/delphi
C++Builder: http://support.codegear.com/cppbuilder
******************************* IMPORTANT **************************************
* *
* If you have installed any previous version of the JCL/JVCL you have to *
* delete them. *
* *
* *
* It is also necessary to remove all installed JCL/JVCL packages from the IDE. *
* Do not mix files or compiled packages from older versions of the JCL with *
* current version. *
* *
********************************************************************************
JEDI INSTALLER
==============
Helps you to integrate JCL with Delphi/BCB IDE. Currently it assists with:
- Compiling library units (release and debug versions)
- Compiling packages and installing design-time packages to the IDE
- Adding sample JCL Debug extension dialogs to Object Repository
- Adding JCL directories to Library Path / Browsing Path in Environment Options
- Adding JCL debug .dcu directory to Debug DCU Path in Debugger Options
- Integrating JCL help file to the IDE.
- in undoing above changes to the IDE settings ("Uninstall", new in 1.94 final).
To execute for
1) Win32
- click on "Install.bat" file in the JCL root directory.
Note: If you have Delphi 8 for Microsoft .NET installed, you probably will have
to specify the root directory of the make.exe to use for JCL installation;
on the commandline, type (for example):
>install "C:\Program Files\Borland\Delphi5"
or
>install d5
2) Kylix 3
- open a shell window
- cd into JCL root directory
- at the command prompt, type "sh ./install.sh", then press "Enter".
You'll also need to do a "source kylixpath" first (see the README of your
Kylix 3 installation) in case your system is not set up to do that at startup.
--------------------------------
Document last updated 2009-01-21

View File

@ -0,0 +1,42 @@
--------------------------------------------------------------------------
This program, "bzip2", the associated library "libbzip2", and all
documentation, are copyright (C) 1996-2007 Julian R Seward. All
rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. The origin of this software must not be misrepresented; you must
not claim that you wrote the original software. If you use this
software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
3. Altered source versions must be plainly marked as such, and must
not be misrepresented as being the original software.
4. The name of the author may not be used to endorse or promote
products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Julian Seward, jseward@bzip.org
bzip2/libbzip2 version 1.0.5 of 10 December 2007
--------------------------------------------------------------------------

View File

@ -0,0 +1,34 @@
DryIcons Free License Agreement
Read Full Legal Code
DryIcons is a service provided by our team of enthusiastic graphic and web designers and programmers. The purpose of this service is to provide only high-quality, free icons and free icon sets, as well as free vector graphics to the general public, with a specific target to designers, software and web developers.
All DryIcons' Works (meaning "icons, icon sets and graphics") are free of charge, but please read further under what Terms and Conditions.
All DryIcons Works are licensed under a DryIcons Free License. This means that you can use our icons, icon sets and graphics in any publicly accessible web site, web application or any form of presentation publicly accessible through the World Wide Web only according to the DryIcons Free License Terms and Conditions:
* You must put a back link with credits to http://dryicons.com on every page where DryIcons' Works are used (example: Icons by DryIcons);
* You must include the correct back link to DryIcons website, which is: http://dryicons.com;
* You must place the link on an easy-to-see, recognizable place, so there is no confusion about the Original Author of the Works (DryIcons);
* When copying, or paraphrasing description text (or title) on one of the Works, you must make sure there are no spelling mistakes;
* Do not try to take credit or imply in any way that you and not DryIcons is the Original Author of the Licensed Material (icons, icon sets and graphics).
What you CAN DO:
1. All DryIcons' Works are being provided to You under the Terms of this agreement, which allows for use of our Works but does not transfer ownership. All DryIcons' Works remain property of DryIcons;
2. You may use DryIcons' Works in any personal or commercial project unlimited number of times according to the DryIcons Free License Terms and Conditions;
3. You may use DryIcons' Works in any Open Source project and application according to the DryIcons Free License Terms and Conditions;
4. Your rights to DryIcons' Works are worldwide and for the duration of DryIcons' rights in the Works;
5. Any uses other than the ones mentioned above must be approved by DryIcons in writing;
6. Unauthorized use will result in immediate termination of this License, and with it, your rights to use DryIcons' Works.
What you CAN NOT DO:
1. You may not alter, crop, modify, manipulate and create derivative works of DryIcons' Works. All Works must be used "AS IS";
2. You may not redistribute, license, sell, lease, assign, convey or transfer DryIcons' Works, or offer free downloads in their present form or in a modified form to any third party;
3. You may not distribute the DryIcons' Works (icons, icon sets and graphics) online in a downloadable format or enable them to be distributed via mobile devices. You may link to http://dryicons.com instead;
4. You may not incorporate DryIcons' Works into a logo, trademark or service mark;
5. You may not use DryIcons' Works directly from dryicons.com or any other location hosted on the dryicons.com domain or any other domain owned by DryIcons.
Copyright
1. DryIcons.com reserves the copyrights and ownership rights of all DryIcons' Works downloaded from this website. We reserve the right to change parts of this License without notice and at our sole discretion.

View File

@ -0,0 +1,68 @@
PCRE LICENCE
------------
PCRE is a library of functions to support regular expressions whose syntax
and semantics are as close as possible to those of the Perl 5 language.
Release 7 of PCRE is distributed under the terms of the "BSD" licence, as
specified below. The documentation for PCRE, supplied in the "doc"
directory, is distributed under the same terms as the software itself.
The basic library functions are written in C and are freestanding. Also
included in the distribution is a set of C++ wrapper functions.
THE BASIC LIBRARY FUNCTIONS
---------------------------
Written by: Philip Hazel
Email local part: ph10
Email domain: cam.ac.uk
University of Cambridge Computing Service,
Cambridge, England.
Copyright (c) 1997-2008 University of Cambridge
All rights reserved.
THE C++ WRAPPER FUNCTIONS
-------------------------
Contributed by: Google Inc.
Copyright (c) 2007-2008, Google Inc.
All rights reserved.
THE "BSD" LICENCE
-----------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the University of Cambridge nor the name of Google
Inc. nor the names of their contributors may be used to endorse or
promote products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
End

View File

@ -0,0 +1,57 @@
7-Zip
~~~~~
License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7-Zip Copyright (C) 1999-2008 Igor Pavlov.
Licenses for files are:
1) 7z.dll: GNU LGPL + unRAR restriction
2) All other files: GNU LGPL
The GNU LGPL + unRAR restriction means that you must follow both
GNU LGPL rules and unRAR restriction rules.
Note:
You can use 7-Zip on any computer, including a computer in a commercial
organization. You don't need to register or pay for 7-Zip.
GNU LGPL information
--------------------
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
unRAR restriction
-----------------
The decompression engine for RAR archives was developed using source
code of unRAR program.
All copyrights to original unRAR code are owned by Alexander Roshal.
The license for original unRAR code has the following restriction:
The unRAR sources cannot be used to re-create the RAR compression algorithm,
which is proprietary. Distribution of modified unRAR sources in separate form
or as a part of other software is permitted, provided that it is clearly
stated in the documentation and source comments that the code may
not be used to develop a RAR (WinRAR) compatible archiver.
--
Igor Pavlov

View File

@ -0,0 +1,25 @@
/* zlib.h -- interface of the 'zlib' general purpose compression library
version 1.2.3, July 18th, 2005
Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Jean-loup Gailly jloup@gzip.org
Mark Adler madler@alumni.caltech.edu
*/

470
official/1.104/LICENSE.txt Normal file
View File

@ -0,0 +1,470 @@
MOZILLA PUBLIC LICENSE
Version 1.1
---------------
1. Definitions.
1.0.1. "Commercial Use" means distribution or otherwise making the
Covered Code available to a third party.
1.1. "Contributor" means each entity that creates or contributes to
the creation of Modifications.
1.2. "Contributor Version" means the combination of the Original
Code, prior Modifications used by a Contributor, and the Modifications
made by that particular Contributor.
1.3. "Covered Code" means the Original Code or Modifications or the
combination of the Original Code and Modifications, in each case
including portions thereof.
1.4. "Electronic Distribution Mechanism" means a mechanism generally
accepted in the software development community for the electronic
transfer of data.
1.5. "Executable" means Covered Code in any form other than Source
Code.
1.6. "Initial Developer" means the individual or entity identified
as the Initial Developer in the Source Code notice required by Exhibit
A.
1.7. "Larger Work" means a work which combines Covered Code or
portions thereof with code not governed by the terms of this License.
1.8. "License" means this document.
1.8.1. "Licensable" means having the right to grant, to the maximum
extent possible, whether at the time of the initial grant or
subsequently acquired, any and all of the rights conveyed herein.
1.9. "Modifications" means any addition to or deletion from the
substance or structure of either the Original Code or any previous
Modifications. When Covered Code is released as a series of files, a
Modification is:
A. Any addition to or deletion from the contents of a file
containing Original Code or previous Modifications.
B. Any new file that contains any part of the Original Code or
previous Modifications.
1.10. "Original Code" means Source Code of computer software code
which is described in the Source Code notice required by Exhibit A as
Original Code, and which, at the time of its release under this
License is not already Covered Code governed by this License.
1.10.1. "Patent Claims" means any patent claim(s), now owned or
hereafter acquired, including without limitation, method, process,
and apparatus claims, in any patent Licensable by grantor.
1.11. "Source Code" means the preferred form of the Covered Code for
making modifications to it, including all modules it contains, plus
any associated interface definition files, scripts used to control
compilation and installation of an Executable, or source code
differential comparisons against either the Original Code or another
well known, available Covered Code of the Contributor's choice. The
Source Code can be in a compressed or archival form, provided the
appropriate decompression or de-archiving software is widely available
for no charge.
1.12. "You" (or "Your") means an individual or a legal entity
exercising rights under, and complying with all of the terms of, this
License or a future version of this License issued under Section 6.1.
For legal entities, "You" includes any entity which controls, is
controlled by, or is under common control with You. For purposes of
this definition, "control" means (a) the power, direct or indirect,
to cause the direction or management of such entity, whether by
contract or otherwise, or (b) ownership of more than fifty percent
(50%) of the outstanding shares or beneficial ownership of such
entity.
2. Source Code License.
2.1. The Initial Developer Grant.
The Initial Developer hereby grants You a world-wide, royalty-free,
non-exclusive license, subject to third party intellectual property
claims:
(a) under intellectual property rights (other than patent or
trademark) Licensable by Initial Developer to use, reproduce,
modify, display, perform, sublicense and distribute the Original
Code (or portions thereof) with or without Modifications, and/or
as part of a Larger Work; and
(b) under Patents Claims infringed by the making, using or
selling of Original Code, to make, have made, use, practice,
sell, and offer for sale, and/or otherwise dispose of the
Original Code (or portions thereof).
(c) the licenses granted in this Section 2.1(a) and (b) are
effective on the date Initial Developer first distributes
Original Code under the terms of this License.
(d) Notwithstanding Section 2.1(b) above, no patent license is
granted: 1) for code that You delete from the Original Code; 2)
separate from the Original Code; or 3) for infringements caused
by: i) the modification of the Original Code or ii) the
combination of the Original Code with other software or devices.
2.2. Contributor Grant.
Subject to third party intellectual property claims, each Contributor
hereby grants You a world-wide, royalty-free, non-exclusive license
(a) under intellectual property rights (other than patent or
trademark) Licensable by Contributor, to use, reproduce, modify,
display, perform, sublicense and distribute the Modifications
created by such Contributor (or portions thereof) either on an
unmodified basis, with other Modifications, as Covered Code
and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using, or
selling of Modifications made by that Contributor either alone
and/or in combination with its Contributor Version (or portions
of such combination), to make, use, sell, offer for sale, have
made, and/or otherwise dispose of: 1) Modifications made by that
Contributor (or portions thereof); and 2) the combination of
Modifications made by that Contributor with its Contributor
Version (or portions of such combination).
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
effective on the date Contributor first makes Commercial Use of
the Covered Code.
(d) Notwithstanding Section 2.2(b) above, no patent license is
granted: 1) for any code that Contributor has deleted from the
Contributor Version; 2) separate from the Contributor Version;
3) for infringements caused by: i) third party modifications of
Contributor Version or ii) the combination of Modifications made
by that Contributor with other software (except as part of the
Contributor Version) or other devices; or 4) under Patent Claims
infringed by Covered Code in the absence of Modifications made by
that Contributor.
3. Distribution Obligations.
3.1. Application of License.
The Modifications which You create or to which You contribute are
governed by the terms of this License, including without limitation
Section 2.2. The Source Code version of Covered Code may be
distributed only under the terms of this License or a future version
of this License released under Section 6.1, and You must include a
copy of this License with every copy of the Source Code You
distribute. You may not offer or impose any terms on any Source Code
version that alters or restricts the applicable version of this
License or the recipients' rights hereunder. However, You may include
an additional document offering the additional rights described in
Section 3.5.
3.2. Availability of Source Code.
Any Modification which You create or to which You contribute must be
made available in Source Code form under the terms of this License
either on the same media as an Executable version or via an accepted
Electronic Distribution Mechanism to anyone to whom you made an
Executable version available; and if made available via Electronic
Distribution Mechanism, must remain available for at least twelve (12)
months after the date it initially became available, or at least six
(6) months after a subsequent version of that particular Modification
has been made available to such recipients. You are responsible for
ensuring that the Source Code version remains available even if the
Electronic Distribution Mechanism is maintained by a third party.
3.3. Description of Modifications.
You must cause all Covered Code to which You contribute to contain a
file documenting the changes You made to create that Covered Code and
the date of any change. You must include a prominent statement that
the Modification is derived, directly or indirectly, from Original
Code provided by the Initial Developer and including the name of the
Initial Developer in (a) the Source Code, and (b) in any notice in an
Executable version or related documentation in which You describe the
origin or ownership of the Covered Code.
3.4. Intellectual Property Matters
(a) Third Party Claims.
If Contributor has knowledge that a license under a third party's
intellectual property rights is required to exercise the rights
granted by such Contributor under Sections 2.1 or 2.2,
Contributor must include a text file with the Source Code
distribution titled "LEGAL" which describes the claim and the
party making the claim in sufficient detail that a recipient will
know whom to contact. If Contributor obtains such knowledge after
the Modification is made available as described in Section 3.2,
Contributor shall promptly modify the LEGAL file in all copies
Contributor makes available thereafter and shall take other steps
(such as notifying appropriate mailing lists or newsgroups)
reasonably calculated to inform those who received the Covered
Code that new knowledge has been obtained.
(b) Contributor APIs.
If Contributor's Modifications include an application programming
interface and Contributor has knowledge of patent licenses which
are reasonably necessary to implement that API, Contributor must
also include this information in the LEGAL file.
(c) Representations.
Contributor represents that, except as disclosed pursuant to
Section 3.4(a) above, Contributor believes that Contributor's
Modifications are Contributor's original creation(s) and/or
Contributor has sufficient rights to grant the rights conveyed by
this License.
3.5. Required Notices.
You must duplicate the notice in Exhibit A in each file of the Source
Code. If it is not possible to put such notice in a particular Source
Code file due to its structure, then You must include such notice in a
location (such as a relevant directory) where a user would be likely
to look for such a notice. If You created one or more Modification(s)
You may add your name as a Contributor to the notice described in
Exhibit A. You must also duplicate this License in any documentation
for the Source Code where You describe recipients' rights or ownership
rights relating to Covered Code. You may choose to offer, and to
charge a fee for, warranty, support, indemnity or liability
obligations to one or more recipients of Covered Code. However, You
may do so only on Your own behalf, and not on behalf of the Initial
Developer or any Contributor. You must make it absolutely clear than
any such warranty, support, indemnity or liability obligation is
offered by You alone, and You hereby agree to indemnify the Initial
Developer and every Contributor for any liability incurred by the
Initial Developer or such Contributor as a result of warranty,
support, indemnity or liability terms You offer.
3.6. Distribution of Executable Versions.
You may distribute Covered Code in Executable form only if the
requirements of Section 3.1-3.5 have been met for that Covered Code,
and if You include a notice stating that the Source Code version of
the Covered Code is available under the terms of this License,
including a description of how and where You have fulfilled the
obligations of Section 3.2. The notice must be conspicuously included
in any notice in an Executable version, related documentation or
collateral in which You describe recipients' rights relating to the
Covered Code. You may distribute the Executable version of Covered
Code or ownership rights under a license of Your choice, which may
contain terms different from this License, provided that You are in
compliance with the terms of this License and that the license for the
Executable version does not attempt to limit or alter the recipient's
rights in the Source Code version from the rights set forth in this
License. If You distribute the Executable version under a different
license You must make it absolutely clear that any terms which differ
from this License are offered by You alone, not by the Initial
Developer or any Contributor. You hereby agree to indemnify the
Initial Developer and every Contributor for any liability incurred by
the Initial Developer or such Contributor as a result of any such
terms You offer.
3.7. Larger Works.
You may create a Larger Work by combining Covered Code with other code
not governed by the terms of this License and distribute the Larger
Work as a single product. In such a case, You must make sure the
requirements of this License are fulfilled for the Covered Code.
4. Inability to Comply Due to Statute or Regulation.
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Code due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description
must be included in the LEGAL file described in Section 3.4 and must
be included with all distributions of the Source Code. Except to the
extent prohibited by statute or regulation, such description must be
sufficiently detailed for a recipient of ordinary skill to be able to
understand it.
5. Application of this License.
This License applies to code to which the Initial Developer has
attached the notice in Exhibit A and to related Covered Code.
6. Versions of the License.
6.1. New Versions.
Netscape Communications Corporation ("Netscape") may publish revised
and/or new versions of the License from time to time. Each version
will be given a distinguishing version number.
6.2. Effect of New Versions.
Once Covered Code has been published under a particular version of the
License, You may always continue to use it under the terms of that
version. You may also choose to use such Covered Code under the terms
of any subsequent version of the License published by Netscape. No one
other than Netscape has the right to modify the terms applicable to
Covered Code created under this License.
6.3. Derivative Works.
If You create or use a modified version of this License (which you may
only do in order to apply it to code which is not already Covered Code
governed by this License), You must (a) rename Your license so that
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
"MPL", "NPL" or any confusingly similar phrase do not appear in your
license (except to note that your license differs from this License)
and (b) otherwise make it clear that Your version of the license
contains terms which differ from the Mozilla Public License and
Netscape Public License. (Filling in the name of the Initial
Developer, Original Code or Contributor in the notice described in
Exhibit A shall not of themselves be deemed to be modifications of
this License.)
7. DISCLAIMER OF WARRANTY.
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
8. TERMINATION.
8.1. This License and the rights granted hereunder will terminate
automatically if You fail to comply with terms herein and fail to cure
such breach within 30 days of becoming aware of the breach. All
sublicenses to the Covered Code which are properly granted shall
survive any termination of this License. Provisions which, by their
nature, must remain in effect beyond the termination of this License
shall survive.
8.2. If You initiate litigation by asserting a patent infringement
claim (excluding declatory judgment actions) against Initial Developer
or a Contributor (the Initial Developer or Contributor against whom
You file such action is referred to as "Participant") alleging that:
(a) such Participant's Contributor Version directly or indirectly
infringes any patent, then any and all rights granted by such
Participant to You under Sections 2.1 and/or 2.2 of this License
shall, upon 60 days notice from Participant terminate prospectively,
unless if within 60 days after receipt of notice You either: (i)
agree in writing to pay Participant a mutually agreeable reasonable
royalty for Your past and future use of Modifications made by such
Participant, or (ii) withdraw Your litigation claim with respect to
the Contributor Version against such Participant. If within 60 days
of notice, a reasonable royalty and payment arrangement are not
mutually agreed upon in writing by the parties or the litigation claim
is not withdrawn, the rights granted by Participant to You under
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
the 60 day notice period specified above.
(b) any software, hardware, or device, other than such Participant's
Contributor Version, directly or indirectly infringes any patent, then
any rights granted to You by such Participant under Sections 2.1(b)
and 2.2(b) are revoked effective as of the date You first made, used,
sold, distributed, or had made, Modifications made by that
Participant.
8.3. If You assert a patent infringement claim against Participant
alleging that such Participant's Contributor Version directly or
indirectly infringes any patent where such claim is resolved (such as
by license or settlement) prior to the initiation of patent
infringement litigation, then the reasonable value of the licenses
granted by such Participant under Sections 2.1 or 2.2 shall be taken
into account in determining the amount or value of any payment or
license.
8.4. In the event of termination under Sections 8.1 or 8.2 above,
all end user license agreements (excluding distributors and resellers)
which have been validly granted by You or any distributor hereunder
prior to termination shall survive termination.
9. LIMITATION OF LIABILITY.
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
10. U.S. GOVERNMENT END USERS.
The Covered Code is a "commercial item," as that term is defined in
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
software" and "commercial computer software documentation," as such
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
all U.S. Government End Users acquire Covered Code with only those
rights set forth herein.
11. MISCELLANEOUS.
This License represents the complete agreement concerning subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. This License shall be governed by
California law provisions (except to the extent applicable law, if
any, provides otherwise), excluding its conflict-of-law provisions.
With respect to disputes in which at least one party is a citizen of,
or an entity chartered or registered to do business in the United
States of America, any litigation relating to this License shall be
subject to the jurisdiction of the Federal Courts of the Northern
District of California, with venue lying in Santa Clara County,
California, with the losing party responsible for costs, including
without limitation, court costs and reasonable attorneys' fees and
expenses. The application of the United Nations Convention on
Contracts for the International Sale of Goods is expressly excluded.
Any law or regulation which provides that the language of a contract
shall be construed against the drafter shall not apply to this
License.
12. RESPONSIBILITY FOR CLAIMS.
As between Initial Developer and the Contributors, each party is
responsible for claims and damages arising, directly or indirectly,
out of its utilization of rights under this License and You agree to
work with Initial Developer and Contributors to distribute such
responsibility on an equitable basis. Nothing herein is intended or
shall be deemed to constitute any admission of liability.
13. MULTIPLE-LICENSED CODE.
Initial Developer may designate portions of the Covered Code as
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
Developer permits you to utilize portions of the Covered Code under
Your choice of the NPL or the alternative licenses, if any, specified
by the Initial Developer in the file described in Exhibit A.
EXHIBIT A -Mozilla Public License.
``The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is ______________________________________.
The Initial Developer of the Original Code is ________________________.
Portions created by ______________________ are Copyright (C) ______
_______________________. All Rights Reserved.
Contributor(s): ______________________________________.
Alternatively, the contents of this file may be used under the terms
of the _____ license (the "[___] License"), in which case the
provisions of [______] License are applicable instead of those
above. If you wish to allow use of your version of this file only
under the terms of the [____] License and not to allow others to use
your version of this file under the MPL, indicate your decision by
deleting the provisions above and replace them with the notice and
other provisions required by the [___] License. If you do not delete
the provisions above, a recipient may use your version of this file
under either the MPL or the [___] License."
[NOTE: The text of this Exhibit A may differ slightly from the text of
the notices in the Source Code files of the Original Code. You should
use the text of this Exhibit A rather than the text found in the
Original Code Source Code for Your Modifications.]

View File

@ -0,0 +1,152 @@
[RAD Studio 2009]
JclJediCodeLibrary=1
JclJCLDef=1
JclJCLDefMath=1
JclJCLDefDebug=0
JclJCLDefEDI=0
JclJCLDefPCRE=1
JclJCLDefBZip2=1
JclJCLDefZLib=1
JclJCLDefUnicode=1
JclJCLDefContainer=1
JclJCLDef7z=1
JclJCLDefThreadSafe=1
JclJCLDefDropObsoleteCode=1
JclJCLDefUnitVersioning=1
JclJCLDefMathPrecSingle=0
JclJCLDefMathPrecDouble=0
JclJCLDefMathPrecExtended=1
JclJCLDefMathExtremeValues=1
JclJCLDefHookDllExceptions=0
JclJCLDefDebugNoBinary=0
JclJCLDefDebugNoTD32=0
JclJCLDefDebugNoMap=0
JclJCLDefDebugNoExports=0
JclJCLDefDebugNoSymbols=0
JclJCLDefEDIWeakPackageUnits=0
JclJCLDefPCREStaticLink=1
JclJCLDefPCRELinkDLL=0
JclJCLDefPCRELinkOnRequest=0
JclJCLDefBZip2StaticLink=1
JclJCLDefBZip2LinkDLL=0
JclJCLDefBZip2LinkOnRequest=0
JclJCLDefZLibStaticLink=1
JclJCLDefZLibLinkDLL=0
JclJCLDefZLibLinkOnRequest=0
JclJCLDefUnicodeSilentFailure=1
JclJCLDefUnicodeRawData=1
JclJCLDefUnicodeZLibData=0
JclJCLDefUnicodeBZip2Data=0
JclJCLDefContainerAnsiStr=0
JclJCLDefContainerWideStr=0
JclJCLDefContainerUnicodeStr=1
JclJCLDefContainerNoStr=0
JclJCLDef7zLinkDLL=0
JclJCLDef7zLinkOnRequest=1
JclJCLEnvironment=0
JclJCLEnvLibPath=0
JclJCLEnvBrowsingPath=0
JclJCLEnvDebugDCUPath=0
JclJCLMake=1
JclJCLMakeRelease=1
JclJCLMakeReleaseVClx=0
JclJCLMakeReleaseVCL=1
JclJCLMakeDebug=1
JclJCLMakeDebugVClx=0
JclJCLMakeDebugVCL=1
JclJCLCopyHppFiles=0
JclJCLCheckHppFiles=0
JclJCLPackages=1
JclJCLVclPackage=1
JclJCLClxPackage=0
JclJCLDualPackages=0
JclJCLCopyPackagesHppFiles=0
JclJCLPdbCreate=0
JclJCLMapCreate=0
JclJCLJdbgCreate=0
JclJCLJdbgInsert=0
JclJCLMapDelete=0
JclJCLExperts=0
JclJCLExpertsDsgnPackages=1
JclJCLExpertsDLL=0
JclJCLExpertDebug=0
JclJCLExpertAnalyzer=0
JclJCLExpertFavorite=0
JclJCLExpertRepository=0
JclJCLExpertThreadNames=0
JclJCLExpertUses=0
JclJCLExpertSimdView=0
JclJCLExpertVersionControl=0
JclJCLExceptDlg=0
JclJCLExceptDlgVCL=0
JclJCLExceptDlgVCLSnd=0
JclJCLExceptDlgCLX=0
JclJCLHelp=0
JclJCLHelpHlp=0
JclJCLHelpChm=0
JclJCLHelpHxS=0
JclJCLHelpHxSPlugin=0
JclJCLMakeDemos=0
BPL-Path=C:\jcl\lib\d12\
DCP-Path=C:\jcl\lib\d12\
[RAD Studio 2009 demos]
examples\common\containers\algorithms\AlgorithmsExample.dpr=0
examples\windows\peimage\ApiHookExample.dpr=0
examples\windows\appinst\AppInstExample.dpr=0
examples\windows\compression\archive\ArchiveDemo.dpr=0
examples\common\graphics\ClipLineDemo.dpr=0
examples\windows\clr\ClrDemo.dpr=0
examples\windows\ConsoleExamples.dpr=0
examples\common\containers\performance\ContainerPerformance.dpr=0
examples\windows\asuser\CreateProcAsUserExample.dpr=0
examples\windows\delphitools\dependencyviewer\DependView.dpr=0
examples\windows\edisdk\EDICOMExample.dpr=0
examples\windows\edisdk\comserver\EDISDK.dpr=0
examples\common\sysinfo\EnvironmentExample.dpr=0
examples\windows\debug\reportconverter\ExceptionReportConverter.dpr=0
examples\common\expreval\ExprEvalExample.dpr=0
examples\common\filesearch\FileSearchDemo.dpr=0
examples\windows\filesummary\FileSummaryExample.dpr=0
examples\windows\debug\framestrack\FramesTrackExample.dpr=0
examples\common\containers\hashing\HashingExample.dpr=0
examples\windows\ntfs\JEDISoftLinks.dpr=0
examples\windows\lanman\LanManExample.dpr=0
examples\common\containers\lists\ListExample.dpr=0
examples\windows\locales\LocalesExample.dpr=0
examples\windows\mapi\MapiExample.dpr=0
examples\common\multimedia\MidiOutExample.dpr=0
examples\windows\multimedia\MultiMediaExample.dpr=0
examples\windows\ntservice\NtSvcExample.dpr=0
examples\common\numformat\NumFormatExample.dpr=0
examples\common\pcre\PCREDemo.dpr=0
examples\windows\peimage\PeFuncExample.dpr=0
examples\windows\delphitools\peviewer\PeViewer.dpr=0
examples\windows\mapi\ReadMailExample.dpr=0
examples\windows\registry\RegistryExample.dpr=0
examples\windows\delphitools\resfix\ResFix.dpr=0
examples\common\rtti\RTTIExample.dpr=0
examples\windows\delphitools\screenjpg\ScreenJPG.dpr=0
examples\windows\appinst\SingleInstExample.dpr=0
examples\windows\debug\sourceloc\SourceLocExample.dpr=0
examples\windows\debug\stacktrack\StackTrackDLLsComLibrary.dpr=0
examples\windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.dpr=0
examples\windows\debug\stacktrack\StackTrackDLLsExample.dpr=0
examples\windows\debug\stacktrack\StackTrackDLLsStaticLibrary.dpr=0
examples\windows\debug\stacktrack\StackTrackExample.dpr=0
examples\common\graphics\StretchGraphicExample.dpr=0
examples\windows\structstorage\StructStorageExample.dpr=0
examples\windows\sysinfo\SysInfoExample.dpr=0
examples\windows\tasks\TaskDemo.dpr=0
examples\common\textconverter\TextConverter.dpr=0
examples\common\textreader\TextReaderExample.dpr=0
examples\windows\debug\threadexcept\ThreadExceptExample.dpr=0
examples\windows\delphitools\toolhelpview\ToolHelpViewer.dpr=0
examples\common\containers\trees\TreeExample.dpr=0
examples\common\containers\trees\TreeStructure.dpr=0
examples\common\unitversioning\UnitVersioningTest.dpr=0
examples\common\unitversioning\UnitVersioningTestDLL.dpr=0
examples\windows\peimage\UnmangleNameExample.dpr=0
examples\windows\fileversion\VerInfoExample.dpr=0
examples\windows\widestring\WideStringExample.dpr=0

Binary file not shown.

View File

@ -0,0 +1,77 @@
================================================================================
JCL 1.104 Release Build 3248
==========RAD Studio 2009=======================================================
Installed personalities :
32 bit Delphi
================================================================================
Single profile installation
================================================================================
Saving conditional defines...
Loaded template for include file C:\jcl\source\include\jcl.template.inc
Saved include file C:\jcl\source\include\jcld12.inc
Making common library units for RAD Studio 2009
Compiling .dcu files...
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" bzip2 Jcl8087 JclAbstractContainers JclAlgorithms JclAnsiStrings JclArrayLists JclArraySets JclBase JclBinaryTrees JclBorlandTools JclComplex JclCompression JclContainerIntf JclCounter JclDateTime JclEDI JclEDISEF JclEDITranslators JclEDIXML JclEDI_ANSIX12 JclEDI_ANSIX12_Ext JclEDI_UNEDIFACT JclEDI_UNEDIFACT_Ext JclExprEval JclFileUtils JclHashMaps JclHashSets JclIniFiles JclLinkedLists JclLogic JclMath JclMIDI JclMime JclPCRE JclQueues JclResources JclRTTI JclSchedule JclSimpleXml JclSortedMaps JclStacks JclStatistics JclStreams JclStrHashMap JclStringConversions JclStringLists JclStrings JclSynch JclSysInfo JclSysUtils JclTrees JclUnicode JclUnitConv JclUnitVersioning JclUnitVersioningProviders JclValidation JclVectors JclWideStrings pcre zlibh --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C- -$D- -$I- -$L- -$O+ -$Q- -$R- -$W- -$Y- -N"..\..\lib\d12" -I"..\include" -U".;..\windows;..\vcl;..\visclx" -R".;..\windows;..\vcl;..\visclx"
CodeGear Delphi for Win32 compiler version 20.0
Copyright (c) 1983,2008 CodeGear
539425 lines, 4.86 seconds, 50250 bytes code, 16736 bytes data.
Making windows library units for RAD Studio 2009
Compiling .dcu files...
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" Hardlinks JclAppInst JclCIL JclCLR JclCOM JclConsole JclDebug JclDotNet JclHookExcept JclLANMan JclLocales JclMapi JclMetadata JclMiscel JclMsdosSys JclMultimedia JclNTFS JclPeImage JclRegistry JclSecurity JclShell JclStructStorage JclSvcCtrl JclTask JclTD32 JclWideFormat JclWin32 JclWin32Ex JclWinMIDI mscoree_TLB mscorlib_TLB MSHelpServices_TLB MSTask sevenzip Snmp --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C- -$D- -$I- -$L- -$O+ -$Q- -$R- -$W- -$Y- -N"..\..\lib\d12" -I"..\include" -U"..\common;.;..\vcl;..\visclx" -R"..\common;.;..\vcl;..\visclx"
CodeGear Delphi for Win32 compiler version 20.0
Copyright (c) 1983,2008 CodeGear
189148 lines, 1.88 seconds, 2448 bytes code, 164 bytes data.
Making vcl library units for RAD Studio 2009
Compiling .dcu files...
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" JclFont JclGraphics JclGraphUtils JclPrint JclVersionControl JclVersionCtrlCVSImpl JclVersionCtrlSVNImpl --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C- -$D- -$I- -$L- -$O+ -$Q- -$R- -$W- -$Y- -N"..\..\lib\d12" -I"..\include" -U"..\common;..\windows;.;..\visclx" -R"..\common;..\windows;.;..\visclx"
CodeGear Delphi for Win32 compiler version 20.0
Copyright (c) 1983,2008 CodeGear
25539 lines, 0.69 seconds, 4364 bytes code, 36 bytes data.
Making common library debug units for RAD Studio 2009
Compiling .dcu files...
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" bzip2 Jcl8087 JclAbstractContainers JclAlgorithms JclAnsiStrings JclArrayLists JclArraySets JclBase JclBinaryTrees JclBorlandTools JclComplex JclCompression JclContainerIntf JclCounter JclDateTime JclEDI JclEDISEF JclEDITranslators JclEDIXML JclEDI_ANSIX12 JclEDI_ANSIX12_Ext JclEDI_UNEDIFACT JclEDI_UNEDIFACT_Ext JclExprEval JclFileUtils JclHashMaps JclHashSets JclIniFiles JclLinkedLists JclLogic JclMath JclMIDI JclMime JclPCRE JclQueues JclResources JclRTTI JclSchedule JclSimpleXml JclSortedMaps JclStacks JclStatistics JclStreams JclStrHashMap JclStringConversions JclStringLists JclStrings JclSynch JclSysInfo JclSysUtils JclTrees JclUnicode JclUnitConv JclUnitVersioning JclUnitVersioningProviders JclValidation JclVectors JclWideStrings pcre zlibh --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C+ -$D+ -$I+ -$L+ -$O- -$Q+ -$R+ -$W+ -$Y+ -N"..\..\lib\d12\debug" -I"..\include" -U".;..\windows;..\vcl;..\visclx" -R".;..\windows;..\vcl;..\visclx"
CodeGear Delphi for Win32 compiler version 20.0
Copyright (c) 1983,2008 CodeGear
540180 lines, 5.01 seconds, 50418 bytes code, 16736 bytes data.
Making windows library debug units for RAD Studio 2009
Compiling .dcu files...
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" Hardlinks JclAppInst JclCIL JclCLR JclCOM JclConsole JclDebug JclDotNet JclHookExcept JclLANMan JclLocales JclMapi JclMetadata JclMiscel JclMsdosSys JclMultimedia JclNTFS JclPeImage JclRegistry JclSecurity JclShell JclStructStorage JclSvcCtrl JclTask JclTD32 JclWideFormat JclWin32 JclWin32Ex JclWinMIDI mscoree_TLB mscorlib_TLB MSHelpServices_TLB MSTask sevenzip Snmp --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C+ -$D+ -$I+ -$L+ -$O- -$Q+ -$R+ -$W+ -$Y+ -N"..\..\lib\d12\debug" -I"..\include" -U"..\common;.;..\vcl;..\visclx" -R"..\common;.;..\vcl;..\visclx"
CodeGear Delphi for Win32 compiler version 20.0
Copyright (c) 1983,2008 CodeGear
189148 lines, 2.06 seconds, 2585 bytes code, 164 bytes data.
Making vcl library debug units for RAD Studio 2009
Compiling .dcu files...
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" JclFont JclGraphics JclGraphUtils JclPrint JclVersionControl JclVersionCtrlCVSImpl JclVersionCtrlSVNImpl --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -M -$C+ -$D+ -$I+ -$L+ -$O- -$Q+ -$R+ -$W+ -$Y+ -N"..\..\lib\d12\debug" -I"..\include" -U"..\common;..\windows;.;..\visclx" -R"..\common;..\windows;.;..\visclx"
CodeGear Delphi for Win32 compiler version 20.0
Copyright (c) 1983,2008 CodeGear
25539 lines, 0.61 seconds, 4650 bytes code, 36 bytes data.
Compiling package C:\jcl\packages\d12\Jcl.dpk...
Cleaning package cache for Jcl120.bpl
Cleaning ok
Compiling package C:\jcl\packages\d12\Jcl.dpk
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" "C:\jcl\packages\d12\Jcl.dpk" --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -N"..\..\lib\d12" -I"..\..\lib\d12;..\..\source\include" -R"..\..\lib\d12;..\..\source\include" -DRELEASE;$(DCC_Define) -U"..\..\lib\d12;..\..\..\DOCUME~1\ALLUSE~1\DOCUME~1\RADSTU~1\6.0\dcp;..\..\lib\d12;..\..\source\include" -LN"..\..\lib\d12" -LE"..\..\lib\d12"
CodeGear Delphi for Win32 compiler version 20.0
Copyright (c) 1983,2008 CodeGear
128 lines, 0.67 seconds, 1358076 bytes code, 675596 bytes data.
Compilation success
...done.
Compiling package C:\jcl\packages\d12\JclContainers.dpk...
Cleaning package cache for JclContainers120.bpl
Cleaning ok
Compiling package C:\jcl\packages\d12\JclContainers.dpk
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" "C:\jcl\packages\d12\JclContainers.dpk" --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -N"..\..\lib\d12" -I"..\..\lib\d12;..\..\source\include" -R"..\..\lib\d12;..\..\source\include" -DRELEASE;$(DCC_Define) -U"..\..\lib\d12;..\..\..\DOCUME~1\ALLUSE~1\DOCUME~1\RADSTU~1\6.0\dcp;..\..\lib\d12;..\..\source\include" -LN"..\..\lib\d12" -LE"..\..\lib\d12"
CodeGear Delphi for Win32 compiler version 20.0
Copyright (c) 1983,2008 CodeGear
62 lines, 0.78 seconds, 1460836 bytes code, 816 bytes data.
Compilation success
...done.
Compiling package C:\jcl\packages\d12\JclVcl.dpk...
Cleaning package cache for JclVcl120.bpl
Cleaning ok
Compiling package C:\jcl\packages\d12\JclVcl.dpk
"C:\Archivos de programa\CodeGear\RAD Studio\6.0\bin\dcc32.exe" "C:\jcl\packages\d12\JclVcl.dpk" --no-config -U"..\..\..\ARCHIV~1\codegear\RADSTU~1\6.0\lib" -N"..\..\lib\d12" -I"..\..\lib\d12;..\..\source\include" -R"..\..\lib\d12;..\..\source\include" -DRELEASE;$(DCC_Define) -U"..\..\lib\d12;..\..\..\DOCUME~1\ALLUSE~1\DOCUME~1\RADSTU~1\6.0\dcp;..\..\lib\d12;..\..\source\include" -LN"..\..\lib\d12" -LE"..\..\lib\d12"
CodeGear Delphi for Win32 compiler version 20.0
Copyright (c) 1983,2008 CodeGear
57 lines, 0.25 seconds, 90620 bytes code, 1612 bytes data.
Compilation success
...done.

View File

@ -0,0 +1 @@
This directory is intended as a common place for sample application's EXE files

16
official/1.104/clean.bat Normal file
View File

@ -0,0 +1,16 @@
@echo cleaning...
@REM do not delete precompiled installer
@for %%f in (bin\*.exe) do @if not %%f==bin\JediInstaller.exe if not %%f==bin\QJediInstaller.exe (del %%f)
@del /f /s *.~* *.bk bin\*.dll *.a *.bpi *.dcp *.dcu *.dpu *.hpp *.jdbg *.map *.o
@cd lib
@del /f /s *.obj *.res *.lib *.bpi
@cd ..
@cd examples
@del /f /s *.cfg
@cd ..
@cd experts
@del /f /s *.cfg
@cd ..
@cd packages
@del /f /s *.cfg *.local *.identcache *.rsp
@cd..

12
official/1.104/clean.sh Normal file
View File

@ -0,0 +1,12 @@
#!/bin/bash
rm -f `find -name \*~`
rm -f `find -name *.~*`
rm -f `find -name *.a`
rm -f `find -name *.bpi`
rm -f `find -name *.dcp`
rm -f `find -name *.dcu`
rm -f `find -name *.dpu`
rm -f `find -name *.hpp`
rm -f `find -name *.o`
rm -f packages/k?/*.mak

View File

@ -0,0 +1,19 @@
rem shell script to create templates
copy ..\source\include\jcl.template.inc ..\source\include\jclc5.inc
copy ..\source\include\jcl.template.inc ..\source\include\jclc6.inc
copy ..\source\include\jcl.template.inc ..\source\include\jclkc3.inc
copy ..\source\include\jcl.template.inc ..\source\include\jclkd3.inc
copy ..\source\include\jcl.template.inc ..\source\include\jcld5.inc
copy ..\source\include\jcl.template.inc ..\source\include\jcld6.inc
copy ..\source\include\jcl.template.inc ..\source\include\jcld7.inc
copy ..\source\include\jcl.template.inc ..\source\include\jclcs1.inc
copy ..\source\include\jcl.template.inc ..\source\include\jcld8.inc
copy ..\source\include\jcl.template.inc ..\source\include\jcld9.inc
copy ..\source\include\jcl.template.inc ..\source\include\jcld9.net.inc
copy ..\source\include\jcl.template.inc ..\source\include\jcld10.inc
copy ..\source\include\jcl.template.inc ..\source\include\jcld10.net.inc
copy ..\source\include\jcl.template.inc ..\source\include\jcld11.inc
copy ..\source\include\jcl.template.inc ..\source\include\jcld11.net.inc
copy ..\source\include\jcl.template.inc ..\source\include\jcld12.inc

View File

@ -0,0 +1,21 @@
#!/bin/sh
#
# shell script to create templates
cp ../source/include/jcl.template.inc ../source/include/jclc5.inc
cp ../source/include/jcl.template.inc ../source/include/jclc6.inc
cp ../source/include/jcl.template.inc ../source/include/jclkc3.inc
cp ../source/include/jcl.template.inc ../source/include/jclkd3.inc
cp ../source/include/jcl.template.inc ../source/include/jcld5.inc
cp ../source/include/jcl.template.inc ../source/include/jcld6.inc
cp ../source/include/jcl.template.inc ../source/include/jcld7.inc
cp ../source/include/jcl.template.inc ../source/include/jclcs1.inc
cp ../source/include/jcl.template.inc ../source/include/jcld8.inc
cp ../source/include/jcl.template.inc ../source/include/jcld9.inc
cp ../source/include/jcl.template.inc ../source/include/jcld9.net.inc
cp ../source/include/jcl.template.inc ../source/include/jcld10.inc
cp ../source/include/jcl.template.inc ../source/include/jcld10.net.inc
cp ../source/include/jcl.template.inc ../source/include/jcld11.inc
cp ../source/include/jcl.template.inc ../source/include/jcld11.net.inc
cp ../source/include/jcl.template.inc ../source/include/jcld12.inc

BIN
official/1.104/devtools/jpp Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<Configuration>
<!-- These are the values stored by jaxStore -->
<pgEdit/>
<!--
The nodes below are read by the generation process.
Packages are generated according to a model. The models are defined
below and contain generic informations such as the prefix, the format,
the location of packages and the location of the include file that
contains conditional directives (only used for BCB)
Then each model defines Targets and Aliases as described below:
First, the targets:
The format of each target node is:
name dir pname pdir env ver defines
name The name of the target, compulsory
dir The directory where to generate the packages. Defaults to name
pname The name of the associated Perso target. A perso target
is the target that will be considered to allow the generation
of a different package for a version of the target that do not
support some features (Database generally). Leave empty if there
are no reason to use this feature.
pdir The directory for the associated perso target. Defaults to pname
env A character to identify the development environment. Defaults to
the first character of name
ver A character to identify the version of the environment. Defaults
to the second character of name
defines A comma separated string to indicate which Conditional
Compilation symbols are defined as the result of using this
target so that your include file can enclose some $DEFINE in
$IFDEF that relate to the compiler being used
PathSep Indicates which character is to be used as a path separator for
the target. If not specified, this value defaults to "\"
IsClx If set to 1 (True), then the target is a CLX target
Then aliases:
The format for each alias node is:
name value
name the name of the alias
value the comma separated list of targets this alias will expand to.
No recursion is done. You don't have to specify the 'all' alias,
it will be derived from the target list. If you defined some Perso
target, do not forget to include them in the value for your alias
Finally, CLX filename replacements (see accompanying doc for more details)
The format for each filename node is:
original replacement
original the prefix to be replaced in file names
replacement the value to use as a replacement
Be careful, all properties of the model node must exist and the targets and
aliases children must exist too. If there is no target specified, none will
be available.
-->
<models>
<Model format="%p%n" name="JCL" prefix="Jcl" packages="..\packages" incfile="" nolibsuffixformat="%p%n%e%v0" dotnetprefix="Jedi.Jcl">
<targets>
<target name="c5"/>
<target name="c6"/>
<target name="d5"/>
<target name="d6"/>
<target name="d7"/>
<target name="d8" IsBds="1"/>
<target name="cs1" IsBds="1"/>
<target name="d9" IsBds="1"/>
<target name="d10" IsBds="1"/>
<target name="k3" PathSep="/"/>
<target name="d9.net" IsDotNet="1"/>
<target name="d10.net" IsDotNet="1"/>
<target name="d11" IsBds="1"/>
<target name="d11.net" IsDotNet="1"/>
<target name="d12" IsBds="1"/>
</targets>
<aliases>
<alias name="Delphi" value="d5,d6,d7,d9,d10,d11,d12"/>
<alias name="Bcb" value="c5,c6,d10,d11,d12"/>
<alias name="Kylix" value="k3"/>
<alias name="Windows" value="c5,c6,d5,d6,d7,d9,d10,d11,d12"/>
<alias name="Linux" value="k3"/>
<alias name="WinDev" value="c5,c6,d5,d6,d7,d8,d9,d10,cs1,d11,d12"/>
<alias name="JclDev" value="c5,c6,d5,d6,d7,d8,d9,d10,k3,cs1,d11,d12"/>
<alias name="DelphiDev" value="d5,d6,d7,d8,d9,d10,d11,d12"/>
<alias name="WinLibSuffix" value="c6,d6,d7,d8,d9,d10,cs1,d11,d12"/>
<alias name="allLibSuffix" value="c6,d6,d7,d8,d9,d10,k3,cs1,d11,d12"/>
<alias name="allv12up" value="d12"/>
<alias name="noLibSuffix" value="c5,d5"/>
<alias name="Clx" value="c6,d6,d7,k3"/>
<alias name="Vcl" value="c5,d5,c6,d6,d7,d9,d10,d11,d12"/>
<alias name="Bds" value="cs1,d8,d9,d10,d11,d12"/>
<alias name="JclDotNet" value="d9.net,d10.net,d11.net"/>
<alias name="OldStyleIDE" value="c5,c6,d5,d6,d7"/>
</aliases>
<ProjectProperties>
<ProjectProperty name="VersionMajorNumber" value="1"/>
<ProjectProperty name="VersionMinorNumber" value="104"/>
<ProjectProperty name="ReleaseNumber" value="1"/>
<ProjectProperty name="BuildNumber" value="3248"/>
</ProjectProperties>
</Model>
</models>
</Configuration>

View File

@ -0,0 +1,33 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<link rel="stylesheet" href="..%5CDclStyle.css">
<title>Contacting authors</title></head>
<body>
<h1>Contacting authors</h1>
<p>
The JEDI Code Library is built upon donations by various individuals. In the
documentation for each subroutine or class you will find who the author of that
particular code is by looking in the "Quick Info" section. The author's e-mail
is not listed there. It is listed in the contributors page elsewhere in this
document. Therefore if you really need to contact an author it is possible. However,
generically speaking, you should <b>never contact an author</b> regarding code included
in this library. There are various reasons for this with the two most prominent
being that some authors explicitly requested this and because "author" means
different things in different context. Usually "author" means that the described
code was donated to the JCL by that individual and included after reformatting and
only minor modifications. However, sometimes code was significantly altered,
rewritten several times or 'merely' based upon or inspired by code from that
individual. Consequently there exist several routines which in no way resemble
the original code as it was donated by the "author". Nevertheless, the individual
that orginally donated the code is still documented as the author.
</p><p>
In general, if you like some routine very much and it has proven to work correctly:
be grateful to the author (in thought, not by sending him or her an e-mail). On
the other hand, if some routine turns out to be buggy, incorrect or for whatever
reason is not to your liking: complain to me. It was most likely we who screwed
it up and introduced those bugs into code that was working perfectly until we got
our hands on it! To report bugs, use Project JEDI's
<a href="http://homepages.borland.com/jedi/issuetracker/">Issue Tracker</a>.
</p><div class="footer">Built on Saturday, November 24, 2007</div>
</body></html>

View File

@ -0,0 +1,398 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<link rel="stylesheet" href="..%5CDclStyle.css">
<title>JCL Contributors (code donators)</title></head>
<body>
<h2>Contributors</h2>
<p>
Following is a list of all people that donated, or gave permission to use their,
code in the JEDI Code Library. Be sure that you read the Contacting Authors page
in the JCL helpfile before contacting these people. Note that JCL is continously
in development and by far not all donations have been processed yet. We're not
even half way! Therefore it is very well possible that you donated code but it's
not in the JCL yet. However, if you're name is not in the list below then it's
likely that something has gone wrong. In that event, please
<a href="mailto:jcl@delphi-jedi.org?subject=JCL%20Donations">contact us</a>.
</p>
<p>
<table>
<tbody>
<tr valign="top">
<td width="25%"><a href="mailto:aa@bitsmart.com">aa</a></td>
<td width="25%"><a href="mailto:alanglloyd@aol.com">Alan Lloyd</a></td>
<td width="25%">Alex Denissov</td>
<td width="25%"><a href="mailto:alexk@mtgroup.ru">Alex Konshin</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:ravnvt@chat.ru">Alexander Radchenko</a></td>
<td width="25%">Alexei Koudinov</td>
<td width="25%">Allan Lyons</td>
<td width="25%">Anders Melander</td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:asnepvangers@users.sourceforge.net">André Snepvangers</a></td>
<td width="25%"><a href="mailto:ahuser@users.sourceforge.net">Andreas Hausladen</a></td>
<td width="25%"><a href="mailto:Jakobsche@addcom.de">Andreas Jakobsche</a></td>
<td width="25%"><a href="mailto:ajohnson@rpi.net.au">Angus Johnson</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:asteele@iafrica.com">Anthony Steele</a></td>
<td width="25%"><a href="mailto:azret@attglobal.net">Azret Botash</a></td>
<td width="25%">Barry Kelly</td>
<td width="25%"><a href="mailto:HBender@Ergonomics.ch">Bender Heri</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:bernhardberger@yahoo.de">Bernhard Berger</a></td>
<td width="25%"><a href="mailto:oracle@bmts.com">Bryan Coutch</a></td>
<td width="25%"><a href="mailto:carl@caztec.co.za">Carl Clark</a></td>
<td width="25%"><a href="mailto:cenon@mail.com">Cenon Del Rosario</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:ccalvert@inprise.com">Charlie Calvert</a></td>
<td width="25%">Chris Morris</td>
<td width="25%"><a href="mailto:christoph@lindemann.nu">Christoph Lindeman</a></td>
<td width="25%">Clayton Collie</td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:sahfs@iafrica.com">Corrie Engelbrecht</a></td>
<td width="25%"><a href="mailto:Cybertron_549672@yahoo.com">Cybertron_549672</a></td>
<td width="25%"><a href="mailto:dj@sguft.com">Daniel Møller</a></td>
<td width="25%"><a href="mailto:david@e.co.za">David Butler</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:dhervieux@Pirel.com">David Hervieux</a></td>
<td width="25%"><a href="mailto:deian@datecs.bg">Deian Ivanov</a></td>
<td width="25%"><a href="mailto:dewaldh@emsoft.co.za">Dewald Hess</a></td>
<td width="25%"><a href="mailto:rmaley@fenix2.dol-esa.gov">Dick Maley (Advanced Delphi Systems)</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:dylan@intelnet.net.gt">Dylan Thomas</a></td>
<td width="25%"><a href="mailto:EarlGlynn@att.net">Earl F. Glynn</a></td>
<td width="25%">Eric S. Fisher</td>
<td width="25%">Ernesto Benestante</td>
</tr>
<tr valign="top">
<td width="25%">ESB Consultancy</td>
<td width="25%"><a href="mailto:ftfarias@dialdata.com.br">Felipe de Toledo Farias</a></td>
<td width="25%"><a href="mailto:flier@users.sourceforge.net">Flier Lu</a></td>
<td width="25%"><a href="mailto:ouchet.florent@laposte.net">Florent Ouchet</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:hallvard.vassbotn@c2i.net">Hallvard Vassbotn</a></td>
<td width="25%"><a href="mailto:heinzz@users.sourceforge.net">Heinz Zastrau</a></td>
<td width="25%"><a href="mailto:helebor@wr.com.au">Helen Borrie</a></td>
<td width="25%">Heri Bender</td>
</tr>
<tr valign="top">
<td width="25%">Huanlin Tsai</td>
<td width="25%"><a href="mailto:bauer@ozm.cz">Ivo Bauer</a></td>
<td width="25%"><a href="mailto:Jack.Bombeeck@Onstream.com">Jack Bombeeck</a></td>
<td width="25%"><a href="mailto:jackb@europdonor.nl">Jack N.A. Bakker</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:support@jazarsoft.cjb.net">James Azarja</a></td>
<td width="25%">Jean Debord</td>
<td width="25%"><a href="mailto:cycocrew@orange.fr">Jean-Fabien Connault</a></td>
<td width="25%"><a href="mailto:rdm_30@users.sourceforge.net">Jean-Philippe BEMPEL</a></td>
</tr>
<tr valign="top">
<td width="25%">Jeroen Speldekamp</td>
<td width="25%"><a href="mailto:johannes.berg@gmx.net">Johannes Berg</a></td>
<td width="25%"><a href="mailto:jaymol@hotmail.com">John C Molyneux</a></td>
<td width="25%"><a href="mailto:jud.mccranie@mindspring.com">Jud McCranie</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:j.ferraro@netcourrier.com">Julien Ferraro</a></td>
<td width="25%"><a href="mailto:gallaghe@teleport.com">Kevin S. Gallagher</a></td>
<td width="25%"><a href="mailto:lasse@cintra.no">Lasse Vågsæther Karlsen</a></td>
<td width="25%">Leonard Wennekers</td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:liran_shahar@hotmail.com">Liran Shahar</a></td>
<td width="25%"><a href="mailto:lloydk@iname.com">Lloyd Kinsella</a></td>
<td width="25%"><a href="mailto:lucjanl@usa.net">Lucjan Lukasik</a></td>
<td width="25%"><a href="mailto:mavegaart@csstelecom.nl">M.H. Avegaart</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:edgar@ccis.adisys.com.au">Malcolm Edgar</a></td>
<td width="25%"><a href="mailto:manlio@users.sourceforge.net">Manlio Laschena</a></td>
<td width="25%">Marc Convents</td>
<td width="25%"><a href="mailto:marcelb@zeelandnet.nl">Marcel Bestebroer</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:brakelm@bart.nl">Marcel van Brakel</a></td>
<td width="25%"><a href="mailto:wieczor@polbox.com">Marcin Wieczorek</a></td>
<td width="25%"><a href="mailto:DonLuigi@gmx.net">Marco Klemm</a></td>
<td width="25%"><a href="mailto:ochnap2@yahoo.com.ar">Mario R. Carro</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:marius@caddie.co.za">Marius le Roux</a></td>
<td width="25%">Mark Vaughan</td>
<td width="25%">Martin Kimmings</td>
<td width="25%">Martin Kubecka</td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:nissl@dada.it">Massimo Maria Ghisalberti</a></td>
<td width="25%"><a href="mailto:MHamilton@bunge.com.au">Matt Hamilton</a></td>
<td width="25%"><a href="mailto:mthoma@users.sourceforge.net">Matthias Thoma</a></td>
<td width="25%"><a href="mailto:michrynn@ozemail.com.au">Michael Rynn</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:mschnell@bschnell.de">Michael Schnell</a></td>
<td width="25%"><a href="mailto:easyman@ms2.seeder.net">Michael Tsai</a></td>
<td width="25%">Michael Winter</td>
<td width="25%"><a href="mailto:public@lischke-online.de">Mike Lischke</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:nhodges@icss.net">Nick Hodges</a></td>
<td width="25%"><a href="mailto:n.haeck@simdesign.nl">Nils Haeck</a></td>
<td width="25%"><a href="mailto:assarbad@users.sourceforge.net">Oliver Schneider</a></td>
<td width="25%"><a href="mailto:obones@users.sourceforge.net">Olivier Sannier</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:patrick.vanlaake@ieee.org">Patrick van Laake</a></td>
<td width="25%"><a href="mailto:pcisar@atlas.cz">Pavel Cisar</a></td>
<td width="25%"><a href="mailto:pelle.liljendal@firstconcern.com">Pelle Liljendal</a></td>
<td width="25%"><a href="mailto:freter@gmx.net">Peter Friese</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:fmcmp02@kc.kzn.school.za">Peter McMahon</a></td>
<td width="25%"><a href="mailto:peter-panino@aon.at">Peter Panino</a></td>
<td width="25%"><a href="mailto:peter3@users.sourceforge.net">Peter Thörnquist</a></td>
<td width="25%"><a href="mailto:pvones@users.sourceforge.net">Petr Vones</a></td>
</tr>
<tr valign="top">
<td width="25%">Python</td>
<td width="25%"><a href="mailto:ralfjunker@gmx.de">Ralf Junker</a></td>
<td width="25%"><a href="mailto:rayspostbox3@users.sourceforge.net">Raymond Alexander</a></td>
<td width="25%"><a href="mailto:rikbarker@users.sourceforge.net">Rik Barker</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:rhlee@nwu.edu">Robert Lee</a></td>
<td width="25%"><a href="mailto:marquardt@users.sourceforge.net">Robert Marquardt</a></td>
<td width="25%"><a href="mailto:robmarsh@koit.fanz.net">Robert R. Marsh</a></td>
<td width="25%"><a href="mailto:Robert.Rossmair@users.sourceforge.net">Robert Rossmair</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:rvelthuis@gmx.de">Rudy Velthuis</a></td>
<td width="25%"><a href="mailto:scottprice@users.sourceforge.net">Scott Price</a></td>
<td width="25%"><a href="mailto:anthony@southeaster.com">SouthEaster</a></td>
<td width="25%"><a href="mailto:stefan_kirschner@01019freenet.de">Stefan Kirschner</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:sfillon@ifrance.com">Stephane Fillon</a></td>
<td width="25%"><a href="mailto:SterlingButts@Bigfoot.com">Sterling Butts</a></td>
<td width="25%"><a href="mailto:bebekis@otenet.gr">Theo Bebekis</a></td>
<td width="25%"><a href="mailto:tim@things.demon.co.uk">Tim Yates</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:tomhahn@users.sourceforge.net">Tom Hahn</a></td>
<td width="25%"><a href="mailto:uschuster@users.sourceforge.net">Uwe Schuster</a></td>
<td width="25%"><a href="mailto:jones-jr@skynet.be">Wim De Cleen</a></td>
<td width="25%"><a href="mailto:ygolan@netvision.net.il">Yaniv Golan</a></td>
</tr>
<tr valign="top">
<td width="25%"><a href="mailto:">Your name here?</a></td>
</tr>
</tbody>
</table>
</p>
<p>
</p>
<div class="footer">Built on 2007-11-24</div>
<p></p>
</body></html>

View File

@ -0,0 +1,116 @@
aa=aa@bitsmart.com
Alan Lloyd=alanglloyd@aol.com
Alex Denissov=denisso@uwindsor.ca
Alex Konshin=alexk@mtgroup.ru
Alexander Radchenko=ravnvt@chat.ru
Alexei Koudinov=
Allan Lyons=
Anders Melander=
André Snepvangers=asnepvangers@users.sourceforge.net
Andreas Hausladen=ahuser@users.sourceforge.net
Andreas Jakobsche=Jakobsche@addcom.de
Angus Johnson=ajohnson@rpi.net.au
Anthony Steele=asteele@iafrica.com
Azret Botash=azret@attglobal.net
Barry Kelly=barry.j.kelly@gmail.com
Bender Heri=HBender@Ergonomics.ch
Bernhard Berger=bernhardberger@yahoo.de
Bryan Coutch=oracle@bmts.com
Carl Clark=carl@caztec.co.za
Cenon Del Rosario=cenon@mail.com
Charlie Calvert=ccalvert@inprise.com
Chris Morris=
Christoph Lindeman=christoph@lindemann.nu
Clayton Collie=
Corrie Engelbrecht=sahfs@iafrica.com
Cybertron_549672=Cybertron_549672@yahoo.com
Daniel Møller=dj@sguft.com
David Butler=david@e.co.za
David Hervieux=dhervieux@Pirel.com
Deian Ivanov=deian@datecs.bg
Dewald Hess=dewaldh@emsoft.co.za
Dick Maley (Advanced Delphi Systems)=rmaley@fenix2.dol-esa.gov
Dylan Thomas=dylan@intelnet.net.gt
Earl F. Glynn=EarlGlynn@att.net
Eric S. Fisher=
Ernesto Benestante=
ESB Consultancy=
Felipe de Toledo Farias=ftfarias@dialdata.com.br
Flier Lu=flier@users.sourceforge.net
Florent Ouchet=ouchet.florent@laposte.net
Hallvard Vassbotn=hallvard.vassbotn@c2i.net
Heinz Zastrau=heinzz@users.sourceforge.net
Helen Borrie=helebor@wr.com.au
Heri Bender=
Huanlin Tsai=
Ivo Bauer=bauer@ozm.cz
Jack Bombeeck=Jack.Bombeeck@Onstream.com
Jack N.A. Bakker=jackb@europdonor.nl
James Azarja=support@jazarsoft.cjb.net
Jean Debord=
Jean-Fabien Connault=cycocrew@orange.fr
Jean-Philippe BEMPEL=rdm_30@users.sourceforge.net
Jeroen Speldekamp=
Johannes Berg=johannes.berg@gmx.net
John C Molyneux=jaymol@hotmail.com
Jud McCranie=jud.mccranie@mindspring.com
Julien Ferraro=j.ferraro@netcourrier.com
Kevin S. Gallagher=gallaghe@teleport.com
Lasse Vågsæther Karlsen=lasse@cintra.no
Leonard Wennekers=
Liran Shahar=liran_shahar@hotmail.com
Lloyd Kinsella=lloydk@iname.com
Lucjan Lukasik=lucjanl@usa.net
M.H. Avegaart=mavegaart@csstelecom.nl
Malcolm Edgar=edgar@ccis.adisys.com.au
Manlio Laschena=manlio@users.sourceforge.net
Marc Convents=
Marcel Bestebroer=marcelb@zeelandnet.nl
Marcel van Brakel=brakelm@bart.nl
Marcin Wieczorek=wieczor@polbox.com
Marco Klemm=DonLuigi@gmx.net
Mario R. Carro=ochnap2@yahoo.com.ar
Marius le Roux=marius@caddie.co.za
Mark Vaughan=
Martin Kimmings=
Martin Kubecka=
Massimo Maria Ghisalberti=nissl@dada.it
Matt Hamilton=MHamilton@bunge.com.au
Matthias Thoma=mthoma@users.sourceforge.net
Michael Rynn=michrynn@ozemail.com.au
Michael Schnell=mschnell@bschnell.de
Michael Tsai=easyman@ms2.seeder.net
Michael Winter=
Mike Lischke=public@lischke-online.de
Nick Hodges=nhodges@icss.net
Nils Haeck=n.haeck@simdesign.nl
Oliver Schneider=assarbad@users.sourceforge.net
Olivier Sannier=obones@users.sourceforge.net
Patrick van Laake=patrick.vanlaake@ieee.org
Pavel Cisar=pcisar@atlas.cz
Pelle F. S. Liljendal=pelle.liljendal@firstconcern.com
Peter Friese=freter@gmx.net
Peter McMahon=fmcmp02@kc.kzn.school.za
Peter Panino=peter-panino@aon.at
Peter Thörnquist=peter3@users.sourceforge.net
Petr Vones=pvones@users.sourceforge.net
Python=
Ralf Junker=ralfjunker@gmx.de
Raymond Alexander=rayspostbox3@users.sourceforge.net
Rik Barker=rikbarker@users.sourceforge.net
Robert Lee=rhlee@nwu.edu
Robert Marquardt=marquardt@users.sourceforge.net
Robert R. Marsh=robmarsh@koit.fanz.net
Robert Rossmair=Robert.Rossmair@users.sourceforge.net
Rudy Velthuis=rvelthuis@gmx.de
Scott Price=scottprice@users.sourceforge.net
SouthEaster=anthony@southeaster.com
Stefan Kirschner=stefan_kirschner@01019freenet.de
Stephane Fillon=sfillon@ifrance.com
Sterling Butts=SterlingButts@Bigfoot.com
Theo Bebekis=bebekis@otenet.gr
Tim Yates=tim@things.demon.co.uk
Tom Hahn=tomhahn@users.sourceforge.net
Uwe Schuster=uschuster@users.sourceforge.net
Wim De Cleen=jones-jr@skynet.be
Yaniv Golan=ygolan@netvision.net.il

View File

@ -0,0 +1,160 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en-us">
<head>
<title>JEDI Code Library Release 1.103</title>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<link rel="stylesheet" type="text/css" href="styles/default.css">
<meta content="Project JEDI" name="author">
</head>
<body>
<hr><br>
<h1>JEDI Code Library</h1>
<p>Release 1.104<br>
Build 3248<br>
21-January-2009</p>
<hr><br>
<h3>Content of this file</h3>
<ul>
<li><a href="#about">About experts</a></li>
<li><a href="#debug">Debug Extension for JclDebug unit</a></li>
<li><a href="#version">Version control expert</a></li>
<li><a href="#xmm">XMM debug window</a></li>
<li><a href="#favorites">Favorite combobox in Open/Save dialogs</a></li>
</ul>
<hr><br>
<h3><a name="about">About experts</a></h3>
<p>For Delphi 5, Delphi 6, Delphi 7, C++Builder 5 and C++Builder 6, experts can
be installed as design time packages or dll experts. For C#Builder 1 and Delphi 8,
experts are installed as dll experts (those products don't load design time
packages). For Delphi 2005, Borland Developer Studio 2006 and Turbo Delphi Professional,
experts are installed as design time packages.</p>
<h3><a name="debug">Debug Extension for JclDebug unit</a></h3>
<p>The <tt>experts\debug </tt>folder contains an IDE expert which
assists to insert JCL Debug information into executable files. This can be
useful when use source location routines from JclDebug unit. These routines
need some kind of special information to be able provide source location for
given address in the process. Currently there are four options to get it work:</p>
<ol>
<li>Generate and deploy MAP file with your executable file. The file
is generated by the linker. It needs to be set in Project|Options
dialog -&gt; Linker page, Detailed checkbox.</li>
<li>Generate and deploy JDBG file file with your executable file.
This is binary file based on MAP file but its size is typically about
12% of original MAP file. You can generate it by MapToJdbg tool in <tt>jcl\examples\windows\tools</tt>
folder. The advantage over MAP file is smaller size and better security
of the file content because it is not a plain text file and it also
contains a checksum. The IDE expert can automatically create this file
when the project is compiled (see below).</li>
<li>Insert JCL Debug info into executable file. The
size of added data is similar to JDBG file but it will be inserted
directly into the executable file. This is probably best option because
it combines small size of included data and no requirement of deploying
additional files. The IDE expert can automatically insert these informations
when the project is compiled (see below).</li>
<li>Generate Borland TD32 debug symbols. These symbols are stored
directly in the executable file but usually adds several megabytes so
the file is very large. The advantage is you don't have to deploy any
other file and it is easy to generate it by checking Include TD32 debug
info in Linker option page.</li>
</ol>
<p>
The IDE expert will add new item to IDE Project menu. For
Delphi 5, 6 and 7 it adds 'Insert JCL Debug data' check item at the end
of the Project menu. When the item is checked, everytime the project is
compiled by one of following commands: Compile, Build, Compile All Projects,
Build All Projects or Run necessary JCL debug data are automatically created
from the detailled MAP file. The behavior of this conversion can be customized in
the JCL options dialog (in the Tools menu of the IDE): the debug informations can
be exported as .jdbg files or inserted in the binary file. The expert outputs a
message in the IDE message view to display details about the data being generated.</p>
<p>
You can generate those debug data for packages and libraries as well
using the expert. Each executable file in the project can use different option
from those listed above. It is not necessary to generate any debug data for
Borland runtime packages because the source location code can use names of exported
functions to get procedure or method name. To get line number information for
Borland RTL and VCL/CLX units you have to check Use Debug DCUs checkbox in
Project|Options dialog -&gt; Compiler tab. Unfortunately it is not
possible to get line number information for Borland runtime packages
because Borland does not provide detailed MAP files for them so you get
procedure or method name only.</p>
<p>In case you have more than one data source for an executable file by
an accident the best one is chosen in following order:</p>
<ol>
<li>JCL Debug data in the executable file</li>
<li>JDBG file</li>
<li>Borland TD32 symbols</li>
<li>MAP file</li>
<li>DBG and PDB debug informations (for system DLLs)</li>
<li>Library or Borland package export tables</li>
</ol>
<p>It is also possible to create JCL debug data programmatically from a MAP file
by using MakeJclDbg command line tool in jcl\examples\windows\delphitools folder.
This utility can either export data as a separate .jdbg file or insert them in the
executable. You can study included makefiles which uses this tool for building
delphitools examples.</p>
<p>To help using JclDebug exceptional stack tracking in application
simple dialog is provided in <tt>jcl\experts\debug\dialog</tt>folder. The dialog
replaces standard dialog displayed by VCL or CLX application when an unhandled
exception occurs. It has additional Detailed button showing the stack, list of
loaded modules and other system information. By adding the dialog to the
application exceptional stack tracking code is automatically initialized so you
don't have to care about it. You can also turn on logging to text file by setting
the Tag property of the dialog to '1'. There is also version for CLX
(ClxExceptDlg) but it works on Windows only. These dialogs are intended to be added to
Object Repository.</p>
<p><b>Short description of getting the JclDebug functionality in your
project:</b></p>
<ol>
<li>Close all running instances of Delphi
</li>
<li>Install JCL and IDE experts by the JCL Installer
</li>
<li>Run Delphi IDE and open your project
</li>
<li>Remove any TApplication.OnException handlers from your project(if any).
</li>
<li>Add new Exception Dialog by selecting File | New | Other ... |
Delphi Projects | Delphi Files, Select 'JCL Exception Dialog for XXX' (where XXX is
either Delphi or C++Builder depending on your project). A wizard will appear to
configure the options for this dialog.
</li>
<li>Check "Project" | "Insert JCL Debug data" menu item
</li>
<li>Do Project | Build</li>
</ol>
<hr><br>
<h3><a name="version">Version control expert</a></h3>
<p>A new expert integrating version control systems in the IDE was added.
It provides an integration of TortoiseCVS and TortoiseSVN inside the IDE, items
are added in the IDE menu and buttons can be placed in IDE toolbars via the
customize dialog, see below.</p>
<p>A dialog-box provides configuration options for JCL experts in the Tools menu.</p>
<p>It wraps <a href="http://tortoisecvs.sourceforge.net/">TortoiseCVS</a>&nbsp;
and&nbsp;<a href="http://tortoisesvn.sourceforge.net/">TortoiseSVN</a>&nbsp;commands in
actions that can be placed on IDE toolbars and in IDE menu.</p>
<p>This expert requires <a href="http://tortoisecvs.sourceforge.net/">TortoiseCVS</a>&nbsp;
or/and&nbsp;<a href="http://tortoisesvn.sourceforge.net/">TortoiseSVN</a>&nbsp;installed on the
system to properly work. Please refer to these products documentations for help
about using version control systems.</p>
<p>The structure of the "Jcl Version" menu can be customized in the JCL options
dialog (in the "Tools" menu).</p>
<hr><br>
<h3><a name="xmm">XMM debug window</a></h3>
<p>This dialog provides enhancement to the debugger of Delphi and C++Builder regarding
XMM registers. These registers were introduced in SSE instructions (and are still
used in SSE2, SSE3 and SSSE3 instructions). This dialog can be displayed by clicking
on menu View | Debug Windows | SIMD (keyboard shortcut Ctrl+Alt+D).
It is divided in to panes following the style of the FPU window: the left pane
displays content of registers and the right pane displays MXCSR flags. The format
of the registers can be modified from the context. All registers and flags can be
modified and changes will be applied to the debugged process.</p>
<hr><br>
<h3><a name="favorites">Favorite combobox in Open/Save dialogs</a></h3>
<p>This expert modifies the IDE Open/Save dialogs and add a combobox to store your
favorite directories. Items can be added and deleted using the button at the right
of the combobox.</p>
</body>
</html>

View File

@ -0,0 +1,131 @@
<HTML>
<HEAD>
<LINK REL="stylesheet" HREF="..\DclStyle.css">
<TITLE>MPL FAQ</TITLE>
</HEAD>
<BODY>
<P ALIGN=CENTER>
<FONT SIZE="+2"><B>Mozilla Public License FAQ</B></FONT><BR>
<B>Draft 1.0, 4/10/2000</B>
</P>
<P><HR WIDTH="20%"><P>
Please email Comments to <A HREF="mailto:mbeck@bigfoot.com">Michael Beck</A><BR>
For additional information, please also check the <A HREF="http://www.mozilla.com/MPL/FAQ.html">Official FAQ from Mozilla</A>
<H3>Author perspective</H3>
<OL>
<LI><B>Q:</B> Do I retain copyright once I publish source under the MPL?<BR>
<B>A:</B> Absolutely. You still retain all your copyrights.
<LI><B>Q:</B> Can I release the code under a different (possibly commercial type) license?<BR>
<B>A:</B> Yes. Since you have the original copyright, you can do it, but you can do
it only for your own code, and not for any contributions from others.
<LI><B>Q:</B> In two years Acme, Inc. comes with a great new license, which I would love
to use. Am I always bound to MPL for my released code?<BR>
<B>A:</B> You can use a Dual License approach, i.e. you keep the code under MPL, and
you add another license, e.g. GPL. The user will have then the option to use
the one s/he prefers.<BR>
Or, as the Initial Contributor, with the original copyright, you can release
it under the other license. Please note: even if you release the code under
new license, users of your original MPL-released code can continue to use
under MPL as before.
<LI><B>Q:</B> I think, JEDI could benefit from having cryptographic functions. I would
like to donate some (DES, Tripple DES etc.), which are covered by patent
rights (RSA, for example)? How should I do it?<BR>
<B>A:</B> All contributions are "Subject to third party intellectual property (IP)
claims." Thus, if you are aware of any patents infringements, before
submitting make sure that you:
<UL>
<LI> secure the rights to use the IP in your contribution (e.g. by paying
a fee)
<LI> modify the code so it doesn't infringe (in our case, provide other,
non-patented cryptographic functions)
<LI> in a worst case scenario, if the two above are not possible, do not
submit the code
</UL>
Please note: different countries may have different patents laws. Therefore
in some countries it could be legal to use patented IP (e.g. because the
patent expired), while in others not. Check with your local Patent Office.
</OL>
<H3>User perspective</H3>
<OL>
<LI><B>Q:</B> Can I use the MPL code in commercial software? If yes, am I obligated to
credit the author?<BR>
<B>A:</B> Yes, you can use the MPL code in any commercial software. Since you have
to include the MPL code, the credit is included in the license header.
While not required, it is also customary to credit the author in "AboutBox".
<LI><B>Q:</B> Must I release the source code of used components?<BR>
<B>A:</B> Only of those covered by MPL, together with any modifications to them.
<LI><B>Q:</B> Must I publish my apps under MPL if I used MPL licensed code (the viral aspect) ?<BR>
<B>A:</B> No. That's the big advantage over GPL - you can use different code, mix MPL
and commercial code, but you don't have to release either the application,
nor the non-MPL code under MPL. Basically, what is MPL, will stay MPL,
but it doesn't have any impact on the non-MPL code.
<LI><B>Q:</B> If a bug in MPL licensed code renders my clients machine unbootable, who
can I hold responsible for that?<BR>
<B>A:</B> Nobody. You use MPL licensed code at your own risk. Since it is provided
to you in a source code form, you can inspect it, test it, making sure that
it does, what you want it to do.
<LI><B>Q:</B> Must I publish modifications to MPL licensed code?<BR>
<B>A:</B> Yes. This is one of the MPL requirements. You are getting a free source
code, but you have to publish all modifications to the code, unless you
have done the changes for your internal use.
<LI><B>Q:</B> Must I publish code based on MPL licensed code under MPL?<BR>
<B>A:</B> Yes. You cannot change the license terms. Only the Initial Developer can
add an additional license (see dual license)
<LI><B>Q:</B> If I subclass the MPL code, do I still have to publish the new code? After
all I didn't modify the code at all!<BR>
<B>A:</B> That's a tricky one. By the letter of the law, since you didn't touch the
original code, you might claim that it is a "new" code, therefore no need
for MPL. However, by the 'spirit of the law', Inheritance (or subclassing)
is a modification of the functionality of a given class, and as such a
"derived work", so even if you didn't touch the original code, you are
still making changes.
<LI><B>Q:</B> I am proposing a modification to a JEDI-VCL component, which has a dual
license (MPL and GPL). This new file also needs to include a new class.
Should the source files for the new class be put in JEDI-VCL using MPL
with GPL dual-license or can it be put in another location and use only
the MPL?<BR>
<B>A:</B> The license of a file can't be changed without the consent of the copyright
owner. And a new file derived from an existing file inherits the licensing
from the existing file. In the case of this component, it has to stay MPL/GPL.
<LI> I am considering using an XML parser that has being covered by the MPL v1.1
(or alternatively the GPL) in a commercial product. I will simply use the
DLL libraries without modification, including the necessary header files
in my own code. When I distribute (sell) my own product I would, of course,
need to distribute the DLL libraries as well. My questions are:
<OL>
<LI><B>Q1:</B> Am I correct in assuming that simply including unmodified header
files and linking with a library covered by the MPL does not
place any legal restrictions or obligations on my commercial
product and its source code?<BR>
<B>A1:</B> It places no obligations on the code YOU wrote, but there are
still obligations for the code you included. These include
source distribution (for included MPL code, not YOUR code),
and some notification requirements.
<LI><B>Q2:</B> Am I obligated to distribute the (unmodified) source code that
produced the libraries with which I link?<BR>
<B>A2:</B> Yes. Since you are shipping the DLL libraries with your product,
you have to make source available for the MPL code you ship.<BR>
<I>Note that the license also allows you to meet the distribution requirement
by making the source available via electronic means rather than having to
physically ship them with your product (as long as you tell your users
where to get it). If you are using unmodified source code you could probably
just point at the code author's server. If you did that you'd have to
specify how users could get the exact version of the source you used,
such as a CVS date stamp or something.<BR>
This might be tricky -- you are responsible to make sure the source is
available for 12 months after you ship, and there's no way of knowing
how long the author will keep old versions around. The CVS repository
is more of a sure bet. You could, of course, host the source on your
own servers to be sure it'll stick around.</I>
<LI><B>Q3:</B> Am I obligated to make my use of the particular libraries known
to users of my product?<BR>
<B>A3:</B> Yes, it's spelled out in the license. You need to credit the
source of copyrighted code that is not yours in both the product
and its documentation.
</OL>
</OL>
</BODY>
</HTML>

View File

@ -0,0 +1,470 @@
MOZILLA PUBLIC LICENSE
Version 1.1
---------------
1. Definitions.
1.0.1. "Commercial Use" means distribution or otherwise making the
Covered Code available to a third party.
1.1. "Contributor" means each entity that creates or contributes to
the creation of Modifications.
1.2. "Contributor Version" means the combination of the Original
Code, prior Modifications used by a Contributor, and the Modifications
made by that particular Contributor.
1.3. "Covered Code" means the Original Code or Modifications or the
combination of the Original Code and Modifications, in each case
including portions thereof.
1.4. "Electronic Distribution Mechanism" means a mechanism generally
accepted in the software development community for the electronic
transfer of data.
1.5. "Executable" means Covered Code in any form other than Source
Code.
1.6. "Initial Developer" means the individual or entity identified
as the Initial Developer in the Source Code notice required by Exhibit
A.
1.7. "Larger Work" means a work which combines Covered Code or
portions thereof with code not governed by the terms of this License.
1.8. "License" means this document.
1.8.1. "Licensable" means having the right to grant, to the maximum
extent possible, whether at the time of the initial grant or
subsequently acquired, any and all of the rights conveyed herein.
1.9. "Modifications" means any addition to or deletion from the
substance or structure of either the Original Code or any previous
Modifications. When Covered Code is released as a series of files, a
Modification is:
A. Any addition to or deletion from the contents of a file
containing Original Code or previous Modifications.
B. Any new file that contains any part of the Original Code or
previous Modifications.
1.10. "Original Code" means Source Code of computer software code
which is described in the Source Code notice required by Exhibit A as
Original Code, and which, at the time of its release under this
License is not already Covered Code governed by this License.
1.10.1. "Patent Claims" means any patent claim(s), now owned or
hereafter acquired, including without limitation, method, process,
and apparatus claims, in any patent Licensable by grantor.
1.11. "Source Code" means the preferred form of the Covered Code for
making modifications to it, including all modules it contains, plus
any associated interface definition files, scripts used to control
compilation and installation of an Executable, or source code
differential comparisons against either the Original Code or another
well known, available Covered Code of the Contributor's choice. The
Source Code can be in a compressed or archival form, provided the
appropriate decompression or de-archiving software is widely available
for no charge.
1.12. "You" (or "Your") means an individual or a legal entity
exercising rights under, and complying with all of the terms of, this
License or a future version of this License issued under Section 6.1.
For legal entities, "You" includes any entity which controls, is
controlled by, or is under common control with You. For purposes of
this definition, "control" means (a) the power, direct or indirect,
to cause the direction or management of such entity, whether by
contract or otherwise, or (b) ownership of more than fifty percent
(50%) of the outstanding shares or beneficial ownership of such
entity.
2. Source Code License.
2.1. The Initial Developer Grant.
The Initial Developer hereby grants You a world-wide, royalty-free,
non-exclusive license, subject to third party intellectual property
claims:
(a) under intellectual property rights (other than patent or
trademark) Licensable by Initial Developer to use, reproduce,
modify, display, perform, sublicense and distribute the Original
Code (or portions thereof) with or without Modifications, and/or
as part of a Larger Work; and
(b) under Patents Claims infringed by the making, using or
selling of Original Code, to make, have made, use, practice,
sell, and offer for sale, and/or otherwise dispose of the
Original Code (or portions thereof).
(c) the licenses granted in this Section 2.1(a) and (b) are
effective on the date Initial Developer first distributes
Original Code under the terms of this License.
(d) Notwithstanding Section 2.1(b) above, no patent license is
granted: 1) for code that You delete from the Original Code; 2)
separate from the Original Code; or 3) for infringements caused
by: i) the modification of the Original Code or ii) the
combination of the Original Code with other software or devices.
2.2. Contributor Grant.
Subject to third party intellectual property claims, each Contributor
hereby grants You a world-wide, royalty-free, non-exclusive license
(a) under intellectual property rights (other than patent or
trademark) Licensable by Contributor, to use, reproduce, modify,
display, perform, sublicense and distribute the Modifications
created by such Contributor (or portions thereof) either on an
unmodified basis, with other Modifications, as Covered Code
and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using, or
selling of Modifications made by that Contributor either alone
and/or in combination with its Contributor Version (or portions
of such combination), to make, use, sell, offer for sale, have
made, and/or otherwise dispose of: 1) Modifications made by that
Contributor (or portions thereof); and 2) the combination of
Modifications made by that Contributor with its Contributor
Version (or portions of such combination).
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
effective on the date Contributor first makes Commercial Use of
the Covered Code.
(d) Notwithstanding Section 2.2(b) above, no patent license is
granted: 1) for any code that Contributor has deleted from the
Contributor Version; 2) separate from the Contributor Version;
3) for infringements caused by: i) third party modifications of
Contributor Version or ii) the combination of Modifications made
by that Contributor with other software (except as part of the
Contributor Version) or other devices; or 4) under Patent Claims
infringed by Covered Code in the absence of Modifications made by
that Contributor.
3. Distribution Obligations.
3.1. Application of License.
The Modifications which You create or to which You contribute are
governed by the terms of this License, including without limitation
Section 2.2. The Source Code version of Covered Code may be
distributed only under the terms of this License or a future version
of this License released under Section 6.1, and You must include a
copy of this License with every copy of the Source Code You
distribute. You may not offer or impose any terms on any Source Code
version that alters or restricts the applicable version of this
License or the recipients' rights hereunder. However, You may include
an additional document offering the additional rights described in
Section 3.5.
3.2. Availability of Source Code.
Any Modification which You create or to which You contribute must be
made available in Source Code form under the terms of this License
either on the same media as an Executable version or via an accepted
Electronic Distribution Mechanism to anyone to whom you made an
Executable version available; and if made available via Electronic
Distribution Mechanism, must remain available for at least twelve (12)
months after the date it initially became available, or at least six
(6) months after a subsequent version of that particular Modification
has been made available to such recipients. You are responsible for
ensuring that the Source Code version remains available even if the
Electronic Distribution Mechanism is maintained by a third party.
3.3. Description of Modifications.
You must cause all Covered Code to which You contribute to contain a
file documenting the changes You made to create that Covered Code and
the date of any change. You must include a prominent statement that
the Modification is derived, directly or indirectly, from Original
Code provided by the Initial Developer and including the name of the
Initial Developer in (a) the Source Code, and (b) in any notice in an
Executable version or related documentation in which You describe the
origin or ownership of the Covered Code.
3.4. Intellectual Property Matters
(a) Third Party Claims.
If Contributor has knowledge that a license under a third party's
intellectual property rights is required to exercise the rights
granted by such Contributor under Sections 2.1 or 2.2,
Contributor must include a text file with the Source Code
distribution titled "LEGAL" which describes the claim and the
party making the claim in sufficient detail that a recipient will
know whom to contact. If Contributor obtains such knowledge after
the Modification is made available as described in Section 3.2,
Contributor shall promptly modify the LEGAL file in all copies
Contributor makes available thereafter and shall take other steps
(such as notifying appropriate mailing lists or newsgroups)
reasonably calculated to inform those who received the Covered
Code that new knowledge has been obtained.
(b) Contributor APIs.
If Contributor's Modifications include an application programming
interface and Contributor has knowledge of patent licenses which
are reasonably necessary to implement that API, Contributor must
also include this information in the LEGAL file.
(c) Representations.
Contributor represents that, except as disclosed pursuant to
Section 3.4(a) above, Contributor believes that Contributor's
Modifications are Contributor's original creation(s) and/or
Contributor has sufficient rights to grant the rights conveyed by
this License.
3.5. Required Notices.
You must duplicate the notice in Exhibit A in each file of the Source
Code. If it is not possible to put such notice in a particular Source
Code file due to its structure, then You must include such notice in a
location (such as a relevant directory) where a user would be likely
to look for such a notice. If You created one or more Modification(s)
You may add your name as a Contributor to the notice described in
Exhibit A. You must also duplicate this License in any documentation
for the Source Code where You describe recipients' rights or ownership
rights relating to Covered Code. You may choose to offer, and to
charge a fee for, warranty, support, indemnity or liability
obligations to one or more recipients of Covered Code. However, You
may do so only on Your own behalf, and not on behalf of the Initial
Developer or any Contributor. You must make it absolutely clear than
any such warranty, support, indemnity or liability obligation is
offered by You alone, and You hereby agree to indemnify the Initial
Developer and every Contributor for any liability incurred by the
Initial Developer or such Contributor as a result of warranty,
support, indemnity or liability terms You offer.
3.6. Distribution of Executable Versions.
You may distribute Covered Code in Executable form only if the
requirements of Section 3.1-3.5 have been met for that Covered Code,
and if You include a notice stating that the Source Code version of
the Covered Code is available under the terms of this License,
including a description of how and where You have fulfilled the
obligations of Section 3.2. The notice must be conspicuously included
in any notice in an Executable version, related documentation or
collateral in which You describe recipients' rights relating to the
Covered Code. You may distribute the Executable version of Covered
Code or ownership rights under a license of Your choice, which may
contain terms different from this License, provided that You are in
compliance with the terms of this License and that the license for the
Executable version does not attempt to limit or alter the recipient's
rights in the Source Code version from the rights set forth in this
License. If You distribute the Executable version under a different
license You must make it absolutely clear that any terms which differ
from this License are offered by You alone, not by the Initial
Developer or any Contributor. You hereby agree to indemnify the
Initial Developer and every Contributor for any liability incurred by
the Initial Developer or such Contributor as a result of any such
terms You offer.
3.7. Larger Works.
You may create a Larger Work by combining Covered Code with other code
not governed by the terms of this License and distribute the Larger
Work as a single product. In such a case, You must make sure the
requirements of this License are fulfilled for the Covered Code.
4. Inability to Comply Due to Statute or Regulation.
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Code due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description
must be included in the LEGAL file described in Section 3.4 and must
be included with all distributions of the Source Code. Except to the
extent prohibited by statute or regulation, such description must be
sufficiently detailed for a recipient of ordinary skill to be able to
understand it.
5. Application of this License.
This License applies to code to which the Initial Developer has
attached the notice in Exhibit A and to related Covered Code.
6. Versions of the License.
6.1. New Versions.
Netscape Communications Corporation ("Netscape") may publish revised
and/or new versions of the License from time to time. Each version
will be given a distinguishing version number.
6.2. Effect of New Versions.
Once Covered Code has been published under a particular version of the
License, You may always continue to use it under the terms of that
version. You may also choose to use such Covered Code under the terms
of any subsequent version of the License published by Netscape. No one
other than Netscape has the right to modify the terms applicable to
Covered Code created under this License.
6.3. Derivative Works.
If You create or use a modified version of this License (which you may
only do in order to apply it to code which is not already Covered Code
governed by this License), You must (a) rename Your license so that
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
"MPL", "NPL" or any confusingly similar phrase do not appear in your
license (except to note that your license differs from this License)
and (b) otherwise make it clear that Your version of the license
contains terms which differ from the Mozilla Public License and
Netscape Public License. (Filling in the name of the Initial
Developer, Original Code or Contributor in the notice described in
Exhibit A shall not of themselves be deemed to be modifications of
this License.)
7. DISCLAIMER OF WARRANTY.
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
8. TERMINATION.
8.1. This License and the rights granted hereunder will terminate
automatically if You fail to comply with terms herein and fail to cure
such breach within 30 days of becoming aware of the breach. All
sublicenses to the Covered Code which are properly granted shall
survive any termination of this License. Provisions which, by their
nature, must remain in effect beyond the termination of this License
shall survive.
8.2. If You initiate litigation by asserting a patent infringement
claim (excluding declatory judgment actions) against Initial Developer
or a Contributor (the Initial Developer or Contributor against whom
You file such action is referred to as "Participant") alleging that:
(a) such Participant's Contributor Version directly or indirectly
infringes any patent, then any and all rights granted by such
Participant to You under Sections 2.1 and/or 2.2 of this License
shall, upon 60 days notice from Participant terminate prospectively,
unless if within 60 days after receipt of notice You either: (i)
agree in writing to pay Participant a mutually agreeable reasonable
royalty for Your past and future use of Modifications made by such
Participant, or (ii) withdraw Your litigation claim with respect to
the Contributor Version against such Participant. If within 60 days
of notice, a reasonable royalty and payment arrangement are not
mutually agreed upon in writing by the parties or the litigation claim
is not withdrawn, the rights granted by Participant to You under
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
the 60 day notice period specified above.
(b) any software, hardware, or device, other than such Participant's
Contributor Version, directly or indirectly infringes any patent, then
any rights granted to You by such Participant under Sections 2.1(b)
and 2.2(b) are revoked effective as of the date You first made, used,
sold, distributed, or had made, Modifications made by that
Participant.
8.3. If You assert a patent infringement claim against Participant
alleging that such Participant's Contributor Version directly or
indirectly infringes any patent where such claim is resolved (such as
by license or settlement) prior to the initiation of patent
infringement litigation, then the reasonable value of the licenses
granted by such Participant under Sections 2.1 or 2.2 shall be taken
into account in determining the amount or value of any payment or
license.
8.4. In the event of termination under Sections 8.1 or 8.2 above,
all end user license agreements (excluding distributors and resellers)
which have been validly granted by You or any distributor hereunder
prior to termination shall survive termination.
9. LIMITATION OF LIABILITY.
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
10. U.S. GOVERNMENT END USERS.
The Covered Code is a "commercial item," as that term is defined in
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
software" and "commercial computer software documentation," as such
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
all U.S. Government End Users acquire Covered Code with only those
rights set forth herein.
11. MISCELLANEOUS.
This License represents the complete agreement concerning subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. This License shall be governed by
California law provisions (except to the extent applicable law, if
any, provides otherwise), excluding its conflict-of-law provisions.
With respect to disputes in which at least one party is a citizen of,
or an entity chartered or registered to do business in the United
States of America, any litigation relating to this License shall be
subject to the jurisdiction of the Federal Courts of the Northern
District of California, with venue lying in Santa Clara County,
California, with the losing party responsible for costs, including
without limitation, court costs and reasonable attorneys' fees and
expenses. The application of the United Nations Convention on
Contracts for the International Sale of Goods is expressly excluded.
Any law or regulation which provides that the language of a contract
shall be construed against the drafter shall not apply to this
License.
12. RESPONSIBILITY FOR CLAIMS.
As between Initial Developer and the Contributors, each party is
responsible for claims and damages arising, directly or indirectly,
out of its utilization of rights under this License and You agree to
work with Initial Developer and Contributors to distribute such
responsibility on an equitable basis. Nothing herein is intended or
shall be deemed to constitute any admission of liability.
13. MULTIPLE-LICENSED CODE.
Initial Developer may designate portions of the Covered Code as
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
Developer permits you to utilize portions of the Covered Code under
Your choice of the NPL or the alternative licenses, if any, specified
by the Initial Developer in the file described in Exhibit A.
EXHIBIT A -Mozilla Public License.
``The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is ______________________________________.
The Initial Developer of the Original Code is ________________________.
Portions created by ______________________ are Copyright (C) ______
_______________________. All Rights Reserved.
Contributor(s): ______________________________________.
Alternatively, the contents of this file may be used under the terms
of the _____ license (the "[___] License"), in which case the
provisions of [______] License are applicable instead of those
above. If you wish to allow use of your version of this file only
under the terms of the [____] License and not to allow others to use
your version of this file under the MPL, indicate your decision by
deleting the provisions above and replace them with the notice and
other provisions required by the [___] License. If you do not delete
the provisions above, a recipient may use your version of this file
under either the MPL or the [___] License."
[NOTE: The text of this Exhibit A may differ slightly from the text of
the notices in the Source Code files of the Original Code. You should
use the text of this Exhibit A rather than the text found in the
Original Code Source Code for Your Modifications.]

View File

@ -0,0 +1,406 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en-us">
<head>
<title>JEDI Code Library Beta 1.103</title>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<link rel="stylesheet" type="text/css" href="styles/default.css">
<meta content="Project JEDI" name="author">
</head>
<body>
<hr><br>
<h1>JEDI Code Library</h1>
<p>Release 1.104<br>
Build 3248
21-January-2009</p>
<hr><br>
<h3>Content of this file</h3>
<ul>
<li><a href="#about">About this release</a></li>
<li><a href="#targets">Supported tools</a></li>
<li><a href="#notes">Installation notes</a></li>
<li><a href="#manual">Manual installation</a></li>
<li><a href="#files">Distribution content</a></li>
<li><a href="#feedback">Giving your feedback</a></li>
<li><a href="#issues">Reporting bugs</a></li>
<li><a href="#releases">Downloads of stable sources</a></li>
<li><a href="#development">Development sources</a></li>
<li><a href="#contribute">Getting involved in JCL development</a></li>
</ul>
<hr><br>
<h3><a name="about">About this release</a></h3>
<p>JCL release 1.104 provides an updated support for all targets (including Delphi 2009 and C++Builder 2009).</p>
<p>As always, multiple bugs have been fixed; for detailed change logs,
use the facilities of our Subversion repository at Sourceforge.net&nbsp;
<a href="http://sourceforge.net/projects/jcl/">http://sourceforge.net/projects/jcl/</a>
, see below.</p>
<p><span style="font-weight: bold;">Head changes:</span>
</p>
<ul>
<li>improved Unicode support for Delphi 2009 and C++Builder 2009;</li>
<li>support for late and static binding to ZLib code;</li>
<li>version control actions for CVS and SVN added to JCL runtime;</li>
<li>the polynomial of CRC computations can be customized;</li>
<li>speed improvement of TJclBufferedStream during write operations;</li>
<li>new archive compression format provided with 7-zip: lzma, pe, elf, macho, udf, xar, mub, hfs, dmg; the wrapper has previous support for the compression and the decompression of zip, bzip2, gzip, 7z, tar and for the decompression of rar, iso, chm, deb, cab...</li>
<li>new string conversion functions with failure detection.</li>
</ul>
<p><span style="font-weight: bold;">Important:</span>
</p>
<ul>
<li>
<p>Note that the package naming has changed: the same package name is used by
all versions of the compiler supporting suffixes (C++Builder 6, Delphi 6,
Delphi 7, C#Builder 1, Delphi 8, Delphi 2005, BDS 2006, RAD Studio 2007, Delphi 2009 and C++Builder 2009); a different suffix
is added for each target to the BPL file name (for Delphi and C++Builder 2009, the library file is named jcl120.bpl).
The installer tries to remove old packages. 3rd party packages requiring old DJcl* resp. CJcl* packages need to be changed
to accomodate the new naming scheme or they will cause conflicts in the IDE at load time.</p>
</li>
<li>
<p>DCP files are now created in the lib\target subdirectory of the JCL
installation. 3rd party packages requiring JCL packages need to have this path
in their "browse path" option to compile.</p>
</li>
</ul>
<p><span style="font-weight: bold;">(Windows only)&nbsp;Installation&nbsp;options:</span></p>
<p>Packages compiled by the JCL installer don't contain any debug
informations to keep their size as small as possible.</p>
<p>The JEDI Code Library packages are required by some 3rd party packages
(including the JEDI Visual Component Library - JVCL), the installer generates
them if the "Packages" node is checked.</p>
<p>The installer can generate MAP informations for each package. These informations
can be linked into binaries to become JCL debug data or be converted to .jdbg files.
Once linked MAP files could be deleted. These options are subnodes of the "Packages" node.</p>
<p>For BDS 2006, RAD Studio 2007 and C++Builder 2009, the compiler introduced a new option to make the same packages
available in C++, by checking the "Dual packages" option of the "Packages" node, you will be able
to call functions of the JCL from C++ code.</p>
<p><span style="font-weight: bold;">.net Framework support:</span></p>
<p>A subset of JCL units was worked over to support Delphi.Net (Delphi 2005, BDS 2006 and RAD
Studio 2007). The packages belong to the Jedi.Jcl namespace.</p>
<hr><br>
<h3><a name="targets">Supported Tools</a></h3>
<p>The JEDI Code Library can be compiled and installed in the following environments</p>
<p><span style="font-weight: bold;">Only runtime support:</span></p>
<ul>
<li>Kylix 3 (cf <a href="#notes">Installation notes</a>)</li>
</ul>
<p><span style="font-weight: bold;">Only design-time support (only experts):</span></p>
<ul>
<li>C#Builder 1 (cf <a href="#notes">Installation notes</a>);</li>
<li>Delphi 8.net (cf <a href="#notes">Installation notes</a>);</li>
</ul>
<p><span style="font-weight: bold;">Both supports (run time and design time):</span></p>
<ul>
<li>Delphi version 5, 6, 7;</li>
<li>C++Builder version 5 &amp; 6;</li>
<li>Delphi 2005 (Delphi.net personality);</li>
<li>Borland Developer Studio 2006 (Delphi for Win32, C++Builder Win32, Delphi.net and C#Builder personalities);</li>
<li>Turbo Delphi (explorer and professional - cf <a href="#notes">Installation notes</a>);</li>
<li>CodeGear RAD Studio 2007 (Delphi for Win32 and C++Builder for Win32 personalities);</li>
<li>Delphi 2009 and C++Builder 2009.</li>
</ul>
<hr><br>
<h3><a name="notes">Installation notes</a></h3>
<ul>
<li>Not every unit supports all tools. Look out for <tt>*.exc</tt>
files in the tool-specific <tt>lib/</tt>subdirectories for a list of units
excluded from compilation.</li>
<li>Kylix 3 Delphi/C++ installation is back but specific code has not been tested with the latest
versions of the kernel. Please ensure you use the flavor of the JCL with Unix EOL.</li>
<li>Free Pascal (<a href="http://www.freepascal.org/">http://www.freepascal.org/</a>)
support has not been updated for this release; most units from
source/common should work with FP 2.0, as tests with a 2.0 beta (1.9.8)
indicated, but this has not been verified. Note that there are no plans
to support FP versions from the 1.0 branch.</li>
</ul>
<p><span style="font-weight: bold;">Installation for Turbo Delphi</span></p>
<p>The JEDI Code Library can be compiled targetting Turbo Delphi Explorer and Turbo Delphi Professional.
Turbo Delphi Professional is recognized as BDS 2006, you have to download its command line compiler from
CodeGear website at&nbsp;<a href="http://www.codegear.com/Default.aspx?tabid=160">http://www.codegear.com/Default.aspx?tabid=160</a>&nbsp;
to install the full JCL on this tool.</p>
<p>To install the JCL targetting Turbo Delphi Explorer, consider the following checks:</p>
<ul>
<li>If you have an other supported version of Delphi/C++Builder on this computer, it should automatically be
detected and the installer will process as usual.</li>
<li>If you only have Turbo Delphi Explorer (and no other tools) on the computer, the installer cannot be
compiled. You have to use the Turbo Explorer flavor of the JCL that contains a precompiled installer. However,
you will not be able to install any experts.</li>
</ul>
<p><span style="font-weight: bold;">Installation on C#Builder 1 and Delphi 8:</span></p>
<ul>
<li>These products cannot be used to build the JCL installer, you need an
other supported product to install JCL experts on these products.</li>
<li>These products are not able to use the JCL library as a runtime library.
You cannot write managed applications and managed packages based on the JCL.</li>
<li>These products are not shipped with their native compilers, you have to
download it from codecentral (<a href="http://cc.codegear.com/">http://cc.codegear.com/</a>).
The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21333">http://codecentral.codegear.com/Download.aspx?id=21333</a>)
&nbsp;contains the native compiler to be installed in Delphi 8.
The item (<a href="http://codecentral.codegear.com/Download.aspx?id=21334">http://codecentral.codegear.com/Download.aspx?id=21334</a>)
&nbsp;contains the native compiler to be installed in C#Builder 1.
These zip files have to be extracted in the products directory using the standard pattern:</li>
</ul>
<pre> Executable files (exe and dll) - BDS\X.0\bin<br> Compiler files (dcp and dcu) - BDS\X.0\lib<br> Toolsapi source files - BDS\X.0\source\ToolsAPI<br></pre>
<p><span style="font-weight: bold;">Default installation</span></p>
<p>For all others versions of Delphi, C++Builder and BDS, simply launch Install.bat
and the installer window will let you configure options and install the library.</p>
<hr><br>
<h3><a name="manual">Manual Installation</a></h3>
<p>Although it is not recommended, a manual installation is possible. You will have
to manually configure options for the library. That is done by modifying an included
file.
</p>
<p>
</p>
<p>For each tool you want to install the JCL in, repeat the following steps:</p>
<ol>
<li>Open and edit included file to customize options:</li>
<ul>
<li>For Kylix 3 (Delphi): source\include\jclkd3.inc</li>
<li>For Kylix 3 (C++Builder): source\include\jclkc3.inc</li>
<li>For C++Builder 5: source\include\jclc5.inc</li>
<li>For C++Builder 6: source\include\jclc6.inc</li>
<li>For Delphi 5: source\include\jcld5.inc</li>
<li>For Delphi 6: source\include\jcld6.inc</li>
<li>For Delphi 7: source\include\jcld7.inc</li>
<li>For Delphi 2005: source\include\jcld9.inc</li>
<li>For Delphi.net 2005: source\include\jcld9.net.inc</li>
<li>For BDS 2006 (Delphi and C++Builder): source\include\jcld10.inc</li>
<li>For Delphi.net 2006: source\include\jcld10.net.inc</li>
<li>For CodeGear RAD Studio 2007 (Delphi for Win32 and C++Builder): source\include\jcld11.inc</li>
<li>For Delphi.net 2007: source\include\jcld11.net.inc</li>
<li>For Delphi 2009 and C++Builder 2009: source\include\jcld12.inc</li>
</ul>
<li>In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder)
located in a subdirectory of the "packages" directory matching your version of
the IDE. This package doesn't have to be installed since it doesn't provide
any components.</li>
<li>If you want to install experts, open package JclBaseExpert.dpk and compile it,
then you can install all the experts you want (packages are located in the same
directory).</li>
</ol>
<hr><br>
<h3><a name="files">Distribution content</a></h3>
<pre>Install.bat - Compile and run VCL version of the JCL Installer (Win32)<br>QInstall.bat - Compile and run CLX version of JCL Installer (Win32)<br>install.sh - Compile and run JCL Installer (Linux)<br>bin - Common place for sample application EXE files<br>lib - Common place for compiled units.<br>docs - Readme (this file) and other documents<br>docs\Readme.html - This file<br>docs\Experts.html - Readme file about the experts<br>docs\MPL-1.1.txt - The Mozilla Public Licence (MPL) version 1.1<br>docs\MPL FAQ.html - Frequently Asked Questions about the MPL<br>docs\cps.html - Cross Platform Strategy<br>experts - JCL IDE experts source code<br>experts\debug - JCL Debug IDE expert for using JclDebug unit<br>experts\debug\dialog - Application exception dialog replacement<br>experts\debug\simdview - Low-level debug window for XMM registers<br>experts\debug\threadnames - IDE expert showing class names for debugged threads<br>experts\debug\tools - Tools for creating files with JCL debug information<br>experts\favfolders - Favorite folders combobox in IDE open/save file dialogs<br>experts\projectanalyzer - Project Analyzer IDE expert<br>experts\useswizard - JCL uses wizard<br>experts\versioncontrol - Integration of TortoiseCVS and TortoiseSVN in the IDE<br>examples - JCL example applications<br>examples\common - CLX and Win32 example applications in Delphi<br>examples\dotnet - JCL example applications for Delphi.net<br>examples\windows - JCL example applications for Delphi.Win32<br>examples\windows\delphitools - Collection of system tools using JCL<br>help - Help file (distributed in a separate archive)<br>install - Installer source code<br>packages - JCL package sources<br>source - JCL source code<br></pre>
<hr><br>
<h3><a name="feedback">Giving your feedback</a></h3>
If you have any comments or suggestions we would appreciate it if you
drop us a note. There are several ways to get in contact with us:
<ul>
<li>Newsgroup is the recommended way to contact other JCL users and the team itself.
They are hosted at&nbsp;<a href="news://forums.talkto.net/jedi.jcl">news://forums.talkto.net/jedi.jcl</a>.</li>
<li>Write to&nbsp;<a href="mailto:jcl@delphi-jedi.org">jcl@delphi-jedi.org</a>&nbsp;
or to&nbsp;<a href="mailto:jcl-testing@delphi-jedi.org">jcl-testing@delphi-jedi.org</a>&nbsp;
This email account should not be used for support requests. If you need
support please use either the newsgroups or the mailing list.</li>
<li>If you want to keep up to date about JCL then you can join the
JCL mailing list by going to <a href="http://tech.groups.yahoo.com/group/JEDI-JCL/">http://tech.groups.yahoo.com/group/JEDI-JCL/</a>
You can also use this list to voice your opinion, comments or suggestions.</li>
</ul>
<hr>
<h3><a name="issues">Reporting bugs</a></h3>
<p>The general rule is: <b><font color="#ff0000">If you want to get a
bug fixed you need to log it!</font></b></p>
<p>An issue tracking tool can be accessed via ('Code Library' category):
<a href="http://homepages.codegear.com/jedi/issuetracker/">http://homepages.codegear.com/jedi/issuetracker/</a></p>
<p>Please be aware that you are allowed there to enter feature request and code donations as well.</p>
<p>The JEDI issue tracker is based up on the Mantis BugTracker Open
Source project. More background information about it is available on its homepage&nbsp;
<a href="http://mantisbt.sourceforge.net/">http://mantisbt.sourceforge.net</a></p>
<hr><br>
<h3><a name="releases">Downloads of stable sources</a></h3>
<p>These sources are official JCL releases and file status can be considered as
stable for use in final applications. During the past years, there have been around 2
or 3 releases per year.</p>
<p>JEDI Code Library: File List on SourceForge:&nbsp;
<a href="http://sourceforge.net/project/showfiles.php?group_id=47514">http://sourceforge.net/project/showfiles.php?group_id=47514</a>
</p>
<hr><br>
<h3><a name="development">Development sources</a></h3>
<p>These files are under active development and may cause some incompatibilities
and some conflicts with existing code. You should not use these files in final
applications. The JCL development team provides these files for testing and
feedback from users.</p>
<p>You can download snapshots of the Subversion repository updated every day in the JCL daily page
&nbsp;<a href="http://jcl.sourceforge.net/daily/">http://jcl.sourceforge.net/daily/</a></p>
<p>To always have access to the most recent changes in the JCL, you
should install a Subversion client (we recommend TortoiseSVN <a href="http://tortoisesvn.tigris.org/">http://tortoisesvn.tigris.org/</a>
and RapidSVN <a href="http://rapidsvn.tigris.org/">http://rapidsvn.tigris.org/</a>) and download the
SVN repository files to your computer as explained in the repository page of the JEDI Wiki at
<a href="http://homepages.codegear.com/jedi/wiki/index.php?title=Repository">http://homepages.codegear.com/jedi/wiki/index.php?title=Repository</a>&nbsp;
With the SVN client, you can update your local repository at any time.
You can also view the repository online via the web interface at <a href="http://jcl.svn.sourceforge.net/">http://jcl.svn.sourceforge.net/</a></p>
<hr><br>
<h3><a name="contribute">Getting involved in JCL development</a></h3>
If you want to help out making JCL better or bigger or just plain
cooler, there are several ways in which you can help out. Here are some of the
things we need your help on:
<ul>
<li>Donate source code</li>
<li>Donate time writing help</li>
<li>Donate time writing demos</li>
<li>Donate time fixing bugs</li>
<li>Share your experience by helping users in newsgroups and mailing lists</li>
</ul>
<p>JCL accepts donations from developers as long as the source fullfills the
requirements set up by the JEDI and JCL teams. To read more about these
requirements, visit the page <a href="http://homepages.codegear.com/jedi/jcl">http://homepages.codegear.com/jedi/jcl</a></p>
<p>You can also donate your time by writing help for the source already
in JCL. We currently use Doc-o-Matic to create the finished help files but
the actual help sources are plain text files in a simple to understand format.
We can provide you with auto-generated templates with all classes, properties,
types etc already inserted. The "only" thing left to do is fill in the actual
help text for the help items. If you are interested in writing help, contact us.</p>
<p>If you want to help fix bugs in JCL, go to Mantis and check the bug report
there. You can post replies as well as fixes directly in the bug report. One of the
JCL developers will pick up the report/fix and update the Subversion repository if the fi
is satisfactory. If you report and fix a lot of bugs, you might even get developer
access to SVN so you can update the JCL files directly.</p>
</body>
</html>

View File

@ -0,0 +1,323 @@
--------------------------------------------------------------------------------
JEDI Code Library
Release 1.104
Build 3248
21-January-2009
--------------------------------------------------------------------------------
Content of this file
About this release
Supported tools
Installation notes
Manual installation
Distribution content
Giving your feedback
Reporting bugs
Downloads of stable sources
Development sources
Getting involved in JCL development
--------------------------------------------------------------------------------
About this release
JCL release 1.104 provides an updated support for all targets
(including Delphi 2009 and C++Builder 2009).
As always, multiple bugs have been fixed; for detailed change logs, use the
facilities of our Subversion repository at Sourceforge.net
http://sourceforge.net/projects/jcl/, see below.
Head changes:
- improved Unicode support for Delphi 2009 and C++Builder 2009;
- support for late and static binding to ZLib code;
- version control actions for CVS and SVN added to JCL runtime;
- the polyniomal of CRC computations can be customized;
- speed improvement of TJclBufferedStream during write operations;
- new archive compression format provided with 7-zip: lzma, pe, elf, macho,
udf, xar, mub, hfs, dmg; the wrapper has previous support for the compression
and the decompression of zip, bzip2, gzip, 7z, tar and for the decompression
of rar, iso, chm, deb, cab...
- new string conversion functions with failure detection.
Important:
- Note that the package naming has changed: the same package name is used by
all versions of the compiler supporting suffixes (C++Builder 6, Delphi 6,
Delphi 7, C#Builder 1, Delphi 8, Delphi 2005, BDS 2006, RAD Studio 2007,
Delphi 2009 and C++Builder 2009); a different suffix is added for each target
to the BPL file name (for Delphi 2009, the library file is named jcl120.bpl).
The installer tries to remove old packages. 3rd party packages requiring old
DJcl* resp. CJcl* packages need to be changed to accomodate the new naming
scheme or they will cause conflicts in the IDE at load time.
- DCP files are now created in the lib\target subdirectory of the JCL
installation. 3rd party packages requiring JCL packages need to have this
path in their "browse path" option to compile.
(Windows only) Installation options:
Packages compiled by the JCL installer don't contain any debug informations to
keep their size as small as possible.
The JEDI Code Library packages are required by some 3rd party packages
(including the JEDI Visual Component Library - JVCL), the installer generates
them if the "Packages" node is checked.
The installer can generate MAP informations for each package. These
informations can be linked into binaries to become JCL debug data or be
converted to .jdbg files. Once linked MAP files could be deleted. These options
are subnodes of the "Packages" node.
For BDS 2006, RAD Studio 2007 and C++Builder 2009, the compiler introduced
a new option to make the same packages available in C++, by checking the
"Dual packages" option of the "Packages" node, you will be able to call functions
of the JCL from C++ code.
.net Framework support:
A subset of JCL units was worked over to support Delphi.Net (Delphi 2005, BDS 2006
and RAD Studio 2007). The packages belong to the Jedi.Jcl namespace.
--------------------------------------------------------------------------------
Supported Tools
The JCL can be compiled and installed in the following environments
Only runtime support:
- Kylix 3 (cf Installation notes)
Only design-time support (only experts):
- C#Builder 1 (cf Installation notes);
- Delphi 8.net (cf Installation notes).
Both supports (run time and design time):
- Delphi version 5, 6, 7;
- C++Builder version 5 & 6;
- Delphi 2005 (Delphi.net personality);
- Borland Developer Studio 2006 (Delphi for Win32, C++Builder for Win32,
Delphi.net and C#Builder personalities);
- Turbo Delphi (explorer and professional - cf Installation notes);
- CodeGear RAD Studio 2007 (Delphi for Win32 and C++Builder for Win32
personalities);
- CodeGear Delphi 2009 and C++Builder 2009.
--------------------------------------------------------------------------------
Installation notes
- Not every unit supports all tools. Look out for *.exc files in the tool-
specific lib/subdirectories for a list of units excluded from compilation.
- Kylix 3 Delphi/C++ installation is back but specific code has not been tested
with the latest versions of the kernel. Please ensure you use the flavor of
the JCL with Unix EOL.
- Free Pascal (http://www.freepascal.org/) support has not been updated for
this release; most units fromsource/common should work with FP 2.0, as tests
with a 2.0 beta (1.9.8)indicated, but this has not been verified. Note that
there are no plans to support FP versions from the 1.0 branch.
Installation for Turbo Delphi
The JEDI Code Library can be compiled targetting Turbo Delphi Explorer and Turbo
Delphi Professional. Turbo Delphi Professional is recognized as BDS 2006, you
have to download its command line compiler from CodeGear website at
http://www.codegear.com/Default.aspx?tabid=160 to install the full JCL on this
tool.
To install the JCL targetting Turbo Delphi Explorer, consider the following
checks:
- If you have an other supported version of Delphi/C++Builder on this computer,
it should automatically be detected and the installer will process as usual.
- If you only have Turbo Delphi Explorer (and no other tools) on the computer,
the installer cannot becompiled. You have to use the Turbo Explorer flavor of
the JCL that contains a precompiled installer. However, you will not be able
to install any experts.
Installation on C#Builder 1 and Delphi 8:
- These products cannot be used to build the JCL installer, you need an other
supported product to install JCL experts on these products.
- These products are not able to use the JCL library as a runtime library. You
cannot write managed applications and managed packages based on the JCL.
- These products are not shipped with their native compilers, you have to
download it from codecentral (http://cc.codegear.com/). The item
(http://codecentral.codegear.com/Download.aspx?id=21333) contains the native
compiler to be installed in Delphi 8. The item
(http://codecentral.codegear.com/Download.aspx?id=21334) contains the native
compiler to be installed in C#Builder 1. These zip files have to be extracted
in the products directory using the standard pattern:
Executable files (exe and dll) - BDS\X.0\bin
Compiler files (dcp and dcu) - BDS\X.0\lib
Toolsapi source files - BDS\X.0\source\ToolsAPI
Default installation
For all others versions of Delphi, C++Builder and BDS, simply launch Install.bat
and the installer window will let you configure options and install the library.
--------------------------------------------------------------------------------
Manual Installation
Although it is not recommended, a manual installation is possible. You will have
to manually configure options for the library. That is done by modifying an
included file.
For each tool you want to install the JCL in, repeat the following steps:
1. Open and edit included file to customize options:
- For Kylix 3 (Delphi): source\include\jclkd3.inc
- For Kylix 3 (C++Builder): source\include\jclkc3.inc
- For C++Builder 5: source\include\jclc5.inc
- For C++Builder 6: source\include\jclc6.inc
- For Delphi 5: source\include\jcld5.inc
- For Delphi 6: source\include\jcld6.inc
- For Delphi 7: source\include\jcld7.inc
- For Delphi 2005: source\include\jcld9.inc
- For Delphi.net 2005: source\include\jcld9.net.inc
- For BDS 2006 (Delphi and C++Builder): source\include\jcld10.inc
- For Delphi.net 2006: source\include\jcld10.net.inc
- For CodeGear Delphi 2007 for Win32 and C++Builder 2007: source\include\jcld11.inc
- For Delphi.net 2007: source\include\jcld11.net.inc
- For Delphi 2009 and C++Builder 2009: source\include\include\jcld12.inc
2. In the IDE, open and compile package Jcl.dpk (or Jcl.bpk for C++Builder)
located in a subdirectory of the "packages" directory matching your version of
the IDE. This package doesn't have to be installed since it doesn't provide any
components.
3. If you want to install experts, open package JclBaseExpert.dpk and compile
it, then you can install all the experts you want (packages are located in the
same directory).
--------------------------------------------------------------------------------
Distribution content
Install.bat - Compile and run VCL version of the JCL Installer (Win32)
QInstall.bat - Compile and run CLX version of JCL Installer (Win32)
install.sh - Compile and run JCL Installer (Linux)
bin - Common place for sample application EXE files
lib - Common place for compiled units.
docs - Readme (this file) and other documents
docs\Readme.html - This file
docs\Experts.html - Readme file about the experts
docs\MPL-1.1.txt - The Mozilla Public Licence (MPL) version 1.1
docs\MPL FAQ.html - Frequently Asked Questions about the MPL
docs\cps.html - Cross Platform Strategy
experts - JCL IDE experts source code
experts\debug - JCL Debug IDE expert for using JclDebug unit
experts\debug\dialog - Application exception dialog replacement
experts\debug\simdview - Low-level debug window for XMM registers
experts\debug\threadnames - IDE expert showing class names for debugged threads
experts\debug\tools - Tools for creating files with JCL debug information
experts\favfolders - Favorite folders combobox in IDE open/save file dialogs
experts\projectanalyzer - Project Analyzer IDE expert
experts\repository - Repository expert
experts\useswizard - JCL uses wizard
experts\versioncontrol - Integration of TortoiseCVS and TortoiseSVN in the IDE
examples - JCL example applications
examples\common - CLX and Win32 example applications in Delphi
examples\dotnet - JCL example applications for Delphi.net
examples\windows - JCL example applications for Delphi.Win32
examples\windows\delphitools - Collection of system tools using JCL
help - Help file (distributed in a separate archive)
install - Installer source code
packages - JCL package sources
source - JCL source code
--------------------------------------------------------------------------------
Giving your feedback
If you have any comments or suggestions we would appreciate it if you drop us a
note. There are several ways to get in contact with us:
- Newsgroup is the recommended way to contact other JCL users and the team
itself. They are hosted at news://forums.talkto.net/jedi.jcl.
- Write to jcl@delphi-jedi.org or to jcl-testing@delphi-jedi.org This email
account should not be used for support requests. If you need support please
use either the newsgroups or the mailing list.
- If you want to keep up to date about JCL then you can join the JCL mailing
list by going to http://tech.groups.yahoo.com/group/JEDI-JCL/You can also use
this list to voice your opinion, comments or suggestions.
--------------------------------------------------------------------------------
Reporting bugs
The general rule is: If you want to get a bug fixed you need to log it!
An issue tracking tool can be accessed via ('Code Library' category):
http://homepages.codegear.com/jedi/issuetracker/
Please be aware that you are allowed there to enter feature request and code
donations as well.
The JEDI issue tracker is based up on the Mantis BugTracker Open Source project.
More background information about it is available on its homepage
http://mantisbt.sourceforge.net
--------------------------------------------------------------------------------
Downloads of stable sources
These sources are official JCL releases and file status can be considered as
stable for use in final applications. During the past years, there have been
around 2 or 3 releases per year.
JEDI Code Library: File List on SourceForge:
http://sourceforge.net/project/showfiles.php?group_id=47514
--------------------------------------------------------------------------------
Development sources
These files are under active development and may cause some incompatibilities
and some conflicts with existing code. You should not use these files in final
applications. The JCL development team provides these files for testing and
feedback from users.
You can download snapshots of the Subversion repository updated every day in the
JCL daily page http://jcl.sourceforge.net/daily/
To always have access to the most recent changes in the JCL, you should install
a Subversion client (we recommend TortoiseSVN http://tortoisesvn.tigris.org/and
RapidSVN http://rapidsvn.tigris.org/) and download the SVN repository files to
your computer as explained in the repository page of the JEDI Wiki at
http://homepages.codegear.com/jedi/wiki/index.php?title=Repository With the SVN
client, you can update your local repository at any time. You can also view the
repository online via the web interface at http://jcl.svn.sourceforge.net/
--------------------------------------------------------------------------------
Getting involved in JCL development
If you want to help out making JCL better or bigger or just plain cooler, there
are several ways in which you can help out. Here are some of the things we need
your help on:
- Donate source code
- Donate time writing help
- Donate time writing demos
- Donate time fixing bugs
- Share your experience by helping users in newsgroups and mailing lists
JCL accepts donations from developers as long as the source fullfills the
requirements set up by the JEDI and JCL teams. To read more about these
requirements, visit the page http://homepages.codegear.com/jedi/jcl
You can also donate your time by writing help for the source already in JCL.
We currently use Doc-o-Matic to create the finished help files but the actual
help sources are plain text files in a simple to understand format. We can
provide you with auto-generated templates with all classes, properties,
types etc already inserted. The "only" thing left to do is fill in the actual
help text for the help items. If you are interested in writing help, contact us.
If you want to help fix bugs in JCL, go to Mantis and check the bug report
there. You can post replies as well as fixes directly in the bug report. One of
the JCL developers will pick up the report/fix and update the Subversion
repository if the fi is satisfactory. If you report and fix a lot of bugs, you
might even get developer access to SVN so you can update the JCL files directly.

View File

@ -0,0 +1,28 @@
------------------------------------------------------------------------------
JEDI Code Library
HomePage: http://jcl.sourceforge.net/
------------------------------------------------------------------------------
Thread safe support
Some pieces of code can handle read/write accesses from multiples threads
without writing specific code.
This support can be enabled:
- by defining the THREADSAFE compiler symbol {$DEFINE THREADSAFE} when JCL
units are part of a project.
- by checking the “Enable thread safe code” node in the installer options
Presently only the following units have some pieces of code that implicitly
handles thread safe accesses:
source\common\JclAbstractContainers.pas
source\common\JclArrayLists.pas
source\common\JclArraySets.pas
source\common\JclBinaryTrees.pas
source\common\JclHashMaps.pas
source\common\JclLinkedLists.pas
source\common\JclQueues.pas
source\common\JclStacks.pas
This support is made using critical sections, if you want other piece of code
to be thread safe, please create a feature request in the “Code Library” category
of the mantiss at http://homepages.borland.com/jedi/issuetracker/

View File

@ -0,0 +1,655 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="cps_files/test.css" type="text/css">
<title>JEDI Code Library - Cross Platform Strategy</title>
</head>
<body>
<h1>JEDI Code Library - Cross Platform Strategy</h1>
<p>
This paper presents the JCL teams strategy for cross platform
compliance of the
JEDI Code Library. It is based up on the discussions within the JCL
newsgroup
and JCL developer mailing lists. This document is currently <b>work in
progress</b>
and subject to changes with or without notice.
</p>
<p>
Version history: <br>
&nbsp;&nbsp;&nbsp;&nbsp;0.1 Initial release
</p>
<p>
</p>
<h3>Background</h3>
<p>
The main objective is to make the JEDI Code Library VisualCLX (Kylix
for Delphi/Delphi) and Delphi.NET compatible. For a detailed
explanation of the currently used terminology, see the following
article <a href="http://bdn.borland.com/article/0,1410,29460,00.html">
Overview of the VCL for .NET</a>. </p>
<p>
We have to cope with nearly all aspects of cross platform progamming,
like different APIs, different operating system concepts etc. Since we
want to be as crossplatform compatible as possible interface
compatability is the most important
issue for us. JEDI Code Library users should have to opportunity the
use the JCL
on whatever platform they like. Figure 1 shows the three basic layers
we have to deal with:
</p>
<ul>
<li>Platform independent layer: Units which are not (or only very
minor)
platform specific and do not depend on a specific component set. This
doesn't mean that units in this layer have to consist of no platform
dependent code, but they have to
be nearly 100% interface compatible and all functionality must have
been ported to all
supported platforms. </li>
<li>Platform dependent layer: Units which depend on a specific
platform (e.g. JclCLI) </li>
<li>Component set dependent layer: Units which depend on a specific
component set</li>
</ul>
<p>
<img src="cps_files/strucv1.jpg" border="1"><br>
<i>Fig 1: The JEDI Code Library crossplatform layer structure</i>
</p>
<p>
The JEDI Code Library currently targets the following platforms:
</p>
<ul>
<li>Kylix for Delphi (Kylix 3) / Linux</li>
<li>Delphi (Version 5,6,7) / Microsoft Windows</li>
</ul>
and is trying to support the following platforms as soon as possible:
<ul>
<li>Delphi .NET / .NET (Micrsoft Windows) </li>
</ul>
<p>
As a mid or long term perspective we are hoping to get the JCL
FreePascal compatible.
This involves the possibilty to have the JCL running on DOS, OS/2,
FreeBSD and
AmigaOS. </p>
<h3>Common platform independent layer</h3>
<p>
This layer consists of all files which are not platform dependent or
need only very minor adjustations. Furthermore all units in this layer
do not depend on a
specific component set. Examples for common platform independent units
are JclBase, JclDateTime, JclFileUtils and JclMath. The units have been
ported to all platforms and are the crossplatform "core" of the Jedi
Code Library. As a general rule a unit in this layer should have no
platform specific ifdefs in its
interface section.
</p>
<h3>Platform dependent layer</h3>
<p>
Furthermore we do not have to differentiate between VCL and VisualCLX
units only (the so called component set dependent layer), but also
between UNIX, Windows and .NET dependent units. The platform dependent
units doesn't need to be interface compatible (if there is an
equivalent in one of the other suported platforms at all!).
An example for a platform dependent unit is JclCLI. Nonetheless if
there are equivalents in all other supported platforms as well it might
be considerable to write a more general class and include that unit
into the common platform indepedant layer.
</p>
<h3>Component set dependent layer</h3>
<p>
When it comes to sharing code between VCL and VisualCLX-applications,
some facts need to be stated:
</p>
<p>
</p>
<li>A unit is called <i>VCL-dependent</i>, when it uses some
VCL-unit(s), e.g. Graphics.
</li>
<li>A unit is called <i>VisualCLX-dependent</i>, when it uses some
VisualCLX-unit(s), e.g. QGraphics.</li>
<p>
When a unit contains neither VCL- nor VisualCLX-specific code, there is
no problem: It can be used by either type of application.
</p>
<p>
While it is basically possible to create VCL-dependent and
VisualCLX-dependent
variants of the same unit by means of conditional compilation - and use
them in
VCL- and VisualCLX-applications respectively -, this method fails at
design time:
One and the same unit cannot be installed twice in the IDE, not even as
part of
different packages. We would have to rename one of the variants,
effectively
creating a new unit. Therefor we will use a preprocessor to resolve the
conditional compilation symbols related to VCL/VisualCLX-specific code
and create
VCL/VisualCLX units from a common codebase.
</p>
<p>
Component dependent units should be largely "interface compatible" -
interface
adjustments for specific component sets are unavoidable - nonetheless
similar
interfaces are desirable.
</p>
<h3>Preprocessor</h3>
<p>
The preprocessor jpp is a modified version of Barry Kelly's ppp tool.
In contrast to ppp, which resolves all conditional compilation
directives without exception, with jpp symbols not only can be defined
but also undefined. Those symbols which are neither defined nor
explicitely undefined are considered
as of unknown status and it and its related source code remains
untouched.
</p>
<p>
The usage of jpp is not too hard. It is called via
</p>
<pre>jpp [options] &lt;input files&gt;...<br></pre>
Possible options are
<pre> -i Process includes<br> -c Process conditional directives<br> -C Strip comments<br> -pxxx Add xxx to include path<br> -dxxx Define xxx as a preprocessor conditional symbol<br> -uxxx Assume preprocessor conditional symbol xxx as not defined<br> -x[n:]yyy Strip first n characters from file name; precede filename by prefix yyy<br></pre>
<p>
The example command line below generates a file JclQGraphics.pas in
subdirectory
CLX from file Graphics.cb located in the current directory. Symbols
"VisualCLX"
and "COMPILER6_UP" are specified as defined, "Bitmap32" and "VCL" as
undefined.
</p>
<pre> jpp -c -dVisualCLX -dCOMPILER6_UP -uBitmap32 -uVCL -xCLX\JclQ Graphics.cb<br></pre>
<h3>Generating Jcl[Q]Graphics.pas and Jcl[Q]GraphUtils.pas</h3>
<p>
First compile Preprocessor\jpp.exe from Preprocessor\jpp.dpr.
Then change to the "Source" directory and type "make" at the command
line.
This will create the units <br>
VCL\JclGraphics.pas <br>
VCL\JclGraphUtils.pas <br>
CLX\JclQGraphics.pas <br>
CLX\JclQGraphUtils.pas <br>
</p>
<p>
from their prototypes _Graphics.pas and _GraphUtils.pas.
</p>
<h3>Minimizing VCL dependencies</h3>
<p>
To reduce VCL dependencies in JCL, the following changes have been
made:
</p>
<menu>
<dl>
<dt>JclFileUtils</dt>
<dd>PathCompactPath is an overloaded function. The variant which
takes a TCanvas as argument (and thus creates a dependency on VCL unit
Graphics) has been removed. </dd>
</dl>
<br>
<dl>
<dt>JclShell</dt>
<dd> ShellLinkGetIcon has been removed. It could get part of some
genuine VCL-dependent unit (e.g. JclGraphUtils), but for now it is left
out. </dd>
</dl>
<br>
<dl>
<dt>JclPEImage</dt>
<dd>
<pre> Replace "uses Consts," by<br><br> uses<br> {$IFDEF COMPILER6_UP}<br> RtlConsts, // VisualCLX-package compatible (part of rtlxx.bpl)<br> {$ELSE}<br> Consts, // not VisualCLX-package compatible (part of vclxx.bpl)<br> {$ENDIF COMPILER6_UP} </pre>
</dd>
</dl>
</menu>
<p>
Note that the first two changes have enormous impact, since many JCL
units use JclFileUtils and JclSysInfo (which both use JclShell). This
leaves JclGraphics and JclGraphUtils as sole units with genuine
VCL/VisualCLX-dependencies.
JclPrint is the only remaining pure VCL-dependent units. </p>
<h3>New directory structure</h3>
<p>
With the new JCL release we introduce a more appropriate source file
directory
structure. The files are now grouped according their respective layers.
</p>
<pre>Source/<br> Common<br> DotNet<br> Unix<br> VCL<br> VisCLX<br> Windows <br></pre>
<h3>Status - Platforms</h3>
<p>
This table gives a short overview of which units are already working
under four different Delphi language compilers/platforms. There are
four status levels possible:
</p>
<p>
<table>
<tbody>
<tr>
<td
style="text-align: center; background-color: rgb(238, 238, 238);"><span
style="font-weight: bold;">+</span><br>
</td>
<td>&nbsp; the unit has been ported to that platform</td>
</tr>
<tr>
<td
style="text-align: center; background-color: rgb(238, 238, 238);">-</td>
<td>&nbsp; the unit has not been ported to that platform</td>
</tr>
<tr>
<td
style="text-align: center; background-color: rgb(238, 238, 238);">&nbsp;(+)
<br>
</td>
<td>&nbsp; the unit compiles, but not all of its functionality
has been ported to that platform.</td>
</tr>
<tr>
<td
style="text-align: center; background-color: rgb(238, 238, 238);">&nbsp;platform
<br>
</td>
<td>&nbsp; the unit is platform dependent and will not be ported.</td>
</tr>
</tbody>
</table>
</p>
<table>
<tbody>
<tr>
<td style="background-color: rgb(238, 238, 238);"><b>Name</b></td>
<td
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Delphi
(Windows)</b></td>
<td
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Kylix
for Delphi</b></td>
<td
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Delphi.NET</b></td>
<td
style="text-align: center; background-color: rgb(238, 238, 238);"><b>Free
Pascal</b></td>
</tr>
<tr>
<td>Jcl8087</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">?</td>
</tr>
<tr>
<td>JclAppInst</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">?</td>
</tr>
<tr>
<td>JclCil</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">?</td>
</tr>
<tr>
<td>JclClr</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">?</td>
</tr>
<tr>
<td>JclCom</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">?</td>
</tr>
<tr>
<td>JclComplex</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">?</td>
</tr>
<tr>
<td>JclConsole</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">?</td>
</tr>
<tr>
<td>JclCounter</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">?</td>
</tr>
<tr>
<td>JclDateTime</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">(+)</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">?</td>
</tr>
<tr>
<td>JclDebug</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclDotNet</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclEDI</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclEDISEF</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclEDIXML</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclEDI_ANSIX12</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclEDI_UNEDIFACT</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclFileUtils</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">(+)</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclExprEval</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b><br>
</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclHookExcept</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclIniFiles</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b><br>
</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclLanMan</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclLocales</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclLogic</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclMapi</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclMath</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclMetaData</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclMidi</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclMime</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclMiscel</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclMultimedia</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclNTFS</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclPEImage</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclPrint</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclStrHashMap</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b><br>
</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclStatistics</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclShell</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclSecurity</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclSchedule</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclRTTI</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclResources</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclRegistry</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclStrings</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>Jclsvcctrl</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>Jclsynch</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclTask</td>
<td style="text-align: center;">platform</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclSysUtils</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">(+)<br>
</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclSysInfo</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">(+)<br>
</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclTD32</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclUnicode</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclUnitConv</td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;"><b>+</b></td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclWin32</td>
<td style="text-align: center;">platform </td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
<tr>
<td>JclWinMidi</td>
<td style="text-align: center;">platform </td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">-</td>
<td style="text-align: center;">? </td>
</tr>
</tbody>
</table>
<h3>Assembler</h3>
<p>
For crossplatform compatability it is absolutely necessary to reduce
the amount
of inline assembler code used. Therefore as a general rule every line
of assembler
<b>must have a pure pascal pendant</b>. Please use assembler only if it
really has a noticeable impact on the libraries performance. </p>
<pre>{$IFNDEF PUREPASCAL}<br> // assembler code here<br>{$ELSE}<br> // Delphi equivalent here<br>{$ENDIF} <br></pre>
<h3>Packages</h3>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -0,0 +1,793 @@
TD {
font-family : "Arial", "Helvetica", Sans-serif;
}
PRE.SourceCode2 {
background-color : #e0ffff;
border-width : medium;
border-style : outset;
border-color : silver;
white-space : pre;
}
PRE.SourceCode EM {
font-style : normal;
color : #9933cc;
white-space : pre;
}
PRE.SourceCode {
font-family : "Courier", monospace;
background-color : white;
margin-right : 20px;
margin-left : 20px;
padding : 5px 20px;
border-width : medium;
border-style : outset;
border-color : silver;
white-space : pre;
}
P.chatuser {
font-weight : bold;
color : #3366cc;
vertical-align : top;
}
P.chatquestionpresented {
font-weight : bold;
background-color : #dddddd;
vertical-align : top;
}
P.chatpublicmsg {
font-weight : normal;
vertical-align : top;
padding : 0 0 20px;
}
P.chateditor {
color : red;
padding : 0 0 10px;
}
P.chataction {
font-style : italic;
vertical-align : top;
}
P.TechNote {
font-weight : normal;
background-color : #e0ffff;
padding : 2px 5px;
border-width : medium;
border-style : outset;
border-color : silver;
}
H3 {
font-weight : bold;
font-size : 11pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
}
H2 {
font-weight : bold;
font-size : 14pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
}
H1 {
font-weight : bold;
font-size : 18pt;
line-height : 18pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
padding : 10px 0 0;
}
BODY {
background : #ffffff;
margin-left : 20 px;
margin-right : 20 px;}
B.Help {
color : white;
background-color : gray;
}
A:hover {
color : #cc3300;
}
.webDirectoryLink {
font-size : 0.8em;
font-family : "Arial", "Helvetica", Sans-serif;
color : #3366cc;
text-decoration : underline;
}
.webDirectoryCategoryLink {
font-size : 0.8em;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
}
.webDirectoryCatHead {
font-size : 0.9em;
font-family : "Arial", "Helvetica", Sans-serif;
color : #ffffff;
text-decoration : none;
}
.vspace5 {
padding : 5px 0 0;
}
.visibility {
font-weight : bold;
font-size : 0.8em;
font-family : "Arial", "Helvetica", Sans-serif;
color : #ff0000;
text-decoration : none;
}
.tuser {
color : blue;
background-color : white;
}
.ttitle {
font-weight : bold;
color : black;
background-color : #dddddd;
}
.tthis {
font-weight : bold;
line-height : 1;
color : white;
background-color : red;
vertical-align : top;
}
.tother {
font-weight : bold;
line-height : 1;
color : white;
background-color : blue;
vertical-align : top;
}
.tmine {
font-weight : bold;
color : black;
background-color : #c71585;
}
.title3 {
font-weight : bold;
font-size : 12pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
}
.thi {
background-color : #dddddd;
}
.textAdLink {
font-weight : bold;
color : #ffffff;
text-decoration : none;
}
.textAdCell {
font-size : 0.8em;
}
.searchCell {
font-weight : bold;
font-size : 11px;
}
.rightSidebarLink {
color : #000000;
text-decoration : none;
}
.rightSidebarHeading {
font-weight : bold;
font-size : 10pt;
color : #ffffff;
background : #3366cc;
}
.rightSidebarCell {
font-weight : bold;
font-size : 10pt;
color : #000000;
background : #dddddd;
}
.presentLocation {
font-weight : bold;
color : #000000;
text-decoration : none;
}
.logoCell {
background : #000000;
}
.logoBar {
background : #000000;
}
.loginLinkCell {
font-weight : bold;
font-size : 0.8em;
background : #3366cc;
}
.loginLink {
color : #ffffff;
text-decoration : none;
}
.loginStd {
text-align : right;
}
.loginReq {
text-align : right;
font-weight : bold;
color : blue;
}
.login_std {
text-align : right;
}
.login_req {
text-align : right;
font-weight : bold;
color : blue;
}
.locationLink {
color : #000000;
text-decoration : underline;
}
.localLinkCell {
font-size : 9pt;
color : #ffffff;
background : #3366cc;
}
.localLink {
font-weight : bold;
color : #ffffff;
text-decoration : none;
}
.leftSidebarText {
font-weight : normal;
font-size : 9pt;
color : #000000;
}
.leftSidebarSoapboxLink {
font-weight : normal;
font-size : 10pt;
color : #0000cc;
font-style : italic;
text-decoration : none
}
.leftSidebarSoapboxLink:hover {
COLOR: #6666cc;
font-weight : normal;
font-size : 10pt;
font-style : italic;
text-decoration : none
}
.leftSidebarHeading {
font-weight : bold;
font-size : 12pt;
color : #3366cc;
}
.leftSidebarCell {
font-size : 0.8em;
background : #dddddd;
}
.heading3 {
font-weight : bold;
font-size : 11pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
vertical-align: baseline;
}
.heading2 {
font-weight : bold;
font-size : 14pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
}
.heading1 {
font-weight : bold;
font-size : 18pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
padding : 10px 0 0;
}
.globalNavBar {
background : #dddddd;
}
.globalLinkCell {
font-size : 0.8em;
background : #dddddd;
}
.globalLink {
font-weight : bold;
color : #000000;
text-decoration : none;
}
.fineprint {
font-weight : normal;
font-size : 8pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
}
.directoryStuff {
font-size : 0.8em;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
}
.directoryLink {
font-size : 9pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
}
.directoryCategory {
font-size : 10pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : underline;
}
.date3 {
font-weight : normal;
font-size : 9pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
vertical-align: baseline ;
}
.copyrightLink {
color : #000000;
text-decoration : none;
}
.copyrightCell {
font-size : 7pt;
background : #dddddd;
}
.contentshortDescription {
font-weight : normal;
font-size : 9pt;
color : #000000;
}
.contentTableCell {
font-size : 0.8em;
background : #ffffff;
}
.contentTable {
background : #ffffff;
}
.contentStoryLink {
color : #3366cc;
}
.contentStoryHeadingCell {
background : #dddddd;
}
.contentStoryHeading {
font-weight : normal;
font-size : 11pt;
color : #000000;
text-decoration : none;
}
.contentStoryByline {
font-style : italic;
font-weight : normal;
font-size : 9pt;
color : #000000;
}
.contentSectionHeading {
font-weight : bold;
font-size : 12pt;
color : #000000;
text-decoration : none;
}
.contentRule {
background : #3366cc;
}
.contentMoreLink {
font-weight : bold;
color : #3366cc;
}
.contentHat {
font-weight : bold;
font-size : 10pt;
color : #000000;
text-decoration : none;
}
.contentDevNewsStoryHeading {
font-weight : normal;
font-size : 10pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
}
.contentArticleTypeIndex {
font-size : 0.7em;
color : #3366cc;
}
.body3, blb, bottomlink {
font-weight : normal;
font-size : 11pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
}
.blueHeading2 {
font-weight : bold;
font-size : 12pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #003399;
text-decoration : none;
}
.bigBlue {
font-weight : bold;
font-size : 14pt;
color : #013399;
text-decoration : none;
}
.abstract {
font-style : italic;
font-weight : normal;
font-size : 10pt;
line-height : 11pt;
font-family : "Arial", "Helvetica", Sans-serif;
color : #000000;
text-decoration : none;
padding : 10px;
}
/* new classes - added 01/11/01 rare medium */
.whiteLink { font-size : 10pt; text-decoration : none; color : #ffffff; }
.whiteLinkB { font-size : 10pt; font-weight : bold; text-decoration : none; color : #ffffff; }
.whiteLinkSmall { font-size : 9pt; text-decoration : none; color : #ffffff; }
.yellowLinkSmall { font-size : 9pt; font-weight : bold; text-decoration : none; color : #ffdf00; }
.whiteLinkVerySmall { font-size : 8pt; text-decoration : none; color : #ffffff; }
.newBody { font-weight : normal; font-size : 9pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
.newTitle { font-weight : bold; font-size : 11pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
.newDate { font-weight : normal; font-size : 8pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; margin-top : 3pt; }
.newHeading { font-weight : bold; font-size : 9pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
.bigBlack { font-weight : bold; font-size : 14pt; font-family : "Arial", "Helvetica", Sans-serif; color : #000000; text-decoration : none; }
BODY
{
MARGINLEFT: 18px
}
/* Changed font size from 12px to 14 px here due to complaints 2002/5/20 Tom Lam */
TR, TD, P, LAYER {
FONT-SIZE: 14px;
COLOR: #000000;
FONT-FAMILY: arial, helvetica, sans-serif;
TEXT-DECORATION: none;
}
.newsItem {
FONT-SIZE: 11px;
COLOR: #000000;
FONT-FAMILY: arial, helvetica, sans-serif;
TEXT-DECORATION: none;
}
A {
COLOR: #0000cc;
TEXT-DECORATION: none;
}
A: hover {
COLOR: #6666cc;
TEXT-DECORATION: none;
}
.divider
{
BACKGROUND: #999999
}
.lightBG
{
BACKGROUND: #cccccc;
}
.intTopnav {
FONT-SIZE: 12px;
FONT-WEIGHT: bold;
COLOR: #666666;
}
.intTopnav A {
FONT-SIZE: 12px;
FONT-WEIGHT: bold;
COLOR: #000000;
TEXT-DECORATION: none;
}
.intTopnav A:hover {
FONT-SIZE: 12px;
FONT-WEIGHT: bold;
COLOR: #666666;
TEXT-DECORATION: underline;
}
.leftNavTop {
FONT-SIZE: 14px;
FONT-WEIGHT: bold;
}
.leftNavTop A {
FONT-SIZE: 14px;
FONT-WEIGHT: bold;
COLOR: #0000cc;
TEXT-DECORATION: underline;
}
.leftNavTop A:hover {
FONT-SIZE: 14px;
FONT-WEIGHT: bold;
COLOR: #6666cc;
}
.leftNav {
FONT-SIZE: 12px;
COLOR: #666666;
FONT-WEIGHT: bold;
}
.leftNav A {
FONT-SIZE: 12px;
COLOR: #0000cc;
FONT-WEIGHT: normal;
TEXT-DECORATION: underline;
}
.leftNav A:hover {
FONT-SIZE: 12px;
COLOR: #6666cc;
FONT-WEIGHT: normal;
}
.prodList {
FONT-SIZE: 13px;
FONT-WEIGHT: bold;
COLOR: #666666;
TEXT-DECORATION: none;
MARGIN-TOP: -6px;
}
.prodList A {
COLOR: #666666;
TEXT-DECORATION: none;
}
.prodList A:hover {
COLOR: #6666cc;
TEXT-DECORATION: underline;
}
.contentHeader {
FONT-FAMILY: arial, helvetica, sans-serif;
FONT-SIZE: 20px;
FONT-WEIGHT: bold;
}
.contentHeader A {
COLOR: #000000;
TEXT-DECORATION: underline;
}
.contentHeader A: hover {
COLOR: #666666;
TEXT-DECORATION: underline;
}
.contentSubHeader {
FONT-FAMILY: arial, helvetica, sans-serif;
FONT-SIZE: 16px;
FONT-WEIGHT: bold;
MARGIN-BOTTOM: -8px;
}
.subHeader {
FONT-FAMILY: arial, helvetica, sans-serif;
FONT-SIZE: 16px;
FONT-WEIGHT: bold;
}
.pressSubHead {
FONT-WEIGHT: bold;
COLOR: #003366;
}
.bodyLight {
COLOR: #666666;
}
A.bodyNav1 {
COLOR: #0000cc;
TEXT-DECORATION: underline;
}
A.bodyNav1:hover {
COLOR: #6666cc;
TEXT-DECORATION: underline;
}
A.bodyNav2 {
COLOR: #333333;
TEXT-DECORATION: underline;
}
A.bodyNav2:hover {
COLOR: #003366;
TEXT-DECORATION: underline;
}
INPUT.TEXT {
font-size: 12px;
}
.tableHeader {
FONT-SIZE: 11px;
COLOR: #333333;
}
.footer {
font-size: 11px;
COLOR: #666666;
MARGIN-BOTTOM: 0px;
}
.footer A {
COLOR: #003366;
}
.footer A:hover {
COLOR: #006699;
}
.Menu
{
VISIBILITY: hidden;
POSITION: absolute;
TOP: 93px;
}
.Menu TD
{
FONT-SIZE: 11px;
COLOR: #ffffff;
FONT-FAMILY: arial, helvetica, sans-serif;
TEXT-DECORATION: none;
}
.Menu A
{
FONT-SIZE: 11px;
COLOR: #ffffff;
FONT-FAMILY: arial, helvetica, sans-serif;
TEXT-DECORATION: none;
}
.Menu A:hover
{
FONT-SIZE: 11px;
COLOR: #cccccc;
FONT-FAMILY: arial, helvetica, sans-serif;
TEXT-DECORATION: none;
}
.Trigger
{
POSITION: relative;
TOP: 0px;
LEFT: 0px;
}
select {
FONT-SIZE: 10px;
COLOR: #000000;
FONT-FAMILY: arial, helvetica, sans-serif;
}
INPUT.TEXT.srchBox {
FONT-SIZE: 12px;
WIDTH: 116px;
}
A.leftLink {
COLOR: #0000cc;
TEXT-DECORATION: none;
}
A.leftLink:hover {
COLOR: #6666cc;
TEXT-DECORATION: none;
}
A.leftLinkB {
COLOR: #000000;
TEXT-DECORATION: none;
FONT-WEIGHT: bold;
}
.topLinkB {

View File

@ -0,0 +1,34 @@
body {padding: 0px 0px 0px 26px;background: #ffffff; color: #000000;font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 9pt;}
h1, h2, h3, h4 {font-family: Verdana, Arial, Helvetica, sans-serif;margin-left: -6px;margin-top: .5em;margin-bottom: .5em; }
h1 {font-size: 160%;}
h2 {font-size: 145%;}
h3 {font-size: 130%;}
h4 {font-size: 115%;}
h5 {font-size: 105%;}
hr {align:"right";color:"#000080";noshade;}
ul p, ol p, dl p {margin-left: 0em;}
p {margin-top: .6em;margin-bottom:.6em;}
dl {margin-top: 0em;}
dd {margin-bottom: 0em;margin-left: 1.9em;}
dt {margin-top: .6em; }
ul, ol {margin-top: .6em;margin-bottom: 0em;}
ol {margin-left: 1.9em; }
ul {list-style-type: disc;margin-left: 1.9em; }
li {margin-bottom: .6em;}
ul ol, ol ol {list-style-type: lower-alpha;}
pre {margin-top: .6em;margin-bottom: .6em; }
pre,code {font-family: Courier New, Courier, mono;color: #660000;}
table {background: #999999;margin-top: .6em;margin-bottom: .3em;}
th {padding: 4px 8px;background: #cccccc;text-align: left;font-size: 70%;vertical-align: bottom;height: 25px;}
td {padding: 4px 8px;background: #ffffff;vertical-align: top;font-size: 70%;height: 25px;}
blockquote {margin-left: 3.8em;margin-right: 3.8em;margin-top: .6em;margin-bottom: .6em;}
sup {text-decoration: none;font-size: smaller; }
a:link {color: #0066ff;}
a:visited {color: #0066ff;}
a:hover {color: #cc9900;}
.select {margin-bottom:-4px;border-width: 1px;border-style: solid;width: 400px;}
.input, .textarea {margin-bottom:-4px;border-width: 1px;border-style: solid;width: 400px;}
.submit {background-color: #CCCCCC;border-width: 1px;border-style: solid;}
.reset {background-color: #CCCCCC;border-width: 1px;border-style: solid;}
.button {background-color: #CCCCCC;border-width: 1px;border-style: solid;}
.InfoField {border: 2px solid #AAAAAA;padding: 4px 4px;background: #EFEFEF;}

View File

@ -0,0 +1 @@
ExtraRequirements.exc

View File

@ -0,0 +1 @@
ExtraRequirements.exc

View File

@ -0,0 +1 @@
ExtraRequirements.exc

View File

@ -0,0 +1 @@
ExtraRequirements.exc

View File

@ -0,0 +1 @@
ExtraRequirements.exc

View File

@ -0,0 +1 @@
ExtraRequirements.exc

View File

@ -0,0 +1 @@
ExtraRequirements.exc

View File

@ -0,0 +1 @@
ExtraRequirements.exc

View File

@ -0,0 +1 @@
ExtraRequirements.exc

View File

@ -0,0 +1,5 @@
common\multimedia\MidiOutExample.dpr=spin.dcu
common\numformat\NumFormatExample.dpr=spin.dcu
windows\debug\sourceloc\SourceLocExample.dpr=spin.dcu
windows\delphitools\peviewer\PeViewer.dpr=spin.dcu
windows\tasks\TaskDemo.dpr=MsHtml.dcu

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Default.Personality</Option>
<Option Name="ProjectType"></Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{DA6232CE-74D4-4FD2-95D5-44C5C155C336}</Option>
</Option>
</PersonalityInfo>
<Default.Personality>
<Projects>
<Projects Name="StackTrackDLLsExample.exe">windows\debug\stacktrack\StackTrackDLLsExample.bdsproj</Projects>
<Projects Name="StackTrackDLLsStaticLibrary.dll">windows\debug\stacktrack\StackTrackDLLsStaticLibrary.bdsproj</Projects>
<Projects Name="StackTrackDLLsDynamicLibrary.dll">windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.bdsproj</Projects>
<Projects Name="StackTrackDLLsComLibrary.dll">windows\debug\stacktrack\StackTrackDLLsComLibrary.bdsproj</Projects>
<Projects Name="StackTrackExample.exe">windows\debug\stacktrack\StackTrackExample.bdsproj</Projects>
<Projects Name="Targets">StackTrackDLLsExample.exe StackTrackDLLsStaticLibrary.dll StackTrackDLLsDynamicLibrary.dll StackTrackDLLsComLibrary.dll StackTrackExample.exe</Projects>
</Projects>
<Dependencies/>
</Default.Personality>
</BorlandProject>

View File

@ -0,0 +1,33 @@
#------------------------------------------------------------------------------
VERSION = BWS.01
#------------------------------------------------------------------------------
!ifndef ROOT
ROOT = $(MAKEDIR)\..
!endif
#------------------------------------------------------------------------------
MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
DCC = $(ROOT)\bin\dcc32.exe $**
BRCC = $(ROOT)\bin\brcc32.exe $**
#------------------------------------------------------------------------------
PROJECTS = StackTrackDLLsExample.exe StackTrackDLLsStaticLibrary.dll \
StackTrackDLLsDynamicLibrary.dll StackTrackDLLsComLibrary.dll StackTrackExample.exe
#------------------------------------------------------------------------------
default: $(PROJECTS)
#------------------------------------------------------------------------------
StackTrackDLLsExample.exe: windows\debug\stacktrack\StackTrackDLLsExample.dpr
$(DCC)
StackTrackDLLsStaticLibrary.dll: windows\debug\stacktrack\StackTrackDLLsStaticLibrary.dpr
$(DCC)
StackTrackDLLsDynamicLibrary.dll: windows\debug\stacktrack\StackTrackDLLsDynamicLibrary.dpr
$(DCC)
StackTrackDLLsComLibrary.dll: windows\debug\stacktrack\StackTrackDLLsComLibrary.dpr
$(DCC)
StackTrackExample.exe: windows\debug\stacktrack\StackTrackExample.dpr
$(DCC)

View File

@ -0,0 +1,2 @@
[Directories]
OutputDir=..\..\..\..\bin

View File

@ -0,0 +1,21 @@
program AlgorithmsExample;
{$I jcl.inc}
uses
{$IFDEF MSWINDOWS}
Forms,
{$ENDIF MSWINDOWS}
{$IFDEF LINUX}
QForms,
{$ENDIF LINUX}
AlgorithmsExampleMain in 'AlgorithmsExampleMain.pas' {MainForm};
{$R *.res}
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

View File

@ -0,0 +1,250 @@
object MainForm: TMainForm
Left = 280
Top = 180
ClientWidth = 384
ClientHeight = 304
ActiveControl = PageControl1
Caption = 'Algos'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = 11
Font.Name = 'MS Sans Serif'
Font.Pitch = fpVariable
Font.Style = []
OldCreateOrder = True
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object PageControl1: TPageControl
Left = 0
Top = 0
Width = 384
Height = 303
ActivePage = tbsApply
Align = alClient
TabOrder = 0
object tbsApply: TTabSheet
Caption = 'Apply'
object btnApplyGenerate: TButton
Left = 152
Top = 48
Width = 75
Height = 25
Caption = 'Generate'
TabOrder = 0
OnClick = btnApplyGenerateClick
end
object btnApply: TButton
Left = 152
Top = 96
Width = 75
Height = 25
Caption = 'Apply'
TabOrder = 1
OnClick = btnApplyClick
end
object lbxApply: TListBox
Left = 16
Top = 48
Width = 121
Height = 137
ItemHeight = 13
TabOrder = 2
end
object edtApply: TEdit
Left = 240
Top = 96
Width = 121
Height = 21
TabOrder = 3
Text = '4'
end
end
object tbsFind: TTabSheet
Caption = 'Find'
ImageIndex = 1
object lblFound: TLabel
Left = 152
Top = 136
Width = 3
Height = 13
end
object btnFindGenerate: TButton
Left = 152
Top = 48
Width = 75
Height = 25
Caption = 'Generate'
TabOrder = 0
OnClick = btnFindGenerateClick
end
object btnFind: TButton
Left = 152
Top = 96
Width = 75
Height = 25
Caption = 'Find'
TabOrder = 1
OnClick = btnFindClick
end
object lbxFind: TListBox
Left = 16
Top = 48
Width = 121
Height = 137
ItemHeight = 13
TabOrder = 2
end
object edtFind: TEdit
Left = 240
Top = 96
Width = 121
Height = 21
TabOrder = 3
end
end
object tbsCountObject: TTabSheet
Caption = 'CountObject'
ImageIndex = 2
object lblCount: TLabel
Left = 152
Top = 136
Width = 6
Height = 13
Caption = '0'
end
object btnCountGenerate: TButton
Left = 152
Top = 48
Width = 75
Height = 25
Caption = 'Generate'
TabOrder = 0
OnClick = btnCountGenerateClick
end
object btnCount: TButton
Left = 152
Top = 96
Width = 75
Height = 25
Caption = 'Count'
TabOrder = 1
OnClick = btnCountClick
end
object lbxCount: TListBox
Left = 16
Top = 48
Width = 121
Height = 137
ItemHeight = 13
TabOrder = 2
end
object edtCount: TEdit
Left = 240
Top = 96
Width = 121
Height = 21
TabOrder = 3
end
end
object tbsCopy: TTabSheet
Caption = 'Copy'
ImageIndex = 3
object btnCopyGenerate: TButton
Left = 136
Top = 64
Width = 75
Height = 25
Caption = 'Generate'
TabOrder = 0
OnClick = btnCopyGenerateClick
end
object btnCopy: TButton
Left = 136
Top = 120
Width = 75
Height = 25
Caption = 'Copy'
TabOrder = 1
OnClick = btnCopyClick
end
object lbxCopySrc: TListBox
Left = 40
Top = 56
Width = 73
Height = 153
ItemHeight = 13
TabOrder = 2
end
object lbxCopyDes: TListBox
Left = 232
Top = 56
Width = 81
Height = 153
ItemHeight = 13
TabOrder = 3
end
end
object tbsReverse: TTabSheet
Caption = 'Reverse'
ImageIndex = 4
object btnReverseGenerate: TButton
Left = 176
Top = 56
Width = 75
Height = 25
Caption = 'Generate'
TabOrder = 0
OnClick = btnReverseGenerateClick
end
object btnReverse: TButton
Left = 176
Top = 104
Width = 75
Height = 25
Caption = 'Reverse'
TabOrder = 1
OnClick = btnReverseClick
end
object lbxReverse: TListBox
Left = 32
Top = 56
Width = 121
Height = 153
ItemHeight = 13
TabOrder = 2
end
end
object tbsSort: TTabSheet
Caption = 'Sort'
ImageIndex = 5
object btnSortGenerate: TButton
Left = 176
Top = 56
Width = 75
Height = 25
Caption = 'Generate'
TabOrder = 0
OnClick = btnSortGenerateClick
end
object btnSort: TButton
Left = 176
Top = 104
Width = 75
Height = 25
Caption = 'Sort'
TabOrder = 1
OnClick = btnSortClick
end
object lbxSort: TListBox
Left = 32
Top = 56
Width = 121
Height = 153
ItemHeight = 13
TabOrder = 2
end
end
end
end

View File

@ -0,0 +1,246 @@
unit AlgorithmsExampleMain;
interface
uses
{$IFDEF WIN32}
Windows, Messages, Forms, ComCtrls, Graphics, Controls,
Dialogs, StdCtrls,
{$ENDIF}
{$IFDEF LINUX}
QForms, QStdCtrls, QControls, QComCtrls,
{$ENDIF}
SysUtils, Classes,
JclContainerIntf, JclArrayLists, JclLinkedLists;
type
TMainForm = class(TForm)
PageControl1: TPageControl;
tbsApply: TTabSheet;
tbsFind: TTabSheet;
tbsCountObject: TTabSheet;
tbsCopy: TTabSheet;
tbsReverse: TTabSheet;
tbsSort: TTabSheet;
btnApplyGenerate: TButton;
btnApply: TButton;
lbxApply: TListBox;
btnFindGenerate: TButton;
btnFind: TButton;
lbxFind: TListBox;
edtFind: TEdit;
btnCountGenerate: TButton;
btnCount: TButton;
lbxCount: TListBox;
edtCount: TEdit;
btnCopyGenerate: TButton;
btnCopy: TButton;
lbxCopySrc: TListBox;
lbxCopyDes: TListBox;
btnReverseGenerate: TButton;
btnReverse: TButton;
lbxReverse: TListBox;
btnSortGenerate: TButton;
btnSort: TButton;
lbxSort: TListBox;
lblFound: TLabel;
lblCount: TLabel;
edtApply: TEdit;
procedure btnApplyGenerateClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnApplyClick(Sender: TObject);
procedure btnFindGenerateClick(Sender: TObject);
procedure btnFindClick(Sender: TObject);
procedure btnCountGenerateClick(Sender: TObject);
procedure btnCountClick(Sender: TObject);
procedure btnCopyGenerateClick(Sender: TObject);
procedure btnCopyClick(Sender: TObject);
procedure btnReverseGenerateClick(Sender: TObject);
procedure btnReverseClick(Sender: TObject);
procedure btnSortGenerateClick(Sender: TObject);
procedure btnSortClick(Sender: TObject);
private
public
List: IJclList;
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses JclAlgorithms;
procedure TMainForm.btnApplyGenerateClick(Sender: TObject);
var
I: Integer;
It: IJclIterator;
begin
List.Clear;
for I := 1 to 10 do
List.Add(TObject(I));
lbxApply.Items.Clear;
It := List.First;
while It.HasNext do
lbxApply.Items.Add(IntToStr(Integer(It.Next)));
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
List := TJclArrayList.Create(16, False);
end;
function Add2(AObject: TObject): TObject;
begin
Result := TObject(Integer(AObject) + 2);
end;
procedure TMainForm.btnApplyClick(Sender: TObject);
var
It: IJclIterator;
Value: Integer;
begin
Value := StrToIntDef(edtApply.Text, 0);
JclAlgorithms.Apply(List.First, Value, Add2);
lbxApply.Items.Clear;
It := List.First;
while It.HasNext do
lbxApply.Items.Add(IntToStr(Integer(It.Next)));
end;
procedure TMainForm.btnFindGenerateClick(Sender: TObject);
var
I: Integer;
It: IJclIterator;
begin
List.Clear;
for I := 1 to 10 do
List.Add(TObject(I));
lbxFind.Items.Clear;
It := List.First;
while It.HasNext do
lbxFind.Items.Add(IntToStr(Integer(It.Next)));
end;
procedure TMainForm.btnFindClick(Sender: TObject);
var
It: IJclIterator;
Value: Integer;
begin
Value := StrToIntDef(edtFind.Text, 0);
It := JclAlgorithms.Find(List.First, List.Size, TObject(Value), SimpleCompare);
if It = nil then
lblFound.Caption := 'Not found'
else
lblFound.Caption := 'Found';
end;
procedure TMainForm.btnCountGenerateClick(Sender: TObject);
var
I: Integer;
It: IJclIterator;
begin
Randomize;
List.Clear;
for I := 1 to 10 do
List.Add(TObject(Random(10) + 1));
lbxCount.Items.Clear;
It := List.First;
while It.HasNext do
lbxCount.Items.Add(IntToStr(Integer(It.Next)));
end;
procedure TMainForm.btnCountClick(Sender: TObject);
var
Count: Integer;
Value: Integer;
begin
Value := StrToIntDef(edtCount.Text, 0);
Count := JclAlgorithms.CountObject(List.First, List.Size, TObject(Value), SimpleCompare);
lblCount.Caption := IntToStr(Count);
end;
procedure TMainForm.btnCopyGenerateClick(Sender: TObject);
var
I: Integer;
It: IJclIterator;
begin
Randomize;
List.Clear;
for I := 1 to 10 do
List.Add(TObject(Random(10) + 1));
lbxCopySrc.Items.Clear;
It := List.First;
while It.HasNext do
lbxCopySrc.Items.Add(IntToStr(Integer(It.Next)));
end;
procedure TMainForm.btnCopyClick(Sender: TObject);
var
AnotherList: IJclList;
It: IJclIterator;
begin
AnotherList := TJclArrayList.Create(16, False);
JclAlgorithms.Generate(AnotherList, 10, TObject(0));
JclAlgorithms.Copy(List.First, List.Size, AnotherList.First);
lbxCopyDes.Items.Clear;
It := AnotherList.First;
while It.HasNext do
lbxCopyDes.Items.Add(IntToStr(Integer(It.Next)));
end;
procedure TMainForm.btnReverseGenerateClick(Sender: TObject);
var
I: Integer;
It: IJclIterator;
begin
List.Clear;
for I := 1 to 10 do
List.Add(TObject(I));
lbxReverse.Items.Clear;
It := List.First;
while It.HasNext do
lbxReverse.Items.Add(IntToStr(Integer(It.Next)));
end;
procedure TMainForm.btnReverseClick(Sender: TObject);
var
It: IJclIterator;
begin
JclAlgorithms.Reverse(List.First, List.Last);
lbxReverse.Items.Clear;
It := List.First;
while It.HasNext do
lbxReverse.Items.Add(IntToStr(Integer(It.Next)));
end;
procedure TMainForm.btnSortGenerateClick(Sender: TObject);
var
I: Integer;
It: IJclIterator;
begin
Randomize;
List.Clear;
for I := 1 to 10 do
List.Add(TObject(Random(10) - 5));
lbxSort.Items.Clear;
It := List.First;
while It.HasNext do
lbxSort.Items.Add(IntToStr(Integer(It.Next)));
end;
procedure TMainForm.btnSortClick(Sender: TObject);
var
It: IJclIterator;
begin
JclAlgorithms.Sort(List, 0, 9, IntegerCompare);
lbxSort.Items.Clear;
It := List.First;
while It.HasNext do
lbxSort.Items.Add(IntToStr(Integer(It.Next)));
end;
end.

View File

@ -0,0 +1,76 @@
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=..\..\..\..\bin
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Language]
ActiveLang=
ProjectLang=
RootDir=
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1031
CodePage=1252

View File

@ -0,0 +1,21 @@
program HashingExample;
{$I jcl.inc}
uses
{$IFDEF MSWINDOWS}
Forms,
{$ENDIF MSWINDOWS}
{$IFDEF LINUX}
QForms,
{$ENDIF LINUX}
HashingExampleMain in 'HashingExampleMain.pas' {MainForm};
{$R *.res}
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

View File

@ -0,0 +1,173 @@
object MainForm: TMainForm
Left = 281
Top = 201
Width = 513
Height = 280
HorzScrollBar.Range = 476
VertScrollBar.Range = 209
ActiveControl = btnIntfIntfHashMap
Caption = 'Hashing Example'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = 11
Font.Name = 'MS Sans Serif'
Font.Pitch = fpVariable
Font.Style = []
OldCreateOrder = True
PixelsPerInch = 96
TextHeight = 13
object btnIntfIntfHashMap: TButton
Left = 8
Top = 8
Width = 89
Height = 25
Caption = 'IntfIntfHashMap'
TabOrder = 0
OnClick = btnIntfIntfHashMapClick
end
object btnIntfHashSet: TButton
Left = 103
Top = 8
Width = 89
Height = 25
Caption = 'IntfHashSet'
TabOrder = 5
OnClick = btnIntfHashSetClick
end
object btnHashMap: TButton
Left = 8
Top = 220
Width = 89
Height = 25
Caption = 'HashMap'
TabOrder = 4
OnClick = btnHashMapClick
end
object btnHashSet: TButton
Left = 103
Top = 220
Width = 89
Height = 25
Caption = 'HashSet'
TabOrder = 7
OnClick = btnHashSetClick
end
object btnAnsiStrIntfHashMap: TButton
Left = 8
Top = 47
Width = 138
Height = 25
Caption = 'AnsiStrIntfHashMap'
TabOrder = 1
OnClick = btnAnsiStrIntfHashMapClick
end
object btnIntfArraySet: TButton
Left = 198
Top = 8
Width = 89
Height = 25
Caption = 'IntfArraySet'
TabOrder = 8
OnClick = btnIntfArraySetClick
end
object btnArraySet: TButton
Left = 198
Top = 220
Width = 89
Height = 25
Caption = 'ArraySet'
TabOrder = 10
OnClick = btnArraySetClick
end
object btnAnsiStrAnsiStrHashMap: TButton
Left = 8
Top = 78
Width = 138
Height = 25
Caption = 'AnsiStrAnsiStrHashMap'
TabOrder = 2
OnClick = btnAnsiStrAnsiStrHashMapClick
end
object btnAnsiStrHashMap: TButton
Left = 8
Top = 171
Width = 138
Height = 25
Caption = 'AnsiStrHashMap'
TabOrder = 3
OnClick = btnAnsiStrHashMapClick
end
object btnAnsiStrHashSet: TButton
Left = 8
Top = 109
Width = 138
Height = 25
Caption = 'AnsiStrHashSet'
TabOrder = 6
OnClick = btnAnsiStrHashSetClick
end
object btnAnsiStrArraySet: TButton
Left = 8
Top = 140
Width = 138
Height = 25
Caption = 'AnsiStrArraySet'
TabOrder = 9
OnClick = btnAnsiStrArraySetClick
end
object memResult: TListBox
Left = 304
Top = 0
Width = 185
Height = 248
Anchors = [akTop, akRight, akBottom]
ItemHeight = 13
TabOrder = 11
end
object btnWideStrIntfHashMap: TButton
Left = 152
Top = 47
Width = 135
Height = 25
Caption = 'WideStrIntfHashMap'
TabOrder = 12
OnClick = btnWideStrIntfHashMapClick
end
object btnWideStrWideStrHashMap: TButton
Left = 152
Top = 78
Width = 135
Height = 25
Caption = 'WideStrWideStrHashMap'
TabOrder = 13
OnClick = btnWideStrWideStrHashMapClick
end
object btnWideStrHashSet: TButton
Left = 152
Top = 109
Width = 135
Height = 25
Caption = 'WideStrHashSet'
TabOrder = 14
OnClick = btnWideStrHashSetClick
end
object btnWideStrArraySet: TButton
Left = 152
Top = 140
Width = 135
Height = 25
Caption = 'WideStrArraySet'
TabOrder = 15
OnClick = btnWideStrArraySetClick
end
object btnWideStrHashMap: TButton
Left = 152
Top = 171
Width = 135
Height = 25
Caption = 'AnsiStrHashMap'
TabOrder = 16
OnClick = btnWideStrHashMapClick
end
end

View File

@ -0,0 +1,442 @@
unit HashingExampleMain;
interface
uses
{$IFDEF WIN32}
Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls,
{$ENDIF}
{$IFDEF LINUX}
QForms, QControls, QStdCtrls,
{$ENDIF}
SysUtils, Classes;
type
TMainForm = class(TForm)
btnIntfIntfHashMap: TButton;
btnIntfHashSet: TButton;
btnHashMap: TButton;
btnHashSet: TButton;
btnAnsiStrIntfHashMap: TButton;
btnIntfArraySet: TButton;
btnArraySet: TButton;
btnAnsiStrAnsiStrHashMap: TButton;
btnAnsiStrHashMap: TButton;
btnAnsiStrHashSet: TButton;
btnAnsiStrArraySet: TButton;
memResult: TListBox;
btnWideStrIntfHashMap: TButton;
btnWideStrWideStrHashMap: TButton;
btnWideStrHashSet: TButton;
btnWideStrArraySet: TButton;
btnWideStrHashMap: TButton;
procedure btnIntfIntfHashMapClick(Sender: TObject);
procedure btnAnsiStrIntfHashMapClick(Sender: TObject);
procedure btnWideStrIntfHashMapClick(Sender: TObject);
procedure btnHashMapClick(Sender: TObject);
procedure btnIntfHashSetClick(Sender: TObject);
procedure btnHashSetClick(Sender: TObject);
procedure btnIntfArraySetClick(Sender: TObject);
procedure btnArraySetClick(Sender: TObject);
procedure btnAnsiStrAnsiStrHashMapClick(Sender: TObject);
procedure btnWideStrWideStrHashMapClick(Sender: TObject);
procedure btnAnsiStrHashMapClick(Sender: TObject);
procedure btnWideStrHashMapClick(Sender: TObject);
procedure btnAnsiStrHashSetClick(Sender: TObject);
procedure btnWideStrHashSetClick(Sender: TObject);
procedure btnAnsiStrArraySetClick(Sender: TObject);
procedure btnWideStrArraySetClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
IIntfMyObject = interface
['{B2CB604F-4F5F-44D8-A86F-6138CD329B42}']
function GetInt: Integer;
function GetStr: string;
procedure SetInt(Value: Integer);
procedure SetStr(const Value: string);
property Int: Integer read GetInt write SetInt;
property Str: string read GetStr write SetStr;
end;
TIntfMyObject = class(TInterfacedObject, IIntfMyObject)
private
FInt: Integer;
FStr: string;
protected
{ IIntfMyObject }
function GetInt: Integer;
function GetStr: string;
procedure SetInt(Value: Integer);
procedure SetStr(const Value: string);
end;
TMyObject = class(TObject)
private
FInt: Integer;
FStr: string;
public
property Int: Integer read FInt write FInt;
property Str: string read FStr write FStr;
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses JclContainerIntf, JclHashMaps, JclHashSets, JclArraySets;
{ TIntfMyObject }
function TIntfMyObject.GetInt: Integer;
begin
Result := FInt;
end;
function TIntfMyObject.GetStr: string;
begin
Result := FStr;
end;
procedure TIntfMyObject.SetInt(Value: Integer);
begin
FInt := Value;
end;
procedure TIntfMyObject.SetStr(const Value: string);
begin
FStr := Value;
end;
procedure TMainForm.btnIntfIntfHashMapClick(Sender: TObject);
var
Map: IJclIntfIntfMap;
MyObject: IIntfMyObject;
KeyObject: TInterfacedObject;
It: IJclIntfIterator;
begin
Map := TJclIntfIntfHashMap.Create(DefaultContainerCapacity);
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
KeyObject := TInterfacedObject.Create;
Map.PutValue(KeyObject, MyObject);
MyObject := IIntfMyObject(Map.GetValue(KeyObject));
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
It := Map.Values.First;
while It.HasNext do
memResult.Items.Add(IIntfMyObject(It.Next).Str);
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnAnsiStrIntfHashMapClick(Sender: TObject);
var
Map: IJclAnsiStrIntfMap;
MyObject: IIntfMyObject;
begin
Map := TJclAnsiStrIntfHashMap.Create(DefaultContainerCapacity);
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
Map.PutValue('MyKey', MyObject);
MyObject := TIntfMyObject.Create;
MyObject.Int := 43;
MyObject.Str := 'AnotherString';
Map.PutValue('MyKey2', MyObject);
MyObject := IIntfMyObject(Map.GetValue('MyKey2'));
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnWideStrIntfHashMapClick(Sender: TObject);
var
Map: IJclWideStrIntfMap;
MyObject: IIntfMyObject;
begin
Map := TJclWideStrIntfHashMap.Create(DefaultContainerCapacity);
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
Map.PutValue('MyKey', MyObject);
MyObject := TIntfMyObject.Create;
MyObject.Int := 43;
MyObject.Str := 'AnotherString';
Map.PutValue('MyKey2', MyObject);
MyObject := IIntfMyObject(Map.GetValue('MyKey2'));
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnHashMapClick(Sender: TObject);
var
Map: IJclMap;
MyObject: TMyObject;
KeyObject: TObject;
It: IJclIterator;
begin
Map := TJclHashMap.Create(DefaultContainerCapacity, False, False);
MyObject := TMyObject.Create;
KeyObject := TObject.Create;
try
MyObject.Int := 42;
MyObject.Str := 'MyString';
Map.PutValue(KeyObject, MyObject);
MyObject := TMyObject(Map.GetValue(KeyObject));
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
It := Map.Values.First;
while It.HasNext do
memResult.Items.Add(TMyObject(It.Next).Str);
memResult.Items.Add('--------------------------------------------------------');
finally
MyObject.Free;
KeyObject.Free;
end;
end;
procedure TMainForm.btnIntfHashSetClick(Sender: TObject);
var
MySet: IJclIntfSet;
MyObject: IIntfMyObject;
It: IJclIntfIterator;
begin
MySet := TJclIntfHashSet.Create(DefaultContainerCapacity);
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
MySet.Add(MyObject);
MySet.Add(MyObject);
It := MySet.First;
while It.HasNext do
memResult.Items.Add(IIntfMyObject(It.Next).Str);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnHashSetClick(Sender: TObject);
var
MySet: IJclSet;
MyObject: TMyObject;
It: IJclIterator;
begin
MySet := TJclHashSet.Create(DefaultContainerCapacity, False);
MyObject := TMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
MySet.Add(MyObject);
MySet.Add(MyObject);
It := MySet.First;
while It.HasNext do
memResult.Items.Add(TMyObject(It.Next).Str);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnIntfArraySetClick(Sender: TObject);
var
MySet: IJclIntfSet;
MyObject: IIntfMyObject;
It: IJclIntfIterator;
begin
MySet := TJclIntfArraySet.Create(DefaultContainerCapacity);
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
MySet.Add(MyObject);
MySet.Add(MyObject);
It := MySet.First;
while It.HasNext do
memResult.Items.Add(IIntfMyObject(It.Next).Str);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnArraySetClick(Sender: TObject);
var
MySet: IJclSet;
MyObject: TMyObject;
It: IJclIterator;
begin
MySet := TJclArraySet.Create(DefaultContainerCapacity, False);
MyObject := TMyObject.Create;
try
MyObject.Int := 42;
MyObject.Str := 'MyString';
MySet.Add(MyObject);
MySet.Add(MyObject);
It := MySet.First;
while It.HasNext do
memResult.Items.Add(TMyObject(It.Next).Str);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
finally
MyObject.Free;
end;
end;
procedure TMainForm.btnAnsiStrAnsiStrHashMapClick(Sender: TObject);
var
Map: IJclAnsiStrAnsiStrMap;
It: IJclAnsiStrIterator;
begin
Map := TJclAnsiStrAnsiStrHashMap.Create(DefaultContainerCapacity);
Map.PutValue('MyKey1', 'MyString1');
Map.PutValue('MyKey2', 'MyString2');
Map.PutValue('MyKey3', 'MyString3');
It := Map.KeySet.First;
while It.HasNext do
memResult.Items.Add(string(It.Next));
It := Map.Values.First;
while It.HasNext do
memResult.Items.Add(string(It.Next));
Map.PutValue('MyKey2', 'AnotherString2');
memResult.Items.Add(string(Map.GetValue('MyKey2')));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnWideStrWideStrHashMapClick(Sender: TObject);
var
Map: IJclWideStrWideStrMap;
It: IJclWideStrIterator;
begin
Map := TJclWideStrWideStrHashMap.Create(DefaultContainerCapacity);
Map.PutValue('MyKey1', 'MyString1');
Map.PutValue('MyKey2', 'MyString2');
Map.PutValue('MyKey3', 'MyString3');
It := Map.KeySet.First;
while It.HasNext do
memResult.Items.Add(It.Next);
It := Map.Values.First;
while It.HasNext do
memResult.Items.Add(It.Next);
Map.PutValue('MyKey2', 'AnotherString2');
memResult.Items.Add(Map.GetValue('MyKey2'));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnAnsiStrHashMapClick(Sender: TObject);
var
Map: IJclAnsiStrMap;
MyObject: TMyObject;
It: IJclAnsiStrIterator;
begin
Map := TJclAnsiStrHashMap.Create(DefaultContainerCapacity, False);
MyObject := TMyObject.Create;
try
MyObject.Int := 42;
MyObject.Str := 'MyString';
Map.PutValue('MyKey1', MyObject);
MyObject := TMyObject(Map.GetValue('MyKey1'));
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
It := Map.KeySet.First;
while It.HasNext do
memResult.Items.Add(string(It.Next));
memResult.Items.Add('--------------------------------------------------------');
finally
MyObject.Free;
end;
end;
procedure TMainForm.btnWideStrHashMapClick(Sender: TObject);
var
Map: IJclWideStrMap;
MyObject: TMyObject;
It: IJclWideStrIterator;
begin
Map := TJclWideStrHashMap.Create(DefaultContainerCapacity, False);
MyObject := TMyObject.Create;
try
MyObject.Int := 42;
MyObject.Str := 'MyString';
Map.PutValue('MyKey1', MyObject);
MyObject := TMyObject(Map.GetValue('MyKey1'));
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
It := Map.KeySet.First;
while It.HasNext do
memResult.Items.Add(It.Next);
memResult.Items.Add('--------------------------------------------------------');
finally
MyObject.Free;
end;
end;
procedure TMainForm.btnAnsiStrHashSetClick(Sender: TObject);
var
MySet: IJclAnsiStrSet;
It: IJclAnsiStrIterator;
begin
MySet := TJclAnsiStrHashSet.Create(DefaultContainerCapacity);
MySet.Add('MyString');
MySet.Add('MyString');
It := MySet.First;
while It.HasNext do
memResult.Items.Add(string(It.Next));
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnWideStrHashSetClick(Sender: TObject);
var
MySet: IJclWideStrSet;
It: IJclWideStrIterator;
begin
MySet := TJclWideStrHashSet.Create(DefaultContainerCapacity);
MySet.Add('MyString');
MySet.Add('MyString');
It := MySet.First;
while It.HasNext do
memResult.Items.Add(It.Next);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnAnsiStrArraySetClick(Sender: TObject);
var
MySet: IJclAnsiStrSet;
It: IJclAnsiStrIterator;
I: Integer;
begin
MySet := TJclAnsiStrArraySet.Create(DefaultContainerCapacity);
for I := 1 to 8 do
MySet.Add(AnsiString(IntToStr(I)));
for I := 8 downto 1 do
MySet.Add(AnsiString(IntToStr(I)));
MySet.Add('MyString');
MySet.Add('MyString');
It := MySet.First;
while It.HasNext do
memResult.Items.Add(string(It.Next));
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnWideStrArraySetClick(Sender: TObject);
var
MySet: IJclWideStrSet;
It: IJclWideStrIterator;
I: Integer;
begin
MySet := TJclWideStrArraySet.Create(DefaultContainerCapacity);
for I := 1 to 8 do
MySet.Add(IntToStr(I));
for I := 8 downto 1 do
MySet.Add(IntToStr(I));
MySet.Add('MyString');
MySet.Add('MyString');
It := MySet.First;
while It.HasNext do
memResult.Items.Add(It.Next);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
end.

View File

@ -0,0 +1,76 @@
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=..\..\..\..\bin
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Language]
ActiveLang=
ProjectLang=
RootDir=
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1031
CodePage=1252

View File

@ -0,0 +1,22 @@
program ListExample;
{$I jcl.inc}
uses
{$IFDEF MSWINDOWS}
Forms,
{$ENDIF MSWINDOWS}
{$IFDEF LINUX}
QForms,
{$ENDIF LINUX}
ListExampleMain in 'ListExampleMain.pas' {MainForm},
MyObjectList in 'MyObjectList.pas';
{$R *.res}
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

View File

@ -0,0 +1,145 @@
object MainForm: TMainForm
Left = 276
Top = 195
Width = 564
Height = 277
HorzScrollBar.Range = 508
VertScrollBar.Range = 217
ActiveControl = btnIntfArrayList
Caption = 'List Example'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = 11
Font.Name = 'MS Sans Serif'
Font.Pitch = fpVariable
Font.Style = []
OldCreateOrder = True
PixelsPerInch = 96
TextHeight = 13
object btnIntfArrayList: TButton
Left = 24
Top = 24
Width = 89
Height = 25
Caption = 'IntfArrayList'
TabOrder = 0
OnClick = btnIntfArrayListClick
end
object btnIntfLinkedList: TButton
Left = 152
Top = 24
Width = 89
Height = 25
Caption = 'IntfLinkedList'
TabOrder = 3
OnClick = btnIntfLinkedListClick
end
object btnIntfVector: TButton
Left = 272
Top = 24
Width = 89
Height = 25
Caption = 'IntfVector'
TabOrder = 6
OnClick = btnIntfVectorClick
end
object btnArrayList: TButton
Left = 24
Top = 168
Width = 89
Height = 25
Caption = 'ArrayList'
TabOrder = 2
OnClick = btnArrayListClick
end
object btnLinkedList: TButton
Left = 152
Top = 168
Width = 89
Height = 25
Caption = 'LinkedList'
TabOrder = 5
OnClick = btnLinkedListClick
end
object btnVector: TButton
Left = 272
Top = 168
Width = 89
Height = 25
Caption = 'Vector'
TabOrder = 8
OnClick = btnVectorClick
end
object memResult: TMemo
Left = 395
Top = 0
Width = 161
Height = 243
Align = alRight
TabOrder = 10
end
object btnMyObjectList: TButton
Left = 152
Top = 216
Width = 89
Height = 25
Caption = 'MyObjectList'
TabOrder = 9
OnClick = btnMyObjectListClick
end
object btnAnsiStrArrayList: TButton
Left = 24
Top = 72
Width = 89
Height = 25
Caption = 'AnsiStrArrayList'
TabOrder = 1
OnClick = btnAnsiStrArrayListClick
end
object btnAnsiStrLinkedList: TButton
Left = 152
Top = 72
Width = 89
Height = 25
Caption = 'AnsiStrLinkedList'
TabOrder = 4
OnClick = btnAnsiStrLinkedListClick
end
object btnAnsiStrVector: TButton
Left = 272
Top = 72
Width = 89
Height = 25
Caption = 'AnsiStrVector'
TabOrder = 7
OnClick = btnAnsiStrVectorClick
end
object btnWideStrArrayList: TButton
Left = 24
Top = 120
Width = 89
Height = 25
Caption = 'WideStrArrayList'
TabOrder = 11
OnClick = btnWideStrArrayListClick
end
object btnWideStrLinkedList: TButton
Left = 152
Top = 120
Width = 89
Height = 25
Caption = 'WideStrLinkedList'
TabOrder = 12
OnClick = btnWideStrLinkedListClick
end
object btnWideStrVector: TButton
Left = 272
Top = 120
Width = 89
Height = 25
Caption = 'WideStrVector'
TabOrder = 13
OnClick = btnWideStrVectorClick
end
end

View File

@ -0,0 +1,575 @@
unit ListExampleMain;
interface
uses
{$IFDEF WIN32}
Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls,
{$ENDIF}
{$IFDEF LINUX}
QForms, QControls, QStdCtrls,
{$ENDIF}
SysUtils, Classes;
type
TMainForm = class(TForm)
btnIntfArrayList: TButton;
btnIntfLinkedList: TButton;
btnIntfVector: TButton;
btnArrayList: TButton;
btnLinkedList: TButton;
btnVector: TButton;
memResult: TMemo;
btnMyObjectList: TButton;
btnAnsiStrArrayList: TButton;
btnAnsiStrLinkedList: TButton;
btnAnsiStrVector: TButton;
btnWideStrArrayList: TButton;
btnWideStrLinkedList: TButton;
btnWideStrVector: TButton;
procedure btnIntfArrayListClick(Sender: TObject);
procedure btnIntfLinkedListClick(Sender: TObject);
procedure btnIntfVectorClick(Sender: TObject);
procedure btnArrayListClick(Sender: TObject);
procedure btnLinkedListClick(Sender: TObject);
procedure btnVectorClick(Sender: TObject);
procedure btnMyObjectListClick(Sender: TObject);
procedure btnAnsiStrArrayListClick(Sender: TObject);
procedure btnWideStrArrayListClick(Sender: TObject);
procedure btnAnsiStrLinkedListClick(Sender: TObject);
procedure btnWideStrLinkedListClick(Sender: TObject);
procedure btnAnsiStrVectorClick(Sender: TObject);
procedure btnWideStrVectorClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
IIntfMyObject = interface
['{BA33CBCC-9CB2-4672-BF54-F52C2A0BEFFE}']
function GetInt: Integer;
function GetStr: string;
procedure SetInt(Value: Integer);
procedure SetStr(const Value: string);
property Int: Integer read GetInt write SetInt;
property Str: string read GetStr write SetStr;
end;
TIntfMyObject = class(TInterfacedObject, IIntfMyObject)
private
FInt: Integer;
FStr: string;
protected
{ IIntfMyObject }
function GetInt: Integer;
function GetStr: string;
procedure SetInt(Value: Integer);
procedure SetStr(const Value: string);
end;
IPerson = interface
['{755C857B-A9E2-4D9D-8418-541CAEA79679}']
function GetAge: Integer;
function GetMarried: Boolean;
function GetName: string;
procedure SetAge(Value: Integer);
procedure SetMarried(Value: Boolean);
procedure SetName(const Value: string);
property Age: Integer read GetAge write SetAge;
property Married: Boolean read GetMarried write SetMarried;
property Name: string read GetName write SetName;
end;
TPerson = class(TInterfacedObject, IPerson)
private
FName: string;
FAge: Integer;
FMarried: Boolean;
protected
{ IPerson }
function GetAge: Integer;
function GetMarried: Boolean;
function GetName: string;
procedure SetAge(Value: Integer);
procedure SetMarried(Value: Boolean);
procedure SetName(const Value: string);
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses JclContainerIntf, JclArrayLists, JclLinkedLists, JclVectors, MyObjectList;
{ TIntfMyObject }
function TIntfMyObject.GetInt: Integer;
begin
Result := FInt;
end;
function TIntfMyObject.GetStr: string;
begin
Result := FStr;
end;
procedure TIntfMyObject.SetInt(Value: Integer);
begin
FInt := Value;
end;
procedure TIntfMyObject.SetStr(const Value: string);
begin
FStr := Value;
end;
procedure TMainForm.btnIntfArrayListClick(Sender: TObject);
var
List, Sub: IJclIntfList;
MyArray: IJclIntfArray;
MyObject: IIntfMyObject;
It: IJclIntfIterator;
I: Integer;
begin
memResult.Lines.Clear;
List := TJclIntfArrayList.Create(DefaultContainerCapacity);
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
List.Add(MyObject);
MyObject := IIntfMyObject(List.GetObject(0));
//memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
MyObject := TIntfMyObject.Create;
MyObject.Int := 41;
MyObject.Str := 'AnotherString';
List.Add(MyObject);
Sub := List.SubList(0, 10);
// Iteration
It := Sub.First;
while It.HasNext do
begin
MyObject := IIntfMyObject(It.Next);
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
end;
// use [] default of Items[]
MyArray := List as IJclIntfArray;
for I := 0 to MyArray.Size - 1 do
begin
MyObject := IIntfMyObject(MyArray[I]);
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
end;
end;
procedure TMainForm.btnIntfLinkedListClick(Sender: TObject);
var
List, Sub: IJclIntfList;
MyObject: IIntfMyObject;
It: IJclIntfIterator;
begin
memResult.Lines.Clear;
List := TJclIntfLinkedList.Create(nil);
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
List.Add(MyObject);
MyObject := IIntfMyObject(List.GetObject(0));
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
MyObject := TIntfMyObject.Create;
MyObject.Int := 41;
MyObject.Str := 'AnotherString';
List.Add(MyObject);
Sub := List.SubList(1, 10);
It := Sub.First;
while It.HasNext do
begin
MyObject := IIntfMyObject(It.Next);
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
end;
end;
procedure TMainForm.btnIntfVectorClick(Sender: TObject);
var
List: IJclIntfList;
MyObject: IIntfMyObject;
It: IJclIntfIterator;
I: Integer;
begin
memResult.Lines.Clear;
List := TJclIntfVector.Create(DefaultContainerCapacity);
try
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
List.Add(MyObject);
MyObject := IIntfMyObject(List.GetObject(0));
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
MyObject := TIntfMyObject.Create;
MyObject.Int := 41;
MyObject.Str := 'AnotherString';
List.Add(MyObject);
It := List.First;
while It.HasNext do
begin
MyObject := IIntfMyObject(It.Next);
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
end;
// Fastest way
for I := 0 to List.Size - 1 do
begin
MyObject := IIntfMyObject(List.Objects[I]);
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
end;
List.Clear;
finally
It := nil; // Force release Iterator before free list !
end;
end;
procedure TMainForm.btnArrayListClick(Sender: TObject);
var
List: IJclList;
MyObject: TMyObject;
It: IJclIterator;
begin
memResult.Lines.Clear;
List := TJclArrayList.Create(DefaultContainerCapacity, True);
MyObject := TMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
List.Add(MyObject);
MyObject := TMyObject(List.GetObject(0));
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
MyObject := TMyObject.Create;
MyObject.Int := 41;
MyObject.Str := 'AnotherString';
List.Add(MyObject);
It := List.First;
while It.HasNext do
begin
MyObject := TMyObject(It.Next);
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
end;
It := List.First;
while It.HasNext do
begin
It.Next;
It.Remove;
end;
end;
procedure TMainForm.btnLinkedListClick(Sender: TObject);
var
List: IJclList;
MyObject: TMyObject;
It: IJclIterator;
begin
memResult.Lines.Clear;
List := TJclLinkedList.Create(nil, True);
MyObject := TMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
List.Add(MyObject);
MyObject := TMyObject(List.GetObject(0));
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
MyObject := TMyObject.Create;
MyObject.Int := 41;
MyObject.Str := 'AnotherString';
List.Add(MyObject);
It := List.First;
while It.HasNext do
begin
MyObject := TMyObject(It.Next);
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
end;
end;
procedure TMainForm.btnVectorClick(Sender: TObject);
var
List: IJclList;
MyObject: TMyObject;
It: IJclIterator;
I: Integer;
begin
memResult.Lines.Clear;
List := TJclVector.Create(DefaultContainerCapacity, True);
try
MyObject := TMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
List.Add(MyObject);
MyObject := TMyObject(List.GetObject(0));
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
MyObject := TMyObject.Create;
MyObject.Int := 41;
MyObject.Str := 'AnotherString';
List.Add(MyObject);
It := List.First;
while It.HasNext do
begin
MyObject := TMyObject(It.Next);
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
end;
// Fastest way
for I := 0 to List.Size - 1 do
begin
MyObject := TMyObject(List.Objects[I]);
memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
end;
List.Clear;
finally
It := nil; // Force release Iterator before free list !
List := nil;
end;
end;
procedure TMainForm.btnMyObjectListClick(Sender: TObject);
var
List: IMyObjectList;
MyObject: TMyObject;
begin
memResult.Lines.Clear;
List := TMyObjectList.Create(DefaultContainerCapacity, True);
MyObject := TMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
List.Add(MyObject);
memResult.Lines.Add(IntToStr(List.GetObject(0).Int));
memResult.Lines.Add(List.GetObject(0).Str);
end;
procedure TMainForm.btnAnsiStrArrayListClick(Sender: TObject);
var
List, Sub: IJclAnsiStrList;
MyArray: IJclAnsiStrArray;
It: IJclAnsiStrIterator;
I: Integer;
S: string;
begin
memResult.Lines.Clear;
List := TJclAnsiStrArrayList.Create(DefaultContainerCapacity);
List.Add('MyString');
S := string(List.GetString(0));
//memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
List.Add('AnotherString');
Sub := List.SubList(0, 10);
// Iteration
It := Sub.First;
while It.HasNext do
begin
S := string(It.Next);
memResult.Lines.Add(S);
end;
// use [] default of Items[]
MyArray := List as IJclAnsiStrArray;
for I := 0 to MyArray.Size - 1 do
begin
S := string(MyArray[I]);
memResult.Lines.Add(S);
end;
end;
procedure TMainForm.btnWideStrArrayListClick(Sender: TObject);
var
List, Sub: IJclWideStrList;
MyArray: IJclWideStrArray;
It: IJclWideStrIterator;
I: Integer;
S: string;
begin
memResult.Lines.Clear;
List := TJclWideStrArrayList.Create(DefaultContainerCapacity);
List.Add('MyString');
S := List.GetString(0);
//memResult.Lines.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
List.Add('AnotherString');
Sub := List.SubList(0, 10);
// Iteration
It := Sub.First;
while It.HasNext do
begin
S := It.Next;
memResult.Lines.Add(S);
end;
// use [] default of Items[]
MyArray := List as IJclWideStrArray;
for I := 0 to MyArray.Size - 1 do
begin
S := MyArray[I];
memResult.Lines.Add(S);
end;
end;
{ TPerson }
function TPerson.GetAge: Integer;
begin
Result := FAge;
end;
function TPerson.GetMarried: Boolean;
begin
Result := FMarried;
end;
function TPerson.GetName: string;
begin
Result := FName;
end;
procedure TPerson.SetAge(Value: Integer);
begin
FAge := Value;
end;
procedure TPerson.SetMarried(Value: Boolean);
begin
FMarried := Value;
end;
procedure TPerson.SetName(const Value: string);
begin
FName := Value;
end;
procedure TMainForm.btnAnsiStrLinkedListClick(Sender: TObject);
var
List, Sub: IJclAnsiStrList;
S: string;
It: IJclAnsiStrIterator;
begin
memResult.Lines.Clear;
List := TJclAnsiStrLinkedList.Create(nil);
List.Add('MyString');
memResult.Lines.Add(string(List.GetString(0)));
List.Add('AnotherString');
Sub := List.SubList(1, 10);
It := Sub.First;
while It.HasNext do
begin
S := string(It.Next);
memResult.Lines.Add(S);
end;
end;
procedure TMainForm.btnWideStrLinkedListClick(Sender: TObject);
var
List, Sub: IJclWideStrList;
S: string;
It: IJclWideStrIterator;
begin
memResult.Lines.Clear;
List := TJclWideStrLinkedList.Create(nil);
List.Add('MyString');
memResult.Lines.Add(List.GetString(0));
List.Add('AnotherString');
Sub := List.SubList(1, 10);
It := Sub.First;
while It.HasNext do
begin
S := It.Next;
memResult.Lines.Add(S);
end;
end;
procedure TMainForm.btnAnsiStrVectorClick(Sender: TObject);
var
List: IJclAnsiStrList;
S: string;
It: IJclAnsiStrIterator;
I: Integer;
begin
memResult.Lines.Clear;
List := TJclAnsiStrVector.Create(DefaultContainerCapacity);
try
List.Add('MyString');
S := string(List.GetString(0));
memResult.Lines.Add(S);
List.Add('AnotherString');
It := List.First;
while It.HasNext do
begin
S := string(It.Next);
memResult.Lines.Add(S);
end;
// Fastest way
for I := 0 to List.Size - 1 do
begin
S := string(List.Strings[I]);
memResult.Lines.Add(S);
end;
List.Clear;
finally
It := nil; // Force release Iterator before free list !
List := nil;
end;
end;
procedure TMainForm.btnWideStrVectorClick(Sender: TObject);
var
List: IJclWideStrList;
S: string;
It: IJclWideStrIterator;
I: Integer;
begin
memResult.Lines.Clear;
List := TJclWideStrVector.Create(DefaultContainerCapacity);
try
List.Add('MyString');
S := List.GetString(0);
memResult.Lines.Add(S);
List.Add('AnotherString');
It := List.First;
while It.HasNext do
begin
S := It.Next;
memResult.Lines.Add(S);
end;
// Fastest way
for I := 0 to List.Size - 1 do
begin
S := List.Strings[I];
memResult.Lines.Add(S);
end;
List.Clear;
finally
It := nil; // Force release Iterator before free list !
List := nil;
end;
end;
end.

View File

@ -0,0 +1,133 @@
unit MyObjectList;
interface
uses
JclContainerIntf, JclArrayLists;
type
TMyObject = class(TObject)
private
FInt: Integer;
FStr: string;
public
property Int: Integer read FInt write FInt;
property Str: string read FStr write FStr;
end;
// An ArrayList typed with TMyObject
IMyObjectList = interface
['{DB2B366E-2CA6-4AFC-A2C9-3285D252DC3E}']
function Add(AObject: TMyObject): Boolean; overload;
function AddAll(const ACollection: IJclCollection): Boolean; overload;
procedure Clear;
function Contains(AObject: TMyObject): Boolean;
function ContainsAll(const ACollection: IJclCollection): Boolean;
function Equals(const ACollection: IJclCollection): Boolean;
function First: IJclIterator;
function IsEmpty: Boolean;
function Last: IJclIterator;
function Remove(AObject: TMyObject): Boolean; overload;
function RemoveAll(const ACollection: IJclCollection): Boolean;
function RetainAll(const ACollection: IJclCollection): Boolean;
function Size: Integer;
procedure Add(Index: Integer; AObject: TMyObject); overload;
function AddAll(Index: Integer; const ACollection: IJclCollection): Boolean; overload;
function GetObject(Index: Integer): TMyObject;
function IndexOf(AObject: TMyObject): Integer;
function LastIndexOf(AObject: TMyObject): Integer;
function Delete(Index: Integer): TMyObject; overload;
procedure SetObject(Index: Integer; AObject: TMyObject);
function SubList(First, Count: Integer): IJclList;
end;
TMyObjectList = class(TJclArrayList, IMyObjectList)
protected
{ IJclCollection }
function Add(AObject: TMyObject): Boolean; overload;
function AddAll(const ACollection: IJclCollection): Boolean; overload;
procedure IMyObjectList.Clear = Clear;
function Contains(AObject: TMyObject): Boolean;
function IMyObjectList.ContainsAll = ContainsAll;
function IMyObjectList.Equals = CollectionEquals;
function IMyObjectList.First = First;
function IMyObjectList.IsEmpty = IsEmpty;
function IMyObjectList.Last = Last;
function Remove(AObject: TMyObject): Boolean; overload;
function IMyObjectList.RemoveAll = RemoveAll;
function IMyObjectList.RetainAll = RetainAll;
function IMyObjectList.Size = Size;
protected
{ IJclList }
procedure Add(Index: Integer; AObject: TMyObject); overload;
function AddAll(Index: Integer; const ACollection: IJclCollection): Boolean; overload;
function GetObject(Index: Integer): TMyObject;
function IndexOf(AObject: TMyObject): Integer;
function LastIndexOf(AObject: TMyObject): Integer;
function Delete(Index: Integer): TMyObject; overload;
procedure SetObject(Index: Integer; AObject: TMyObject);
function IMyObjectList.SubList = SubList;
end;
implementation
{ TMyObjectList }
procedure TMyObjectList.Add(Index: Integer; AObject: TMyObject);
begin
inherited Insert(Index, AObject);
end;
function TMyObjectList.Add(AObject: TMyObject): Boolean;
begin
Result := inherited Add(AObject);
end;
function TMyObjectList.AddAll(const ACollection: IJclCollection): Boolean;
begin
Result := inherited AddAll(ACollection);
end;
function TMyObjectList.AddAll(Index: Integer; const ACollection: IJclCollection): Boolean;
begin
Result := inherited InsertAll(Index, ACollection);
end;
function TMyObjectList.Contains(AObject: TMyObject): Boolean;
begin
Result := inherited Contains(AObject);
end;
function TMyObjectList.GetObject(Index: Integer): TMyObject;
begin
Result := TMyObject(inherited GetObject(Index));
end;
function TMyObjectList.IndexOf(AObject: TMyObject): Integer;
begin
Result := inherited IndexOf(AObject);
end;
function TMyObjectList.LastIndexOf(AObject: TMyObject): Integer;
begin
Result := inherited LastIndexOf(AObject);
end;
function TMyObjectList.Remove(AObject: TMyObject): Boolean;
begin
Result := inherited Remove(AObject);
end;
function TMyObjectList.Delete(Index: Integer): TMyObject;
begin
Result := TMyObject(inherited Delete(Index));
end;
procedure TMyObjectList.SetObject(Index: Integer; AObject: TMyObject);
begin
inherited SetObject(Index, AObject);
end;
end.

View File

@ -0,0 +1,3 @@
[Directories]
OutputDir=..\..\..\..\bin

View File

@ -0,0 +1,22 @@
program ContainerPerformance;
{$I jcl.inc}
uses
{$IFDEF MSWINDOWS}
Forms,
{$ENDIF MSWINDOWS}
{$IFDEF KYLIX}
QForms,
{$ENDIF KYLIX}
ContainerPerformanceMain in 'ContainerPerformanceMain.pas' {MainForm},
ContainerPerformanceTests in 'ContainerPerformanceTests.pas';
{$R *.res}
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

View File

@ -0,0 +1,101 @@
object MainForm: TMainForm
Left = 402
Top = 120
Caption = 'Container Performance'
ClientHeight = 294
ClientWidth = 569
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = 11
Font.Name = 'MS Sans Serif'
Font.Pitch = fpVariable
Font.Style = []
Menu = MainMenu1
OldCreateOrder = True
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object ListPerformanceGrid: TStringGrid
Left = 0
Top = 0
Width = 569
Height = 173
Align = alClient
DefaultColWidth = 100
RowCount = 6
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine]
TabOrder = 0
end
object HashPerformanceGrid: TStringGrid
Left = 0
Top = 173
Width = 569
Height = 121
Align = alBottom
ColCount = 6
DefaultColWidth = 90
RowCount = 4
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine]
TabOrder = 1
end
object MainMenu1: TMainMenu
Left = 216
object FileMenu: TMenuItem
Caption = '&File'
object Exit1: TMenuItem
Caption = 'E&xit'
OnClick = Exit1Click
end
end
object TestMenu: TMenuItem
Caption = '&Test'
object mnList: TMenuItem
Caption = 'TList'
OnClick = mnListClick
end
object mnJclArrayList: TMenuItem
Caption = 'TJclArrayList'
OnClick = mnJclArrayListClick
end
object mnJclLinkedList: TMenuItem
Caption = 'TJclLinkedList'
OnClick = mnJclLinkedListClick
end
object mnJclVector: TMenuItem
Caption = 'TJclVector'
OnClick = mnJclVectorClick
end
object N1: TMenuItem
Caption = '-'
end
object mnBucketList: TMenuItem
Caption = 'TBucketList'
OnClick = mnBucketListClick
end
object mnJclHashMap: TMenuItem
Caption = 'TJclHashMap'
OnClick = mnJclHashMapClick
end
object mnHashedStringList: TMenuItem
Caption = 'THashedStringList'
OnClick = mnHashedStringListClick
end
object mnJclAnsiStrAnsiStrHashMap: TMenuItem
Caption = 'TJclAnsiStrAnsiStrHashMap'
OnClick = mnJclAnsiStrAnsiStrHashMapClick
end
object mnJclWideStrWideStrHashMap: TMenuItem
Caption = 'TJclWideStrWideStrHashMap'
OnClick = mnJclWideStrWideStrHashMapClick
end
object N2: TMenuItem
Caption = '-'
end
object mnAllTest: TMenuItem
Caption = 'All'
OnClick = mnAllTestClick
end
end
end
end

View File

@ -0,0 +1,158 @@
unit ContainerPerformanceMain;
{$I jcl.inc}
interface
uses
{$IFDEF WIN32}
Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls,
{$ENDIF WIN32}
{$IFDEF LINUX}
QForms, QStdCtrls, QControls,
{$ENDIF LINUX}
SysUtils, Classes, Grids, Menus;
type
TMainForm = class(TForm)
ListPerformanceGrid: TStringGrid;
MainMenu1: TMainMenu;
FileMenu: TMenuItem;
Exit1: TMenuItem;
TestMenu: TMenuItem;
mnJclArrayList: TMenuItem;
mnList: TMenuItem;
mnJclLinkedList: TMenuItem;
mnJclVector: TMenuItem;
N1: TMenuItem;
mnBucketList: TMenuItem;
mnJclHashMap: TMenuItem;
mnHashedStringList: TMenuItem;
mnJclAnsiStrAnsiStrHashMap: TMenuItem;
N2: TMenuItem;
mnAllTest: TMenuItem;
HashPerformanceGrid: TStringGrid;
mnJclWideStrWideStrHashMap: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure mnAllTestClick(Sender: TObject);
procedure mnListClick(Sender: TObject);
procedure mnJclArrayListClick(Sender: TObject);
procedure mnJclLinkedListClick(Sender: TObject);
procedure mnJclVectorClick(Sender: TObject);
procedure mnBucketListClick(Sender: TObject);
procedure mnJclHashMapClick(Sender: TObject);
procedure mnHashedStringListClick(Sender: TObject);
procedure mnJclAnsiStrAnsiStrHashMapClick(Sender: TObject);
procedure mnJclWideStrWideStrHashMapClick(Sender: TObject);
procedure Exit1Click(Sender: TObject);
public
end;
TMyObject = class(TInterfacedObject);
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses
ContainerPerformanceTests;
procedure TMainForm.FormCreate(Sender: TObject);
begin
ListPerformanceGrid.Cells[1, 0] := 'TList';
ListPerformanceGrid.Cells[2, 0] := 'TJclArrayList';
ListPerformanceGrid.Cells[3, 0] := 'TJclLinkedList';
ListPerformanceGrid.Cells[4, 0] := 'TJclVector';
ListPerformanceGrid.Cells[0, 1] := 'Add';
ListPerformanceGrid.Cells[0, 2] := 'Next';
ListPerformanceGrid.Cells[0, 3] := 'Random';
ListPerformanceGrid.Cells[0, 4] := 'Insert at 10';
ListPerformanceGrid.Cells[0, 5] := 'Clear';
HashPerformanceGrid.Cells[1, 0] := 'TBucketList';
HashPerformanceGrid.Cells[2, 0] := 'TJclHashMap';
HashPerformanceGrid.Cells[3, 0] := 'THashedStringList';
HashPerformanceGrid.Cells[4, 0] := 'TJclAnsiStrAnsiStrHashMap';
HashPerformanceGrid.Cells[5, 0] := 'TJclWideStrWideStrHashMap';
HashPerformanceGrid.Cells[0, 1] := 'Add';
HashPerformanceGrid.Cells[0, 2] := 'Random';
HashPerformanceGrid.Cells[0, 3] := 'Clear';
end;
procedure TMainForm.mnAllTestClick(Sender: TObject);
begin
TestList(ListPerformanceGrid.Cols[1]);
Application.ProcessMessages;
TestJclArrayList(ListPerformanceGrid.Cols[2]);
Application.ProcessMessages;
TestJclLinkedList(ListPerformanceGrid.Cols[3]);
Application.ProcessMessages;
TestJclVector(ListPerformanceGrid.Cols[4]);
Application.ProcessMessages;
TestBucketList(HashPerformanceGrid.Cols[1]);
Application.ProcessMessages;
TestJclHashMap(HashPerformanceGrid.Cols[2]);
Application.ProcessMessages;
TestHashedStringList(HashPerformanceGrid.Cols[3]);
Application.ProcessMessages;
TestJclAnsiStrAnsiStrHashMap(HashPerformanceGrid.Cols[4]);
Application.ProcessMessages;
TestJclWideStrWideStrHashMap(HashPerformanceGrid.Cols[5]);
end;
procedure TMainForm.mnListClick(Sender: TObject);
begin
TestList(ListPerformanceGrid.Cols[1]);
end;
procedure TMainForm.mnJclArrayListClick(Sender: TObject);
begin
TestJclArrayList(ListPerformanceGrid.Cols[2]);
end;
procedure TMainForm.mnJclLinkedListClick(Sender: TObject);
begin
TestJclLinkedList(ListPerformanceGrid.Cols[3]);
end;
procedure TMainForm.mnJclVectorClick(Sender: TObject);
begin
TestJclVector(ListPerformanceGrid.Cols[4]);
end;
procedure TMainForm.mnBucketListClick(Sender: TObject);
begin
TestBucketList(HashPerformanceGrid.Cols[1]);
end;
procedure TMainForm.mnJclHashMapClick(Sender: TObject);
begin
TestJclHashMap(HashPerformanceGrid.Cols[2]);
end;
procedure TMainForm.mnHashedStringListClick(Sender: TObject);
begin
TestHashedStringList(HashPerformanceGrid.Cols[3]);
end;
procedure TMainForm.mnJclAnsiStrAnsiStrHashMapClick(Sender: TObject);
begin
TestJclAnsiStrAnsiStrHashMap(HashPerformanceGrid.Cols[4]);
end;
procedure TMainForm.mnJclWideStrWideStrHashMapClick(Sender: TObject);
begin
TestJclWideStrWideStrHashMap(HashPerformanceGrid.Cols[5]);
end;
procedure TMainForm.Exit1Click(Sender: TObject);
begin
Close;
end;
end.

View File

@ -0,0 +1,353 @@
unit ContainerPerformanceTests;
interface
uses
Classes;
procedure TestList(Results: TStrings);
procedure TestJclArrayList(Results: TStrings);
procedure TestJclLinkedList(Results: TStrings);
procedure TestJclVector(Results: TStrings);
procedure TestBucketList(Results: TStrings);
procedure TestJclHashMap(Results: TStrings);
procedure TestHashedStringList(Results: TStrings);
procedure TestJclAnsiStrAnsiStrHashMap(Results: TStrings);
procedure TestJclWideStrWideStrHashMap(Results: TStrings);
implementation
{$I jcl.inc}
uses
SysUtils, Forms, Controls, Math,
{$IFDEF RTL140_UP}
Contnrs, IniFiles,
{$ENDIF RTL140_UP}
JclContainerIntf, JclArrayLists, JclLinkedLists, JclHashMaps, JclVectors;
const
ResultFormat = '%.1f ms';
MsecsPerDay = 24 * 60 * 60 * 1000;
{$IFNDEF RTL140_UP}
const
SNeedRTL140Up = 'requires RTL > 14.0';
{$ENDIF ~RTL140_UP}
var
Res: Integer;
procedure TestList(Results: TStrings);
var
List: TList;
I: Integer;
Start: TDateTime;
begin
Randomize;
Start := Now;
List := TList.Create;
Screen.Cursor := crHourGlass;
try
for I := 0 to 2000000 do
List.Add(Pointer(I));
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to List.Count - 1 do
Res := Integer(List[I]);
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to 200 do
Res := List.IndexOf(Pointer(Random(1000000)));
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to 100 do
List.Insert(10, Pointer(I));
Results[4] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
List.Clear;
Results[5] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
finally
List.Free;
Screen.Cursor := crDefault;
end;
end;
procedure TestJclArrayList(Results: TStrings);
var
List: IJclList;
It: IJclIterator;
I: Integer;
Start: TDateTime;
begin
Randomize;
Screen.Cursor := crHourGlass;
try
Start := Now;
List := TJclArrayList.Create(16, False);
for I := 0 to 2000000 do
List.Add(TObject(I));
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
// Fast but Specific ArrayList
//for I := 0 to List.Size - 1 do
// Res := Integer(List.GetObject(I));
// Slower but same for every IJclList
It := List.First;
while It.HasNext do
Res := Integer(It.Next);
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to 200 do
Res := List.IndexOf(TObject(Random(1000000)));
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
It := List.First;
for I := 0 to 10 do
It.Next;
for I := 0 to 100 do
It.Add(TObject(I));
Results[4] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
List.Clear;
Results[5] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
finally
Screen.Cursor := crDefault;
end;
end;
procedure TestJclLinkedList(Results: TStrings);
var
List: IJclList;
I: Integer;
It: IJclIterator;
Start: TDateTime;
begin
Randomize;
Screen.Cursor := crHourGlass;
try
Start := Now;
List := TJclLinkedList.Create(nil, False);
for I := 0 to 2000000 do
List.Add(TObject(I));
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
It := List.First;
while It.HasNext do
Res := Integer(It.Next);
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to 200 do
Res := List.IndexOf(TObject(Random(1000000)));
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
It := List.First;
for I := 0 to 10 do
It.Next;
for I := 0 to 100 do
It.Add(TObject(I));
Results[4] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
List.Clear;
Results[5] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
finally
Screen.Cursor := crDefault;
end;
end;
procedure TestJclVector(Results: TStrings);
var
List: IJclList;
I: Integer;
Start: TDateTime;
begin
Randomize;
Screen.Cursor := crHourGlass;
Start := Now;
List := TJclVector.Create(16, False);
try
for I := 0 to 2000000 do
List.Add(TObject(I));
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to List.Size - 1 do
Res := Integer(List.Objects[I]);
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to 200 do
Res := List.IndexOf(TObject(Random(1000000)));
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := List.Size - 1 downto 20 do
List.Objects[I - 10] := List.Objects[I];
for I := 0 to 10 do
List.Objects[I + 10] := TObject(I);
Results[4] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
List.Clear;
Results[5] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
finally
List := nil;
Screen.Cursor := crDefault;
end;
end;
procedure TestBucketList(Results: TStrings);
{$IFDEF RTL140_UP}
var
I: Integer;
Start: TDateTime;
List: TBucketList;
begin
Randomize;
Screen.Cursor := crHourGlass;
Start := Now;
List := TBucketList.Create(bl256);
try
for I := 0 to 100000 do
List.Add(TObject(I), TObject(I));
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to 100000 do
Res := Integer(List.Data[TObject(Random(100000))]);
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
List.Clear;
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
finally
List.Free;
Screen.Cursor := crDefault;
end;
end;
{$ELSE ~RTL140_UP}
var
I: Integer;
begin
for I := 1 to 3 do
Results[I] := SNeedRTL140Up;
end;
{$ENDIF ~RTL140_UP}
procedure TestJclHashMap(Results: TStrings);
var
Map: IJclMap;
I: Integer;
Start: TDateTime;
begin
Randomize;
Screen.Cursor := crHourGlass;
try
Start := Now;
Map := JclHashMaps.TJclHashMap.Create(256, False, False);
for I := 0 to 100000 do
Map.PutValue(TObject(Random(100000)), TObject(I));
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to 100000 do
Res := Integer(Map.GetValue(TObject(Random(100000))));
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
Map.Clear;
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
finally
Screen.Cursor := crDefault;
end;
end;
function GenId(Value: Integer): string;
begin
Result := IntToStr(Value);
end;
procedure TestHashedStringList(Results: TStrings);
{$IFDEF RTL140_UP}
var
I: Integer;
List: THashedStringList;
Start: TDateTime;
begin
Randomize;
Screen.Cursor := crHourGlass;
Start := Now;
List := THashedStringList.Create;
try
for I := 0 to 100000 do
List.Add(GenId(123));
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to 100000 do
Res := List.IndexOf(GenId(123));
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
List.Clear;
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
finally
List.Free;
Screen.Cursor := crDefault;
end;
end;
{$ELSE ~RTL140_UP}
var
I: Integer;
begin
for I := 1 to 3 do
Results[I] := SNeedRTL140Up;
end;
{$ENDIF ~RTL140_UP}
procedure TestJclAnsiStrAnsiStrHashMap(Results: TStrings);
var
Map: IJclAnsiStrAnsiStrMap;
I: Integer;
Res: string;
Start: TDateTime;
begin
Randomize;
Screen.Cursor := crHourGlass;
try
Start := Now;
Map := TJclAnsiStrAnsiStrHashMap.Create(256);
for I := 0 to 100000 do
Map.PutValue(AnsiString(GenId(123)), '');
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to 100000 do
Res := string(Map.GetValue(AnsiString(GenId(123))));
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
Map.Clear;
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
finally
Screen.Cursor := crDefault;
end;
end;
procedure TestJclWideStrWideStrHashMap(Results: TStrings);
var
Map: IJclWideStrWideStrMap;
I: Integer;
Res: string;
Start: TDateTime;
begin
Randomize;
Screen.Cursor := crHourGlass;
try
Start := Now;
Map := TJclWideStrWideStrHashMap.Create(256);
for I := 0 to 100000 do
Map.PutValue(GenId(123), '');
Results[1] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
for I := 0 to 100000 do
Res := Map.GetValue(GenId(123));
Results[2] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
Start := Now;
Map.Clear;
Results[3] := Format(ResultFormat, [(Now - Start) * MsecsPerDay]);
finally
Screen.Cursor := crDefault;
end;
end;
end.

View File

@ -0,0 +1,2 @@
[Directories]
OutputDir=..\..\..\..\bin

View File

@ -0,0 +1,21 @@
program TreeExample;
{$I jcl.inc}
uses
{$IFDEF MSWINDOWS}
Forms,
{$ENDIF MSWINDOWS}
{$IFDEF LINUX}
QForms,
{$ENDIF LINUX}
TreeExampleMain in 'TreeExampleMain.pas' {MainForm};
{$R *.res}
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

View File

@ -0,0 +1,62 @@
object MainForm: TMainForm
Left = 328
Top = 237
Caption = 'Binary Tree'
ClientHeight = 259
ClientWidth = 462
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
PixelsPerInch = 96
TextHeight = 13
object btnIntfArrayTree: TButton
Left = 64
Top = 24
Width = 97
Height = 25
Caption = 'IntfBinaryTree'
TabOrder = 1
OnClick = btnIntfArrayTreeClick
end
object memoResult: TMemo
Left = 230
Top = 0
Width = 232
Height = 259
Align = alRight
ScrollBars = ssVertical
TabOrder = 2
end
object btnArrayTree: TButton
Left = 64
Top = 192
Width = 97
Height = 25
Caption = 'BinaryTree'
TabOrder = 0
OnClick = btnArrayTreeClick
end
object btnAnsiStrBinaryTree: TButton
Left = 64
Top = 80
Width = 97
Height = 25
Caption = 'AnsiStrBinaryTree'
TabOrder = 3
OnClick = btnAnsiStrBinaryTreeClick
end
object btnWideStrBinaryTree: TButton
Left = 64
Top = 136
Width = 97
Height = 25
Caption = 'WideStrBinaryTree'
TabOrder = 4
OnClick = btnWideStrBinaryTreeClick
end
end

View File

@ -0,0 +1,168 @@
unit TreeExampleMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, JclBase;
type
TMainForm = class(TForm)
btnIntfArrayTree: TButton;
memoResult: TMemo;
btnArrayTree: TButton;
btnAnsiStrBinaryTree: TButton;
btnWideStrBinaryTree: TButton;
procedure btnIntfArrayTreeClick(Sender: TObject);
procedure btnArrayTreeClick(Sender: TObject);
procedure btnAnsiStrBinaryTreeClick(Sender: TObject);
procedure btnWideStrBinaryTreeClick(Sender: TObject);
public
end;
IIntfInteger = interface
['{0E32C3C9-5940-4373-B3BA-644473E3F3C2}']
function GetValue: Integer;
procedure SetValue(AValue: Integer);
property Value: Integer read GetValue write SetValue;
end;
TIntfInteger = class(TInterfacedObject, IIntfInteger)
private
FValue: Integer;
function GetValue: Integer;
procedure SetValue(AValue: Integer);
public
constructor Create(AValue: Integer);
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses
JclContainerIntf, JclAlgorithms, JclBinaryTrees;
{ TIntfInteger }
constructor TIntfInteger.Create(AValue: Integer);
begin
inherited Create;
FValue := AValue;
end;
function TIntfInteger.GetValue: Integer;
begin
Result := FValue;
end;
procedure TIntfInteger.SetValue(AValue: Integer);
begin
FValue := AValue;
end;
function IntfIntegerComparator(const AIntf1, AIntf2: IInterface): Integer;
begin
Result := (AIntf1 as IIntfInteger).Value - (AIntf2 as IIntfInteger).Value;
end;
procedure TMainForm.btnIntfArrayTreeClick(Sender: TObject);
var
Tree: IJclIntfTree;
I: Integer;
Obj: IIntfInteger;
It: IJclIntfIterator;
begin
memoResult.Lines.Clear;
Tree := TJclIntfBinaryTree.Create(IntfIntegerComparator);
for I := 0 to 17 do
begin
Obj := TIntfInteger.Create(I);
Tree.Add(Obj);
end;
Obj := TIntfInteger.Create(15);
if Tree.Contains(Obj) then
memoResult.Lines.Add('contains 15');
Tree.TraverseOrder := toPostOrder;
It := Tree.Last;
while It.HasPrevious do
begin
Obj := It.Previous as IIntfInteger;
memoResult.Lines.Add(IntToStr(Obj.Value));
end;
It := Tree.First;
while It.HasNext do
begin
It.Next;
It.Remove;
end;
end;
procedure TMainForm.btnArrayTreeClick(Sender: TObject);
var
Tree: IJclTree;
I: Integer;
It: IJclIterator;
begin
memoResult.Lines.Clear;
Tree := TJclBinaryTree.Create(JclAlgorithms.IntegerCompare, {OwnsObjects:}False);
for I := 0 to 17 do
Tree.Add(TObject(I));
if Tree.Contains(TObject(15)) then
memoResult.Lines.Add('contains 15');
Tree.TraverseOrder := toOrder;
It := Tree.First;
while It.HasNext do
memoResult.Lines.Add(IntToStr(Integer(It.Next)));
end;
procedure TMainForm.btnAnsiStrBinaryTreeClick(Sender: TObject);
var
Tree: IJclAnsiStrTree;
I: Integer;
It: IJclAnsiStrIterator;
begin
memoResult.Lines.Clear;
Tree := TJclAnsiStrBinaryTree.Create(JclAlgorithms.AnsiStrSimpleCompare);
for I := 0 to 17 do
Tree.Add(AnsiString(Format('%.2d', [I])));
if Tree.Contains('15') then
memoResult.Lines.Add('contains 15');
Tree.TraverseOrder := toOrder;
It := Tree.First;
while It.HasNext do
memoResult.Lines.Add(string(It.Next));
end;
procedure TMainForm.btnWideStrBinaryTreeClick(Sender: TObject);
var
Tree: IJclWideStrTree;
I: Integer;
It: IJclWideStrIterator;
begin
memoResult.Lines.Clear;
Tree := TJclWideStrBinaryTree.Create(JclAlgorithms.WideStrSimpleCompare);
for I := 0 to 17 do
Tree.Add(Format('%.2d', [I]));
if Tree.Contains('15') then
memoResult.Lines.Add('contains 15');
Tree.TraverseOrder := toOrder;
It := Tree.First;
while It.HasNext do
memoResult.Lines.Add(It.Next);
end;
end.

View File

@ -0,0 +1,2 @@
[Directories]
OutputDir=..\..\..\..\bin

View File

@ -0,0 +1,14 @@
program TreeStructure;
uses
Forms,
TreeStructureMain in 'TreeStructureMain.pas' {Form1};
{$R *.res}
{$R ..\..\..\..\source\windows\JclCommCtrlAsInvoker.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

View File

@ -0,0 +1,247 @@
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 423
ClientWidth = 426
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object GroupBoxOptions: TGroupBox
Left = 8
Top = 8
Width = 410
Height = 129
Anchors = [akLeft, akTop, akRight]
Caption = 'Options:'
TabOrder = 0
object CheckBoxBinaryTree: TCheckBox
Left = 16
Top = 24
Width = 161
Height = 17
Action = ActionBinaryTree
TabOrder = 0
end
object CheckBoxGeneralPurposeTree: TCheckBox
Left = 16
Top = 48
Width = 161
Height = 17
Action = ActionGeneralPurposeTree
State = cbChecked
TabOrder = 1
end
object CheckBoxCaseSensitive: TCheckBox
Left = 16
Top = 96
Width = 97
Height = 17
Action = ActionCaseSensitive
TabOrder = 2
end
object CheckBoxAllowDefault: TCheckBox
Left = 199
Top = 24
Width = 178
Height = 17
Action = ActionAllowDefault
TabOrder = 3
end
object CheckBoxAllowDuplicates: TCheckBox
Left = 200
Top = 48
Width = 177
Height = 17
Action = ActionAllowDuplicates
TabOrder = 4
end
object CheckBoxIgnoreDuplicates: TCheckBox
Left = 216
Top = 72
Width = 161
Height = 17
Action = ActionIgnoreDuplicates
TabOrder = 5
end
object CheckBoxRemoveSingle: TCheckBox
Left = 200
Top = 96
Width = 177
Height = 17
Action = ActionRemoveSingle
TabOrder = 6
end
end
object TreeViewResults: TTreeView
Left = 8
Top = 143
Width = 193
Height = 272
Anchors = [akLeft, akTop, akRight, akBottom]
Indent = 19
TabOrder = 1
end
object GroupBoxActions: TGroupBox
Left = 207
Top = 143
Width = 211
Height = 272
Anchors = [akTop, akRight, akBottom]
Caption = 'Actions:'
TabOrder = 2
object ButtonGenerateRandom: TButton
Left = 16
Top = 24
Width = 177
Height = 25
Action = ActionGenerateRandom
TabOrder = 0
end
object ButtonRemoveSelected: TButton
Left = 16
Top = 56
Width = 177
Height = 25
Action = ActionRemoveSelected
TabOrder = 1
end
object EditNewItem: TEdit
Left = 16
Top = 168
Width = 177
Height = 21
TabOrder = 2
Text = 'New item'
end
object ButtonAddNew: TButton
Left = 16
Top = 200
Width = 177
Height = 25
Action = ActionAddNew
TabOrder = 3
end
object ButtonAddNewChild: TButton
Left = 16
Top = 231
Width = 177
Height = 25
Action = ActionAddNewChild
TabOrder = 4
end
object Button1: TButton
Left = 16
Top = 87
Width = 177
Height = 25
Action = ActionPack
TabOrder = 5
end
object Button2: TButton
Left = 16
Top = 120
Width = 177
Height = 25
Action = ActionTestTree
TabOrder = 6
end
end
object ActionListMain: TActionList
Left = 160
Top = 112
object ActionAllowDuplicates: TAction
Category = 'Tree options'
AutoCheck = True
Caption = 'Allow duplicates'
OnExecute = ActionDuplicatesExecute
OnUpdate = ActionAlwaysEnabled
end
object ActionIgnoreDuplicates: TAction
Category = 'Tree options'
AutoCheck = True
Caption = 'Ignore duplicates'
OnExecute = ActionDuplicatesExecute
OnUpdate = ActionIgnoreDuplicatesUpdate
end
object ActionAllowDefault: TAction
Category = 'Tree options'
AutoCheck = True
Caption = 'Allow defaults (empty strings)'
OnExecute = ActionAllowDefaultExecute
OnUpdate = ActionAlwaysEnabled
end
object ActionRemoveSingle: TAction
Category = 'Tree options'
AutoCheck = True
Caption = 'Remove single element'
OnExecute = ActionRemoveSingleExecute
OnUpdate = ActionAlwaysEnabled
end
object ActionCaseSensitive: TAction
Category = 'Tree options'
AutoCheck = True
Caption = 'Case sensitive'
OnExecute = ActionCaseSensitiveExecute
OnUpdate = ActionAlwaysEnabled
end
object ActionGenerateRandom: TAction
Category = 'Tree actions'
Caption = 'Generate random tree'
OnExecute = ActionGenerateRandomExecute
OnUpdate = ActionAlwaysEnabled
end
object ActionAddNew: TAction
Category = 'Tree actions'
Caption = 'Add new'
OnExecute = ActionAddNewExecute
OnUpdate = ActionAlwaysEnabled
end
object ActionRemoveSelected: TAction
Category = 'Tree actions'
Caption = 'Remove selected'
OnExecute = ActionRemoveSelectedExecute
OnUpdate = ActionRemoveSelectedUpdate
end
object ActionAddNewChild: TAction
Category = 'Tree actions'
Caption = 'Add new child'
OnExecute = ActionAddNewChildExecute
OnUpdate = ActionAddNewChildUpdate
end
object ActionBinaryTree: TAction
Category = 'Tree options'
AutoCheck = True
Caption = 'Binary tree'
OnExecute = ActionBinaryTreeExecute
OnUpdate = ActionAlwaysEnabled
end
object ActionGeneralPurposeTree: TAction
Category = 'Tree options'
AutoCheck = True
Caption = 'General purpose tree'
Checked = True
OnExecute = ActionGeneralPurposeTreeExecute
OnUpdate = ActionAlwaysEnabled
end
object ActionPack: TAction
Category = 'Tree actions'
Caption = 'Pack'
OnExecute = ActionPackExecute
OnUpdate = ActionAlwaysEnabled
end
object ActionTestTree: TAction
Category = 'Tree actions'
Caption = 'Test tree'
OnExecute = ActionTestTreeExecute
OnUpdate = ActionAlwaysEnabled
end
end
end

View File

@ -0,0 +1,344 @@
unit TreeStructureMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ActnList, ComCtrls,
JclContainerIntf;
type
TForm1 = class(TForm)
GroupBoxOptions: TGroupBox;
ActionListMain: TActionList;
ActionAllowDuplicates: TAction;
ActionIgnoreDuplicates: TAction;
ActionAllowDefault: TAction;
ActionRemoveSingle: TAction;
ActionCaseSensitive: TAction;
ActionGenerateRandom: TAction;
ActionAddNew: TAction;
ActionRemoveSelected: TAction;
TreeViewResults: TTreeView;
GroupBoxActions: TGroupBox;
ButtonGenerateRandom: TButton;
ButtonRemoveSelected: TButton;
EditNewItem: TEdit;
ButtonAddNew: TButton;
ActionAddNewChild: TAction;
ButtonAddNewChild: TButton;
CheckBoxBinaryTree: TCheckBox;
ActionBinaryTree: TAction;
ActionGeneralPurposeTree: TAction;
CheckBoxGeneralPurposeTree: TCheckBox;
CheckBoxCaseSensitive: TCheckBox;
CheckBoxAllowDefault: TCheckBox;
CheckBoxAllowDuplicates: TCheckBox;
CheckBoxIgnoreDuplicates: TCheckBox;
CheckBoxRemoveSingle: TCheckBox;
ActionPack: TAction;
Button1: TButton;
ActionTestTree: TAction;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure ActionGeneralPurposeTreeExecute(Sender: TObject);
procedure ActionAlwaysEnabled(Sender: TObject);
procedure ActionBinaryTreeExecute(Sender: TObject);
procedure ActionCaseSensitiveExecute(Sender: TObject);
procedure ActionRemoveSingleExecute(Sender: TObject);
procedure ActionAllowDefaultExecute(Sender: TObject);
procedure ActionDuplicatesExecute(Sender: TObject);
procedure ActionIgnoreDuplicatesUpdate(Sender: TObject);
procedure ActionGenerateRandomExecute(Sender: TObject);
procedure ActionPackExecute(Sender: TObject);
procedure ActionAddNewExecute(Sender: TObject);
procedure ActionAddNewChildUpdate(Sender: TObject);
procedure ActionAddNewChildExecute(Sender: TObject);
procedure ActionRemoveSelectedExecute(Sender: TObject);
procedure ActionRemoveSelectedUpdate(Sender: TObject);
procedure ActionTestTreeExecute(Sender: TObject);
private
FTree: IJclWideStrTree;
function GetSelectedIterator: IJclWideStrTreeIterator;
procedure PrintTree;
public
end;
var
Form1: TForm1;
implementation
uses
JclBinaryTrees,
JclTrees;
{$R *.dfm}
procedure TForm1.ActionBinaryTreeExecute(Sender: TObject);
begin
if ActionBinaryTree.Checked then
begin
ActionGeneralPurposeTree.Checked := False;
FTree := TJclWideStrBinaryTree.Create(nil);
ActionCaseSensitiveExecute(ActionCaseSensitive);
ActionRemoveSingleExecute(ActionRemoveSingle);
ActionAllowDefaultExecute(ActionAllowDefault);
ActionDuplicatesExecute(nil);
PrintTree;
end;
end;
procedure TForm1.ActionCaseSensitiveExecute(Sender: TObject);
begin
FTree.CaseSensitive := (Sender as TAction).Checked;
end;
procedure TForm1.ActionGeneralPurposeTreeExecute(Sender: TObject);
begin
if ActionGeneralPurposeTree.Checked then
begin
ActionBinaryTree.Checked := False;
FTree := TJclWideStrTree.Create;
ActionCaseSensitiveExecute(ActionCaseSensitive);
ActionRemoveSingleExecute(ActionRemoveSingle);
ActionAllowDefaultExecute(ActionAllowDefault);
ActionDuplicatesExecute(nil);
PrintTree;
end;
end;
procedure TForm1.ActionGenerateRandomExecute(Sender: TObject);
var
CurrentItem: Integer;
function GenerateItem: WideString;
begin
if FTree.Duplicates = dupAccept then
Result := Format('Item %.3d', [Random(10)])
else
begin
Result := Format('Item %.3d', [CurrentItem]);
Inc(CurrentItem);
end;
end;
procedure GenerateRandomChild(const AIterator: IJclWideStrIterator; Count: Integer);
begin
while Count > 0 do
begin
(AIterator as IJclWideStrTreeIterator).AddChild(GenerateItem);
Dec(Count);
end;
end;
procedure GenerateRandom(Count: Integer);
begin
while Count > 0 do
begin
FTree.Add(GenerateItem);
Dec(Count);
end;
end;
var
Index1, Index2: Integer;
Iterator0, Iterator1, Iterator2: IJclWideStrTreeIterator;
begin
CurrentItem := 0;
FTree.Clear;
if ActionGeneralPurposeTree.Checked then
begin
// general purpose tree
GenerateRandom(5);
Iterator0 := FTree.Root;
for Index1 := 0 to Iterator0.ChildrenCount - 1 do
begin
Iterator1 := (Iterator0 as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator;
Iterator1.GetChild(Index1);
GenerateRandomChild(Iterator1, 5);
for Index2 := 0 to Iterator1.ChildrenCount - 1 do
begin
Iterator2 := (Iterator1 as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator;
Iterator2.GetChild(Index2);
GenerateRandomChild(Iterator2, 5);
end;
end;
end
else
begin
// binary tree
GenerateRandom(100);
end;
PrintTree;
end;
procedure TForm1.ActionIgnoreDuplicatesUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := not CheckBoxAllowDuplicates.Checked;
end;
procedure TForm1.ActionPackExecute(Sender: TObject);
begin
(FTree as IJclPackable).Pack;
PrintTree;
end;
procedure TForm1.ActionRemoveSelectedExecute(Sender: TObject);
begin
GetSelectedIterator.Remove;
PrintTree;
end;
procedure TForm1.ActionRemoveSelectedUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := TreeViewResults.Selected <> nil;
end;
procedure TForm1.ActionRemoveSingleExecute(Sender: TObject);
begin
FTree.RemoveSingleElement := (Sender as TAction).Checked;
end;
procedure TForm1.ActionTestTreeExecute(Sender: TObject);
procedure CheckNode(const AIterator: IJclWideStrTreeIterator);
var
Index: Integer;
ChildIterator, ParentIterator: IJclWideStrTreeIterator;
begin
for Index := 0 to AIterator.ChildrenCount - 1 do
begin
ChildIterator := (AIterator as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator;
ChildIterator.GetChild(Index);
try
ParentIterator := (ChildIterator as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator;
ParentIterator.Parent;
if not AIterator.IteratorEquals(ParentIterator) then
ShowMessage('difference at parent of node ' + string(ChildIterator.GetString));
except
ShowMessage('error at parent of node ' + string(ChildIterator.GetString));
end;
CheckNode(ChildIterator);
end;
end;
var
ARootIterator: IJclWideStrTreeIterator;
begin
ARootIterator := FTree.Root;
ARootIterator.Next; // unlock
CheckNode(ARootIterator);
ShowMessage('end of test');
end;
procedure TForm1.ActionAddNewChildExecute(Sender: TObject);
begin
if GetSelectedIterator.AddChild(EditNewItem.Text) then
ShowMessage('Success')
else
ShowMessage('Duplicate');
PrintTree;
end;
procedure TForm1.ActionAddNewChildUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := ActionGeneralPurposeTree.Checked and (TreeViewResults.Selected <> nil);
end;
procedure TForm1.ActionAddNewExecute(Sender: TObject);
begin
if FTree.Add(EditNewItem.Text) then
ShowMessage('Success')
else
ShowMessage('Duplicate');
PrintTree;
end;
procedure TForm1.ActionAllowDefaultExecute(Sender: TObject);
begin
FTree.AllowDefaultElements := (Sender as TAction).Checked;
end;
procedure TForm1.ActionDuplicatesExecute(Sender: TObject);
begin
if ActionAllowDuplicates.Checked then
FTree.Duplicates := dupAccept
else
if ActionIgnoreDuplicates.Checked then
FTree.Duplicates := dupIgnore
else
FTree.Duplicates := dupError;
end;
procedure TForm1.ActionAlwaysEnabled(Sender: TObject);
begin
(Sender as TAction).Enabled := True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
ActionGeneralPurposeTreeExecute(ActionGeneralPurposeTree);
end;
function TForm1.GetSelectedIterator: IJclWideStrTreeIterator;
var
Indexes: array of Integer;
I: Integer;
ANode: TTreeNode;
begin
Result := nil;
ANode := TreeViewResults.Selected;
if ANode <> nil then
begin
while ANode.Parent <> nil do
begin
SetLength(Indexes, Length(Indexes) + 1);
Indexes[High(Indexes)] := ANode.Index;
ANode := ANode.Parent;
end;
Result := FTree.Root;
for I := High(Indexes) downto Low(Indexes) do
Result.GetChild(Indexes[I]);
Result.Next;
end;
end;
procedure TForm1.PrintTree;
procedure ProcessNode(const AIterator: IJclWideStrTreeIterator; ANode: TTreeNode);
var
Index: Integer;
ChildIterator: IJclWideStrTreeIterator;
ChildNode: TTreeNode;
begin
ANode.Text := string(AIterator.GetString);
for Index := 0 to AIterator.ChildrenCount - 1 do
begin
ChildIterator := (AIterator as IJclIntfCloneable).IntfClone as IJclWideStrTreeIterator;
ChildIterator.GetChild(Index);
ChildNode := TreeViewResults.Items.AddChild(ANode, '');
ProcessNode(ChildIterator, ChildNode);
end;
end;
var
ARootIterator: IJclWideStrTreeIterator;
ARootNode: TTreeNode;
begin
TreeViewResults.Items.Clear;
if FTree.Size > 0 then
begin
ARootIterator := FTree.Root;
ARootIterator.Next; // unlock
ARootNode := TreeViewResults.Items.Add(nil, '');
ProcessNode(ARootIterator, ARootNode);
ARootNode.Expand(True);
ARootNode.MakeVisible;
end;
end;
end.

View File

@ -0,0 +1,3 @@
[Directories]
OutputDir=..\..\..\bin

View File

@ -0,0 +1,19 @@
program ExprEvalExample;
{$I jcl.inc}
uses
Forms,
ExprEvalExampleMain in 'ExprEvalExampleMain.pas' {Form1},
JclExprEval in '..\..\..\source\common\JclExprEval.pas',
JclStrHashMap in '..\..\..\source\common\JclStrHashMap.pas',
ExprEvalExampleLogic in 'ExprEvalExampleLogic.pas';
{$R *.RES}
{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

View File

@ -0,0 +1,105 @@
unit ExprEvalExampleLogic;
interface
uses
SysUtils, Classes, JclExprEval;
procedure Init(Evaluator: TEasyEvaluator; FuncList: TStrings);
function ResultAsText(Evaluator: TEvaluator; const Input: string): string;
implementation
uses
JclMath;
procedure Init(Evaluator: TEasyEvaluator; FuncList: TStrings);
begin
with Evaluator do
begin
// Constants
AddConst('Pi', Pi);
// Functions
AddFunc('LogBase10', LogBase10);
AddFunc('LogBase2', LogBase2);
AddFunc('LogBaseN', LogBaseN);
AddFunc('ArcCos', ArcCos);
AddFunc('ArcCot', ArcCot);
AddFunc('ArcCsc', ArcCsc);
AddFunc('ArcSec', ArcSec);
AddFunc('ArcSin', ArcSin);
AddFunc('ArcTan', ArcTan);
AddFunc('ArcTan2', ArcTan2);
AddFunc('Cos', Cos);
AddFunc('Cot', Cot);
AddFunc('Coversine', Coversine);
AddFunc('Csc', Csc);
AddFunc('Exsecans', Exsecans);
AddFunc('Haversine', Haversine);
AddFunc('Sec', Sec);
AddFunc('Sin', Sin);
AddFunc('Tan', Tan);
AddFunc('Versine', Versine);
AddFunc('ArcCosH', ArcCosH);
AddFunc('ArcCotH', ArcCotH);
AddFunc('ArcCscH', ArcCscH);
AddFunc('ArcSecH', ArcSecH);
AddFunc('ArcSinH', ArcSinH);
AddFunc('ArcTanH', ArcTanH);
AddFunc('CosH', CosH);
AddFunc('CotH', CotH);
AddFunc('CscH', CscH);
AddFunc('SecH', SecH);
AddFunc('SinH', SinH);
AddFunc('TanH', TanH);
end;
with FuncList do
begin
Add('LogBase10');
Add('LogBase2');
Add('LogBaseN');
Add('ArcCos');
Add('ArcCot');
Add('ArcCsc');
Add('ArcSec');
Add('ArcSin');
Add('ArcTan');
Add('ArcTan2');
Add('Cos');
Add('Cot');
Add('Coversine');
Add('Csc');
Add('Exsecans');
Add('Haversine');
Add('Sec');
Add('Sin');
Add('Tan');
Add('Versine');
Add('ArcCosH');
Add('ArcCotH');
Add('ArcCscH');
Add('ArcSecH');
Add('ArcSinH');
Add('ArcTanH');
Add('CosH');
Add('CotH');
Add('CscH');
Add('SecH');
Add('SinH');
Add('TanH');
end;
end;
function ResultAsText(Evaluator: TEvaluator; const Input: string): string;
begin
try
Result := FloatToStr(Evaluator.Evaluate(Input));
except
on E: Exception do
Result := E.Message;
end;
end;
end.

View File

@ -0,0 +1,71 @@
object Form1: TForm1
Left = 222
Top = 107
ClientWidth = 479
ClientHeight = 321
Caption = 'JclExprEval Example'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 12
Top = 12
Width = 54
Height = 13
Caption = 'E&xpression:'
FocusControl = ExpressionInput
end
object Label2: TLabel
Left = 12
Top = 40
Width = 49
Height = 13
Caption = 'Functions:'
end
object ExpressionInput: TEdit
Left = 80
Top = 8
Width = 305
Height = 21
Anchors = [akLeft, akTop, akRight]
TabOrder = 0
end
object Memo1: TMemo
Left = 0
Top = 60
Width = 479
Height = 270
Anchors = [akLeft, akTop, akRight, akBottom]
TabOrder = 1
end
object EnterButton: TButton
Left = 396
Top = 8
Width = 75
Height = 25
Anchors = [akTop, akRight]
Caption = 'Evaluate'
Default = True
TabOrder = 2
OnClick = EnterButtonClick
end
object FuncList: TComboBox
Left = 80
Top = 36
Width = 145
Height = 21
Style = csDropDownList
ItemHeight = 13
Sorted = True
TabOrder = 3
OnClick = FuncListClick
end
end

View File

@ -0,0 +1,67 @@
unit ExprEvalExampleMain;
interface
uses
Windows, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls,
JclExprEval;
type
TForm1 = class(TForm)
ExpressionInput: TEdit;
Memo1: TMemo;
Label1: TLabel;
EnterButton: TButton;
FuncList: TComboBox;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure EnterButtonClick(Sender: TObject);
procedure FuncListClick(Sender: TObject);
private
{ Private declarations }
FEvaluator: TEasyEvaluator;
FX: Extended;
FY: Extended;
FZ: Extended;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses
ExprEvalExampleLogic;
procedure TForm1.FormCreate(Sender: TObject);
begin
FEvaluator := TEvaluator.Create;
FEvaluator.AddVar('X', FX);
FEvaluator.AddVar('Y', FY);
FEvaluator.AddVar('Z', FZ);
Init(FEvaluator, FuncList.Items);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FEvaluator.Free;
end;
procedure TForm1.EnterButtonClick(Sender: TObject);
begin
Memo1.Lines.Add(ResultAsText(FEvaluator as TEvaluator, ExpressionInput.Text));
end;
procedure TForm1.FuncListClick(Sender: TObject);
begin
ExpressionInput.Text := ExpressionInput.Text + FuncList.Text;
ActiveControl := ExpressionInput;
ExpressionInput.SelStart := Length(ExpressionInput.Text);
end;
end.

View File

@ -0,0 +1,2 @@
[Directories]
OutputDir=../../../bin

View File

@ -0,0 +1,16 @@
program FileSearchDemo;
{$I jcl.inc}
uses
Forms,
FileSearchDemoMain in 'FileSearchDemoMain.pas' {FileSearchForm};
{$R *.res}
{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res}
begin
Application.Initialize;
Application.CreateForm(TFileSearchForm, FileSearchForm);
Application.Run;
end.

View File

@ -0,0 +1,364 @@
object FileSearchForm: TFileSearchForm
Left = 258
Top = 301
Width = 855
Height = 509
HorzScrollBar.Range = 378
VertScrollBar.Range = 252
ActiveControl = StartBtn
Caption = 'File Search Demo (TJclFileEnumerator)'
Color = clBtnFace
Constraints.MinHeight = 279
Constraints.MinWidth = 647
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = 12
Font.Name = 'MS Sans Serif'
Font.Pitch = fpVariable
Font.Style = []
OldCreateOrder = True
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object StatusBar: TStatusBar
Left = 0
Top = 461
Width = 847
Height = 21
Panels = <
item
Alignment = taRightJustify
Width = 100
end
item
Alignment = taRightJustify
Width = 100
end
item
Width = 50
end>
end
object FileList: TListView
Left = 0
Top = 181
Width = 847
Height = 280
Align = alClient
Columns = <
item
Caption = 'File'
Width = 360
end
item
Alignment = taRightJustify
AutoSize = True
Caption = 'Size'
end
item
Alignment = taCenter
AutoSize = True
Caption = 'Time'
end
item
Caption = 'Attr.'
Width = 60
end>
ReadOnly = True
TabOrder = 1
ViewStyle = vsReport
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 847
Height = 49
Align = alTop
BevelOuter = bvNone
TabOrder = 2
object Label1: TLabel
Left = 14
Top = 14
Width = 16
Height = 13
Caption = 'List'
end
object Label2: TLabel
Left = 216
Top = 14
Width = 29
Height = 13
Caption = 'files in'
end
object RootDirInput: TEdit
Left = 256
Top = 10
Width = 248
Height = 21
TabOrder = 1
end
object StartBtn: TButton
Left = 524
Top = 10
Width = 61
Height = 25
Caption = 'Start'
TabOrder = 2
OnClick = StartBtnClick
end
object StopBtn: TButton
Left = 596
Top = 10
Width = 61
Height = 25
Caption = 'Stop'
Enabled = False
TabOrder = 3
OnClick = StopBtnClick
end
object DetailsBtn: TButton
Left = 668
Top = 10
Width = 77
Height = 25
Caption = 'More >>'
TabOrder = 4
OnClick = DetailsBtnClick
end
object FileMaskInput: TEdit
Left = 40
Top = 10
Width = 169
Height = 21
TabOrder = 0
Text = '*'
end
object SaveBtn: TButton
Left = 760
Top = 8
Width = 75
Height = 25
Caption = 'Save'
TabOrder = 5
OnClick = SaveBtnClick
end
end
object DetailsPanel: TPanel
Left = 0
Top = 49
Width = 847
Height = 132
Align = alTop
BevelOuter = bvNone
TabOrder = 3
Visible = False
object GroupBox1: TGroupBox
Left = 256
Top = 0
Width = 249
Height = 121
Caption = 'File attributes'
TabOrder = 0
object cbReadOnly: TCheckBox
Tag = 1
Left = 16
Top = 16
Width = 89
Height = 21
AllowGrayed = True
Caption = 'Read only'
State = cbGrayed
TabOrder = 0
OnClick = cbFileAttributeClick
end
object cbHidden: TCheckBox
Tag = 2
Left = 16
Top = 40
Width = 89
Height = 21
AllowGrayed = True
Caption = 'Hidden'
TabOrder = 1
OnClick = cbFileAttributeClick
end
object cbSystem: TCheckBox
Tag = 4
Left = 16
Top = 64
Width = 89
Height = 21
AllowGrayed = True
Caption = 'System'
TabOrder = 2
OnClick = cbFileAttributeClick
end
object cbDirectory: TCheckBox
Tag = 16
Left = 16
Top = 88
Width = 89
Height = 21
AllowGrayed = True
Caption = 'Directory'
TabOrder = 3
OnClick = cbFileAttributeClick
end
object cbSymLink: TCheckBox
Tag = 64
Left = 136
Top = 16
Width = 101
Height = 21
AllowGrayed = True
Caption = 'Symbolic link'
State = cbGrayed
TabOrder = 4
OnClick = cbFileAttributeClick
end
object cbNormal: TCheckBox
Tag = 128
Left = 136
Top = 88
Width = 89
Height = 21
AllowGrayed = True
Caption = 'Normal'
State = cbGrayed
TabOrder = 7
OnClick = cbFileAttributeClick
end
object cbArchive: TCheckBox
Tag = 32
Left = 136
Top = 16
Width = 89
Height = 21
AllowGrayed = True
Caption = 'Archive'
State = cbGrayed
TabOrder = 5
OnClick = cbFileAttributeClick
end
object cbVolumeID: TCheckBox
Tag = 8
Left = 136
Top = 40
Width = 89
Height = 21
AllowGrayed = True
Caption = 'Volume ID'
TabOrder = 6
OnClick = cbFileAttributeClick
end
end
object cbLastChangeAfter: TCheckBox
Left = 524
Top = 12
Width = 131
Height = 30
Caption = 'Last change after'
TabOrder = 1
end
object edLastChangeAfter: TEdit
Left = 656
Top = 16
Width = 113
Height = 21
MaxLength = 10
TabOrder = 2
end
object cbLastChangeBefore: TCheckBox
Left = 524
Top = 36
Width = 131
Height = 30
Caption = 'Last change before'
TabOrder = 3
end
object edLastChangeBefore: TEdit
Left = 656
Top = 40
Width = 113
Height = 21
MaxLength = 10
TabOrder = 4
end
object cbFileSizeMax: TCheckBox
Left = 524
Top = 60
Width = 131
Height = 30
Caption = 'Maximum size'
TabOrder = 5
end
object edFileSizeMax: TEdit
Left = 656
Top = 64
Width = 113
Height = 21
TabOrder = 6
Text = '$7FFFFFFFFFFFFFFF'
end
object cbFileSizeMin: TCheckBox
Left = 524
Top = 84
Width = 131
Height = 30
Caption = 'Minimum size'
TabOrder = 7
end
object edFileSizeMin: TEdit
Left = 656
Top = 88
Width = 113
Height = 21
TabOrder = 8
Text = '0'
end
object IncludeSubDirectories: TCheckBox
Left = 40
Top = 18
Width = 157
Height = 17
Caption = 'Include sub directories'
Checked = True
State = cbChecked
TabOrder = 9
OnClick = UpdateIncludeHiddenSubDirs
end
object IncludeHiddenSubDirs: TCheckBox
Left = 40
Top = 42
Width = 201
Height = 17
Caption = 'Include hidden sub directories'
TabOrder = 10
OnClick = IncludeHiddenSubDirsClick
end
object cbDisplayLiveUpdate: TCheckBox
Left = 40
Top = 90
Width = 189
Height = 17
Caption = '&Display live update'
Checked = True
State = cbChecked
TabOrder = 12
end
object cbCaseInsensitiveSearch: TCheckBox
Left = 40
Top = 66
Width = 177
Height = 17
Caption = 'Case insensitive search'
TabOrder = 11
end
end
object SaveDialog: TSaveDialog
DefaultExt = '*.txt'
Filter = 'Text files (*.txt)|*.txt|All files (*.*)|*.*'
Left = 216
Top = 96
end
end

View File

@ -0,0 +1,260 @@
//
// Robert Rossmair, 2003
//
unit FileSearchDemoMain;
{$INCLUDE jcl.inc}
interface
uses
SysUtils, Classes,
Graphics, StdCtrls, Controls, ExtCtrls, ComCtrls, Forms, Dialogs,
JclStrings, JclFileUtils;
type
TFileSearchForm = class(TForm)
StatusBar: TStatusBar;
FileList: TListView;
Panel1: TPanel;
Label1: TLabel;
RootDirInput: TEdit;
StartBtn: TButton;
StopBtn: TButton;
Label2: TLabel;
DetailsPanel: TPanel;
GroupBox1: TGroupBox;
cbReadOnly: TCheckBox;
cbHidden: TCheckBox;
cbSystem: TCheckBox;
cbDirectory: TCheckBox;
cbSymLink: TCheckBox;
cbNormal: TCheckBox;
cbArchive: TCheckBox;
DetailsBtn: TButton;
FileMaskInput: TEdit;
cbLastChangeAfter: TCheckBox;
edLastChangeAfter: TEdit;
cbLastChangeBefore: TCheckBox;
edLastChangeBefore: TEdit;
cbFileSizeMax: TCheckBox;
edFileSizeMax: TEdit;
cbFileSizeMin: TCheckBox;
edFileSizeMin: TEdit;
IncludeSubDirectories: TCheckBox;
IncludeHiddenSubDirs: TCheckBox;
cbDisplayLiveUpdate: TCheckBox;
cbCaseInsensitiveSearch: TCheckBox;
SaveBtn: TButton;
SaveDialog: TSaveDialog;
procedure StartBtnClick(Sender: TObject);
procedure StopBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure cbFileAttributeClick(Sender: TObject);
procedure UpdateIncludeHiddenSubDirs(Sender: TObject);
procedure IncludeHiddenSubDirsClick(Sender: TObject);
procedure DetailsBtnClick(Sender: TObject);
procedure SaveBtnClick(Sender: TObject);
private
{ Private declarations }
FFileEnumerator: TJclFileEnumerator;
FDirCount: Integer;
FTaskID: TFileSearchTaskID;
FT0: TDateTime;
FFileListLiveUpdate: Boolean;
procedure DirectoryEntered(const Directory: string);
procedure AddFile(const Directory: string; const FileInfo: TSearchRec);
procedure TaskDone(const ID: TFileSearchTaskID; const Aborted: Boolean);
end;
var
FileSearchForm: TFileSearchForm;
implementation
{$R *.dfm}
procedure TFileSearchForm.FormCreate(Sender: TObject);
begin
FFileEnumerator := TJclFileEnumerator.Create;
FFileEnumerator.OnEnterDirectory := DirectoryEntered;
FFileEnumerator.OnTerminateTask := TaskDone;
FileMaskInput.Text := '*.pas;*.dfm;*.xfm;*.dpr;*.dpk*';
RootDirInput.Text := ExpandFileName(FFileEnumerator.RootDirectory);
edLastChangeAfter.Text := FFileEnumerator.LastChangeAfterAsString;
edLastChangeBefore.Text := FFileEnumerator.LastChangeBeforeAsString;
cbCaseInsensitiveSearch.Checked := not FFileEnumerator.CaseSensitiveSearch;
{$IFDEF MSWINDOWS}
cbSymLink.Visible := False;
{$ENDIF MSWINDOWS}
{$IFDEF UNIX}
FileList.Columns.Add.Caption := 'Link';
cbArchive.Visible := False;
{$ENDIF UNIX}
end;
procedure TFileSearchForm.FormDestroy(Sender: TObject);
begin
FFileEnumerator.Free;
{
FileList.Items.BeginUpdate;
FileList.Items.Clear;
FileList.Items.EndUpdate;
}
end;
procedure TFileSearchForm.DirectoryEntered(const Directory: string);
begin
Inc(FDirCount);
StatusBar.Panels[0].Text := Format('%d files', [FileList.Items.Count]);
StatusBar.Panels[1].Text := Format('%d directories', [FDirCount]);
StatusBar.Panels[2].Text := Format('Processing %s...', [Directory]);
end;
procedure TFileSearchForm.AddFile(const Directory: string; const FileInfo: TSearchRec);
var
ListItem: TListItem;
begin
ListItem := FileList.Items.Add;
with ListItem do
begin
Caption := Directory + FileInfo.Name;
SubItems.Add(IntToStr(GetSizeOfFile(FileInfo)));
SubItems.Add(FormatDateTime(' yyyy-mm-dd hh:nn:ss ', FileDateToDateTime(FileInfo.Time)));
SubItems.Add(FileAttributesStr(FileInfo));
{$IFDEF UNIX}
if (FileInfo.Attr and faSymLink) <> 0 then
SubItems.Add(SymbolicLinkTarget(Caption));
{$ENDIF UNIX}
SubItems.Add(FileGetOwnerName(Caption));
SubItems.Add(FileGetGroupName(Caption));
end;
end;
procedure TFileSearchForm.TaskDone(const ID: TFileSearchTaskID; const Aborted: Boolean);
begin
if not FFileListLiveUpdate then
FileList.Items.EndUpdate;
StatusBar.Panels[0].Text := Format('%d files', [FileList.Items.Count]);
if Aborted then
StatusBar.Panels[2].Text := 'Prematurely aborted.'
else
StatusBar.Panels[2].Text := Format('...finished (%f seconds).', [(Now - FT0) * SecsPerDay]);
StartBtn.Enabled := True;
SaveBtn.Enabled := True;
StopBtn.Enabled := False;
ActiveControl := StartBtn;
end;
procedure TFileSearchForm.StartBtnClick(Sender: TObject);
begin
RootDirInput.Text := PathCanonicalize(RootDirInput.Text);
FFileEnumerator.SearchOption[fsLastChangeAfter] := cbLastChangeAfter.Checked;
FFileEnumerator.SearchOption[fsLastChangeBefore] := cbLastChangeBefore.Checked;
if FFileEnumerator.SearchOption[fsLastChangeAfter] then
FFileEnumerator.LastChangeAfterAsString := edLastChangeAfter.Text;
if FFileEnumerator.SearchOption[fsLastChangeBefore] then
FFileEnumerator.LastChangeBeforeAsString := edLastChangeBefore.Text;
FFileEnumerator.RootDirectory := RootDirInput.Text;
FFileEnumerator.FileMask := FileMaskInput.Text;
FFileEnumerator.SearchOption[fsMinSize] := cbFileSizeMin.Checked;
FFileEnumerator.SearchOption[fsMaxSize] := cbFileSizeMax.Checked;
FFileEnumerator.FileSizeMin := StrToInt64(edFileSizeMin.Text);
FFileEnumerator.FileSizeMax := StrToInt64(edFileSizeMax.Text);
FFileEnumerator.IncludeSubDirectories := IncludeSubDirectories.Checked;
FFileEnumerator.IncludeHiddenSubDirectories := IncludeHiddenSubDirs.Checked;
FFileEnumerator.CaseSensitiveSearch := not cbCaseInsensitiveSearch.Checked;
FDirCount := 0;
StartBtn.Enabled := False;
StopBtn.Enabled := True;
SaveBtn.Enabled := False;
ActiveControl := StopBtn;
FFileListLiveUpdate := cbDisplayLiveUpdate.Checked;
FileList.Items.Clear;
if not FFileListLiveUpdate then
FileList.Items.BeginUpdate;
FT0 := Now;
FTaskID := FFileEnumerator.ForEach(AddFile);
end;
procedure TFileSearchForm.StopBtnClick(Sender: TObject);
begin
FFileEnumerator.StopTask(FTaskID);
end;
procedure TFileSearchForm.cbFileAttributeClick(Sender: TObject);
const
Interest: array[TCheckBoxState] of TAttributeInterest = (aiRejected, aiRequired, aiIgnored);
CBState: array[TAttributeInterest] of TCheckBoxState = (cbGrayed, cbUnchecked, cbChecked);
begin
with FFileEnumerator.AttributeMask do
begin
with Sender as TCheckBox do
Attribute[Tag] := Interest[State];
cbReadOnly.State := CBState[ReadOnly];
cbHidden.State := CBState[Hidden];
cbSystem.State := CBState[System];
cbDirectory.State := CBState[Directory];
cbNormal.State := CBState[Normal];
{$IFDEF UNIX}
cbSymLink.State := CBState[SymLink];
{$ENDIF def UNIX}
{$IFDEF MSWINDOWS}
cbArchive.State := CBState[Archive];
{$ENDIF def MSWINDOWS}
end;
end;
procedure TFileSearchForm.UpdateIncludeHiddenSubDirs(Sender: TObject);
begin
IncludeHiddenSubDirs.AllowGrayed := not IncludeSubDirectories.Checked;
if IncludeSubDirectories.Checked then
begin
if IncludeHiddenSubDirs.State = cbGrayed then
IncludeHiddenSubDirs.State := cbChecked;
end
else
begin
if IncludeHiddenSubDirs.State = cbChecked then
IncludeHiddenSubDirs.State := cbGrayed;
end;
end;
procedure TFileSearchForm.IncludeHiddenSubDirsClick(Sender: TObject);
begin
if not IncludeSubDirectories.Checked then
if IncludeHiddenSubDirs.State = cbChecked then
IncludeHiddenSubDirs.State := cbUnchecked;
end;
procedure TFileSearchForm.DetailsBtnClick(Sender: TObject);
const
DetailsBtnCaptions: array[Boolean] of string = ('More >>', 'Less <<');
begin
DetailsPanel.Visible := not DetailsPanel.Visible;
DetailsBtn.Caption := DetailsBtnCaptions[DetailsPanel.Visible];
end;
procedure TFileSearchForm.SaveBtnClick(Sender: TObject);
var
I: Integer;
begin
if SaveDialog.Execute then
with TStringList.Create do
try
for I := 0 to FileList.Items.Count - 1 do
Add(FileList.Items[I].Caption);
SaveToFile(SaveDialog.FileName);
finally
Free;
end;
end;
end.

View File

@ -0,0 +1,3 @@
[Directories]
OutputDir=../../../bin

View File

@ -0,0 +1,16 @@
program ClipLineDemo;
{$I jcl.inc}
uses
Forms,
ClipLineDemoMain in 'ClipLineDemoMain.pas' {Form1};
{$R *.res}
{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

View File

@ -0,0 +1,17 @@
object Form1: TForm1
Left = 198
Top = 147
Width = 400
Height = 400
Caption = 'ClipLine Demo'
Color = 15790320
OnCreate = FormCreate
OnPaint = FormPaint
PixelsPerInch = 96
TextHeight = 13
object Timer1: TTimer
Enabled = False
Left = 32
Top = 24
end
end

View File

@ -0,0 +1,85 @@
unit ClipLineDemoMain;
{$I jcl.inc}
interface
uses
SysUtils, Classes,
{$IFDEF MSWINDOWS}
Windows,
{$ENDIF}
Graphics, ExtCtrls, Forms, JclGraphUtils,
JclBase;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
R: TRect;
P: TPointArray;
FPenColor: TColor;
FPenColorLight: TColor;
procedure InitLines;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
R.Left := 100;
R.Top := 100;
R.Right := 300;
R.Bottom := 300;
SetLength(P, 50);
InitLines;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Brush.Color := clWhite;
Canvas.FillRect(R);
Canvas.Pen.Color := FPenColorLight;
Canvas.PolyLine(P);
Canvas.Pen.Color := FPenColor;
DrawPolyLine(Canvas, P, R);
end;
procedure TForm1.InitLines;
var
i: Integer;
H, S, L: Single;
begin
for i := 0 to Length(P)-1 do
begin
P[i].X := Random(Width);
P[i].Y := Random(Height);
end;
H := Random;
S := Random;
L := 0.4 * Random;
FPenColor := WinColor(HSLToRGB(H, S, L));
FPenColorLight := WinColor(HSLToRGB(H, S, 1 - 0.2 * (1 - L)));
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
InitLines;
Refresh;
end;
end.

View File

@ -0,0 +1,217 @@
object StretchDemoForm: TStretchDemoForm
Left = 255
Top = 208
ClientWidth = 780
ClientHeight = 583
VertScrollBar.Range = 19
ActiveControl = PageControl
AutoScroll = False
Caption = 'JCL Picture Viewer'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = 12
Font.Name = 'MS Sans Serif'
Font.Pitch = fpVariable
Font.Style = []
KeyPreview = True
Menu = MainMenu
OldCreateOrder = True
ShowHint = True
OnCreate = FormCreate
OnKeyDown = FormKeyDown
PixelsPerInch = 96
TextHeight = 13
object PageControl: TPageControl
Left = 0
Top = 0
Width = 780
Height = 544
ActivePage = OriginalPage
Align = alClient
TabOrder = 0
OnChanging = PageControlChanging
object OriginalPage: TTabSheet
Caption = 'Original'
object ScrollBox: TScrollBox
Left = 0
Top = 0
Width = 772
Height = 516
HorzScrollBar.Tracking = True
VertScrollBar.Tracking = True
Align = alClient
Color = clGray
ParentColor = False
TabOrder = 0
object OriginalImage: TImage
Left = 0
Top = 0
Width = 768
Height = 512
AutoSize = True
end
end
end
object StretchedPage: TTabSheet
Caption = 'Resized'
ImageIndex = 1
OnResize = StretchedPageResize
OnShow = StretchedPageShow
object Bevel1: TBevel
Left = 0
Top = 0
Width = 772
Height = 516
Align = alClient
end
object StretchedImage: TImage
Left = 1
Top = 1
Width = 770
Height = 513
Anchors = [akLeft, akTop, akRight, akBottom]
end
end
object FilesPage: TTabSheet
Caption = 'Files'
ImageIndex = 2
object FileListView: TListView
Left = 0
Top = 0
Width = 772
Height = 516
Align = alClient
Columns = <
item
AutoSize = True
Caption = 'File'
MaxWidth = 800
MinWidth = 300
end
item
Caption = 'Size'
end>
HideSelection = False
TabOrder = 0
ViewStyle = vsReport
OnClick = FileListViewClick
OnKeyDown = FileListViewKeyDown
end
end
end
object StatusBar: TStatusBar
Left = 0
Top = 544
Width = 780
Height = 19
Panels = <
item
Width = 120
end
item
Width = 120
end
item
Width = 120
end>
SimplePanel = False
end
object OpenDialog: TOpenDialog
Filter =
'All (*.jpg;*.jpeg;*.bmp)|*.jpg;*.jpeg;*.bmp|JPEG Image File (*.j' +
'pg)|*.jpg|JPEG Image File (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp'
FilterIndex = 0
Title = 'Open'
Left = 240
Top = 68
end
object MainMenu: TMainMenu
Left = 208
Top = 68
object Fil1: TMenuItem
Caption = '&File'
object Open1: TMenuItem
Caption = 'Open...'
OnClick = OpenFile
end
object N1: TMenuItem
Caption = '-'
end
object ExitItem: TMenuItem
Caption = 'E&xit'
OnClick = ExitApp
end
end
object Filter1: TMenuItem
Caption = '&Resampling Filter'
object Box1: TMenuItem
Caption = 'Bo&x'
GroupIndex = 1
RadioItem = True
OnClick = SelectFilter
end
object Triangle1: TMenuItem
Tag = 1
Caption = '&Triangle'
GroupIndex = 1
RadioItem = True
OnClick = SelectFilter
end
object Hermite1: TMenuItem
Tag = 2
Caption = '&Hermite'
GroupIndex = 1
RadioItem = True
OnClick = SelectFilter
end
object Bell1: TMenuItem
Tag = 3
Caption = '&Bell'
GroupIndex = 1
RadioItem = True
OnClick = SelectFilter
end
object Spline1: TMenuItem
Tag = 4
Caption = '&Spline'
Checked = True
GroupIndex = 1
RadioItem = True
OnClick = SelectFilter
end
object Lanczos31: TMenuItem
Tag = 5
Caption = '&Lanczos 3'
GroupIndex = 1
RadioItem = True
OnClick = SelectFilter
end
object Mitchell1: TMenuItem
Tag = 6
Caption = '&Mitchell'
GroupIndex = 1
RadioItem = True
OnClick = SelectFilter
end
end
object Options1: TMenuItem
Caption = '&Options'
object PreserveAspectRatio1: TMenuItem
Caption = 'Preserve Aspect Ratio'
Checked = True
OnClick = PreserveAspectRatio1Click
end
end
object PrevItem: TMenuItem
Caption = ' &<< '
Hint = 'Previous file in directory'
OnClick = PrevFile
end
object NextItem: TMenuItem
Caption = ' &>> '
Hint = 'Next file in directory'
OnClick = NextFile
end
end
end

View File

@ -0,0 +1,503 @@
//
// Robert Rossmair, 2002-09-22
// revised 2005-06-26
//
{$I jcl.inc}
{$IFDEF RTL140_UP}
{$IFDEF VCL}
{$DEFINE HasShellCtrls} // $(Delphi)\Demos\ShellControls\ShellCtrls.pas
{$ENDIF VCL}
{$ENDIF RTL140_UP}
unit StretchGraphicDemoMain;
interface
uses
SysUtils, Classes,
{$IFDEF MSWINDOWS}
Windows, Messages, JPEG, ShellAPI,
{$ENDIF MSWINDOWS}
Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Menus, ExtCtrls, ExtDlgs,
JclGraphics,
{$IFDEF HasShellCtrls}
{$WARN UNIT_PLATFORM OFF}
ShellCtrls,
{$ENDIF HasShellCtrls}
JclFileUtils;
type
TStretchDemoForm = class(TForm)
PageControl: TPageControl;
OriginalPage: TTabSheet;
StretchedPage: TTabSheet;
StretchedImage: TImage;
MainMenu: TMainMenu;
Fil1: TMenuItem;
Open1: TMenuItem;
N1: TMenuItem;
ExitItem: TMenuItem;
Filter1: TMenuItem;
Box1: TMenuItem;
Triangle1: TMenuItem;
Hermite1: TMenuItem;
Bell1: TMenuItem;
Spline1: TMenuItem;
Lanczos31: TMenuItem;
Mitchell1: TMenuItem;
Options1: TMenuItem;
PreserveAspectRatio1: TMenuItem;
PrevItem: TMenuItem;
NextItem: TMenuItem;
FilesPage: TTabSheet;
ScrollBox: TScrollBox;
StatusBar: TStatusBar;
Bevel1: TBevel;
OpenDialog: TOpenDialog;
FileListView: TListView;
OriginalImage: TImage;
procedure FormCreate(Sender: TObject);
{$IFDEF VCL}
procedure FormDestroy(Sender: TObject);
{$ENDIF VCL}
procedure OpenFile(Sender: TObject);
procedure SelectFilter(Sender: TObject);
procedure PreserveAspectRatio1Click(Sender: TObject);
procedure ExitApp(Sender: TObject);
procedure PrevFile(Sender: TObject);
procedure NextFile(Sender: TObject);
procedure FileListViewClick(Sender: TObject);
procedure LoadSelected;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure StretchedPageShow(Sender: TObject);
procedure StretchedPageResize(Sender: TObject);
procedure PageControlChanging(Sender: TObject;
var AllowChange: Boolean);
procedure FileListViewKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
{$IFDEF HasShellCtrls}
procedure ShellChange;
private
FShellChangeNotifier: TShellChangeNotifier;
{$ELSE}
private
{$ENDIF HasShellCtrls}
FLastImagePage: TTabSheet;
FFileName: string;
FDir: string;
FWidth: Integer;
FHeight: Integer;
FStretchTime: LongWord;
FPreserveAspectRatio: Boolean;
FResamplingFilter: TResamplingFilter;
procedure AddToFileList(const Directory: string; const FileInfo: TSearchRec);
procedure FileSearchTerminated(const ID: TFileSearchTaskID; const Aborted: Boolean);
function ChangeDirectory: Boolean;
procedure DoStretch;
procedure LoadFile(const AFileName: string);
procedure InvalidateStretched;
procedure UpdateCaption;
procedure UpdateFileList;
procedure UpdateNavButtons;
procedure UpdateStretched;
function GetFileListIndex: Integer;
procedure SetFileListIndex(const Value: Integer);
procedure SetFileName(const Value: string);
{$IFDEF VCL}
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DropFiles;
{$ENDIF VCL}
protected
property FileListIndex: Integer read GetFileListIndex write SetFileListIndex;
property FileName: string read FFileName write SetFileName;
end;
var
StretchDemoForm: TStretchDemoForm;
implementation
{$IFDEF VCL}
{$R *.dfm}
{$ENDIF}
{$IFDEF VisualCLX}
{$R *.xfm}
{$ENDIF VisualCLX}
var
FileMask: string;
{$IFDEF MSWINDOWS}
type
TWMDropFilesCallback = procedure (const FileName: string) of object;
procedure ProcessWMDropFiles(var Msg: TWMDropFiles; Callback: TWMDropFilesCallback; DropPoint: PPoint = nil); overload;
var
i: Integer;
FileName: array[0..MAX_PATH] of Char;
begin
try
// in case DropPoint is evaluated by callback method, get it first
if DropPoint <> nil then
DragQueryPoint(Msg.Drop, DropPoint^);
if Assigned(Callback) then
for i := 0 to DragQueryFile(Msg.Drop, $FFFFFFFF, nil, 0) - 1 do
begin
DragQueryFile(Msg.Drop, i, FileName, MAX_PATH);
Callback(FileName);
end;
Msg.Result := 0;
finally
DragFinish(Msg.Drop);
end;
end;
procedure ProcessWMDropFiles(var Msg: TWMDropFiles; FileNames: TStrings; DropPoint: PPoint = nil); overload;
begin
ProcessWMDropFiles(Msg, FileNames.Append, DropPoint);
end;
{$ENDIF MSWINDOWS}
function IsGraphicFile(const FileName: string): Boolean; overload;
var
Ext: string;
begin
Ext := AnsiLowerCase(ExtractFileExt(FileName));
Result := (Pos(Ext, FileMask) > 0);
end;
function IsGraphicFile(const Attr: Integer; const FileInfo: TSearchRec): Boolean; overload;
begin
Result := IsGraphicFile(FileInfo.Name);
end;
procedure TStretchDemoForm.FormCreate(Sender: TObject);
begin
StretchedPage.Brush.Color := clGray;
{$IFDEF VCL}
ScrollBox.DoubleBuffered := True;
StretchedPage.DoubleBuffered := True;
{$ENDIF VCL}
FileMask := GraphicFileMask(TGraphic);
//Format('%s;%s', [GraphicFileMask(TJPEGImage), GraphicFileMask(TBitmap)]);
OpenDialog.Filter := GraphicFilter(TGraphic);
FResamplingFilter := rfSpline; // rfLanczos3;
FPreserveAspectRatio := True;
UpdateNavButtons;
{$IFDEF HasShellCtrls}
FShellChangeNotifier := TShellChangeNotifier.Create(Self);
with FShellChangeNotifier do
begin
WatchSubTree := False;
OnChange := ShellChange;
NotifyFilters := [
nfFileNameChange,
nfDirNameChange,
//nfSizeChange,
nfWriteChange,
nfSecurityChange];
end;
{$ENDIF HasShellCtrls}
{$IFDEF VCL}
DragAcceptFiles(Handle, True);
{$ENDIF VCL}
if ParamCount > 0 then
with OpenDialog do
begin
FileName := ParamStr(1);
InitialDir := ExtractFileDir(FileName);
LoadFile(FileName);
end;
end;
{$IFDEF VCL}
procedure TStretchDemoForm.FormDestroy(Sender: TObject);
begin
DragAcceptFiles(Handle, False);
end;
{$ENDIF VCL}
procedure TStretchDemoForm.ExitApp(Sender: TObject);
begin
Close;
end;
function TStretchDemoForm.ChangeDirectory: Boolean;
var
Dir, D: string;
begin
D := ExtractFileDir(FileName);
Dir := PathAddSeparator(D);
Result := (Dir <> FDir) and (Pos(FDir, Dir) <> 1);
if Result then
begin
FDir := Dir;
FilesPage.Caption := Format('Files in %s', [D]);
OpenDialog.InitialDir := D;
{$IFDEF HasShellCtrls}
FShellChangeNotifier.Root := D;
{$ELSE}
UpdateFileList;
{$ENDIF HasShellCtrls}
end;
end;
procedure TStretchDemoForm.AddToFileList(const Directory: string; const FileInfo: TSearchRec);
begin
with FileListView.Items.Add do
begin
Caption := Directory + FileInfo.Name;
end;
end;
procedure TStretchDemoForm.FileSearchTerminated(const ID: TFileSearchTaskID; const Aborted: Boolean);
begin
with FileListView do
Selected := FindCaption(0, FileName, False, True, False);
StatusBar.Panels[0].Text := Format('%d files', [FileListView.Items.Count]);
UpdateNavButtons;
end;
procedure TStretchDemoForm.UpdateFileList;
begin
FileListView.Items.Clear;
with FileSearch do
begin
FileMask := GraphicFileMask(TGraphic);
RootDirectory := FDir;
OnTerminateTask := FileSearchTerminated;
ForEach(AddToFileList);
end;
end;
procedure TStretchDemoForm.LoadFile(const AFileName: string);
begin
if not IsGraphicFile(AFileName) then
Exit;
FileName := AFileName;
OriginalImage.Picture.LoadFromFile(FileName);
if not ChangeDirectory then
UpdateNavButtons;
UpdateCaption;
with FileListView do
Selected := FindCaption(0, FileName, False, True, False);
StretchedImage.Picture.Graphic := nil;
InvalidateStretched;
if PageControl.ActivePage = FilesPage then
begin
{$IFDEF VCL}
if OriginalImage.Picture.Graphic is TMetaFile then
PageControl.ActivePage := OriginalPage
else
{$ENDIF VCL}
PageControl.ActivePage := FLastImagePage;
FocusControl(PageControl);
end;
end;
procedure TStretchDemoForm.OpenFile(Sender: TObject);
begin
if OpenDialog.Execute then
LoadFile(OpenDialog.FileName);
end;
procedure TStretchDemoForm.SelectFilter(Sender: TObject);
begin
with Sender as TMenuItem do
begin
Checked := True;
FResamplingFilter := TResamplingFilter(Tag);
InvalidateStretched;
end;
end;
procedure TStretchDemoForm.DoStretch;
var
W, H: Integer;
T: LongWord;
begin
with OriginalImage.Picture do
if (Graphic = nil) {$IFDEF VCL} or (Graphic is TMetafile) {$ENDIF} then
Exit;
W := StretchedPage.Width-2;
H := StretchedPage.Height-2;
if FPreserveAspectRatio then
with OriginalImage.Picture.Graphic do
begin
if W * Height > H * Width then
W := H * Width div Height
else
H := W * Height div Width;
end;
if (FWidth <> W) or (FHeight <> H) then
begin
T := GetTickCount;
StretchedImage.Picture.Graphic := nil;
JclGraphics.Stretch(W, H, FResamplingFilter, 0, OriginalImage.Picture.Graphic,
StretchedImage.Picture.Bitmap);
with OriginalImage.Picture do
StatusBar.Panels[0].Text := Format('Original: %d x %d', [Width, Height]);
with StretchedImage.Picture do
StatusBar.Panels[1].Text := Format('Resized: %d x %d', [Width, Height]);
FWidth := W;
FHeight := H;
FStretchTime := GetTickCount - T;
with StretchedImage.Picture do
StatusBar.Panels[2].Text := Format('Resize time: %d msec', [FStretchTime]);
end;
end;
procedure TStretchDemoForm.PreserveAspectRatio1Click(Sender: TObject);
begin
with Sender as TMenuItem do
begin
Checked := not Checked;
FPreserveAspectRatio := Checked;
InvalidateStretched;
end;
end;
procedure TStretchDemoForm.LoadSelected;
begin
with FileListView do
if Selected <> nil then
LoadFile(Selected.Caption);
end;
procedure TStretchDemoForm.PrevFile(Sender: TObject);
begin
if FileListIndex > 0 then
FileListIndex := FileListIndex - 1;
LoadSelected;
end;
procedure TStretchDemoForm.NextFile(Sender: TObject);
begin
if FileListIndex < FileListView.Items.Count - 1 then
FileListIndex := FileListIndex + 1;
LoadSelected;
end;
procedure TStretchDemoForm.UpdateCaption;
begin
if FileName <> '' then
Caption := Format('JCL Picture Viewer - %s', [FileName]);
end;
procedure TStretchDemoForm.UpdateNavButtons;
begin
PrevItem.Enabled := FileListIndex > 0;
NextItem.Enabled := FileListIndex < FileListView.Items.Count - 1;
PrevItem.Enabled := FileListIndex > 0;
NextItem.Enabled := FileListIndex < FileListView.Items.Count - 1;
end;
procedure TStretchDemoForm.FileListViewClick(Sender: TObject);
begin
LoadSelected;
end;
procedure TStretchDemoForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
{$IFDEF VCL}
const
Key_Prior = VK_PRIOR;
Key_Next = VK_NEXT;
{$ENDIF VCL}
begin
case Key of
Key_Prior:
begin
PrevFile(Self);
Key := 0;
end;
Key_Next:
begin
NextFile(Self);
Key := 0;
end;
end;
end;
procedure TStretchDemoForm.StretchedPageShow(Sender: TObject);
begin
UpdateStretched;
end;
procedure TStretchDemoForm.UpdateStretched;
begin
if StretchedPage.Visible then
DoStretch;
end;
procedure TStretchDemoForm.StretchedPageResize(Sender: TObject);
begin
UpdateStretched;
end;
procedure TStretchDemoForm.InvalidateStretched;
begin
FWidth := 0;
FHeight := 0;
UpdateStretched;
end;
{$IFDEF VCL}
procedure TStretchDemoForm.WMDropFiles(var Msg: TWMDropFiles);
begin
ProcessWMDropFiles(Msg, LoadFile);
end;
{$ENDIF VCL}
procedure TStretchDemoForm.PageControlChanging(Sender: TObject;
var AllowChange: Boolean);
begin
if PageControl.ActivePage <> FilesPage then
FLastImagePage := PageControl.ActivePage;
end;
{$IFDEF HasShellCtrls}
procedure TStretchDemoForm.ShellChange;
begin
UpdateFileList;
end;
{$ENDIF HasShellCtrls}
function TStretchDemoForm.GetFileListIndex: Integer;
begin
Result := -1;
if FileListView.Selected <> nil then
Result := FileListView.Selected.Index;
end;
procedure TStretchDemoForm.SetFileListIndex(const Value: Integer);
begin
if Value < 0 then
begin
if FileListView.Selected <> nil then
begin
FileListView.Selected.Selected := False;
end;
end
else
FileListView.Items[Value].Selected := True;
end;
procedure TStretchDemoForm.FileListViewKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if Key = VK_RETURN then
LoadSelected;
end;
procedure TStretchDemoForm.SetFileName(const Value: string);
begin
FFileName := PathGetLongName(Value);
end;
end.

View File

@ -0,0 +1,3 @@
[Directories]
OutputDir=..\..\..\bin

View File

@ -0,0 +1,16 @@
program StretchGraphicExample;
{$I jcl.inc}
uses
Forms,
StretchGraphicDemoMain in 'StretchGraphicDemoMain.pas' {StretchDemoForm};
{$R *.res}
{$R ..\..\..\source\windows\JclCommCtrlAsInvoker.res}
begin
Application.Initialize;
Application.CreateForm(TStretchDemoForm, StretchDemoForm);
Application.Run;
end.

Some files were not shown because too many files have changed in this diff Show More