summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Pelz <pelzflorian@pelzflorian.de>2016-06-03 20:42:29 +0200
committerFlorian Pelz <pelzflorian@pelzflorian.de>2016-06-03 20:42:29 +0200
commit06aeceb9fdba198c2f6030620324bc536b53b99a (patch)
treea7467c8897861c6d2dac520e9190fefbef277f78
Initial commit
-rw-r--r--CC-BY-SA.txt429
-rw-r--r--CC0.txt121
-rw-r--r--README9
-rw-r--r--bin/copyshop/ABOUT-NLS1379
-rw-r--r--bin/copyshop/AUTHORS0
-rw-r--r--bin/copyshop/COPYING121
-rw-r--r--bin/copyshop/ChangeLog0
-rw-r--r--bin/copyshop/Makefile.am23
-rw-r--r--bin/copyshop/NEWS0
-rw-r--r--bin/copyshop/README0
-rwxr-xr-xbin/copyshop/autogen.sh3
-rwxr-xr-xbin/copyshop/config.rpath684
-rw-r--r--bin/copyshop/configure.ac29
-rw-r--r--bin/copyshop/m4/ChangeLog11
-rw-r--r--bin/copyshop/m4/gettext.m4405
-rw-r--r--bin/copyshop/m4/iconv.m4271
-rw-r--r--bin/copyshop/m4/lib-ld.m4119
-rw-r--r--bin/copyshop/m4/lib-link.m4777
-rw-r--r--bin/copyshop/m4/lib-prefix.m4224
-rw-r--r--bin/copyshop/m4/nls.m432
-rw-r--r--bin/copyshop/m4/po.m4453
-rw-r--r--bin/copyshop/m4/progtest.m491
-rw-r--r--bin/copyshop/po/ChangeLog12
-rw-r--r--bin/copyshop/po/LINGUAS2
-rw-r--r--bin/copyshop/po/Makefile.in.in483
-rw-r--r--bin/copyshop/po/Makevars78
-rw-r--r--bin/copyshop/po/POTFILES.in7
-rw-r--r--bin/copyshop/po/Rules-quot58
-rw-r--r--bin/copyshop/po/boldquot.sed10
-rw-r--r--bin/copyshop/po/de.po63
-rw-r--r--bin/copyshop/po/en.po63
-rw-r--r--bin/copyshop/po/en@boldquot.header25
-rw-r--r--bin/copyshop/po/en@quot.header22
-rw-r--r--bin/copyshop/po/insert-header.sin23
-rw-r--r--bin/copyshop/po/quot.sed6
-rw-r--r--bin/copyshop/po/remove-potcdate.sin19
-rw-r--r--bin/copyshop/src/cshopapplication.c141
-rw-r--r--bin/copyshop/src/cshopapplication.h36
-rw-r--r--bin/copyshop/src/cshopraw.c184
-rw-r--r--bin/copyshop/src/cshopraw.h35
-rw-r--r--bin/copyshop/src/cshopwindow.c76
-rw-r--r--bin/copyshop/src/cshopwindow.h35
-rw-r--r--bin/copyshop/src/main.c41
-rw-r--r--bin/copyshop/src/ui/menu.ui23
-rw-r--r--bin/copyshop/src/ui/toolbar.ui118
-rw-r--r--bin/hangman/hangman.c479
-rw-r--r--bin/text/text-view-utils.c115
-rw-r--r--bin/text/text-view-utils.h32
-rw-r--r--bin/text/text.c126
-rw-r--r--bin/text/text.ui54
-rw-r--r--bin/text2/menu.ui29
-rw-r--r--bin/text2/text-view-utils.c115
-rw-r--r--bin/text2/text-view-utils.h32
-rw-r--r--bin/text2/text.c246
-rw-r--r--bin/text2/text.ui54
-rw-r--r--bin/text3/menu.ui29
-rw-r--r--bin/text3/text-view-utils.c115
-rw-r--r--bin/text3/text-view-utils.h32
-rw-r--r--bin/text3/text.c271
-rw-r--r--bin/text3/text.ui117
-rw-r--r--tex/activities-overview.pngbin0 -> 341354 bytes
-rw-r--r--tex/anmelden-qr.pngbin0 -> 533 bytes
-rw-r--r--tex/beamercolorthemeguipro.sty34
-rw-r--r--tex/c-language.pngbin0 -> 28525 bytes
-rw-r--r--tex/copyleft.pngbin0 -> 17258 bytes
-rw-r--r--tex/copyshop-de.pngbin0 -> 12441 bytes
-rw-r--r--tex/copyshop.pngbin0 -> 14067 bytes
-rw-r--r--tex/einleitung.txt7
-rw-r--r--tex/gtk-logo.pngbin0 -> 16905 bytes
-rw-r--r--tex/handout-01-install.tex113
-rw-r--r--tex/handout-02-hello-gtk.tex125
-rw-r--r--tex/handout-03-glade.tex83
-rw-r--r--tex/handout-04-text-editor.tex83
-rw-r--r--tex/handout-05-hangman.tex51
-rw-r--r--tex/handout-06-autotools.tex139
-rw-r--r--tex/handout-07-translations.tex125
-rw-r--r--tex/hangman-gtk.pngbin0 -> 8607 bytes
-rw-r--r--tex/hangman-term.pngbin0 -> 21958 bytes
-rw-r--r--tex/heckert_gnu.transparent.pngbin0 -> 40820 bytes
-rw-r--r--tex/hello.pngbin0 -> 5786 bytes
-rw-r--r--tex/poster-portrait.tex80
-rw-r--r--tex/poster.tex132
-rw-r--r--tex/slides-01.tex443
-rw-r--r--tex/slides-02.tex342
-rw-r--r--tex/text-editor.pngbin0 -> 8237 bytes
-rw-r--r--web/handout-01-install.pdfbin0 -> 23755 bytes
-rw-r--r--web/handout-02-hello-gtk.pdfbin0 -> 23051 bytes
-rw-r--r--web/handout-03-glade.pdfbin0 -> 19128 bytes
-rw-r--r--web/handout-04-text-editor.pdfbin0 -> 26872 bytes
-rw-r--r--web/handout-05-hangman.pdfbin0 -> 35175 bytes
-rw-r--r--web/handout-06-autotools.pdfbin0 -> 36322 bytes
-rw-r--r--web/handout-07-translations.pdfbin0 -> 46248 bytes
-rw-r--r--web/index.css30
-rw-r--r--web/index.htm61
-rw-r--r--web/slides-01.pdfbin0 -> 487764 bytes
-rw-r--r--web/slides-02.pdfbin0 -> 49078 bytes
-rw-r--r--web/text-view-utils.tar.gzbin0 -> 1311 bytes
97 files changed, 10435 insertions, 0 deletions
diff --git a/CC-BY-SA.txt b/CC-BY-SA.txt
new file mode 100644
index 0000000..c076a74
--- /dev/null
+++ b/CC-BY-SA.txt
@@ -0,0 +1,429 @@
+Attribution-ShareAlike 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+ Considerations for licensors: Our public licenses are
+ intended for use by those authorized to give the public
+ permission to use material in ways otherwise restricted by
+ copyright and certain other rights. Our licenses are
+ irrevocable. Licensors should read and understand the terms
+ and conditions of the license they choose before applying it.
+ Licensors should also secure all rights necessary before
+ applying our licenses so that the public can reuse the
+ material as expected. Licensors should clearly mark any
+ material not subject to the license. This includes other CC-
+ licensed material, or material used under an exception or
+ limitation to copyright. More considerations for licensors:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ Considerations for the public: By using one of our public
+ licenses, a licensor grants the public permission to use the
+ licensed material under specified terms and conditions. If
+ the licensor's permission is not necessary for any reason--for
+ example, because of any applicable exception or limitation to
+ copyright--then that use is not regulated by the license. Our
+ licenses grant only permissions under copyright and certain
+ other rights that a licensor has authority to grant. Use of
+ the licensed material may still be restricted for other
+ reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests,
+ such as asking that all changes be marked or described.
+ Although not required by our licenses, you are encouraged to
+ respect those requests where reasonable. More_considerations
+ for the public:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution-ShareAlike 4.0 International Public
+License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution-ShareAlike 4.0 International Public License ("Public
+License"). To the extent this Public License may be interpreted as a
+contract, You are granted the Licensed Rights in consideration of Your
+acceptance of these terms and conditions, and the Licensor grants You
+such rights in consideration of benefits the Licensor receives from
+making the Licensed Material available under these terms and
+conditions.
+
+
+Section 1 -- Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material
+ and in which the Licensed Material is translated, altered,
+ arranged, transformed, or otherwise modified in a manner requiring
+ permission under the Copyright and Similar Rights held by the
+ Licensor. For purposes of this Public License, where the Licensed
+ Material is a musical work, performance, or sound recording,
+ Adapted Material is always produced where the Licensed Material is
+ synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+
+ c. BY-SA Compatible License means a license listed at
+ creativecommons.org/compatiblelicenses, approved by Creative
+ Commons as essentially the equivalent of this Public License.
+
+ d. Copyright and Similar Rights means copyright and/or similar rights
+ closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or
+ categorized. For purposes of this Public License, the rights
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
+ Rights.
+
+ e. Effective Technological Measures means those measures that, in the
+ absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright
+ Treaty adopted on December 20, 1996, and/or similar international
+ agreements.
+
+ f. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+
+ g. License Elements means the license attributes listed in the name
+ of a Creative Commons Public License. The License Elements of this
+ Public License are Attribution and ShareAlike.
+
+ h. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public
+ License.
+
+ i. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+
+ j. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+
+ k. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such
+ as reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the
+ public may access the material from a place and at a time
+ individually chosen by them.
+
+ l. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially
+ equivalent rights anywhere in the world.
+
+ m. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License,
+ the Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to
+ exercise the Licensed Rights in the Licensed Material to:
+
+ a. reproduce and Share the Licensed Material, in whole or
+ in part; and
+
+ b. produce, reproduce, and Share Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public
+ License does not apply, and You do not need to comply with
+ its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section
+ 6(a).
+
+ 4. Media and formats; technical modifications allowed. The
+ Licensor authorizes You to exercise the Licensed Rights in
+ all media and formats whether now known or hereafter created,
+ and to make technical modifications necessary to do so. The
+ Licensor waives and/or agrees not to assert any right or
+ authority to forbid You from making technical modifications
+ necessary to exercise the Licensed Rights, including
+ technical modifications necessary to circumvent Effective
+ Technological Measures. For purposes of this Public License,
+ simply making modifications authorized by this Section 2(a)
+ (4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ a. Offer from the Licensor -- Licensed Material. Every
+ recipient of the Licensed Material automatically
+ receives an offer from the Licensor to exercise the
+ Licensed Rights under the terms and conditions of this
+ Public License.
+
+ b. Additional offer from the Licensor -- Adapted Material.
+ Every recipient of Adapted Material from You
+ automatically receives an offer from the Licensor to
+ exercise the Licensed Rights in the Adapted Material
+ under the conditions of the Adapter's License You apply.
+
+ c. No downstream restrictions. You may not offer or impose
+ any additional or different terms or conditions on, or
+ apply any Effective Technological Measures to, the
+ Licensed Material if doing so restricts exercise of the
+ Licensed Rights by any recipient of the Licensed
+ Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or
+ may be construed as permission to assert or imply that You
+ are, or that Your use of the Licensed Material is, connected
+ with, or sponsored, endorsed, or granted official status by,
+ the Licensor or others designated to receive attribution as
+ provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not
+ licensed under this Public License, nor are publicity,
+ privacy, and/or other similar personality rights; however, to
+ the extent possible, the Licensor waives and/or agrees not to
+ assert any such rights held by the Licensor to the limited
+ extent necessary to allow You to exercise the Licensed
+ Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this
+ Public License.
+
+ 3. To the extent possible, the Licensor waives any right to
+ collect royalties from You for the exercise of the Licensed
+ Rights, whether directly or through a collecting society
+ under any voluntary or waivable statutory or compulsory
+ licensing scheme. In all other cases the Licensor expressly
+ reserves any right to collect such royalties.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified
+ form), You must:
+
+ a. retain the following if it is supplied by the Licensor
+ with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed
+ Material and any others designated to receive
+ attribution, in any reasonable manner requested by
+ the Licensor (including by pseudonym if
+ designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of
+ warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the
+ extent reasonably practicable;
+
+ b. indicate if You modified the Licensed Material and
+ retain an indication of any previous modifications; and
+
+ c. indicate the Licensed Material is licensed under this
+ Public License, and include the text of, or the URI or
+ hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in
+ which You Share the Licensed Material. For example, it may be
+ reasonable to satisfy the conditions by providing a URI or
+ hyperlink to a resource that includes the required
+ information.
+
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent
+ reasonably practicable.
+
+ b. ShareAlike.
+
+ In addition to the conditions in Section 3(a), if You Share
+ Adapted Material You produce, the following conditions also apply.
+
+ 1. The Adapter's License You apply must be a Creative Commons
+ license with the same License Elements, this version or
+ later, or a BY-SA Compatible License.
+
+ 2. You must include the text of, or the URI or hyperlink to, the
+ Adapter's License You apply. You may satisfy this condition
+ in any reasonable manner based on the medium, means, and
+ context in which You Share Adapted Material.
+
+ 3. You may not offer or impose any additional or different terms
+ or conditions on, or apply any Effective Technological
+ Measures to, Adapted Material that restrict exercise of the
+ rights granted under the Adapter's License You apply.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial
+ portion of the contents of the database;
+
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material,
+
+ including for purposes of Section 3(b); and
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent
+ possible, most closely approximates an absolute disclaimer and
+ waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under
+ Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided
+ it is cured within 30 days of Your discovery of the
+ violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations
+ of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+ License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is
+ deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+
+
+=======================================================================
+
+Creative Commons is not a party to its public
+licenses. Notwithstanding, Creative Commons may elect to apply one of
+its public licenses to material it publishes and in those instances
+will be considered the “Licensor.” The text of the Creative Commons
+public licenses is dedicated to the public domain under the CC0 Public
+Domain Dedication. Except for the limited purpose of indicating that
+material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the
+public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
+
+
diff --git a/CC0.txt b/CC0.txt
new file mode 100644
index 0000000..0e259d4
--- /dev/null
+++ b/CC0.txt
@@ -0,0 +1,121 @@
+Creative Commons Legal Code
+
+CC0 1.0 Universal
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+ PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+ THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+ HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display,
+ communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+ likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+ v. rights protecting the extraction, dissemination, use and reuse of data
+ in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation
+ thereof, including any amended or successor version of such
+ directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+ world based on applicable law or treaty, and any national
+ implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+ warranties of any kind concerning the Work, express, implied,
+ statutory or otherwise, including without limitation warranties of
+ title, merchantability, fitness for a particular purpose, non
+ infringement, or the absence of latent or other defects, accuracy, or
+ the present or absence of errors, whether or not discoverable, all to
+ the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without
+ limitation any person's Copyright and Related Rights in the Work.
+ Further, Affirmer disclaims responsibility for obtaining any necessary
+ consents, permissions or other rights required for any use of the
+ Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to
+ this CC0 or use of the Work.
diff --git a/README b/README
new file mode 100644
index 0000000..df08995
--- /dev/null
+++ b/README
@@ -0,0 +1,9 @@
+Allen Programmcode und alle Dateien im Ordner bin, die als Teil dieses
+Repositories veröffentlicht werden, stelle ich unter der CC0 Public
+Domain Dedication der Öffentlichkeit zur Verfügung gemäß dem Inhalt
+der Datei CC0.txt in diesem Repository.
+
+Übrige Inhalte, die nicht von anderen Quellen bezogen wurden, welche
+in der sie verwendenden Datei angegeben werden, mache ich unter der
+CC-BY-SA-4.0-Lizenz verfügbar. Eine Kopie der Lizenz findet sich in
+der Datei CC-BY-SA.txt.
diff --git a/bin/copyshop/ABOUT-NLS b/bin/copyshop/ABOUT-NLS
new file mode 100644
index 0000000..1551426
--- /dev/null
+++ b/bin/copyshop/ABOUT-NLS
@@ -0,0 +1,1379 @@
+1 Notes on the Free Translation Project
+***************************************
+
+Free software is going international! The Free Translation Project is a
+way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages. A few packages already provide translations for their
+messages.
+
+ If you found this 'ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU 'gettext' internally,
+itself available at your nearest GNU archive site. But you do _not_
+need to install GNU 'gettext' prior to configuring, installing or using
+this package with messages translated.
+
+ Installers will find here some useful hints. These notes also
+explain how users should proceed for getting the programs to use the
+available translations. They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+1.1 INSTALL Matters
+===================
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language. Most such
+packages use GNU 'gettext'. Other packages have their own ways to
+internationalization, predating GNU 'gettext'.
+
+ By default, this package will be installed to allow translation of
+messages. It will automatically detect whether the system already
+provides the GNU 'gettext' functions. Installers may use special
+options at configuration time for changing the default behaviour. The
+command:
+
+ ./configure --disable-nls
+
+will _totally_ disable translation of messages.
+
+ When you already have GNU 'gettext' installed on your system and run
+configure without an option for your new package, 'configure' will
+probably detect the previously built and installed 'libintl' library and
+will decide to use it. If not, you may have to to use the
+'--with-libintl-prefix' option to tell 'configure' where to look for it.
+
+ Internationalized packages usually have many 'po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language. Unless
+translations have been forbidden at 'configure' time by using the
+'--disable-nls' switch, all available translations are installed
+together with the package. However, the environment variable 'LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+'LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+1.2 Using This Package
+======================
+
+As a user, if your language has been installed for this package, you
+only have to set the 'LANG' environment variable to the appropriate
+'LL_CC' combination. If you happen to have the 'LC_ALL' or some other
+'LC_xxx' environment variables set, you should unset them before setting
+'LANG', otherwise the setting of 'LANG' will not have the desired
+effect. Here 'LL' is an ISO 639 two-letter language code, and 'CC' is
+an ISO 3166 two-letter country code. For example, let's suppose that
+you speak German and live in Germany. At the shell prompt, merely
+execute 'setenv LANG de_DE' (in 'csh'), 'export LANG; LANG=de_DE' (in
+'sh') or 'export LANG=de_DE' (in 'bash'). This can be done from your
+'.login' or '.profile' file, once and for all.
+
+ You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries. For
+example, 'de_AT' is used for Austria, and 'pt_BR' for Brazil. The
+country code serves to distinguish the dialects.
+
+ The locale naming convention of 'LL_CC', with 'LL' denoting the
+language and 'CC' denoting the country, is the one use on systems based
+on GNU libc. On other systems, some variations of this scheme are used,
+such as 'LL' or 'LL_CC.ENCODING'. You can get the list of locales
+supported by your system for your language by running the command
+'locale -a | grep '^LL''.
+
+ Not all programs have translations for all languages. By default, an
+English message is shown in place of a nonexistent translation. If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+'LANGUAGE'. GNU 'gettext' gives preference to 'LANGUAGE' over 'LANG'
+for the purpose of message handling, but you still need to have 'LANG'
+set to the primary language; this is required by other parts of the
+system libraries. For example, some Swedish users who would rather read
+translations in German than English for when Swedish is not available,
+set 'LANGUAGE' to 'sv:de' while leaving 'LANG' to 'sv_SE'.
+
+ Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from 'no' to 'nb' recently (in 2003). During the
+transition period, while some message catalogs for this language are
+installed under 'nb' and some older ones under 'no', it's recommended
+for Norwegian users to set 'LANGUAGE' to 'nb:no' so that both newer and
+older translations are used.
+
+ In the 'LANGUAGE' environment variable, but not in the 'LANG'
+environment variable, 'LL_CC' combinations can be abbreviated as 'LL' to
+denote the language's main dialect. For example, 'de' is equivalent to
+'de_DE' (German as spoken in Germany), and 'pt' to 'pt_PT' (Portuguese
+as spoken in Portugal) in this context.
+
+1.3 Translating Teams
+=====================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list. The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+'http://translationproject.org/', in the "Teams" area.
+
+ If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+'-request' appended. For example, speakers of Swedish can send a
+message to 'sv-request@li.org', having this message body:
+
+ subscribe
+
+ Keep in mind that team members are expected to participate _actively_
+in translations, or at solving translational difficulties, rather than
+merely lurking around. If your team does not exist yet and you want to
+start one, or if you are unsure about what to do or how to get started,
+please write to 'coordinator@translationproject.org' to reach the
+coordinator for all translator teams.
+
+ The English team is special. It works at improving and uniformizing
+the terminology in use. Proven linguistic skills are praised more than
+programming skills, here.
+
+1.4 Available Packages
+======================
+
+Languages are not equally supported in all packages. The following
+matrix shows the current state of internationalization, as of Jun 2014.
+The matrix shows, in regard of each package, for which languages PO
+files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+ Ready PO files af am an ar as ast az be bg bn bn_IN bs ca crh cs
+ +---------------------------------------------------+
+ a2ps | [] [] [] |
+ aegis | |
+ anubis | |
+ aspell | [] [] [] |
+ bash | [] [] [] |
+ bfd | |
+ binutils | [] |
+ bison | |
+ bison-runtime | [] |
+ buzztrax | [] |
+ ccd2cue | |
+ ccide | |
+ cflow | |
+ clisp | |
+ coreutils | [] [] |
+ cpio | |
+ cppi | |
+ cpplib | [] |
+ cryptsetup | [] |
+ datamash | |
+ denemo | [] [] |
+ dfarc | [] |
+ dialog | [] [] [] |
+ dico | |
+ diffutils | [] |
+ dink | [] |
+ direvent | |
+ doodle | [] |
+ dos2unix | |
+ dos2unix-man | |
+ e2fsprogs | [] [] |
+ enscript | [] |
+ exif | [] |
+ fetchmail | [] [] |
+ findutils | [] |
+ flex | [] |
+ freedink | [] [] |
+ fusionforge | |
+ gas | |
+ gawk | [] |
+ gcal | [] |
+ gcc | |
+ gdbm | |
+ gettext-examples | [] [] [] [] [] |
+ gettext-runtime | [] [] [] |
+ gettext-tools | [] [] |
+ gjay | |
+ glunarclock | [] [] [] |
+ gnubiff | [] |
+ gnubik | [] |
+ gnucash | () () [] |
+ gnuchess | |
+ gnulib | [] |
+ gnunet | |
+ gnunet-gtk | |
+ gold | |
+ gphoto2 | [] |
+ gprof | [] |
+ gramadoir | |
+ grep | [] [] [] |
+ grub | [] |
+ gsasl | |
+ gss | |
+ gst-plugins-bad | [] |
+ gst-plugins-base | [] [] [] |
+ gst-plugins-good | [] [] [] |
+ gst-plugins-ugly | [] [] [] |
+ gstreamer | [] [] [] [] |
+ gtick | [] |
+ gtkam | [] [] |
+ gtkspell | [] [] [] [] [] |
+ guix | |
+ guix-packages | |
+ gutenprint | [] |
+ hello | [] |
+ help2man | |
+ help2man-texi | |
+ hylafax | |
+ idutils | |
+ iso_15924 | [] |
+ iso_3166 | [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | [] |
+ iso_639 | [] [] [] [] [] [] [] [] [] |
+ iso_639_3 | [] [] |
+ iso_639_5 | |
+ jwhois | |
+ kbd | [] |
+ klavaro | [] [] [] [] [] |
+ latrine | |
+ ld | [] |
+ leafpad | [] [] [] [] |
+ libc | [] [] [] |
+ libexif | () |
+ libextractor | |
+ libgnutls | [] |
+ libgphoto2 | [] |
+ libgphoto2_port | [] |
+ libgsasl | |
+ libiconv | [] [] |
+ libidn | [] |
+ liferea | [] [] [] [] |
+ lilypond | [] [] |
+ lordsawar | [] |
+ lprng | |
+ lynx | [] [] |
+ m4 | [] |
+ mailfromd | |
+ mailutils | |
+ make | [] |
+ man-db | [] [] |
+ man-db-manpages | |
+ midi-instruments | [] [] [] |
+ minicom | [] |
+ mkisofs | [] |
+ myserver | [] |
+ nano | [] [] [] |
+ opcodes | |
+ parted | [] |
+ pies | |
+ popt | [] |
+ procps-ng | |
+ procps-ng-man | |
+ psmisc | [] |
+ pspp | [] |
+ pushover | [] |
+ pwdutils | |
+ pyspread | |
+ radius | [] |
+ recode | [] [] [] |
+ recutils | |
+ rpm | |
+ rush | |
+ sarg | |
+ sed | [] [] [] |
+ sharutils | [] |
+ shishi | |
+ skribilo | |
+ solfege | [] |
+ solfege-manual | |
+ spotmachine | |
+ sudo | [] [] |
+ sudoers | [] [] |
+ sysstat | [] |
+ tar | [] [] [] |
+ texinfo | [] [] |
+ texinfo_document | [] |
+ tigervnc | [] |
+ tin | |
+ tin-man | |
+ tracgoogleappsa... | |
+ trader | |
+ util-linux | [] |
+ ve | |
+ vice | |
+ vmm | |
+ vorbis-tools | [] |
+ wastesedge | |
+ wcd | |
+ wcd-man | |
+ wdiff | [] [] |
+ wget | [] |
+ wyslij-po | |
+ xboard | |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ +---------------------------------------------------+
+ af am an ar as ast az be bg bn bn_IN bs ca crh cs
+ 4 0 2 5 3 11 0 8 23 3 3 1 54 4 73
+
+ da de el en en_GB en_ZA eo es et eu fa fi fr
+ +--------------------------------------------------+
+ a2ps | [] [] [] [] [] [] [] [] [] |
+ aegis | [] [] [] [] |
+ anubis | [] [] [] [] [] |
+ aspell | [] [] [] [] [] [] [] |
+ bash | [] [] [] |
+ bfd | [] [] [] [] |
+ binutils | [] [] [] |
+ bison | [] [] [] [] [] [] [] [] |
+ bison-runtime | [] [] [] [] [] [] [] [] |
+ buzztrax | [] [] [] [] |
+ ccd2cue | [] [] [] |
+ ccide | [] [] [] [] [] [] |
+ cflow | [] [] [] [] [] |
+ clisp | [] [] [] [] [] |
+ coreutils | [] [] [] [] [] |
+ cpio | [] [] [] [] [] |
+ cppi | [] [] [] [] [] |
+ cpplib | [] [] [] [] [] [] |
+ cryptsetup | [] [] [] [] [] |
+ datamash | [] [] [] [] |
+ denemo | [] |
+ dfarc | [] [] [] [] [] [] |
+ dialog | [] [] [] [] [] [] [] [] [] |
+ dico | [] [] [] [] |
+ diffutils | [] [] [] [] [] [] |
+ dink | [] [] [] [] [] [] |
+ direvent | [] [] [] [] |
+ doodle | [] [] [] [] |
+ dos2unix | [] [] [] [] [] |
+ dos2unix-man | [] [] [] |
+ e2fsprogs | [] [] [] [] [] |
+ enscript | [] [] [] [] [] [] |
+ exif | [] [] [] [] [] [] |
+ fetchmail | [] () [] [] [] [] [] |
+ findutils | [] [] [] [] [] [] [] [] |
+ flex | [] [] [] [] [] [] |
+ freedink | [] [] [] [] [] [] [] [] |
+ fusionforge | [] [] [] |
+ gas | [] [] [] |
+ gawk | [] [] [] [] [] |
+ gcal | [] [] [] [] |
+ gcc | [] [] |
+ gdbm | [] [] [] [] [] |
+ gettext-examples | [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] [] |
+ gjay | [] [] [] [] |
+ glunarclock | [] [] [] [] [] |
+ gnubiff | () [] [] () |
+ gnubik | [] [] [] [] [] |
+ gnucash | [] () () () () () () |
+ gnuchess | [] [] [] [] |
+ gnulib | [] [] [] [] [] [] [] |
+ gnunet | [] |
+ gnunet-gtk | [] |
+ gold | [] [] [] |
+ gphoto2 | [] () [] [] |
+ gprof | [] [] [] [] [] [] |
+ gramadoir | [] [] [] [] [] |
+ grep | [] [] [] [] [] [] [] |
+ grub | [] [] [] [] [] |
+ gsasl | [] [] [] [] [] |
+ gss | [] [] [] [] [] |
+ gst-plugins-bad | [] [] |
+ gst-plugins-base | [] [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] [] [] |
+ gtick | [] () [] [] [] |
+ gtkam | [] () [] [] [] [] |
+ gtkspell | [] [] [] [] [] [] [] [] |
+ guix | [] [] |
+ guix-packages | |
+ gutenprint | [] [] [] [] |
+ hello | [] [] [] [] [] [] [] [] |
+ help2man | [] [] [] [] [] [] [] |
+ help2man-texi | [] [] [] |
+ hylafax | [] [] |
+ idutils | [] [] [] [] [] |
+ iso_15924 | [] () [] [] () [] () |
+ iso_3166 | [] () [] [] [] [] () [] () |
+ iso_3166_2 | [] () () () |
+ iso_4217 | [] () [] [] [] () [] () |
+ iso_639 | [] () [] [] () [] () |
+ iso_639_3 | () () () |
+ iso_639_5 | () () () |
+ jwhois | [] [] [] [] [] |
+ kbd | [] [] [] [] [] [] |
+ klavaro | [] [] [] [] [] [] [] |
+ latrine | [] () [] [] |
+ ld | [] [] [] [] |
+ leafpad | [] [] [] [] [] [] [] [] |
+ libc | [] [] [] [] [] |
+ libexif | [] [] () [] [] |
+ libextractor | [] |
+ libgnutls | [] [] [] [] |
+ libgphoto2 | [] () [] |
+ libgphoto2_port | [] () [] [] [] [] |
+ libgsasl | [] [] [] [] [] |
+ libiconv | [] [] [] [] [] [] [] |
+ libidn | [] [] [] [] [] |
+ liferea | [] () [] [] [] [] [] |
+ lilypond | [] [] [] [] [] [] |
+ lordsawar | [] [] |
+ lprng | |
+ lynx | [] [] [] [] [] [] |
+ m4 | [] [] [] [] [] [] |
+ mailfromd | [] |
+ mailutils | [] [] [] [] |
+ make | [] [] [] [] [] |
+ man-db | [] [] [] [] |
+ man-db-manpages | [] [] |
+ midi-instruments | [] [] [] [] [] [] [] [] [] |
+ minicom | [] [] [] [] [] |
+ mkisofs | [] [] [] |
+ myserver | [] [] [] [] |
+ nano | [] [] [] [] [] [] [] |
+ opcodes | [] [] [] [] [] |
+ parted | [] [] [] |
+ pies | [] |
+ popt | [] [] [] [] [] [] |
+ procps-ng | [] [] |
+ procps-ng-man | [] [] |
+ psmisc | [] [] [] [] [] [] [] |
+ pspp | [] [] [] |
+ pushover | () [] [] [] |
+ pwdutils | [] [] [] |
+ pyspread | [] [] [] |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] |
+ recutils | [] [] [] [] |
+ rpm | [] [] [] [] [] |
+ rush | [] [] [] |
+ sarg | [] [] |
+ sed | [] [] [] [] [] [] [] [] |
+ sharutils | [] [] [] [] |
+ shishi | [] [] [] |
+ skribilo | [] [] |
+ solfege | [] [] [] [] [] [] [] [] |
+ solfege-manual | [] [] [] [] [] |
+ spotmachine | [] [] [] [] |
+ sudo | [] [] [] [] [] [] |
+ sudoers | [] [] [] [] [] [] |
+ sysstat | [] [] [] [] [] [] |
+ tar | [] [] [] [] [] [] [] |
+ texinfo | [] [] [] [] [] |
+ texinfo_document | [] [] [] [] |
+ tigervnc | [] [] [] [] [] [] |
+ tin | [] [] [] [] |
+ tin-man | [] |
+ tracgoogleappsa... | [] [] [] [] [] |
+ trader | [] [] [] [] [] [] |
+ util-linux | [] [] [] [] |
+ ve | [] [] [] [] [] |
+ vice | () () () |
+ vmm | [] [] |
+ vorbis-tools | [] [] [] [] |
+ wastesedge | [] () |
+ wcd | [] [] [] [] |
+ wcd-man | [] |
+ wdiff | [] [] [] [] [] [] [] |
+ wget | [] [] [] [] [] [] |
+ wyslij-po | [] [] [] [] |
+ xboard | [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] [] [] [] |
+ +--------------------------------------------------+
+ da de el en en_GB en_ZA eo es et eu fa fi fr
+ 120 130 32 1 6 0 94 95 22 13 4 103 136
+
+ ga gd gl gu he hi hr hu hy ia id is it ja ka kk
+ +-------------------------------------------------+
+ a2ps | [] [] [] [] |
+ aegis | [] |
+ anubis | [] [] [] [] |
+ aspell | [] [] [] [] [] |
+ bash | [] [] [] |
+ bfd | [] [] |
+ binutils | [] [] [] |
+ bison | [] |
+ bison-runtime | [] [] [] [] [] [] [] [] |
+ buzztrax | |
+ ccd2cue | [] |
+ ccide | [] [] |
+ cflow | [] [] [] |
+ clisp | |
+ coreutils | [] [] [] |
+ cpio | [] [] [] [] [] [] |
+ cppi | [] [] [] [] [] |
+ cpplib | [] [] |
+ cryptsetup | [] |
+ datamash | |
+ denemo | [] |
+ dfarc | [] [] [] |
+ dialog | [] [] [] [] [] [] [] [] [] [] |
+ dico | |
+ diffutils | [] [] [] [] |
+ dink | [] |
+ direvent | [] |
+ doodle | [] [] |
+ dos2unix | [] [] |
+ dos2unix-man | |
+ e2fsprogs | [] |
+ enscript | [] [] [] |
+ exif | [] [] [] [] [] [] |
+ fetchmail | [] [] [] |
+ findutils | [] [] [] [] [] [] [] |
+ flex | [] |
+ freedink | [] [] [] [] |
+ fusionforge | |
+ gas | [] |
+ gawk | [] () [] |
+ gcal | |
+ gcc | |
+ gdbm | |
+ gettext-examples | [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] [] |
+ gettext-tools | [] [] [] |
+ gjay | [] |
+ glunarclock | [] [] [] [] [] [] |
+ gnubiff | [] [] () |
+ gnubik | [] [] [] |
+ gnucash | () () () () () [] |
+ gnuchess | |
+ gnulib | [] [] [] [] [] |
+ gnunet | |
+ gnunet-gtk | |
+ gold | [] [] |
+ gphoto2 | [] [] [] [] |
+ gprof | [] [] [] [] |
+ gramadoir | [] [] [] |
+ grep | [] [] [] [] [] [] [] |
+ grub | [] [] [] |
+ gsasl | [] [] [] [] [] |
+ gss | [] [] [] [] [] |
+ gst-plugins-bad | [] |
+ gst-plugins-base | [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] |
+ gtick | [] [] [] [] [] |
+ gtkam | [] [] [] [] [] |
+ gtkspell | [] [] [] [] [] [] [] [] [] [] |
+ guix | |
+ guix-packages | |
+ gutenprint | [] [] [] |
+ hello | [] [] [] [] [] |
+ help2man | [] [] [] |
+ help2man-texi | |
+ hylafax | [] |
+ idutils | [] [] |
+ iso_15924 | [] [] [] [] [] [] |
+ iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_2 | [] [] |
+ iso_4217 | [] [] [] [] [] [] |
+ iso_639 | [] [] [] [] [] [] [] [] [] |
+ iso_639_3 | [] [] |
+ iso_639_5 | |
+ jwhois | [] [] [] [] |
+ kbd | [] [] [] |
+ klavaro | [] [] [] [] [] |
+ latrine | [] |
+ ld | [] [] [] [] |
+ leafpad | [] [] [] [] [] [] [] () |
+ libc | [] [] [] [] [] |
+ libexif | [] |
+ libextractor | |
+ libgnutls | [] |
+ libgphoto2 | [] [] |
+ libgphoto2_port | [] [] |
+ libgsasl | [] [] [] [] |
+ libiconv | [] [] [] [] [] [] [] |
+ libidn | [] [] [] [] |
+ liferea | [] [] [] [] [] |
+ lilypond | [] |
+ lordsawar | |
+ lprng | [] |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailfromd | |
+ mailutils | |
+ make | [] [] [] [] |
+ man-db | [] [] |
+ man-db-manpages | [] [] |
+ midi-instruments | [] [] [] [] [] [] [] [] [] |
+ minicom | [] [] [] |
+ mkisofs | [] [] |
+ myserver | [] |
+ nano | [] [] [] [] [] |
+ opcodes | [] [] [] |
+ parted | [] [] [] [] |
+ pies | |
+ popt | [] [] [] [] [] [] [] [] [] [] |
+ procps-ng | |
+ procps-ng-man | |
+ psmisc | [] [] [] [] |
+ pspp | [] [] |
+ pushover | [] |
+ pwdutils | [] |
+ pyspread | |
+ radius | [] |
+ recode | [] [] [] [] [] [] [] |
+ recutils | |
+ rpm | [] |
+ rush | [] |
+ sarg | |
+ sed | [] [] [] [] [] [] [] |
+ sharutils | |
+ shishi | |
+ skribilo | [] |
+ solfege | [] [] |
+ solfege-manual | |
+ spotmachine | |
+ sudo | [] [] [] [] |
+ sudoers | [] [] [] |
+ sysstat | [] [] [] |
+ tar | [] [] [] [] [] [] |
+ texinfo | [] [] [] |
+ texinfo_document | [] [] |
+ tigervnc | |
+ tin | |
+ tin-man | |
+ tracgoogleappsa... | [] [] [] [] |
+ trader | [] [] |
+ util-linux | [] |
+ ve | [] |
+ vice | () () |
+ vmm | |
+ vorbis-tools | [] [] |
+ wastesedge | () |
+ wcd | |
+ wcd-man | |
+ wdiff | [] [] [] |
+ wget | [] [] [] |
+ wyslij-po | [] [] [] |
+ xboard | |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] [] |
+ +-------------------------------------------------+
+ ga gd gl gu he hi hr hu hy ia id is it ja ka kk
+ 35 2 47 4 8 2 53 69 2 6 80 11 86 58 0 3
+
+ kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl
+ +--------------------------------------------------+
+ a2ps | [] [] |
+ aegis | [] |
+ anubis | [] [] [] |
+ aspell | [] [] |
+ bash | [] [] |
+ bfd | |
+ binutils | |
+ bison | [] |
+ bison-runtime | [] [] [] [] [] [] |
+ buzztrax | |
+ ccd2cue | |
+ ccide | [] [] |
+ cflow | [] |
+ clisp | [] |
+ coreutils | [] [] |
+ cpio | [] |
+ cppi | |
+ cpplib | [] |
+ cryptsetup | [] |
+ datamash | [] [] |
+ denemo | |
+ dfarc | [] [] |
+ dialog | [] [] [] [] [] [] |
+ dico | |
+ diffutils | [] [] [] |
+ dink | [] |
+ direvent | [] |
+ doodle | [] |
+ dos2unix | [] [] |
+ dos2unix-man | [] |
+ e2fsprogs | [] |
+ enscript | [] |
+ exif | [] [] |
+ fetchmail | [] |
+ findutils | [] [] |
+ flex | [] |
+ freedink | [] [] |
+ fusionforge | |
+ gas | |
+ gawk | [] |
+ gcal | |
+ gcc | |
+ gdbm | |
+ gettext-examples | [] [] [] [] [] [] |
+ gettext-runtime | [] [] |
+ gettext-tools | [] |
+ gjay | |
+ glunarclock | [] [] |
+ gnubiff | [] |
+ gnubik | [] [] |
+ gnucash | () () () () () () () [] |
+ gnuchess | [] [] |
+ gnulib | [] |
+ gnunet | |
+ gnunet-gtk | |
+ gold | |
+ gphoto2 | [] |
+ gprof | [] [] |
+ gramadoir | [] |
+ grep | [] [] |
+ grub | [] [] [] |
+ gsasl | [] |
+ gss | |
+ gst-plugins-bad | [] [] |
+ gst-plugins-base | [] [] [] |
+ gst-plugins-good | [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] |
+ gstreamer | [] [] |
+ gtick | [] |
+ gtkam | [] [] |
+ gtkspell | [] [] [] [] [] [] [] |
+ guix | |
+ guix-packages | |
+ gutenprint | [] |
+ hello | [] [] [] |
+ help2man | [] |
+ help2man-texi | |
+ hylafax | [] |
+ idutils | [] |
+ iso_15924 | () [] [] |
+ iso_3166 | [] [] [] () [] [] [] [] [] [] |
+ iso_3166_2 | () [] |
+ iso_4217 | () [] [] [] |
+ iso_639 | [] [] () [] [] [] [] |
+ iso_639_3 | [] () [] |
+ iso_639_5 | () |
+ jwhois | [] [] |
+ kbd | [] |
+ klavaro | [] [] |
+ latrine | |
+ ld | |
+ leafpad | [] [] [] [] [] |
+ libc | [] [] |
+ libexif | [] |
+ libextractor | [] |
+ libgnutls | [] [] |
+ libgphoto2 | [] |
+ libgphoto2_port | [] |
+ libgsasl | [] |
+ libiconv | [] [] |
+ libidn | [] |
+ liferea | [] [] [] |
+ lilypond | [] |
+ lordsawar | |
+ lprng | |
+ lynx | [] |
+ m4 | [] |
+ mailfromd | |
+ mailutils | |
+ make | [] [] |
+ man-db | [] |
+ man-db-manpages | [] |
+ midi-instruments | [] [] [] [] [] [] [] |
+ minicom | [] |
+ mkisofs | [] |
+ myserver | |
+ nano | [] [] [] |
+ opcodes | [] |
+ parted | [] |
+ pies | |
+ popt | [] [] [] [] [] |
+ procps-ng | |
+ procps-ng-man | |
+ psmisc | [] |
+ pspp | [] [] |
+ pushover | |
+ pwdutils | [] |
+ pyspread | |
+ radius | [] |
+ recode | [] [] |
+ recutils | [] |
+ rpm | [] |
+ rush | [] |
+ sarg | |
+ sed | [] [] |
+ sharutils | [] |
+ shishi | |
+ skribilo | |
+ solfege | [] [] |
+ solfege-manual | [] |
+ spotmachine | [] |
+ sudo | [] [] |
+ sudoers | [] [] |
+ sysstat | [] [] |
+ tar | [] [] [] |
+ texinfo | [] |
+ texinfo_document | [] |
+ tigervnc | [] |
+ tin | |
+ tin-man | |
+ tracgoogleappsa... | [] [] [] |
+ trader | [] |
+ util-linux | [] |
+ ve | [] |
+ vice | [] |
+ vmm | [] |
+ vorbis-tools | [] |
+ wastesedge | [] |
+ wcd | [] |
+ wcd-man | [] |
+ wdiff | [] |
+ wget | [] [] |
+ wyslij-po | [] |
+ xboard | [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ +--------------------------------------------------+
+ kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl
+ 5 11 4 6 0 13 22 3 3 3 4 11 2 40 1 124
+
+ nn or os pa pl ps pt pt_BR ro ru rw sk sl sq sr
+ +--------------------------------------------------+
+ a2ps | [] [] [] [] [] [] [] |
+ aegis | [] [] |
+ anubis | [] [] [] |
+ aspell | [] [] [] [] [] [] [] |
+ bash | [] [] [] [] [] |
+ bfd | [] |
+ binutils | [] [] |
+ bison | [] [] [] |
+ bison-runtime | [] [] [] [] [] [] [] [] |
+ buzztrax | |
+ ccd2cue | [] |
+ ccide | [] [] [] |
+ cflow | [] [] |
+ clisp | [] |
+ coreutils | [] [] [] [] |
+ cpio | [] [] [] |
+ cppi | [] [] [] |
+ cpplib | [] [] [] |
+ cryptsetup | [] [] |
+ datamash | [] [] |
+ denemo | |
+ dfarc | [] [] [] |
+ dialog | [] [] [] [] [] [] [] |
+ dico | [] |
+ diffutils | [] [] |
+ dink | |
+ direvent | [] [] |
+ doodle | [] [] |
+ dos2unix | [] [] [] [] |
+ dos2unix-man | [] [] |
+ e2fsprogs | [] |
+ enscript | [] [] [] [] [] [] |
+ exif | [] [] [] [] [] [] |
+ fetchmail | [] [] [] |
+ findutils | [] [] [] [] [] |
+ flex | [] [] [] [] [] |
+ freedink | [] [] [] [] [] |
+ fusionforge | |
+ gas | |
+ gawk | [] |
+ gcal | |
+ gcc | |
+ gdbm | [] [] [] |
+ gettext-examples | [] [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] [] [] [] |
+ gjay | [] |
+ glunarclock | [] [] [] [] [] [] |
+ gnubiff | [] |
+ gnubik | [] [] [] [] |
+ gnucash | () () () () [] |
+ gnuchess | [] [] |
+ gnulib | [] [] [] [] [] |
+ gnunet | |
+ gnunet-gtk | |
+ gold | |
+ gphoto2 | [] [] [] [] [] |
+ gprof | [] [] [] [] |
+ gramadoir | [] [] |
+ grep | [] [] [] [] [] [] |
+ grub | [] [] [] [] [] |
+ gsasl | [] [] [] |
+ gss | [] [] [] [] |
+ gst-plugins-bad | [] [] [] [] |
+ gst-plugins-base | [] [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] [] [] |
+ gtick | [] [] [] [] [] |
+ gtkam | [] [] [] [] [] [] |
+ gtkspell | [] [] [] [] [] [] [] [] [] |
+ guix | |
+ guix-packages | |
+ gutenprint | [] [] |
+ hello | [] [] [] [] [] [] |
+ help2man | [] [] [] [] |
+ help2man-texi | [] |
+ hylafax | |
+ idutils | [] [] [] |
+ iso_15924 | [] () [] [] [] [] |
+ iso_3166 | [] [] [] [] () [] [] [] [] [] [] [] [] |
+ iso_3166_2 | [] () [] |
+ iso_4217 | [] [] () [] [] [] [] [] |
+ iso_639 | [] [] [] () [] [] [] [] [] [] |
+ iso_639_3 | [] () |
+ iso_639_5 | () [] |
+ jwhois | [] [] [] [] |
+ kbd | [] [] |
+ klavaro | [] [] [] [] [] |
+ latrine | [] |
+ ld | |
+ leafpad | [] [] [] [] [] [] [] [] [] |
+ libc | [] [] [] |
+ libexif | [] () [] |
+ libextractor | [] |
+ libgnutls | [] |
+ libgphoto2 | [] |
+ libgphoto2_port | [] [] [] [] [] |
+ libgsasl | [] [] [] [] |
+ libiconv | [] [] [] [] [] |
+ libidn | [] [] [] |
+ liferea | [] [] [] [] () [] [] |
+ lilypond | |
+ lordsawar | |
+ lprng | [] |
+ lynx | [] [] |
+ m4 | [] [] [] [] [] |
+ mailfromd | [] |
+ mailutils | [] |
+ make | [] [] [] |
+ man-db | [] [] [] |
+ man-db-manpages | [] [] [] |
+ midi-instruments | [] [] [] [] [] [] [] [] |
+ minicom | [] [] [] [] |
+ mkisofs | [] [] [] |
+ myserver | [] [] |
+ nano | [] [] [] [] [] [] |
+ opcodes | |
+ parted | [] [] [] [] [] [] |
+ pies | [] |
+ popt | [] [] [] [] [] [] |
+ procps-ng | [] |
+ procps-ng-man | [] |
+ psmisc | [] [] [] [] |
+ pspp | [] [] |
+ pushover | |
+ pwdutils | [] |
+ pyspread | [] [] |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] [] |
+ recutils | [] |
+ rpm | [] |
+ rush | [] [] [] |
+ sarg | [] [] |
+ sed | [] [] [] [] [] [] [] [] |
+ sharutils | [] [] [] |
+ shishi | [] [] |
+ skribilo | |
+ solfege | [] [] [] |
+ solfege-manual | [] [] |
+ spotmachine | [] [] |
+ sudo | [] [] [] [] [] [] |
+ sudoers | [] [] [] [] |
+ sysstat | [] [] [] [] [] |
+ tar | [] [] [] [] [] |
+ texinfo | [] [] [] |
+ texinfo_document | [] [] |
+ tigervnc | [] |
+ tin | [] |
+ tin-man | |
+ tracgoogleappsa... | [] [] [] [] |
+ trader | [] |
+ util-linux | [] [] |
+ ve | [] [] [] |
+ vice | |
+ vmm | |
+ vorbis-tools | [] [] [] |
+ wastesedge | |
+ wcd | |
+ wcd-man | |
+ wdiff | [] [] [] [] [] |
+ wget | [] [] [] [] |
+ wyslij-po | [] [] [] [] |
+ xboard | [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] |
+ +--------------------------------------------------+
+ nn or os pa pl ps pt pt_BR ro ru rw sk sl sq sr
+ 7 3 1 6 114 1 12 83 32 80 3 38 45 7 94
+
+ sv sw ta te tg th tr uk ur vi wa wo zh_CN zh_HK
+ +---------------------------------------------------+
+ a2ps | [] [] [] [] [] |
+ aegis | [] |
+ anubis | [] [] [] [] |
+ aspell | [] [] [] [] |
+ bash | [] [] [] [] |
+ bfd | [] [] |
+ binutils | [] [] [] |
+ bison | [] [] [] [] |
+ bison-runtime | [] [] [] [] [] [] |
+ buzztrax | [] [] [] |
+ ccd2cue | [] [] [] |
+ ccide | [] [] [] [] |
+ cflow | [] [] [] [] |
+ clisp | |
+ coreutils | [] [] [] [] |
+ cpio | [] [] [] [] [] |
+ cppi | [] [] [] [] |
+ cpplib | [] [] [] [] [] |
+ cryptsetup | [] [] [] |
+ datamash | [] [] [] |
+ denemo | |
+ dfarc | [] |
+ dialog | [] [] [] [] [] [] |
+ dico | [] |
+ diffutils | [] [] [] [] [] |
+ dink | |
+ direvent | [] [] |
+ doodle | [] [] |
+ dos2unix | [] [] [] [] |
+ dos2unix-man | [] [] [] |
+ e2fsprogs | [] [] [] [] |
+ enscript | [] [] [] [] |
+ exif | [] [] [] [] [] |
+ fetchmail | [] [] [] [] |
+ findutils | [] [] [] [] [] |
+ flex | [] [] [] [] |
+ freedink | [] [] |
+ fusionforge | |
+ gas | [] |
+ gawk | [] [] |
+ gcal | [] [] |
+ gcc | [] [] |
+ gdbm | [] [] |
+ gettext-examples | [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] [] |
+ gjay | [] [] |
+ glunarclock | [] [] [] [] |
+ gnubiff | [] [] |
+ gnubik | [] [] [] [] |
+ gnucash | () () () () [] |
+ gnuchess | [] [] |
+ gnulib | [] [] [] [] |
+ gnunet | |
+ gnunet-gtk | |
+ gold | [] [] |
+ gphoto2 | [] [] [] [] |
+ gprof | [] [] [] [] |
+ gramadoir | [] [] [] |
+ grep | [] [] [] [] [] |
+ grub | [] [] [] [] |
+ gsasl | [] [] [] [] |
+ gss | [] [] [] |
+ gst-plugins-bad | [] [] [] [] |
+ gst-plugins-base | [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] |
+ gtick | [] [] [] |
+ gtkam | [] [] [] [] |
+ gtkspell | [] [] [] [] [] [] [] [] |
+ guix | [] |
+ guix-packages | |
+ gutenprint | [] [] [] [] |
+ hello | [] [] [] [] [] [] |
+ help2man | [] [] [] |
+ help2man-texi | [] |
+ hylafax | [] |
+ idutils | [] [] [] |
+ iso_15924 | [] () [] [] () [] |
+ iso_3166 | [] [] () [] [] () [] [] [] |
+ iso_3166_2 | () [] [] () [] |
+ iso_4217 | [] () [] [] () [] [] |
+ iso_639 | [] [] [] () [] [] () [] [] [] |
+ iso_639_3 | [] () [] [] () |
+ iso_639_5 | () [] () |
+ jwhois | [] [] [] [] |
+ kbd | [] [] [] |
+ klavaro | [] [] [] [] [] [] |
+ latrine | [] [] |
+ ld | [] [] [] [] [] |
+ leafpad | [] [] [] [] [] [] |
+ libc | [] [] [] [] [] |
+ libexif | [] () |
+ libextractor | [] [] |
+ libgnutls | [] [] [] [] |
+ libgphoto2 | [] [] |
+ libgphoto2_port | [] [] [] [] |
+ libgsasl | [] [] [] [] |
+ libiconv | [] [] [] [] [] |
+ libidn | () [] [] [] |
+ liferea | [] [] [] [] [] |
+ lilypond | [] |
+ lordsawar | |
+ lprng | [] |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] |
+ mailfromd | [] [] |
+ mailutils | [] |
+ make | [] [] [] [] |
+ man-db | [] [] |
+ man-db-manpages | [] |
+ midi-instruments | [] [] [] [] [] [] |
+ minicom | [] [] |
+ mkisofs | [] [] [] |
+ myserver | [] |
+ nano | [] [] [] [] |
+ opcodes | [] [] [] |
+ parted | [] [] [] [] [] |
+ pies | [] [] |
+ popt | [] [] [] [] [] [] [] |
+ procps-ng | [] [] |
+ procps-ng-man | [] |
+ psmisc | [] [] [] [] |
+ pspp | [] [] [] |
+ pushover | [] |
+ pwdutils | [] [] |
+ pyspread | [] |
+ radius | [] [] |
+ recode | [] [] [] [] |
+ recutils | [] [] [] |
+ rpm | [] [] [] [] |
+ rush | [] [] |
+ sarg | |
+ sed | [] [] [] [] [] |
+ sharutils | [] [] [] |
+ shishi | [] [] |
+ skribilo | [] |
+ solfege | [] [] [] |
+ solfege-manual | [] |
+ spotmachine | [] [] [] |
+ sudo | [] [] [] [] |
+ sudoers | [] [] [] |
+ sysstat | [] [] [] [] [] |
+ tar | [] [] [] [] [] |
+ texinfo | [] [] [] |
+ texinfo_document | [] |
+ tigervnc | [] [] |
+ tin | [] |
+ tin-man | |
+ tracgoogleappsa... | [] [] [] [] [] |
+ trader | [] |
+ util-linux | [] [] [] |
+ ve | [] [] [] [] |
+ vice | () () |
+ vmm | |
+ vorbis-tools | [] [] |
+ wastesedge | |
+ wcd | [] [] [] |
+ wcd-man | [] |
+ wdiff | [] [] [] [] |
+ wget | [] [] [] |
+ wyslij-po | [] [] |
+ xboard | [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] |
+ +---------------------------------------------------+
+ sv sw ta te tg th tr uk ur vi wa wo zh_CN zh_HK
+ 91 1 4 3 0 13 50 113 1 126 7 1 95 7
+
+ zh_TW
+ +-------+
+ a2ps | | 30
+ aegis | | 9
+ anubis | | 19
+ aspell | | 28
+ bash | [] | 21
+ bfd | | 9
+ binutils | | 12
+ bison | [] | 18
+ bison-runtime | [] | 38
+ buzztrax | | 8
+ ccd2cue | | 8
+ ccide | | 17
+ cflow | | 15
+ clisp | | 10
+ coreutils | | 20
+ cpio | | 20
+ cppi | | 17
+ cpplib | [] | 19
+ cryptsetup | | 13
+ datamash | | 11
+ denemo | | 4
+ dfarc | | 16
+ dialog | [] | 42
+ dico | | 6
+ diffutils | | 21
+ dink | | 9
+ direvent | | 10
+ doodle | | 12
+ dos2unix | [] | 18
+ dos2unix-man | | 9
+ e2fsprogs | | 14
+ enscript | | 21
+ exif | | 26
+ fetchmail | | 19
+ findutils | | 28
+ flex | [] | 19
+ freedink | | 23
+ fusionforge | | 3
+ gas | | 5
+ gawk | | 12
+ gcal | | 7
+ gcc | | 4
+ gdbm | | 10
+ gettext-examples | [] | 40
+ gettext-runtime | [] | 34
+ gettext-tools | [] | 24
+ gjay | | 8
+ glunarclock | [] | 27
+ gnubiff | | 9
+ gnubik | | 19
+ gnucash | () | 7
+ gnuchess | | 10
+ gnulib | | 23
+ gnunet | | 1
+ gnunet-gtk | | 1
+ gold | | 7
+ gphoto2 | [] | 19
+ gprof | | 21
+ gramadoir | | 14
+ grep | [] | 31
+ grub | | 21
+ gsasl | [] | 19
+ gss | | 17
+ gst-plugins-bad | | 14
+ gst-plugins-base | | 27
+ gst-plugins-good | | 32
+ gst-plugins-ugly | | 34
+ gstreamer | [] | 31
+ gtick | | 19
+ gtkam | | 24
+ gtkspell | [] | 48
+ guix | | 3
+ guix-packages | | 0
+ gutenprint | | 15
+ hello | [] | 30
+ help2man | | 18
+ help2man-texi | | 5
+ hylafax | | 5
+ idutils | | 14
+ iso_15924 | [] | 23
+ iso_3166 | [] | 58
+ iso_3166_2 | | 9
+ iso_4217 | [] | 28
+ iso_639 | [] | 46
+ iso_639_3 | | 10
+ iso_639_5 | | 2
+ jwhois | [] | 20
+ kbd | | 16
+ klavaro | | 30
+ latrine | | 7
+ ld | [] | 15
+ leafpad | [] | 40
+ libc | [] | 24
+ libexif | | 9
+ libextractor | | 5
+ libgnutls | | 13
+ libgphoto2 | | 9
+ libgphoto2_port | [] | 19
+ libgsasl | | 18
+ libiconv | [] | 29
+ libidn | | 17
+ liferea | | 29
+ lilypond | | 11
+ lordsawar | | 3
+ lprng | | 3
+ lynx | | 19
+ m4 | [] | 22
+ mailfromd | | 4
+ mailutils | | 6
+ make | | 19
+ man-db | | 14
+ man-db-manpages | | 9
+ midi-instruments | [] | 43
+ minicom | [] | 17
+ mkisofs | | 13
+ myserver | | 9
+ nano | [] | 29
+ opcodes | | 12
+ parted | [] | 21
+ pies | | 4
+ popt | [] | 36
+ procps-ng | | 5
+ procps-ng-man | | 4
+ psmisc | [] | 22
+ pspp | | 13
+ pushover | | 6
+ pwdutils | | 8
+ pyspread | | 6
+ radius | | 9
+ recode | | 31
+ recutils | | 9
+ rpm | [] | 13
+ rush | | 10
+ sarg | | 4
+ sed | [] | 34
+ sharutils | | 12
+ shishi | | 7
+ skribilo | | 4
+ solfege | | 19
+ solfege-manual | | 9
+ spotmachine | | 10
+ sudo | | 24
+ sudoers | | 20
+ sysstat | | 22
+ tar | [] | 30
+ texinfo | | 17
+ texinfo_document | | 11
+ tigervnc | | 11
+ tin | [] | 7
+ tin-man | | 1
+ tracgoogleappsa... | [] | 22
+ trader | | 11
+ util-linux | | 12
+ ve | | 14
+ vice | | 1
+ vmm | | 3
+ vorbis-tools | | 13
+ wastesedge | | 2
+ wcd | | 8
+ wcd-man | | 3
+ wdiff | [] | 23
+ wget | | 19
+ wyslij-po | | 14
+ xboard | | 9
+ xdg-user-dirs | [] | 68
+ xkeyboard-config | [] | 27
+ +-------+
+ 90 teams zh_TW
+ 166 domains 42 2748
+
+ Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect. This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+ For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and distributed
+as such by its maintainer. There might be an observable lag between the
+mere existence a PO file and its wide availability in a distribution.
+
+ If Jun 2014 seems to be old, you may fetch a more recent copy of this
+'ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix
+with full percentage details can be found at
+'http://translationproject.org/extra/matrix.html'.
+
+1.5 Using 'gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU 'gettext' in your
+package. Of course you have to respect the GNU Lesser General Public
+License which covers the use of the GNU 'gettext' library. This means
+in particular that even non-free programs can use 'libintl' as a shared
+library, whereas only free software can use 'libintl' as a static
+library or use modified versions of 'libintl'.
+
+ Once the sources are changed appropriately and the setup can handle
+the use of 'gettext' the only thing missing are the translations. The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project. Therefore the information given above
+applies also for every other Free Software Project. Contact
+'coordinator@translationproject.org' to make the '.pot' files available
+to the translation teams.
diff --git a/bin/copyshop/AUTHORS b/bin/copyshop/AUTHORS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bin/copyshop/AUTHORS
diff --git a/bin/copyshop/COPYING b/bin/copyshop/COPYING
new file mode 100644
index 0000000..0e259d4
--- /dev/null
+++ b/bin/copyshop/COPYING
@@ -0,0 +1,121 @@
+Creative Commons Legal Code
+
+CC0 1.0 Universal
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+ PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+ THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+ HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display,
+ communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+ likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+ v. rights protecting the extraction, dissemination, use and reuse of data
+ in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation
+ thereof, including any amended or successor version of such
+ directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+ world based on applicable law or treaty, and any national
+ implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+ warranties of any kind concerning the Work, express, implied,
+ statutory or otherwise, including without limitation warranties of
+ title, merchantability, fitness for a particular purpose, non
+ infringement, or the absence of latent or other defects, accuracy, or
+ the present or absence of errors, whether or not discoverable, all to
+ the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without
+ limitation any person's Copyright and Related Rights in the Work.
+ Further, Affirmer disclaims responsibility for obtaining any necessary
+ consents, permissions or other rights required for any use of the
+ Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to
+ this CC0 or use of the Work.
diff --git a/bin/copyshop/ChangeLog b/bin/copyshop/ChangeLog
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bin/copyshop/ChangeLog
diff --git a/bin/copyshop/Makefile.am b/bin/copyshop/Makefile.am
new file mode 100644
index 0000000..b481501
--- /dev/null
+++ b/bin/copyshop/Makefile.am
@@ -0,0 +1,23 @@
+AM_CPPFLAGS = -DDATADIR=\"$(datadir)\"
+bin_PROGRAMS = src/copyshop
+src_copyshop_SOURCES = \
+ src/main.c \
+ src/cshopapplication.c \
+ src/cshopapplication.h \
+ src/cshopwindow.c \
+ src/cshopwindow.h \
+ src/cshopraw.c \
+ src/cshopraw.h
+src_copyshop_LDADD = $(GTK_LIBS)
+src_copyshop_CFLAGS = \
+ -I$(top_srcdir)/ \
+ $(GTK_CFLAGS)
+dist_data_DATA = \
+ src/ui/menu.ui \
+ src/ui/toolbar.ui
+
+SUBDIRS = po
+
+ACLOCAL_AMFLAGS = -I m4
+
+EXTRA_DIST = config.rpath m4/ChangeLog
diff --git a/bin/copyshop/NEWS b/bin/copyshop/NEWS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bin/copyshop/NEWS
diff --git a/bin/copyshop/README b/bin/copyshop/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bin/copyshop/README
diff --git a/bin/copyshop/autogen.sh b/bin/copyshop/autogen.sh
new file mode 100755
index 0000000..69bf90d
--- /dev/null
+++ b/bin/copyshop/autogen.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+cd $(dirname $0)
+autoreconf --force --install --verbose -Wall
diff --git a/bin/copyshop/config.rpath b/bin/copyshop/config.rpath
new file mode 100755
index 0000000..a3e25c8
--- /dev/null
+++ b/bin/copyshop/config.rpath
@@ -0,0 +1,684 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2015 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ ecc*)
+ wl='-Wl,'
+ ;;
+ icc* | ifort*)
+ wl='-Wl,'
+ ;;
+ lf95*)
+ wl='-Wl,'
+ ;;
+ nagfor*)
+ wl='-Wl,-Wl,,'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ F* | *Sun*Fortran*)
+ wl=
+ ;;
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ newsos6)
+ ;;
+ *nto* | *qnx*)
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ wl='-Qoption ld '
+ ;;
+ *)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ case "$host_os" in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc)
+ ;;
+ m68k)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ haiku*)
+ ;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc)
+ ;;
+ m68k)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd2.[01]*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ ;;
+ *)
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ *nto* | *qnx*)
+ ;;
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ library_names_spec='$libname.a'
+ ;;
+ aix[4-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc*)
+ library_names_spec='$libname$shrext' ;;
+ m68k)
+ library_names_spec='$libname.a' ;;
+ esac
+ ;;
+ beos*)
+ library_names_spec='$libname$shrext'
+ ;;
+ bsdi[45]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ library_names_spec='$libname$shrext'
+ ;;
+ dgux*)
+ library_names_spec='$libname$shrext'
+ ;;
+ freebsd[23].*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ freebsd* | dragonfly*)
+ library_names_spec='$libname$shrext'
+ ;;
+ gnu*)
+ library_names_spec='$libname$shrext'
+ ;;
+ haiku*)
+ library_names_spec='$libname$shrext'
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $host_cpu in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ netbsd*)
+ library_names_spec='$libname$shrext'
+ ;;
+ newsos6)
+ library_names_spec='$libname$shrext'
+ ;;
+ *nto* | *qnx*)
+ library_names_spec='$libname$shrext'
+ ;;
+ openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ library_names_spec='$libname.a'
+ ;;
+ osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
+ ;;
+ tpf*)
+ library_names_spec='$libname$shrext'
+ ;;
+ uts4*)
+ library_names_spec='$libname$shrext'
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/bin/copyshop/configure.ac b/bin/copyshop/configure.ac
new file mode 100644
index 0000000..02fad7f
--- /dev/null
+++ b/bin/copyshop/configure.ac
@@ -0,0 +1,29 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ([2.69])
+AC_INIT([MyCopyshop], [0.1], [pelzflorian@pelzflorian.de])
+AC_CONFIG_SRCDIR([src/main.c])
+AC_CONFIG_HEADERS([config.h])
+
+AC_CONFIG_FILES([Makefile po/Makefile.in])
+AM_INIT_AUTOMAKE([-Wall -Werror -Wno-portability subdir-objects])
+AM_GNU_GETTEXT([external])
+
+AC_SUBST([GETTEXT_PACKAGE], [$PACKAGE_TARNAME])
+AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], [Package name for gettext])
+
+# Checks for programs.
+AC_PROG_CC
+AC_PROG_INSTALL
+
+# Checks for libraries.
+PKG_CHECK_MODULES([GTK],[gtk+-3.0 >= 3.16])
+
+# Checks for header files.
+
+# Checks for typedefs, structures, and compiler characteristics.
+
+# Checks for library functions.
+
+AC_OUTPUT
diff --git a/bin/copyshop/m4/ChangeLog b/bin/copyshop/m4/ChangeLog
new file mode 100644
index 0000000..bc903d5
--- /dev/null
+++ b/bin/copyshop/m4/ChangeLog
@@ -0,0 +1,11 @@
+2016-06-01 gettextize <bug-gnu-gettext@gnu.org>
+
+ * gettext.m4: New file, from gettext-0.19.7.
+ * iconv.m4: New file, from gettext-0.19.7.
+ * lib-ld.m4: New file, from gettext-0.19.7.
+ * lib-link.m4: New file, from gettext-0.19.7.
+ * lib-prefix.m4: New file, from gettext-0.19.7.
+ * nls.m4: New file, from gettext-0.19.7.
+ * po.m4: New file, from gettext-0.19.7.
+ * progtest.m4: New file, from gettext-0.19.7.
+
diff --git a/bin/copyshop/m4/gettext.m4 b/bin/copyshop/m4/gettext.m4
new file mode 100644
index 0000000..da31efe
--- /dev/null
+++ b/bin/copyshop/m4/gettext.m4
@@ -0,0 +1,405 @@
+# gettext.m4 serial 67 (gettext-0.19.6)
+dnl Copyright (C) 1995-2014 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl default (if it is not specified or empty) is 'no-libtool'.
+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value '$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+ ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
+ [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define([gt_included_intl],
+ ifelse([$1], [external],
+ ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+ [yes]))
+ define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+ gt_NEEDS_INIT
+ AM_GNU_GETTEXT_NEED([$2])
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+ dnl documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ ])
+
+ dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation.
+ gt_INTL_MACOSX
+
+ dnl Set USE_NLS.
+ AC_REQUIRE([AM_NLS])
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl Add a version number to the cache macros.
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH([included-gettext],
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+ ]])],
+ [eval "$gt_func_gnugettext_libc=yes"],
+ [eval "$gt_func_gnugettext_libc=no"])])
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ [$gt_func_gnugettext_libintl],
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+ ]])],
+ [eval "$gt_func_gnugettext_libintl=yes"],
+ [eval "$gt_func_gnugettext_libintl=no"])
+ dnl Now see whether libintl exists and depends on libiconv.
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+ ]])],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Some extra flags are needed during linking.
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE([ENABLE_NLS], [1],
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ AC_MSG_RESULT([$gt_source])
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE([HAVE_GETTEXT], [1],
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE([HAVE_DCGETTEXT], [1],
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST([BUILD_INCLUDED_LIBINTL])
+ AC_SUBST([USE_INCLUDED_LIBINTL])
+ AC_SUBST([CATOBJEXT])
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST([DATADIRNAME])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST([INSTOBJEXT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST([GENCAT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLOBJS=
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+ AC_SUBST([INTLOBJS])
+
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+ AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST([INTLLIBS])
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST([LIBINTL])
+ AC_SUBST([LTLIBINTL])
+ AC_SUBST([POSUB])
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+ m4_divert_text([DEFAULTS], [gt_needs=])
+ m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
+
+
+dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], [])
diff --git a/bin/copyshop/m4/iconv.m4 b/bin/copyshop/m4/iconv.m4
new file mode 100644
index 0000000..4e37363
--- /dev/null
+++ b/bin/copyshop/m4/iconv.m4
@@ -0,0 +1,271 @@
+# iconv.m4 serial 19 (gettext-0.18.2)
+dnl Copyright (C) 2000-2002, 2007-2014 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl those with the standalone portable GNU libiconv installed).
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed libiconv and not disabled its use
+ dnl via --without-libiconv-prefix, he wants to use it. The first
+ dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed.
+ am_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+ AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+ ]],
+ [[iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);]])],
+ [am_cv_func_iconv=yes])
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+ ]],
+ [[iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);]])],
+ [am_cv_lib_iconv=yes]
+ [am_cv_func_iconv=yes])
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11,
+ dnl Solaris 10.
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ am_cv_func_iconv_works=no
+ for ac_iconv_const in '' 'const'; do
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <iconv.h>
+#include <string.h>
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+ ]],
+ [[int result = 0;
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 1;
+ iconv_close (cd_utf8_to_88591);
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\263";
+ char buf[10];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 2;
+ iconv_close (cd_ascii_to_88591);
+ }
+ }
+ /* Test against AIX 6.1..7.1 bug: Buffer overrun. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\304";
+ static char buf[2] = { (char)0xDE, (char)0xAD };
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = 1;
+ char *outptr = buf;
+ size_t outbytesleft = 1;
+ size_t res = iconv (cd_88591_to_utf8,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+ result |= 4;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ result |= 8;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ result |= 16;
+ return result;
+]])],
+ [am_cv_func_iconv_works=yes], ,
+ [case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac])
+ test "$am_cv_func_iconv_works" = no || break
+ done
+ LIBS="$am_save_LIBS"
+ ])
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+ AC_DEFINE([HAVE_ICONV], [1],
+ [Define if you have the iconv() function and it works.])
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ AC_MSG_CHECKING([how to link with libiconv])
+ AC_MSG_RESULT([$LIBICONV])
+ else
+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+ dnl either.
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+ AC_SUBST([LIBICONV])
+ AC_SUBST([LTLIBICONV])
+])
+
+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
+dnl avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl This is tricky because of the way 'aclocal' is implemented:
+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
+dnl Otherwise aclocal's initial scan pass would miss the macro definition.
+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
+dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
+dnl warnings.
+m4_define([gl_iconv_AC_DEFUN],
+ m4_version_prereq([2.64],
+ [[AC_DEFUN_ONCE(
+ [$1], [$2])]],
+ [m4_ifdef([gl_00GNULIB],
+ [[AC_DEFUN_ONCE(
+ [$1], [$2])]],
+ [[AC_DEFUN(
+ [$1], [$2])]])]))
+gl_iconv_AC_DEFUN([AM_ICONV],
+[
+ AM_ICONV_LINK
+ if test "$am_cv_func_iconv" = yes; then
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL([am_cv_proto_iconv], [
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+ ]],
+ [[]])],
+ [am_cv_proto_iconv_arg1=""],
+ [am_cv_proto_iconv_arg1="const"])
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([
+ $am_cv_proto_iconv])
+ AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+ [Define as const if the declaration of iconv() needs const.])
+ dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
+ m4_ifdef([gl_ICONV_H_DEFAULTS],
+ [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
+ if test -n "$am_cv_proto_iconv_arg1"; then
+ ICONV_CONST="const"
+ fi
+ ])
+ fi
+])
diff --git a/bin/copyshop/m4/lib-ld.m4 b/bin/copyshop/m4/lib-ld.m4
new file mode 100644
index 0000000..91ca911
--- /dev/null
+++ b/bin/copyshop/m4/lib-ld.m4
@@ -0,0 +1,119 @@
+# lib-ld.m4 serial 6
+dnl Copyright (C) 1996-2003, 2009-2015 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid
+dnl collision with libtool.m4.
+
+dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes
+ ;;
+*)
+ acl_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-2.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld [default=no]])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
+ while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL([acl_cv_path_LD],
+[if test -z "$LD"; then
+ acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$acl_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT([$LD])
+else
+ AC_MSG_RESULT([no])
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/bin/copyshop/m4/lib-link.m4 b/bin/copyshop/m4/lib-link.m4
new file mode 100644
index 0000000..d8d5d1f
--- /dev/null
+++ b/bin/copyshop/m4/lib-link.m4
@@ -0,0 +1,777 @@
+# lib-link.m4 serial 26 (gettext-0.18.2)
+dnl Copyright (C) 2001-2015 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.54])
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[m4_translit([$1],[./+-], [____])])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+ dnl results of this search when this library appears as a dependency.
+ HAVE_LIB[]NAME=yes
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[m4_translit([$1],[./+-], [____])])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+
+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed lib[]Name and not disabled its use
+ dnl via --without-lib[]Name-prefix, he wants to use it.
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+ ac_save_LIBS="$LIBS"
+ dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+ dnl because these -l options might require -L options that are present in
+ dnl LIBS. -l options benefit only from the -L options listed before it.
+ dnl Otherwise, add it to the front of LIBS, because it may be a static
+ dnl library that depends on another static library that is present in LIBS.
+ dnl Static libraries benefit only from the static libraries listed after
+ dnl it.
+ case " $LIB[]NAME" in
+ *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+ *) LIBS="$LIB[]NAME $LIBS" ;;
+ esac
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[$3]], [[$4]])],
+ [ac_cv_lib[]Name=yes],
+ [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
+ LIBS="$ac_save_LIBS"
+ ])
+ if test "$ac_cv_lib[]Name" = yes; then
+ HAVE_LIB[]NAME=yes
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
+ AC_MSG_CHECKING([how to link with lib[]$1])
+ AC_MSG_RESULT([$LIB[]NAME])
+ else
+ HAVE_LIB[]NAME=no
+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+ dnl $INC[]NAME either.
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIB[]NAME=
+ LTLIB[]NAME=
+ LIB[]NAME[]_PREFIX=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl acl_libext,
+dnl acl_shlibext,
+dnl acl_libname_spec,
+dnl acl_library_names_spec,
+dnl acl_hardcode_libdir_flag_spec,
+dnl acl_hardcode_libdir_separator,
+dnl acl_hardcode_direct,
+dnl acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+ dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+ AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+ ])
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ dnl Determine whether the user wants rpath handling at all.
+ AC_ARG_ENABLE([rpath],
+ [ --disable-rpath do not hardcode runtime library paths],
+ :, enable_rpath=yes)
+])
+
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ define([acl_frompackage_]NAME, [$2])
+ popdef([NAME])
+ pushdef([PACK],[$2])
+ pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ define([acl_libsinpackage_]PACKUP,
+ m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1])
+ popdef([PACKUP])
+ popdef([PACK])
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+ pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+ dnl Autoconf >= 2.61 supports dots in --with options.
+ pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_ARG_WITH(P_A_C_K[-prefix],
+[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib
+ --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+])
+ dnl Search the library and its dependencies in $additional_libdir and
+ dnl $LDFLAGS. Using breadth-first-seach.
+ LIB[]NAME=
+ LTLIB[]NAME=
+ INC[]NAME=
+ LIB[]NAME[]_PREFIX=
+ dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+ dnl computed. So it has to be reset here.
+ HAVE_LIB[]NAME=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='$1 $2'
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+ dnl or AC_LIB_HAVE_LINKFLAGS call.
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+ else
+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+ dnl that this library doesn't exist. So just drop it.
+ :
+ fi
+ else
+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ dnl The same code as in the loop below:
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ dnl Found the library.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ dnl Linking with a shared library. We attempt to hardcode its
+ dnl directory into the executable's runpath, unless it's the
+ dnl standard /usr/lib.
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ dnl No hardcoding is needed.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ dnl The hardcoding into $LIBNAME is system dependent.
+ if test "$acl_hardcode_direct" = yes; then
+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+ dnl resulting binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ dnl Rely on "-L$found_dir".
+ dnl But don't add it if it's already contained in the LDFLAGS
+ dnl or the already constructed $LIBNAME
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+ dnl here, because this doesn't fit in flags passed to the
+ dnl compiler. So give up. No hardcoding. This affects only
+ dnl very old systems.
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ dnl Linking with a static library.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+ else
+ dnl We shouldn't come here, but anyway it's good to have a
+ dnl fallback.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+ fi
+ fi
+ dnl Assume the include files are nearby.
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ dnl Potentially add $additional_includedir to $INCNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 3. if it's already present in $CPPFLAGS or the already
+ dnl constructed $INCNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INC[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $INCNAME.
+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ dnl Look for dependencies.
+ if test -n "$found_la"; then
+ dnl Read the .la file. It defines the variables
+ dnl dlname, library_names, old_library, dependency_libs, current,
+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ dnl We use only dependency_libs.
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 3. if it's already present in $LDFLAGS or the already
+ dnl constructed $LIBNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LIBNAME.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LTLIBNAME.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ dnl Handle this in the next round.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ dnl Handle this in the next round. Throw away the .la's
+ dnl directory; it is already contained in a preceding -L
+ dnl option.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ dnl Most likely an immediate library name.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ dnl Didn't find the library; assume it is in the system directories
+ dnl known to the linker and runtime loader. (All the system
+ dnl directories known to the linker should also be known to the
+ dnl runtime loader, otherwise the system is severely misconfigured.)
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user must
+ dnl pass all path elements in one option. We can arrange that for a
+ dnl single library, but not when more than one $LIBNAMEs are used.
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ dnl When using libtool, the option that works for both libraries and
+ dnl executables is -R. The -R options are cumulative.
+ for found_dir in $ltrpathdirs; do
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+ done
+ fi
+ popdef([P_A_C_K])
+ popdef([PACKLIBS])
+ popdef([PACKUP])
+ popdef([PACK])
+ popdef([NAME])
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+ for element in [$2]; do
+ haveit=
+ for x in $[$1]; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ [$1]="${[$1]}${[$1]:+ }$element"
+ fi
+ done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+ AC_REQUIRE([AC_LIB_RPATH])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ $1=
+ if test "$enable_rpath" != no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode directories into the resulting
+ dnl binary.
+ rpathdirs=
+ next=
+ for opt in $2; do
+ if test -n "$next"; then
+ dir="$next"
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next=
+ else
+ case $opt in
+ -L) next=yes ;;
+ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next= ;;
+ *) next= ;;
+ esac
+ fi
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n ""$3""; then
+ dnl libtool is used for linking. Use -R options.
+ for dir in $rpathdirs; do
+ $1="${$1}${$1:+ }-R$dir"
+ done
+ else
+ dnl The linker is used for linking directly.
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user
+ dnl must pass all path elements in one option.
+ alldirs=
+ for dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="${$1}${$1:+ }$flag"
+ done
+ fi
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST([$1])
+])
diff --git a/bin/copyshop/m4/lib-prefix.m4 b/bin/copyshop/m4/lib-prefix.m4
new file mode 100644
index 0000000..0465f47
--- /dev/null
+++ b/bin/copyshop/m4/lib-prefix.m4
@@ -0,0 +1,224 @@
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2015 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib-prefix],
+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
+dnl "lib" or "lib64" or "lib/64",
+dnl - a variable acl_libdirstem2, as a secondary possible value for
+dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
+dnl "lib/amd64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+ dnl There is no formal standard regarding lib and lib64.
+ dnl On glibc systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
+ dnl the compiler's default mode by looking at the compiler's library search
+ dnl path. If at least one of its elements ends in /lib64 or points to a
+ dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
+ dnl Otherwise we use the default, namely "lib".
+ dnl On Solaris systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+ dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+ dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
+ dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+ dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+ dnl symlink is missing, so we set acl_libdirstem2 too.
+ AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
+ [AC_EGREP_CPP([sixtyfour bits], [
+#ifdef _LP64
+sixtyfour bits
+#endif
+ ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
+ ])
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+])
diff --git a/bin/copyshop/m4/nls.m4 b/bin/copyshop/m4/nls.m4
new file mode 100644
index 0000000..93df8d3
--- /dev/null
+++ b/bin/copyshop/m4/nls.m4
@@ -0,0 +1,32 @@
+# nls.m4 serial 5 (gettext-0.18)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE([nls],
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT([$USE_NLS])
+ AC_SUBST([USE_NLS])
+])
diff --git a/bin/copyshop/m4/po.m4 b/bin/copyshop/m4/po.m4
new file mode 100644
index 0000000..d4bc262
--- /dev/null
+++ b/bin/copyshop/m4/po.m4
@@ -0,0 +1,453 @@
+# po.m4 serial 24 (gettext-0.19)
+dnl Copyright (C) 1995-2014 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.60])
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+ AC_REQUIRE([AC_PROG_SED])dnl
+ AC_REQUIRE([AM_NLS])dnl
+
+ dnl Release version of the gettext macros. This is used to ensure that
+ dnl the gettext macros and po/Makefile.in.in are in sync.
+ AC_SUBST([GETTEXT_MACRO_VERSION], [0.19])
+
+ dnl Perform the following tests also if --disable-nls has been given,
+ dnl because they are needed for "make dist" to work.
+
+ dnl Search for GNU msgfmt in the PATH.
+ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+ dnl The second test excludes FreeBSD msgfmt.
+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+ [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
+
+ dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([GMSGFMT_015])
+
+ dnl Search for GNU xgettext 0.12 or newer in the PATH.
+ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+ dnl The second test excludes FreeBSD xgettext.
+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+
+ dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([XGETTEXT_015])
+
+ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+ dnl Installation directories.
+ dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+ dnl have to define it here, so that it can be used in po/Makefile.
+ test -n "$localedir" || localedir='${datadir}/locale'
+ AC_SUBST([localedir])
+
+ dnl Support for AM_XGETTEXT_OPTION.
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+ AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+ AC_CONFIG_COMMANDS([po-directories], [[
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ gt_tab=`printf '\t'`
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done]],
+ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+ ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+ # When this code is run, in config.status, two variables have already been
+ # set:
+ # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+ # - LINGUAS is the value of the environment variable LINGUAS at configure
+ # time.
+
+changequote(,)dnl
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ # Find a way to echo strings without interpreting backslash.
+ if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='echo'
+ else
+ if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='printf %s\n'
+ else
+ echo_func () {
+ cat <<EOT
+$*
+EOT
+ }
+ gt_echo='echo_func'
+ fi
+ fi
+
+ # A sed script that extracts the value of VARIABLE from a Makefile.
+ tab=`printf '\t'`
+ sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{
+ # Seen the first line of the variable definition.
+ s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=//
+ ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+ # Set POTFILES to the value of the Makefile variable POTFILES.
+ sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+ POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+ # Compute POTFILES_DEPS as
+ # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+ POTFILES_DEPS=
+ for file in $POTFILES; do
+ POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+ done
+ POMAKEFILEDEPS=""
+
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+ sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+ ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+ fi
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ # Compute PROPERTIESFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+ # Compute CLASSFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+ # Compute QMFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+ # Compute MSGFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+ # Compute RESOURCESDLLFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ PROPERTIESFILES=
+ CLASSFILES=
+ QMFILES=
+ MSGFILES=
+ RESOURCESDLLFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+ CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+ QMFILES="$QMFILES $srcdirpre$lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ JAVACATALOGS=
+ QTCATALOGS=
+ TCLCATALOGS=
+ CSHARPCATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+ QTCATALOGS="$QTCATALOGS $lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ fi
+
+ sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+ tab=`printf '\t'`
+ if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if test -n "$POMAKEFILEDEPS"; then
+ cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+ fi
+ mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+ XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
diff --git a/bin/copyshop/m4/progtest.m4 b/bin/copyshop/m4/progtest.m4
new file mode 100644
index 0000000..0921e1e
--- /dev/null
+++ b/bin/copyshop/m4/progtest.m4
@@ -0,0 +1,91 @@
+# progtest.m4 serial 7 (gettext-0.18.2)
+dnl Copyright (C) 1996-2003, 2005, 2008-2015 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ([2.50])
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL([ac_cv_path_$1],
+[case "[$]$1" in
+ [[\\/]]* | ?:[[\\/]]*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+ AC_MSG_RESULT([$][$1])
+else
+ AC_MSG_RESULT([no])
+fi
+AC_SUBST([$1])dnl
+])
diff --git a/bin/copyshop/po/ChangeLog b/bin/copyshop/po/ChangeLog
new file mode 100644
index 0000000..3a9515d
--- /dev/null
+++ b/bin/copyshop/po/ChangeLog
@@ -0,0 +1,12 @@
+2016-06-01 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: New file, from gettext-0.19.7.
+ * Rules-quot: New file, from gettext-0.19.7.
+ * boldquot.sed: New file, from gettext-0.19.7.
+ * en@boldquot.header: New file, from gettext-0.19.7.
+ * en@quot.header: New file, from gettext-0.19.7.
+ * insert-header.sin: New file, from gettext-0.19.7.
+ * quot.sed: New file, from gettext-0.19.7.
+ * remove-potcdate.sin: New file, from gettext-0.19.7.
+ * POTFILES.in: New file.
+
diff --git a/bin/copyshop/po/LINGUAS b/bin/copyshop/po/LINGUAS
new file mode 100644
index 0000000..996888b
--- /dev/null
+++ b/bin/copyshop/po/LINGUAS
@@ -0,0 +1,2 @@
+de
+en
diff --git a/bin/copyshop/po/Makefile.in.in b/bin/copyshop/po/Makefile.in.in
new file mode 100644
index 0000000..8f34f00
--- /dev/null
+++ b/bin/copyshop/po/Makefile.in.in
@@ -0,0 +1,483 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved. This file is offered as-is,
+# without any warranty.
+#
+# Origin: gettext-0.19.7
+GETTEXT_MACRO_VERSION = 0.19
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SED = @SED@
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+# When building gettext-tools, we prefer to use the built programs
+# rather than installed programs. However, we can't do that when we
+# are cross compiling.
+CROSS_COMPILING = @CROSS_COMPILING@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
+POFILESDEPS_yes = $(POFILESDEPS_)
+POFILESDEPS_no =
+POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
+
+DISTFILESDEPS_ = update-po
+DISTFILESDEPS_yes = $(DISTFILESDEPS_)
+DISTFILESDEPS_no =
+DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+ @echo "$(MSGFMT) -c -o $@ $<"; \
+ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \
+ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+CHECK_MACRO_VERSION = \
+ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+ exit 1; \
+ }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+ @$(CHECK_MACRO_VERSION)
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch stamp-po" && \
+ echo timestamp > stamp-poT && \
+ mv stamp-poT stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+# The determination of whether the package xyz is a GNU one is based on the
+# heuristic whether some file in the top level directory mentions "GNU xyz".
+# If GNU 'find' is available, we avoid grepping through monster files.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+ package_gnu="$(PACKAGE_GNU)"; \
+ test -n "$$package_gnu" || { \
+ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \
+ -size -10000000c -exec grep 'GNU @PACKAGE@' \
+ /dev/null '{}' ';' 2>/dev/null; \
+ else \
+ LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+ fi; \
+ } | grep -v 'libtool:' >/dev/null; then \
+ package_gnu=yes; \
+ else \
+ package_gnu=no; \
+ fi; \
+ }; \
+ if test "$$package_gnu" = "yes"; then \
+ package_prefix='GNU '; \
+ else \
+ package_prefix=''; \
+ fi; \
+ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+ else \
+ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+ fi; \
+ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ *) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --package-name="$${package_prefix}@PACKAGE@" \
+ --package-version='@VERSION@' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ esac
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot-header; then \
+ sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
+ cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po; \
+ rm -f $(DOMAIN).1po; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(POFILESDEPS)
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) \
+ && { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \
+ esac; \
+ }; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+ fi; \
+ done; \
+ done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ esac; \
+ }; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && @SHELL@ ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/bin/copyshop/po/Makevars b/bin/copyshop/po/Makevars
new file mode 100644
index 0000000..893068f
--- /dev/null
+++ b/bin/copyshop/po/Makevars
@@ -0,0 +1,78 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --from-code=UTF-8
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER =
+
+# This tells whether or not to prepend "GNU " prefix to the package
+# name that gets inserted into the header of the $(DOMAIN).pot file.
+# Possible values are "yes", "no", or empty. If it is empty, try to
+# detect it automatically by scanning the files in $(top_srcdir) for
+# "GNU packagename" string.
+PACKAGE_GNU =
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS =
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context. Possible values are "yes" and "no". Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = no
+
+# These options get passed to msgmerge.
+# Useful options are in particular:
+# --previous to keep previous msgids of translated messages,
+# --quiet to reduce the verbosity.
+MSGMERGE_OPTIONS =
+
+# These options get passed to msginit.
+# If you want to disable line wrapping when writing PO files, add
+# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
+# MSGINIT_OPTIONS.
+MSGINIT_OPTIONS =
+
+# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
+# has changed. Possible values are "yes" and "no". Set this to no if
+# the POT file is checked in the repository and the version control
+# program ignores timestamps.
+PO_DEPENDS_ON_POT = yes
+
+# This tells whether or not to forcibly update $(DOMAIN).pot and
+# regenerate PO files on "make dist". Possible values are "yes" and
+# "no". Set this to no if the POT file and PO files are maintained
+# externally.
+DIST_DEPENDS_ON_UPDATE_PO = yes
diff --git a/bin/copyshop/po/POTFILES.in b/bin/copyshop/po/POTFILES.in
new file mode 100644
index 0000000..24578f0
--- /dev/null
+++ b/bin/copyshop/po/POTFILES.in
@@ -0,0 +1,7 @@
+# List of source files which contain translatable strings.
+src/cshopapplication.c
+src/cshopraw.c
+src/cshopwindow.c
+src/main.c
+src/ui/menu.ui
+src/ui/toolbar.ui
diff --git a/bin/copyshop/po/Rules-quot b/bin/copyshop/po/Rules-quot
new file mode 100644
index 0000000..baf6528
--- /dev/null
+++ b/bin/copyshop/po/Rules-quot
@@ -0,0 +1,58 @@
+# This file, Rules-quot, can be copied and used freely without restrictions.
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+ $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+ $(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+ @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ ll=`echo $$lang | sed -e 's/@.*//'`; \
+ LC_ALL=C; export LC_ALL; \
+ cd $(srcdir); \
+ if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \
+ | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \
+ { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \
+ $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \
+ ;; \
+ *) \
+ $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \
+ ;; \
+ esac } 2>/dev/null > $$tmpdir/$$lang.new.po \
+ ; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "creation of $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+en@quot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+ rm -f *.insert-header
diff --git a/bin/copyshop/po/boldquot.sed b/bin/copyshop/po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/bin/copyshop/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
+s/“/“/g
+s/”/”/g
+s/‘/‘/g
+s/’/’/g
diff --git a/bin/copyshop/po/de.po b/bin/copyshop/po/de.po
new file mode 100644
index 0000000..018aa4c
--- /dev/null
+++ b/bin/copyshop/po/de.po
@@ -0,0 +1,63 @@
+# German translations for mycopyshop package.
+# This file is put in the public domain.
+# <pelzflorian@pelzflorian.de>, 2016.
+# Florian Pelz <pelzflorian@pelzflorian.de>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mycopyshop 0.1\n"
+"Report-Msgid-Bugs-To: pelzflorian@pelzflorian.de\n"
+"POT-Creation-Date: 2016-06-02 18:45+0200\n"
+"PO-Revision-Date: 2016-06-01 22:00+0200\n"
+"Last-Translator: Florian Pelz <pelzflorian@pelzflorian.de>\n"
+"Language-Team: German <>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+#: src/cshopraw.c:59
+msgid "Name"
+msgstr "Name"
+
+#: src/cshopraw.c:68
+msgid "Quantity"
+msgstr "Menge"
+
+#: src/cshopraw.c:76
+msgid "Cost Price"
+msgstr "Einkaufspreis"
+
+#: src/cshopraw.c:100
+msgid "Error: We´ve got no money."
+msgstr "Fehler: Kein Geld da."
+
+#: src/cshopwindow.c:52
+msgid "Raw Materials"
+msgstr "Rohmaterialien"
+
+#: src/cshopwindow.c:56
+msgid "Work in Progress"
+msgstr "In Arbeit"
+
+#: src/cshopwindow.c:60
+msgid "Finished Goods"
+msgstr "Fertige Produkte"
+
+#: src/main.c:33
+msgid "MyCopyshop"
+msgstr "MyCopyshop"
+
+#: src/ui/menu.ui:7 src/ui/menu.ui:17
+msgid "_Quit"
+msgstr "_Beenden"
+
+#: src/ui/menu.ui:14
+msgid "_File"
+msgstr "_Datei"
+
+#: src/ui/toolbar.ui:18
+msgid "_Place Order"
+msgstr "B_estellen"
diff --git a/bin/copyshop/po/en.po b/bin/copyshop/po/en.po
new file mode 100644
index 0000000..272671f
--- /dev/null
+++ b/bin/copyshop/po/en.po
@@ -0,0 +1,63 @@
+# English translations for mycopyshop package.
+# This file is put in the public domain.
+# <pelzflorian@pelzflorian.de>, 2016.
+# Florian Pelz <pelzflorian@pelzflorian.de>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mycopyshop 0.1\n"
+"Report-Msgid-Bugs-To: pelzflorian@pelzflorian.de\n"
+"POT-Creation-Date: 2016-06-02 18:45+0200\n"
+"PO-Revision-Date: 2016-06-01 22:01+0200\n"
+"Last-Translator: Florian Pelz <pelzflorian@pelzflorian.de>\n"
+"Language-Team: German <>\n"
+"Language: en\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+#: src/cshopraw.c:59
+msgid "Name"
+msgstr "Name"
+
+#: src/cshopraw.c:68
+msgid "Quantity"
+msgstr "Quantity"
+
+#: src/cshopraw.c:76
+msgid "Cost Price"
+msgstr "Cost Price"
+
+#: src/cshopraw.c:100
+msgid "Error: We´ve got no money."
+msgstr "Error: We´ve got no money."
+
+#: src/cshopwindow.c:52
+msgid "Raw Materials"
+msgstr "Raw Materials"
+
+#: src/cshopwindow.c:56
+msgid "Work in Progress"
+msgstr "Work in Progress"
+
+#: src/cshopwindow.c:60
+msgid "Finished Goods"
+msgstr "Finished Goods"
+
+#: src/main.c:33
+msgid "MyCopyshop"
+msgstr "MyCopyshop"
+
+#: src/ui/menu.ui:7 src/ui/menu.ui:17
+msgid "_Quit"
+msgstr "_Quit"
+
+#: src/ui/menu.ui:14
+msgid "_File"
+msgstr "_File"
+
+#: src/ui/toolbar.ui:18
+msgid "_Place Order"
+msgstr "_Place Order"
diff --git a/bin/copyshop/po/en@boldquot.header b/bin/copyshop/po/en@boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/bin/copyshop/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/bin/copyshop/po/en@quot.header b/bin/copyshop/po/en@quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/bin/copyshop/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/bin/copyshop/po/insert-header.sin b/bin/copyshop/po/insert-header.sin
new file mode 100644
index 0000000..b26de01
--- /dev/null
+++ b/bin/copyshop/po/insert-header.sin
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/bin/copyshop/po/quot.sed b/bin/copyshop/po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/bin/copyshop/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
diff --git a/bin/copyshop/po/remove-potcdate.sin b/bin/copyshop/po/remove-potcdate.sin
new file mode 100644
index 0000000..2436c49
--- /dev/null
+++ b/bin/copyshop/po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/bin/copyshop/src/cshopapplication.c b/bin/copyshop/src/cshopapplication.c
new file mode 100644
index 0000000..aa996c0
--- /dev/null
+++ b/bin/copyshop/src/cshopapplication.c
@@ -0,0 +1,141 @@
+/*
+ * copyshop - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#include <glib/gi18n.h>
+#include "cshopapplication.h"
+
+struct _CshopApplication
+{
+ GtkApplicationClass parent_class;
+
+ GtkWidget *window;
+};
+
+G_DEFINE_TYPE (CshopApplication,
+ cshop_application,
+ GTK_TYPE_APPLICATION)
+
+static void
+cshop_application_dispose (GObject *object)
+{
+ CshopApplication *self;
+
+ self = CSHOP_APPLICATION (object);
+
+ g_clear_object (&self->window);
+
+ G_OBJECT_CLASS (cshop_application_parent_class)->dispose (object);
+}
+
+static void
+quit_activated (G_GNUC_UNUSED GSimpleAction *action,
+ G_GNUC_UNUSED GVariant *parameter,
+ gpointer app)
+{
+ g_application_quit (G_APPLICATION (app));
+}
+
+static GActionEntry action_entries[] =
+{
+ { "quit", quit_activated, NULL, NULL, NULL }
+};
+
+static void
+cshop_application_startup (GApplication *app)
+{
+ gchar *filename;
+ GtkBuilder *builder;
+ CshopApplication *self;
+
+ G_APPLICATION_CLASS (cshop_application_parent_class)->startup (app);
+
+ self = CSHOP_APPLICATION (app);
+
+ g_action_map_add_action_entries (G_ACTION_MAP (app),
+ action_entries,
+ G_N_ELEMENTS (action_entries),
+ app);
+
+ const gchar *quit_accel[] = { "<Ctrl>Q", NULL };
+
+ gtk_application_set_accels_for_action (GTK_APPLICATION (app),
+ "app.quit",
+ quit_accel);
+
+ self->window = cshop_window_new ();
+
+ gtk_application_add_window (GTK_APPLICATION (app),
+ GTK_WINDOW (self->window));
+
+ gtk_widget_show_all (self->window);
+
+ filename = g_build_filename (DATADIR, "menu.ui", NULL);
+ builder = gtk_builder_new_from_file (filename);
+ g_free (filename);
+
+ if (gtk_application_prefers_app_menu (GTK_APPLICATION (app)))
+ {
+ GObject *app_menu;
+ app_menu = gtk_builder_get_object (builder, "app-menu");
+ gtk_application_set_app_menu (GTK_APPLICATION (app),
+ G_MENU_MODEL (app_menu));
+ }
+ else
+ {
+ GObject *menubar;
+ menubar = gtk_builder_get_object (builder, "menubar");
+ gtk_application_set_menubar (GTK_APPLICATION (app),
+ G_MENU_MODEL (menubar));
+ }
+}
+
+static void
+cshop_application_activate (GApplication *app)
+{
+ CshopApplication *self;
+
+ self = CSHOP_APPLICATION (app);
+
+ gtk_window_present (GTK_WINDOW (self->window));
+
+ G_APPLICATION_CLASS (cshop_application_parent_class)->activate (app);
+}
+
+static void
+cshop_application_class_init (CshopApplicationClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GApplicationClass *app_class = G_APPLICATION_CLASS (klass);
+
+ object_class->dispose = cshop_application_dispose;
+
+ app_class->startup = cshop_application_startup;
+ app_class->activate = cshop_application_activate;
+}
+
+static void
+cshop_application_init (CshopApplication *self)
+{
+ self->window = NULL;
+}
+
+GtkApplication *
+cshop_application_new (void)
+{
+ return g_object_new (CSHOP_TYPE_APPLICATION,
+ "application-id", "de.pelzflorian.MyCopyshop",
+ NULL);
+}
diff --git a/bin/copyshop/src/cshopapplication.h b/bin/copyshop/src/cshopapplication.h
new file mode 100644
index 0000000..53ebf99
--- /dev/null
+++ b/bin/copyshop/src/cshopapplication.h
@@ -0,0 +1,36 @@
+/*
+ * copyshop - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#ifndef CSHOP_APPLICATION_H_
+#define CSHOP_APPLICATION_H_
+
+#include <gtk/gtk.h>
+#include "cshopwindow.h"
+
+G_BEGIN_DECLS
+
+#define CSHOP_TYPE_APPLICATION (cshop_application_get_type ())
+G_DECLARE_FINAL_TYPE (CshopApplication,
+ cshop_application,
+ CSHOP,
+ APPLICATION,
+ GtkApplication)
+
+GtkApplication *cshop_application_new (void);
+
+G_END_DECLS
+
+#endif
diff --git a/bin/copyshop/src/cshopraw.c b/bin/copyshop/src/cshopraw.c
new file mode 100644
index 0000000..e02efcf
--- /dev/null
+++ b/bin/copyshop/src/cshopraw.c
@@ -0,0 +1,184 @@
+/*
+ * copyshop - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#include <glib/gi18n.h>
+#include "cshopraw.h"
+
+enum {
+ COLUMN_NAME,
+ COLUMN_QUANTITY,
+ COLUMN_COST_PRICE,
+ N_COLUMNS
+};
+
+struct _CshopRaw
+{
+ GtkGridClass parent_class;
+
+ GtkWidget *treeview;
+};
+
+G_DEFINE_TYPE (CshopRaw,
+ cshop_raw,
+ GTK_TYPE_GRID)
+
+static void
+cshop_raw_class_init (CshopRawClass *klass)
+{
+}
+
+static GtkWidget *
+create_tree_view (void)
+{
+ GtkListStore *model;
+ GtkWidget *treeview;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ model = gtk_list_store_new (N_COLUMNS,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+ treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
+ g_object_unref (G_OBJECT (model));
+
+ renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("Name"),
+ renderer,
+ "text",
+ COLUMN_NAME,
+ NULL);
+ gtk_tree_view_column_set_expand (column, TRUE);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+
+ renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("Quantity"),
+ renderer,
+ "text",
+ COLUMN_QUANTITY,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+
+ renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("Cost Price"),
+ renderer,
+ "text",
+ COLUMN_COST_PRICE,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+
+ return treeview;
+}
+
+static void
+order_button_cb (GtkButton *button,
+ CshopRaw *raw)
+{
+ GtkWidget *toplevel_window;
+
+ toplevel_window = gtk_widget_get_toplevel (GTK_WIDGET(raw));
+ if (gtk_widget_is_toplevel (toplevel_window))
+ {
+ GtkDialogFlags flags;
+ gchar *msg;
+ GtkWidget *dialog;
+
+ flags = GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT;
+ msg = _("Error: We´ve got no money.");
+ dialog = gtk_message_dialog_new (GTK_WINDOW (toplevel_window),
+ flags,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_OK,
+ msg);
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+ }
+}
+
+static GtkWidget *
+create_top_toolbar (CshopRaw *raw, GtkBuilder *builder)
+{
+ GtkWidget *toolbar, *order_button;
+
+ toolbar = GTK_WIDGET (gtk_builder_get_object (builder,
+ "top-toolbar"));
+
+ order_button = GTK_WIDGET (gtk_builder_get_object (builder,
+ "order-button"));
+ g_signal_connect (order_button,
+ "clicked",
+ G_CALLBACK (order_button_cb),
+ raw);
+
+ return toolbar;
+}
+
+static GtkWidget *
+create_bottom_toolbar (CshopRaw *raw, GtkBuilder *builder)
+{
+ GtkWidget *toolbar;
+
+ toolbar = GTK_WIDGET (gtk_builder_get_object (builder,
+ "bottom-toolbar"));
+
+ return toolbar;
+}
+
+static void
+cshop_raw_init (CshopRaw *self)
+{
+ gchar *filename;
+ GtkBuilder *builder;
+ GtkWidget *grid;
+ GtkWidget *top_toolbar;
+ GtkWidget *sw;
+ GtkWidget *bottom_toolbar;
+ GtkWidget *treeview;
+
+ filename = g_build_filename (DATADIR, "toolbar.ui", NULL);
+ builder = gtk_builder_new_from_file (filename);
+ g_free (filename);
+
+ grid = gtk_grid_new ();
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (grid),
+ GTK_ORIENTATION_VERTICAL);
+ gtk_container_add (GTK_CONTAINER (self), grid);
+
+ top_toolbar = create_top_toolbar (self, builder);
+ gtk_container_add (GTK_CONTAINER (grid), top_toolbar);
+
+ sw = gtk_scrolled_window_new (NULL, NULL);
+ g_object_set (G_OBJECT (sw),
+ "expand", TRUE,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (grid), sw);
+
+ bottom_toolbar = create_bottom_toolbar (self, builder);
+ gtk_container_add (GTK_CONTAINER (grid), bottom_toolbar);
+
+ treeview = create_tree_view ();
+ self->treeview = treeview;
+ gtk_container_add (GTK_CONTAINER (sw), treeview);
+
+ gtk_widget_show_all (GTK_WIDGET (self));
+}
+
+GtkWidget *
+cshop_raw_new (void)
+{
+ return g_object_new (CSHOP_TYPE_RAW,
+ NULL);
+}
diff --git a/bin/copyshop/src/cshopraw.h b/bin/copyshop/src/cshopraw.h
new file mode 100644
index 0000000..54482d2
--- /dev/null
+++ b/bin/copyshop/src/cshopraw.h
@@ -0,0 +1,35 @@
+/*
+ * copyshop - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#ifndef CSHOP_RAW_H_
+#define CSHOP_RAW_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define CSHOP_TYPE_RAW (cshop_raw_get_type ())
+G_DECLARE_FINAL_TYPE (CshopRaw,
+ cshop_raw,
+ CSHOP,
+ RAW,
+ GtkGrid)
+
+GtkWidget *cshop_raw_new (void);
+
+G_END_DECLS
+
+#endif
diff --git a/bin/copyshop/src/cshopwindow.c b/bin/copyshop/src/cshopwindow.c
new file mode 100644
index 0000000..6e40624
--- /dev/null
+++ b/bin/copyshop/src/cshopwindow.c
@@ -0,0 +1,76 @@
+/*
+ * copyshop - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#include <glib/gi18n.h>
+#include "cshopwindow.h"
+#include "cshopraw.h"
+
+struct _CshopWindow
+{
+ GtkApplicationWindowClass parent_class;
+
+ GtkWidget *stack;
+};
+
+G_DEFINE_TYPE (CshopWindow,
+ cshop_window,
+ GTK_TYPE_APPLICATION_WINDOW)
+
+static void
+cshop_window_class_init (CshopWindowClass *klass)
+{
+}
+
+static void
+cshop_window_init (CshopWindow *self)
+{
+ GtkWidget *paned, *stack, *sidebar;
+
+ paned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
+
+ stack = gtk_stack_new ();
+ sidebar = gtk_stack_sidebar_new ();
+ gtk_stack_sidebar_set_stack (GTK_STACK_SIDEBAR (sidebar),
+ GTK_STACK (stack));
+
+ gtk_stack_add_titled (GTK_STACK (stack),
+ cshop_raw_new (),
+ "raw",
+ _("Raw Materials"));
+ gtk_stack_add_titled (GTK_STACK (stack),
+ gtk_drawing_area_new (),
+ "wip",
+ _("Work in Progress"));
+ gtk_stack_add_titled (GTK_STACK (stack),
+ gtk_drawing_area_new (),
+ "finished",
+ _("Finished Goods"));
+
+ gtk_paned_add1 (GTK_PANED (paned), sidebar);
+ gtk_paned_add2 (GTK_PANED (paned), stack);
+
+ gtk_container_add (GTK_CONTAINER (self),
+ paned);
+
+ self->stack = stack;
+}
+
+GtkWidget *
+cshop_window_new (void)
+{
+ return g_object_new (CSHOP_TYPE_WINDOW,
+ NULL);
+}
diff --git a/bin/copyshop/src/cshopwindow.h b/bin/copyshop/src/cshopwindow.h
new file mode 100644
index 0000000..e588b3f
--- /dev/null
+++ b/bin/copyshop/src/cshopwindow.h
@@ -0,0 +1,35 @@
+/*
+ * copyshop - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#ifndef CSHOP_WINDOW_H_
+#define CSHOP_WINDOW_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define CSHOP_TYPE_WINDOW (cshop_window_get_type ())
+G_DECLARE_FINAL_TYPE (CshopWindow,
+ cshop_window,
+ CSHOP,
+ WINDOW,
+ GtkApplicationWindow)
+
+GtkWidget *cshop_window_new (void);
+
+G_END_DECLS
+
+#endif
diff --git a/bin/copyshop/src/main.c b/bin/copyshop/src/main.c
new file mode 100644
index 0000000..927540f
--- /dev/null
+++ b/bin/copyshop/src/main.c
@@ -0,0 +1,41 @@
+/*
+ * copyshop - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <config.h>
+#include "cshopapplication.h"
+
+int
+main (int argc,
+ char **argv)
+{
+ GtkApplication *app;
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (GETTEXT_PACKAGE, DATADIR "/locale");
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ g_set_application_name (_("MyCopyshop"));
+
+ app = cshop_application_new ();
+ g_application_register (G_APPLICATION (app), NULL, NULL);
+
+ return g_application_run (G_APPLICATION (app),
+ argc,
+ argv);
+}
diff --git a/bin/copyshop/src/ui/menu.ui b/bin/copyshop/src/ui/menu.ui
new file mode 100644
index 0000000..015052a
--- /dev/null
+++ b/bin/copyshop/src/ui/menu.ui
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<interface>
+ <menu id="app-menu">
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Quit</attribute>
+ <attribute name="action">app.quit</attribute>
+ </item>
+ </section>
+ </menu>
+ <menu id="menubar">
+ <submenu>
+ <attribute name="label" translatable="yes">_File</attribute>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Quit</attribute>
+ <attribute name="action">app.quit</attribute>
+ </item>
+ </section>
+ </submenu>
+ </menu>
+</interface>
diff --git a/bin/copyshop/src/ui/toolbar.ui b/bin/copyshop/src/ui/toolbar.ui
new file mode 100644
index 0000000..8d97e5e
--- /dev/null
+++ b/bin/copyshop/src/ui/toolbar.ui
@@ -0,0 +1,118 @@
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkToolbar" id="top-toolbar">
+ <child>
+ <object class="GtkSeparatorToolItem">
+ <property name="draw">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolItem">
+ <child>
+ <object class="GtkButton" id="order-button">
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">_Place Order</property>
+ <property name="use-underline">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkToolbar" id="bottom-toolbar">
+ <style>
+ <class name="inline-toolbar"></class>
+ </style>
+
+ <child>
+ <object class="GtkToolItem">
+ <child>
+ <object class="GtkGrid">
+ <child>
+ <object class="GtkButton">
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">list-add-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton">
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">list-remove-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkSeparatorToolItem">
+ <property name="draw">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkToolItem">
+ <child>
+ <object class="GtkGrid">
+ <child>
+ <object class="GtkButton">
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">go-up-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton">
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">go-down-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkSeparatorToolItem">
+ <property name="draw">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkToolItem">
+ <child>
+ <object class="GtkButton">
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">text-editor-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/bin/hangman/hangman.c b/bin/hangman/hangman.c
new file mode 100644
index 0000000..125e7c6
--- /dev/null
+++ b/bin/hangman/hangman.c
@@ -0,0 +1,479 @@
+/*
+ * hangman - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#include <gtk/gtk.h>
+#include <string.h>
+
+struct _GameData
+{
+ gint state;
+ gchar *word;
+ gchar *word_state;
+ gchar *used;
+};
+
+typedef struct _GameData GameData;
+
+struct _AppData
+{
+ GameData *game_data;
+ GtkLabel *guessed;
+ GtkWidget *gallow;
+ GtkIMContext *input_method;
+};
+
+typedef struct _AppData AppData;
+
+#define BUFFER_SIZE 8192
+
+static gchar *
+get_word (void)
+{
+ GFile *file;
+ GFileInputStream *in;
+ gchar *readbuf;
+ gssize bytes_read;
+ gint32 line_count, random_line;
+ gboolean found;
+ GString *builder;
+ gchar *result, *result_up, *result_normalized;
+
+ file = g_file_new_for_path ("/usr/share/dict/usa");
+ in = g_file_read (file, NULL, NULL);
+
+ line_count = 0;
+
+ readbuf = g_malloc (BUFFER_SIZE);
+ bytes_read = BUFFER_SIZE;
+ while (bytes_read >= BUFFER_SIZE)
+ {
+ gint i;
+
+ bytes_read = g_input_stream_read (G_INPUT_STREAM (in),
+ readbuf,
+ BUFFER_SIZE,
+ NULL,
+ NULL);
+
+ for (i = 0; i < bytes_read; i++)
+ if (readbuf[i] == '\n')
+ line_count++;
+ }
+
+ g_assert (line_count > 0);
+
+ random_line = g_random_int_range (0, line_count - 1);
+
+ line_count = 0;
+
+ g_object_unref (in);
+ in = g_file_read (file, NULL, NULL);
+
+ found = FALSE;
+
+ builder = g_string_new (NULL);
+
+ bytes_read = BUFFER_SIZE;
+ while (bytes_read >= BUFFER_SIZE)
+ {
+ gint i;
+
+ bytes_read = g_input_stream_read (G_INPUT_STREAM (in),
+ readbuf,
+ BUFFER_SIZE,
+ NULL,
+ NULL);
+
+ i = 0;
+ if (found == FALSE)
+ while (i < bytes_read)
+ {
+ if (readbuf[i] == '\n')
+ {
+ line_count++;
+ if (line_count == random_line)
+ {
+ found = TRUE;
+ i++;
+ break;
+ }
+ }
+ i++;
+ }
+ if (found == TRUE)
+ while (i < bytes_read)
+ {
+ if (readbuf[i] == '\n')
+ goto get_word_end;
+ else
+ g_string_append_c (builder, readbuf[i]);
+ i++;
+ }
+ }
+
+get_word_end:
+ g_free (readbuf);
+ g_object_unref (in);
+ g_object_unref (file);
+
+ result = g_string_free (builder, FALSE);
+ result_up = g_utf8_strup (result, -1);
+ g_free (result);
+ result_normalized = g_utf8_normalize (result_up,
+ -1,
+ G_NORMALIZE_ALL);
+ g_free (result_up);
+ return result_normalized;
+}
+
+static void
+update_label (AppData *app_data)
+{
+ gchar *markup;
+
+ markup = g_strdup_printf ("<tt>%s</tt>",
+ app_data->game_data->word_state);
+ gtk_label_set_markup (app_data->guessed, markup);
+ g_free (markup);
+}
+
+static void
+new_game (AppData *app_data)
+{
+ GameData *game_data;
+ GString *builder;
+ gchar *tmp;
+ gunichar chr;
+
+ game_data = app_data->game_data;
+
+ game_data->state = 0;
+
+ g_free (game_data->word);
+ game_data->word = get_word ();
+
+ builder = g_string_new (NULL);
+ tmp = game_data->word;
+ while ((chr = g_utf8_get_char (tmp)) != '\0')
+ {
+ g_string_append_unichar (builder, '_');
+ tmp = g_utf8_next_char (tmp);
+ }
+ game_data->word_state = g_string_free (builder, FALSE);
+
+ g_free (game_data->used);
+ game_data->used = g_strdup ("");
+
+ update_label (app_data);
+
+ gtk_widget_queue_draw (app_data->gallow);
+}
+
+static void
+handle_input (GtkIMContext *input_method,
+ gchar *str,
+ AppData *app_data)
+{
+ GameData *game_data;
+ gchar *tmp, *remaining;
+ gunichar cur;
+
+ if (!g_utf8_validate (str, -1, NULL))
+ return;
+
+ game_data = app_data->game_data;
+
+ /* Make str uppercase and normalized. */
+ tmp = g_utf8_strup (str, -1);
+ str = g_utf8_normalize (tmp, -1, G_NORMALIZE_ALL);
+ g_free (tmp);
+
+ remaining = str;
+
+ while ((cur = g_utf8_get_char (remaining)) != '\0')
+ {
+ if (g_utf8_strchr (game_data->used, -1, cur) == NULL)
+ {
+ GString *builder;
+ gchar *tmp2;
+ gunichar chr;
+
+ /* Add cur to the used characters. */
+ tmp = g_strdup_printf ("%s%c", game_data->used, cur);
+ g_free (game_data->used);
+ game_data->used = tmp;
+
+ /* Replace all instances of cur in tmp. */
+ builder = g_string_new (NULL);
+ tmp = game_data->word_state;
+ tmp2 = game_data->word;
+ while ((chr = g_utf8_get_char (tmp2)) != '\0')
+ {
+ if (chr == cur)
+ g_string_append_unichar (builder, cur);
+ else
+ g_string_append_c (builder, g_utf8_get_char (tmp));
+
+ tmp = g_utf8_next_char (tmp);
+ tmp2 = g_utf8_next_char (tmp2);
+ }
+ tmp = g_string_free (builder, FALSE);
+
+ if (strcmp (tmp, game_data->word_state) == 0)
+ {
+ game_data->state++;
+ g_free (tmp);
+
+ if (game_data->state == 6)
+ {
+ g_free (game_data->word_state);
+ game_data->word_state = game_data->word;
+
+ update_label (app_data);
+
+ break;
+ }
+ }
+ else
+ {
+ g_free (game_data->word_state);
+ game_data->word_state = tmp;
+
+ update_label (app_data);
+
+ if (strcmp (game_data->word_state, game_data->word) == 0)
+ {
+ game_data->state = -1;
+ break;
+ }
+ }
+ }
+
+ remaining = g_utf8_next_char (remaining);
+ }
+
+ g_free (str);
+
+ gtk_widget_queue_draw (app_data->gallow);
+}
+
+static gboolean
+handle_key_press (GtkWidget *window,
+ GdkEventKey *key,
+ AppData *app_data)
+{
+ gint state;
+ GtkIMContext *input_method;
+
+ state = app_data->game_data->state;
+ if (state == -1 || state == 6)
+ {
+ new_game (app_data);
+ return FALSE;
+ }
+
+ input_method = app_data->input_method;
+ gtk_im_context_filter_keypress (input_method, key);
+
+ return FALSE;
+}
+
+static gdouble lines[] =
+{
+ /* gallow */
+ 0.375, 0.35, 0.5, 0.25,
+ 0.625, 0.35, 0.5, 0.25,
+ 0.5, 0.25, 0.5, -0.75,
+ 0.5, -0.75, -0.125, -0.75,
+ -0.125, -0.75, -0.125, -0.5,
+ /* hangman sans head */
+ -0.125, -0.25, -0.125, 0.375,
+ -0.35, 0.125, -0.13, -0.125,
+ 0.1, 0.125, -0.12, -0.125,
+ -0.35, 0.625, -0.13, 0.375,
+ 0.1, 0.625, -0.12, 0.375
+};
+
+static gboolean
+draw_callback (GtkWidget *widget,
+ cairo_t *cr,
+ GameData *game_data)
+{
+ gint state;
+
+ GtkStyleContext *style;
+ GtkStateFlags widget_state;
+ GdkRGBA draw_color;
+
+ gdouble width, height;
+
+ gint i;
+
+ state = game_data->state;
+
+ /* Set foreground color from theme. */
+ style = gtk_widget_get_style_context (widget);
+ widget_state = gtk_style_context_get_state (style);
+ gtk_style_context_get_color (style, widget_state, &draw_color);
+ gdk_cairo_set_source_rgba (cr, &draw_color);
+
+ width = gtk_widget_get_allocated_width (widget);
+ height = gtk_widget_get_allocated_height (widget);
+
+ if (width == 0.0 || height == 0.0)
+ return FALSE;
+
+ cairo_save (cr);
+
+ cairo_scale (cr, 0.5 * width, 0.5 * height);
+ cairo_translate (cr, 1.0, 1.0);
+ cairo_scale (cr, height / width, 1.0);
+
+ if (state >= 1)
+ {
+ cairo_arc (cr,
+ -0.125, -0.375,
+ 0.125,
+ 0, 2 * G_PI);
+ state--;
+ }
+
+ for (i = 0; i < state + 5; i++)
+ {
+ cairo_move_to (cr,
+ lines[4 * i + 0],
+ lines[4 * i + 1]);
+ cairo_line_to (cr,
+ lines[4 * i + 2],
+ lines[4 * i + 3]);
+ }
+
+ cairo_set_line_width (cr, 0.05);
+ cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
+ cairo_stroke (cr);
+
+ cairo_restore (cr);
+
+ return FALSE;
+}
+
+static void
+app_activate (GApplication *app)
+{
+ GList *window_list;
+ GtkWindow *window;
+
+ window_list = gtk_application_get_windows (GTK_APPLICATION (app));
+ g_assert_nonnull (window_list);
+
+ window = GTK_WINDOW (window_list->data);
+
+ gtk_window_present (window);
+}
+
+static void
+app_startup (GApplication *app)
+{
+ GtkWidget *window, *grid, *gallow, *guessed;
+
+ GtkIMContext *input_method;
+
+ GameData *game_data;
+ AppData *app_data;
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_default_size (GTK_WINDOW (window),
+ 370,
+ 300);
+ gtk_widget_set_events (window, gtk_widget_get_events (window) | GDK_KEY_PRESS_MASK);
+
+ grid = gtk_grid_new ();
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (grid),
+ GTK_ORIENTATION_VERTICAL);
+
+ gallow = gtk_drawing_area_new ();
+ g_object_set (G_OBJECT (gallow),
+ "expand", TRUE,
+ NULL);
+
+ guessed = gtk_label_new (NULL);
+ g_object_set (G_OBJECT (guessed),
+ "margin-top", 8,
+ "margin-bottom", 8,
+ NULL);
+
+ gtk_container_add (GTK_CONTAINER (window),
+ grid);
+ gtk_container_add (GTK_CONTAINER (grid),
+ gallow);
+ gtk_container_add (GTK_CONTAINER (grid),
+ guessed);
+
+ input_method = gtk_im_multicontext_new ();
+ gtk_im_context_set_use_preedit (input_method, FALSE);
+
+ game_data = g_malloc0 (sizeof (GameData));
+
+ app_data = g_malloc (sizeof (AppData));
+ app_data->game_data = game_data;
+ app_data->guessed = GTK_LABEL (guessed);
+ app_data->gallow = gallow;
+ app_data->input_method = input_method;
+
+ new_game (app_data);
+
+ g_signal_connect (gallow,
+ "draw",
+ G_CALLBACK (draw_callback),
+ game_data);
+ g_signal_connect (window,
+ "key-press-event",
+ G_CALLBACK (handle_key_press),
+ app_data);
+ g_signal_connect (input_method,
+ "commit",
+ G_CALLBACK (handle_input),
+ app_data);
+
+ gtk_application_add_window (GTK_APPLICATION (app),
+ GTK_WINDOW (window));
+ gtk_widget_show_all (window);
+}
+
+int
+main (int argc,
+ char **argv)
+{
+ GtkApplication *app;
+
+ app = gtk_application_new ("de.pelzflorian.Hangman",
+ G_APPLICATION_FLAGS_NONE);
+
+ g_signal_connect (app,
+ "activate",
+ G_CALLBACK (app_activate),
+ app);
+ g_signal_connect (app,
+ "startup",
+ G_CALLBACK (app_startup),
+ NULL);
+
+ g_application_register (G_APPLICATION (app), NULL, NULL);
+
+ return g_application_run (G_APPLICATION (app),
+ argc,
+ argv);
+}
diff --git a/bin/text/text-view-utils.c b/bin/text/text-view-utils.c
new file mode 100644
index 0000000..5bc73a4
--- /dev/null
+++ b/bin/text/text-view-utils.c
@@ -0,0 +1,115 @@
+/*
+ * text - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#include <gtk/gtk.h>
+#include <string.h>
+
+#define BUFFER_SIZE 8192
+
+void
+file_to_text_view (GFile *file,
+ GtkTextView *text_view)
+{
+ GFileInputStream *in;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ void *readbuf, *start;
+ gssize bytes_read;
+ gint i;
+
+ in = g_file_read (file, NULL, NULL);
+ buffer = gtk_text_buffer_new (NULL);
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+
+ readbuf = NULL;
+ bytes_read = BUFFER_SIZE;
+ for (i = 0; bytes_read >= BUFFER_SIZE; i++)
+ {
+ readbuf = g_realloc (readbuf, (i+1) * BUFFER_SIZE);
+ start = readbuf + i * BUFFER_SIZE;
+ bytes_read = g_input_stream_read (G_INPUT_STREAM (in),
+ start,
+ BUFFER_SIZE,
+ NULL,
+ NULL);
+ }
+
+ if (bytes_read >= 0 &&
+ g_utf8_validate (readbuf, (i-1) * BUFFER_SIZE + bytes_read, NULL))
+ {
+ gtk_text_buffer_insert (buffer,
+ &iter,
+ readbuf,
+ bytes_read);
+ }
+
+ gtk_text_view_set_buffer (text_view, buffer);
+
+ g_object_unref (in);
+ g_free (readbuf);
+}
+
+void
+file_from_text_view (GFile *file,
+ GtkTextView *text_view)
+{
+ GFileOutputStream *out;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter_start, iter_end;
+ gchar *text;
+ gsize text_length;
+ gint status;
+
+ out = g_file_replace (file,
+ NULL,
+ TRUE,
+ G_FILE_CREATE_NONE,
+ NULL,
+ NULL);
+ buffer = gtk_text_view_get_buffer (text_view);
+
+ gtk_text_buffer_get_start_iter (buffer, &iter_start);
+ gtk_text_buffer_get_start_iter (buffer, &iter_end);
+
+ while (!gtk_text_iter_is_end (&iter_start))
+ {
+ gtk_text_iter_forward_chars (&iter_end, BUFFER_SIZE / 4);
+ text = gtk_text_buffer_get_text (buffer,
+ &iter_start,
+ &iter_end,
+ TRUE);
+ text_length = strlen (text);
+ iter_start = iter_end;
+
+ status = g_output_stream_write_all (G_OUTPUT_STREAM (out),
+ text,
+ text_length,
+ NULL,
+ NULL,
+ NULL);
+
+ g_free (text);
+
+ if (!status)
+ break;
+ }
+
+ g_output_stream_close (G_OUTPUT_STREAM (out),
+ NULL,
+ NULL);
+
+ g_object_unref (out);
+}
diff --git a/bin/text/text-view-utils.h b/bin/text/text-view-utils.h
new file mode 100644
index 0000000..efafa8c
--- /dev/null
+++ b/bin/text/text-view-utils.h
@@ -0,0 +1,32 @@
+/*
+ * text - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#ifndef TEXT_VIEW_UTILS_H_
+#define TEXT_VIEW_UTILS_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+void file_to_text_view (GFile *file,
+ GtkTextView *text_view);
+
+void file_from_text_view (GFile *file,
+ GtkTextView *text_view);
+
+G_END_DECLS
+
+#endif
diff --git a/bin/text/text.c b/bin/text/text.c
new file mode 100644
index 0000000..2727c31
--- /dev/null
+++ b/bin/text/text.c
@@ -0,0 +1,126 @@
+/*
+ * text - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#include <gtk/gtk.h>
+#include "text-view-utils.h"
+
+struct _AppData
+{
+ GtkWindow *window;
+ GtkTextView *text_view;
+};
+
+typedef struct _AppData AppData;
+
+static void
+close_window (GtkWidget *widget)
+{
+ gtk_main_quit ();
+}
+
+static void
+open_file (GtkWidget *widget,
+ AppData *app_data)
+{
+ GtkWidget *dialog;
+ gint response;
+
+ dialog = gtk_file_chooser_dialog_new ("Open",
+ app_data->window,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ "_Cancel",
+ GTK_RESPONSE_CANCEL,
+ "_Open",
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ if (response == GTK_RESPONSE_ACCEPT)
+ {
+ GFile *file;
+ file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
+ file_to_text_view (file, app_data->text_view);
+ }
+
+ gtk_widget_destroy (dialog);
+}
+
+static void
+save_file (GtkWidget *widget,
+ AppData *app_data)
+{
+ GtkWidget *dialog;
+ gint response;
+
+ dialog = gtk_file_chooser_dialog_new ("Open",
+ app_data->window,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ "_Cancel",
+ GTK_RESPONSE_CANCEL,
+ "_Save",
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ if (response == GTK_RESPONSE_ACCEPT)
+ {
+ GFile *file;
+ file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
+ file_from_text_view (file, app_data->text_view);
+ }
+
+ gtk_widget_destroy (dialog);
+}
+
+int
+main ()
+{
+ GtkBuilder *builder;
+ GObject *window, *open_button, *save_button, *text_view;
+ AppData *app_data;
+
+ gtk_init (0, NULL);
+
+ builder = gtk_builder_new_from_file ("./text.ui");
+ window = gtk_builder_get_object (builder,
+ "window");
+ open_button = gtk_builder_get_object (builder,
+ "open-button");
+ save_button = gtk_builder_get_object (builder,
+ "save-button");
+ text_view = gtk_builder_get_object (builder,
+ "text-view");
+
+ app_data = g_malloc (sizeof (AppData));
+ app_data->window = GTK_WINDOW (window);
+ app_data->text_view = GTK_TEXT_VIEW (text_view);
+
+ g_signal_connect (window,
+ "destroy",
+ G_CALLBACK (close_window),
+ NULL);
+ g_signal_connect (open_button,
+ "clicked",
+ G_CALLBACK (open_file),
+ app_data);
+ g_signal_connect (save_button,
+ "clicked",
+ G_CALLBACK (save_file),
+ app_data);
+ gtk_widget_show_all (GTK_WIDGET (window));
+ gtk_main ();
+ return 0;
+}
diff --git a/bin/text/text.ui b/bin/text/text.ui
new file mode 100644
index 0000000..38876d5
--- /dev/null
+++ b/bin/text/text.ui
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.20.0 -->
+<interface>
+ <requires lib="gtk+" version="3.20"/>
+ <object class="GtkWindow" id="window">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTextView" id="text-view">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="titlebar">
+ <object class="GtkHeaderBar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_subtitle">False</property>
+ <property name="show_close_button">True</property>
+ <child>
+ <object class="GtkButton" id="open-button">
+ <property name="label" translatable="yes">_Open</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="save-button">
+ <property name="label" translatable="yes">_Save</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/bin/text2/menu.ui b/bin/text2/menu.ui
new file mode 100644
index 0000000..eea3d04
--- /dev/null
+++ b/bin/text2/menu.ui
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<interface>
+ <menu id="app-menu">
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Open</attribute>
+ <attribute name="action">app.open</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Quit</attribute>
+ <attribute name="action">app.quit</attribute>
+ </item>
+ </section>
+ </menu>
+ <menu id="menubar">
+ <submenu>
+ <attribute name="label" translatable="yes">_File</attribute>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Open</attribute>
+ <attribute name="action">app.open</attribute>
+ </item>
+ </section>
+ </submenu>
+ </menu>
+</interface>
diff --git a/bin/text2/text-view-utils.c b/bin/text2/text-view-utils.c
new file mode 100644
index 0000000..5bc73a4
--- /dev/null
+++ b/bin/text2/text-view-utils.c
@@ -0,0 +1,115 @@
+/*
+ * text - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#include <gtk/gtk.h>
+#include <string.h>
+
+#define BUFFER_SIZE 8192
+
+void
+file_to_text_view (GFile *file,
+ GtkTextView *text_view)
+{
+ GFileInputStream *in;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ void *readbuf, *start;
+ gssize bytes_read;
+ gint i;
+
+ in = g_file_read (file, NULL, NULL);
+ buffer = gtk_text_buffer_new (NULL);
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+
+ readbuf = NULL;
+ bytes_read = BUFFER_SIZE;
+ for (i = 0; bytes_read >= BUFFER_SIZE; i++)
+ {
+ readbuf = g_realloc (readbuf, (i+1) * BUFFER_SIZE);
+ start = readbuf + i * BUFFER_SIZE;
+ bytes_read = g_input_stream_read (G_INPUT_STREAM (in),
+ start,
+ BUFFER_SIZE,
+ NULL,
+ NULL);
+ }
+
+ if (bytes_read >= 0 &&
+ g_utf8_validate (readbuf, (i-1) * BUFFER_SIZE + bytes_read, NULL))
+ {
+ gtk_text_buffer_insert (buffer,
+ &iter,
+ readbuf,
+ bytes_read);
+ }
+
+ gtk_text_view_set_buffer (text_view, buffer);
+
+ g_object_unref (in);
+ g_free (readbuf);
+}
+
+void
+file_from_text_view (GFile *file,
+ GtkTextView *text_view)
+{
+ GFileOutputStream *out;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter_start, iter_end;
+ gchar *text;
+ gsize text_length;
+ gint status;
+
+ out = g_file_replace (file,
+ NULL,
+ TRUE,
+ G_FILE_CREATE_NONE,
+ NULL,
+ NULL);
+ buffer = gtk_text_view_get_buffer (text_view);
+
+ gtk_text_buffer_get_start_iter (buffer, &iter_start);
+ gtk_text_buffer_get_start_iter (buffer, &iter_end);
+
+ while (!gtk_text_iter_is_end (&iter_start))
+ {
+ gtk_text_iter_forward_chars (&iter_end, BUFFER_SIZE / 4);
+ text = gtk_text_buffer_get_text (buffer,
+ &iter_start,
+ &iter_end,
+ TRUE);
+ text_length = strlen (text);
+ iter_start = iter_end;
+
+ status = g_output_stream_write_all (G_OUTPUT_STREAM (out),
+ text,
+ text_length,
+ NULL,
+ NULL,
+ NULL);
+
+ g_free (text);
+
+ if (!status)
+ break;
+ }
+
+ g_output_stream_close (G_OUTPUT_STREAM (out),
+ NULL,
+ NULL);
+
+ g_object_unref (out);
+}
diff --git a/bin/text2/text-view-utils.h b/bin/text2/text-view-utils.h
new file mode 100644
index 0000000..efafa8c
--- /dev/null
+++ b/bin/text2/text-view-utils.h
@@ -0,0 +1,32 @@
+/*
+ * text - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#ifndef TEXT_VIEW_UTILS_H_
+#define TEXT_VIEW_UTILS_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+void file_to_text_view (GFile *file,
+ GtkTextView *text_view);
+
+void file_from_text_view (GFile *file,
+ GtkTextView *text_view);
+
+G_END_DECLS
+
+#endif
diff --git a/bin/text2/text.c b/bin/text2/text.c
new file mode 100644
index 0000000..069f48f
--- /dev/null
+++ b/bin/text2/text.c
@@ -0,0 +1,246 @@
+/*
+ * text - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#include <gtk/gtk.h>
+#include "text-view-utils.h"
+
+struct _AppData
+{
+ GtkWindow *window;
+ GtkTextView *text_view;
+ gboolean destroy_on_cancel;
+};
+
+typedef struct _AppData AppData;
+
+static void
+close_window (GtkWidget *widget)
+{
+ g_object_unref (widget);
+}
+
+static void
+open_file (GtkWidget *widget,
+ AppData *app_data)
+{
+ GtkWidget *dialog;
+ gint response;
+
+ dialog = gtk_file_chooser_dialog_new ("Open",
+ app_data->window,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ "_Cancel",
+ GTK_RESPONSE_CANCEL,
+ "_Open",
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ if (response == GTK_RESPONSE_ACCEPT)
+ {
+ GFile *file;
+ file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
+ file_to_text_view (file, app_data->text_view);
+ }
+
+ gtk_widget_destroy (dialog);
+
+ if (app_data->destroy_on_cancel &&
+ response == GTK_RESPONSE_CANCEL)
+ {
+ gtk_widget_destroy (GTK_WIDGET (app_data->window));
+ }
+}
+
+static void
+save_file (GtkWidget *widget,
+ AppData *app_data)
+{
+ GtkWidget *dialog;
+ gint response;
+
+ dialog = gtk_file_chooser_dialog_new ("Open",
+ app_data->window,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ "_Cancel",
+ GTK_RESPONSE_CANCEL,
+ "_Save",
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ if (response == GTK_RESPONSE_ACCEPT)
+ {
+ GFile *file;
+ file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
+ file_from_text_view (file, app_data->text_view);
+ }
+
+ gtk_widget_destroy (dialog);
+}
+
+static AppData *
+create_window (GApplication *app)
+{
+ GtkBuilder *builder;
+ GObject *window, *open_button, *save_button, *text_view;
+ AppData *app_data;
+
+ builder = gtk_builder_new_from_file ("./text.ui");
+ window = gtk_builder_get_object (builder,
+ "window");
+ gtk_application_add_window (GTK_APPLICATION (app),
+ GTK_WINDOW (window));
+ open_button = gtk_builder_get_object (builder,
+ "open-button");
+ save_button = gtk_builder_get_object (builder,
+ "save-button");
+ text_view = gtk_builder_get_object (builder,
+ "text-view");
+
+ app_data = g_malloc (sizeof (AppData));
+ app_data->window = GTK_WINDOW (window);
+ app_data->text_view = GTK_TEXT_VIEW (text_view);
+ app_data->destroy_on_cancel = FALSE;
+
+ g_signal_connect (window,
+ "destroy",
+ G_CALLBACK (close_window),
+ NULL);
+ g_signal_connect (open_button,
+ "clicked",
+ G_CALLBACK (open_file),
+ app_data);
+ g_signal_connect (save_button,
+ "clicked",
+ G_CALLBACK (save_file),
+ app_data);
+ gtk_widget_show_all (GTK_WIDGET (window));
+
+ return app_data;
+}
+
+static void
+app_activate (GApplication *app)
+{
+ create_window (app);
+}
+
+static void
+app_open (GApplication *app,
+ GFile **files,
+ gint n_files)
+{
+ AppData *app_data;
+ gint i;
+ for (i = 0; i < n_files; i++)
+ {
+ app_data = create_window (app);
+ file_to_text_view (files[i], app_data->text_view);
+ }
+}
+
+static void
+app_startup (GApplication *app)
+{
+ GtkBuilder *builder;
+
+ builder = gtk_builder_new_from_file ("./menu.ui");
+
+ if (gtk_application_prefers_app_menu (GTK_APPLICATION (app)))
+ {
+ GObject *app_menu;
+ app_menu = gtk_builder_get_object (builder, "app-menu");
+ gtk_application_set_app_menu (GTK_APPLICATION (app),
+ G_MENU_MODEL (app_menu));
+ }
+ else
+ {
+ GObject *menubar;
+ menubar = gtk_builder_get_object (builder, "menubar");
+ gtk_application_set_menubar (GTK_APPLICATION (app),
+ G_MENU_MODEL (menubar));
+ }
+}
+
+static void
+open_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ AppData *app_data;
+ app_data = create_window (G_APPLICATION (app));
+ app_data->destroy_on_cancel = TRUE;
+ open_file (NULL, app_data);
+}
+
+static void
+quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ g_application_quit (G_APPLICATION (app));
+}
+
+static GActionEntry action_entries[] =
+{
+ { "open", open_activated, NULL, NULL, NULL },
+ { "quit", quit_activated, NULL, NULL, NULL }
+};
+
+int
+main (int argc,
+ char **argv)
+{
+ GtkApplication *app;
+
+ app = gtk_application_new ("de.pelzflorian.Texteditor",
+ G_APPLICATION_HANDLES_OPEN);
+
+ g_signal_connect (app,
+ "activate",
+ G_CALLBACK (app_activate),
+ app);
+ g_signal_connect (app,
+ "open",
+ G_CALLBACK (app_open),
+ NULL);
+ g_signal_connect (app,
+ "startup",
+ G_CALLBACK (app_startup),
+ NULL);
+
+ g_action_map_add_action_entries (G_ACTION_MAP (app),
+ action_entries,
+ G_N_ELEMENTS (action_entries),
+ app);
+
+ const gchar *open_accel[] = { "<Ctrl>O", NULL };
+ const gchar *quit_accel[] = { "<Ctrl>Q", NULL };
+
+ gtk_application_set_accels_for_action (app,
+ "app.open",
+ open_accel);
+ gtk_application_set_accels_for_action (app,
+ "app.quit",
+ quit_accel);
+
+ g_application_register (G_APPLICATION (app), NULL, NULL);
+
+ return g_application_run (G_APPLICATION (app),
+ argc,
+ argv);
+}
diff --git a/bin/text2/text.ui b/bin/text2/text.ui
new file mode 100644
index 0000000..690a7bd
--- /dev/null
+++ b/bin/text2/text.ui
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.20.0 -->
+<interface>
+ <requires lib="gtk+" version="3.20"/>
+ <object class="GtkApplicationWindow" id="window">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTextView" id="text-view">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="titlebar">
+ <object class="GtkHeaderBar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_subtitle">False</property>
+ <property name="show_close_button">True</property>
+ <child>
+ <object class="GtkButton" id="open-button">
+ <property name="label" translatable="yes">_Open</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="save-button">
+ <property name="label" translatable="yes">_Save</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/bin/text3/menu.ui b/bin/text3/menu.ui
new file mode 100644
index 0000000..eea3d04
--- /dev/null
+++ b/bin/text3/menu.ui
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<interface>
+ <menu id="app-menu">
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Open</attribute>
+ <attribute name="action">app.open</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Quit</attribute>
+ <attribute name="action">app.quit</attribute>
+ </item>
+ </section>
+ </menu>
+ <menu id="menubar">
+ <submenu>
+ <attribute name="label" translatable="yes">_File</attribute>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Open</attribute>
+ <attribute name="action">app.open</attribute>
+ </item>
+ </section>
+ </submenu>
+ </menu>
+</interface>
diff --git a/bin/text3/text-view-utils.c b/bin/text3/text-view-utils.c
new file mode 100644
index 0000000..5bc73a4
--- /dev/null
+++ b/bin/text3/text-view-utils.c
@@ -0,0 +1,115 @@
+/*
+ * text - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#include <gtk/gtk.h>
+#include <string.h>
+
+#define BUFFER_SIZE 8192
+
+void
+file_to_text_view (GFile *file,
+ GtkTextView *text_view)
+{
+ GFileInputStream *in;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ void *readbuf, *start;
+ gssize bytes_read;
+ gint i;
+
+ in = g_file_read (file, NULL, NULL);
+ buffer = gtk_text_buffer_new (NULL);
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+
+ readbuf = NULL;
+ bytes_read = BUFFER_SIZE;
+ for (i = 0; bytes_read >= BUFFER_SIZE; i++)
+ {
+ readbuf = g_realloc (readbuf, (i+1) * BUFFER_SIZE);
+ start = readbuf + i * BUFFER_SIZE;
+ bytes_read = g_input_stream_read (G_INPUT_STREAM (in),
+ start,
+ BUFFER_SIZE,
+ NULL,
+ NULL);
+ }
+
+ if (bytes_read >= 0 &&
+ g_utf8_validate (readbuf, (i-1) * BUFFER_SIZE + bytes_read, NULL))
+ {
+ gtk_text_buffer_insert (buffer,
+ &iter,
+ readbuf,
+ bytes_read);
+ }
+
+ gtk_text_view_set_buffer (text_view, buffer);
+
+ g_object_unref (in);
+ g_free (readbuf);
+}
+
+void
+file_from_text_view (GFile *file,
+ GtkTextView *text_view)
+{
+ GFileOutputStream *out;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter_start, iter_end;
+ gchar *text;
+ gsize text_length;
+ gint status;
+
+ out = g_file_replace (file,
+ NULL,
+ TRUE,
+ G_FILE_CREATE_NONE,
+ NULL,
+ NULL);
+ buffer = gtk_text_view_get_buffer (text_view);
+
+ gtk_text_buffer_get_start_iter (buffer, &iter_start);
+ gtk_text_buffer_get_start_iter (buffer, &iter_end);
+
+ while (!gtk_text_iter_is_end (&iter_start))
+ {
+ gtk_text_iter_forward_chars (&iter_end, BUFFER_SIZE / 4);
+ text = gtk_text_buffer_get_text (buffer,
+ &iter_start,
+ &iter_end,
+ TRUE);
+ text_length = strlen (text);
+ iter_start = iter_end;
+
+ status = g_output_stream_write_all (G_OUTPUT_STREAM (out),
+ text,
+ text_length,
+ NULL,
+ NULL,
+ NULL);
+
+ g_free (text);
+
+ if (!status)
+ break;
+ }
+
+ g_output_stream_close (G_OUTPUT_STREAM (out),
+ NULL,
+ NULL);
+
+ g_object_unref (out);
+}
diff --git a/bin/text3/text-view-utils.h b/bin/text3/text-view-utils.h
new file mode 100644
index 0000000..efafa8c
--- /dev/null
+++ b/bin/text3/text-view-utils.h
@@ -0,0 +1,32 @@
+/*
+ * text - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#ifndef TEXT_VIEW_UTILS_H_
+#define TEXT_VIEW_UTILS_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+void file_to_text_view (GFile *file,
+ GtkTextView *text_view);
+
+void file_from_text_view (GFile *file,
+ GtkTextView *text_view);
+
+G_END_DECLS
+
+#endif
diff --git a/bin/text3/text.c b/bin/text3/text.c
new file mode 100644
index 0000000..85baccd
--- /dev/null
+++ b/bin/text3/text.c
@@ -0,0 +1,271 @@
+/*
+ * text - Part of my GTK+ workshop.
+ *
+ * Written in 2016 by Florian Pelz <pelzflorian@pelzflorian.de>
+ *
+ * To the extent possible under law, the author(s) have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty.
+ *
+ * You should have received a copy of the CC0 Public Domain Dedication
+ * along with this software. If not, see
+ * <http://creativecommons.org/publicdomain/zero/1.0/>.
+ *
+ */
+
+#include <gtk/gtk.h>
+#include "text-view-utils.h"
+
+struct _AppData
+{
+ GtkWindow *window;
+ GtkTextView *text_view;
+ gboolean destroy_on_cancel;
+};
+
+typedef struct _AppData AppData;
+
+static void
+close_window (GtkWidget *widget)
+{
+ g_object_unref (widget);
+}
+
+static void
+open_file (GtkWidget *widget,
+ AppData *app_data)
+{
+ GtkWidget *dialog;
+ gint response;
+
+ dialog = gtk_file_chooser_dialog_new ("Open",
+ app_data->window,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ "_Cancel",
+ GTK_RESPONSE_CANCEL,
+ "_Open",
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ if (response == GTK_RESPONSE_ACCEPT)
+ {
+ GFile *file;
+ file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
+ file_to_text_view (file, app_data->text_view);
+ }
+
+ gtk_widget_destroy (dialog);
+
+ if (app_data->destroy_on_cancel &&
+ response == GTK_RESPONSE_CANCEL)
+ {
+ gtk_widget_destroy (GTK_WIDGET (app_data->window));
+ }
+}
+
+static void
+open_from_recent (GtkRecentChooser *chooser,
+ AppData *app_data)
+{
+ GtkRecentInfo *rec_info;
+ const gchar *uri;
+ GFile *file;
+ rec_info = gtk_recent_chooser_get_current_item (chooser);
+ uri = gtk_recent_info_get_uri (rec_info);
+ file = g_file_new_for_uri (uri);
+ file_to_text_view (file, app_data->text_view);
+ g_object_unref (file);
+ gtk_recent_info_unref (rec_info);
+}
+
+static void
+save_file (GtkWidget *widget,
+ AppData *app_data)
+{
+ GtkWidget *dialog;
+ gint response;
+
+ dialog = gtk_file_chooser_dialog_new ("Open",
+ app_data->window,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ "_Cancel",
+ GTK_RESPONSE_CANCEL,
+ "_Save",
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ if (response == GTK_RESPONSE_ACCEPT)
+ {
+ GFile *file;
+ file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
+ file_from_text_view (file, app_data->text_view);
+ }
+
+ gtk_widget_destroy (dialog);
+}
+
+static AppData *
+create_window (GApplication *app)
+{
+ GtkBuilder *builder;
+ GObject *window,
+ *open_button,
+ *recent_chooser,
+ *save_button,
+ *text_view;
+ AppData *app_data;
+
+ builder = gtk_builder_new_from_file ("./text.ui");
+ window = gtk_builder_get_object (builder,
+ "window");
+ gtk_application_add_window (GTK_APPLICATION (app),
+ GTK_WINDOW (window));
+ open_button = gtk_builder_get_object (builder,
+ "open-button");
+ recent_chooser = gtk_builder_get_object (builder,
+ "recent-chooser");
+ save_button = gtk_builder_get_object (builder,
+ "save-button");
+ text_view = gtk_builder_get_object (builder,
+ "text-view");
+
+ app_data = g_malloc (sizeof (AppData));
+ app_data->window = GTK_WINDOW (window);
+ app_data->text_view = GTK_TEXT_VIEW (text_view);
+ app_data->destroy_on_cancel = FALSE;
+
+ g_signal_connect (window,
+ "destroy",
+ G_CALLBACK (close_window),
+ NULL);
+ g_signal_connect (open_button,
+ "clicked",
+ G_CALLBACK (open_file),
+ app_data);
+ g_signal_connect (recent_chooser,
+ "item-activated",
+ G_CALLBACK (open_from_recent),
+ app_data);
+ g_signal_connect (save_button,
+ "clicked",
+ G_CALLBACK (save_file),
+ app_data);
+ gtk_widget_show_all (GTK_WIDGET (window));
+
+ return app_data;
+}
+
+static void
+app_activate (GApplication *app)
+{
+ create_window (app);
+}
+
+static void
+app_open (GApplication *app,
+ GFile **files,
+ gint n_files)
+{
+ AppData *app_data;
+ gint i;
+ for (i = 0; i < n_files; i++)
+ {
+ app_data = create_window (app);
+ file_to_text_view (files[i], app_data->text_view);
+ }
+}
+
+static void
+app_startup (GApplication *app)
+{
+ GtkBuilder *builder;
+
+ builder = gtk_builder_new_from_file ("./menu.ui");
+
+ if (gtk_application_prefers_app_menu (GTK_APPLICATION (app)))
+ {
+ GObject *app_menu;
+ app_menu = gtk_builder_get_object (builder, "app-menu");
+ gtk_application_set_app_menu (GTK_APPLICATION (app),
+ G_MENU_MODEL (app_menu));
+ }
+ else
+ {
+ GObject *menubar;
+ menubar = gtk_builder_get_object (builder, "menubar");
+ gtk_application_set_menubar (GTK_APPLICATION (app),
+ G_MENU_MODEL (menubar));
+ }
+}
+
+static void
+open_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ AppData *app_data;
+ app_data = create_window (G_APPLICATION (app));
+ app_data->destroy_on_cancel = TRUE;
+ open_file (NULL, app_data);
+}
+
+static void
+quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ g_application_quit (G_APPLICATION (app));
+}
+
+static GActionEntry action_entries[] =
+{
+ { "open", open_activated, NULL, NULL, NULL },
+ { "quit", quit_activated, NULL, NULL, NULL }
+};
+
+int
+main (int argc,
+ char **argv)
+{
+ GtkApplication *app;
+
+ app = gtk_application_new ("de.pelzflorian.Texteditor",
+ G_APPLICATION_HANDLES_OPEN);
+
+ g_signal_connect (app,
+ "activate",
+ G_CALLBACK (app_activate),
+ app);
+ g_signal_connect (app,
+ "open",
+ G_CALLBACK (app_open),
+ NULL);
+ g_signal_connect (app,
+ "startup",
+ G_CALLBACK (app_startup),
+ NULL);
+
+ g_action_map_add_action_entries (G_ACTION_MAP (app),
+ action_entries,
+ G_N_ELEMENTS (action_entries),
+ app);
+
+ const gchar *open_accel[] = { "<Ctrl>O", NULL };
+ const gchar *quit_accel[] = { "<Ctrl>Q", NULL };
+
+ gtk_application_set_accels_for_action (app,
+ "app.open",
+ open_accel);
+ gtk_application_set_accels_for_action (app,
+ "app.quit",
+ quit_accel);
+
+ g_application_register (G_APPLICATION (app), NULL, NULL);
+
+ return g_application_run (G_APPLICATION (app),
+ argc,
+ argv);
+}
diff --git a/bin/text3/text.ui b/bin/text3/text.ui
new file mode 100644
index 0000000..e178a4e
--- /dev/null
+++ b/bin/text3/text.ui
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.20.0 -->
+<interface>
+ <requires lib="gtk+" version="3.20"/>
+ <object class="GtkPopover" id="popover">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkRecentChooserWidget" id="recent-chooser">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="limit">20</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="open-button">
+ <property name="label" translatable="yes">Other _Documents…</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkApplicationWindow" id="window">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTextView" id="text-view">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="titlebar">
+ <object class="GtkHeaderBar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_subtitle">False</property>
+ <property name="show_close_button">True</property>
+ <child>
+ <object class="GtkMenuButton" id="popover-button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="popover">popover</property>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Open</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">pan-down-symbolic</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="save-button">
+ <property name="label" translatable="yes">_Save</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/tex/activities-overview.png b/tex/activities-overview.png
new file mode 100644
index 0000000..ce974e1
--- /dev/null
+++ b/tex/activities-overview.png
Binary files differ
diff --git a/tex/anmelden-qr.png b/tex/anmelden-qr.png
new file mode 100644
index 0000000..2e8beda
--- /dev/null
+++ b/tex/anmelden-qr.png
Binary files differ
diff --git a/tex/beamercolorthemeguipro.sty b/tex/beamercolorthemeguipro.sty
new file mode 100644
index 0000000..d790619
--- /dev/null
+++ b/tex/beamercolorthemeguipro.sty
@@ -0,0 +1,34 @@
+% modified from https://git.gnome.org/browse/presentation-templates/
+
+\mode<presentation>
+
+\definecolor{guadeclightblack}{HTML}{555555}
+\definecolor{guadecblue}{HTML}{018094}
+\colorlet{guadeclightblue}{guadecblue!50}
+\definecolor{guadeclightgrey}{HTML}{F5F5F4}
+
+\definecolor{adwaitablue}{HTML}{4A90D9}
+
+\definecolor{guadecbeamerred}{HTML}{D94C4A}
+\definecolor{guadecbeamergreen}{HTML}{4AD94C}
+
+% Settings
+\setbeamercolor*{normal text}{fg=guadeclightblack}
+\setbeamercolor*{alerted text}{fg=guadecbeamerred}
+\setbeamercolor*{example text}{fg=guadecbeamergreen}
+\setbeamercolor*{structure}{fg=guadecblue}
+\setbeamercolor*{background canvas}{parent=normal text}
+
+%\setbeamercolor*{title page header}{fg=white}
+%\setbeamercolor*{author}{fg=white}
+%\setbeamercolor*{date}{fg=white}
+\setbeamercolor*{background canvas}{bg=guadeclightgrey}
+
+\setbeamercolor*{block title}{bg=guadeclightblack, fg=adwaitablue}
+\setbeamercolor*{block body}{bg=guadeclightblack, fg=guadeclightgrey}
+
+\setbeamercolor{framesubtitle}{fg=guadeclightblue}
+\setbeamerfont{framesubtitle}{size=\large}
+
+\mode
+<all>
diff --git a/tex/c-language.png b/tex/c-language.png
new file mode 100644
index 0000000..22735af
--- /dev/null
+++ b/tex/c-language.png
Binary files differ
diff --git a/tex/copyleft.png b/tex/copyleft.png
new file mode 100644
index 0000000..d0d0d51
--- /dev/null
+++ b/tex/copyleft.png
Binary files differ
diff --git a/tex/copyshop-de.png b/tex/copyshop-de.png
new file mode 100644
index 0000000..ab79b70
--- /dev/null
+++ b/tex/copyshop-de.png
Binary files differ
diff --git a/tex/copyshop.png b/tex/copyshop.png
new file mode 100644
index 0000000..ddcbc9f
--- /dev/null
+++ b/tex/copyshop.png
Binary files differ
diff --git a/tex/einleitung.txt b/tex/einleitung.txt
new file mode 100644
index 0000000..d945dc9
--- /dev/null
+++ b/tex/einleitung.txt
@@ -0,0 +1,7 @@
+Einleitung
+----------
+
+- Hallo und Willkommen
+- heute kleine Pro"|gramme, morgen Über"|blick, wie man große schreibt
+- stellt Fragen
+- repräsentiere nicht GNOME &c.
diff --git a/tex/gtk-logo.png b/tex/gtk-logo.png
new file mode 100644
index 0000000..4fd4476
--- /dev/null
+++ b/tex/gtk-logo.png
Binary files differ
diff --git a/tex/handout-01-install.tex b/tex/handout-01-install.tex
new file mode 100644
index 0000000..a5e6ad3
--- /dev/null
+++ b/tex/handout-01-install.tex
@@ -0,0 +1,113 @@
+% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
+% International License. To view a copy of this license, visit
+% http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+\documentclass[a4paper, 11pt]{article}
+
+\usepackage{fontspec}
+
+\setmainfont{Cantarell}
+
+\usepackage[ngerman]{babel}
+
+% No uppercase hyphenation.
+\uchyph=0
+
+\usepackage[parfill]{parskip}
+\usepackage{listings}
+\usepackage{hyperref}
+
+\usepackage{fancyhdr}
+\setlength{\headheight}{14.5pt}
+\setlength{\footskip}{0pt}
+\lhead{Handout 1: Installation}
+\rhead{\thepage}
+\cfoot{}
+\pagestyle{fancy}
+
+\begin{document}
+
+Zu"|nächst müssen für die Pro"|gramm"|ent"|wicklung nötige Werk"|zeuge in"|stalliert werden. Da"|zu ge"|hören:
+
+\begin{itemize}
+\item Ein Compiler für die C-Pro"|grammier"|sprache wie \texttt{gcc} oder \texttt{clang},
+\item ein brauch"|barer Text"|editor wie \texttt{gedit} oder \texttt{gnome-builder},
+\item die GTK+-Biblio"|thek und was da"|zu ge"|hört und
+\item noch ein paar hilf"|reiche Werk"|zeuge (De"|bugger, Auto"|tools, \dots).
+\end{itemize}
+
+\section{Arch Linux}
+
+Folgender Terminal-Be"|fehl in"|stalliert die Werk"|zeuge:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+# pacman -Syu --needed base-devel gtk3 gnome-builder
+ git gdb valgrind
+\end{lstlisting}
+
+\section{Fedora}
+
+Folgende Terminal-Be"|fehle in"|stallieren die Werk"|zeuge:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ sudo dnf upgrade
+$ sudo dnf groups install "Development Tools"
+$ sudo dnf groups install
+ "C Development Tools and Libraries"
+$ sudo dnf install gtk3-devel gnome-builder
+\end{lstlisting}
+
+\section{Debian und Ubuntu}
+
+Folgende Terminal-Be"|fehle in"|stallieren die Werk"|zeuge:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ sudo apt-get update
+$ sudo apt-get upgrade
+$ sudo apt-get install build-essential autoconf git
+ valgrind libgtk-3-dev gtk-3-examples gnome-builder
+\end{lstlisting}
+
+\section{OS X}
+
+Im Mac App Store muss XCode in"|stalliert und dann ge"|startet werden. In Terminal.app sind dann folgende Be"|fehle ein"|zu"|geben:
+
+\begin{lstlisting}
+$ curl https://git.gnome.org/browse/gtk-osx/plain/
+ gtk-osx-build-setup.sh > gtk-osx-build-setup.sh
+$ chmod +x gtk-osx-build-setup.sh
+$ ./gtk-osx-build-setup.sh # evtl. zweimal ausführen
+$ echo 'export PATH="$PATH:~/.local/bin"'
+ >> ~/.bash_profile
+$ . ~/.bash_profile
+$ sudo mkdir /usr/local/bin
+$ sudo ln -s /usr/bin/python2.7 /usr/local/bin/python2
+$ jhbuild bootstrap
+$ jhbuild build meta-gtk-osx-bootstrap
+ meta-gtk-osx-gtk3
+$ jhbuild shell
+\end{lstlisting}
+
+De"|tails sind on"|line zu finden:
+
+\url{https://wiki.gnome.org/Projects/GTK+/OSX}
+
+\section{Windows}
+
+Viele freie Unix-Pro"|gramme haben Windows-Versionen, die z.B. über MSYS2 in"|stalliert werden können:
+
+\url{https://msys2.github.io/}
+
+Nach"|dem MSYS2 wie dort be"|schrieben in"|stalliert wurde, kann in der MSYS2-Shell folgender Be"|fehl die Werk"|zeuge in"|stallieren:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ pacman -Syu --needed base-devel git
+ mingw-w64-x86_64-binutils mingw-w64-x86_64-gcc
+ mingw-w64-x86_64-pkg-config mingw-w64-x86_64-gtk3
+ mingw-w64-x86_64-gedit
+\end{lstlisting}
+
+GNOME Builder existiert noch nicht auf Windows, aber gedit kann be"|nutzt werden. Val"|grind gibt es auch nicht.
+
+\end{document}
diff --git a/tex/handout-02-hello-gtk.tex b/tex/handout-02-hello-gtk.tex
new file mode 100644
index 0000000..7f377c3
--- /dev/null
+++ b/tex/handout-02-hello-gtk.tex
@@ -0,0 +1,125 @@
+% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
+% International License. To view a copy of this license, visit
+% http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+\documentclass[a4paper, 11pt]{article}
+
+\usepackage{fontspec}
+
+\setmainfont{Cantarell}
+
+\usepackage[ngerman]{babel}
+
+% No uppercase hyphenation.
+\uchyph=0
+
+\usepackage[parfill]{parskip}
+\usepackage{listings}
+
+\usepackage{fancyhdr}
+\setlength{\headheight}{14.5pt}
+\setlength{\footskip}{0pt}
+\lhead{Handout 2: Hallo GTK+!}
+\rhead{\thepage}
+\cfoot{}
+\pagestyle{fancy}
+
+\begin{document}
+
+Ein grund"|legendes GTK+-Pro"|gramm:
+
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+#include <gtk/gtk.h>
+
+static void
+close_window (GtkWidget *widget)
+{
+ gtk_main_quit ();
+}
+
+int
+main ()
+{
+ GtkWidget *window;
+ gtk_init (0, NULL);
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ g_signal_connect (window,
+ "destroy",
+ G_CALLBACK (close_window),
+ NULL);
+ gtk_widget_show_all (window);
+ gtk_main ();
+ return 0;
+}
+\end{lstlisting}
+
+Kom"|pilieren mit:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ gcc `pkg-config --cflags gtk+-3.0` -o hello
+ hello.c `pkg-config --libs gtk+-3.0` -Wall
+\end{lstlisting}
+
+Zum De"|buggen:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ gcc … -g -Og # zum Kompilieren
+$ gdb ./hello # Debugger starten
+# Ursprung von Warnungen finden:
+$ G_DEBUG="fatal-warnings" gdb ./hello
+# Speicherfehler finden:
+$ valgrind --leak-check=full > out 2>&1
+# Programmablauf protokollieren:
+$ rr record ./hello
+$ rr replay
+\end{lstlisting}
+
+\pagebreak
+
+Version 2.0; mit Knopf:
+
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+#include <gtk/gtk.h>
+
+static void
+close_window (GtkWidget *widget)
+{
+ gtk_main_quit ();
+}
+
+int
+main ()
+{
+ GtkWidget *window, *grid, *hello_label, *button;
+ gtk_init (0, NULL);
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ grid = gtk_grid_new ();
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (grid),
+ GTK_ORIENTATION_VERTICAL);
+ hello_label = gtk_label_new ("Hello World!");
+ g_object_set (G_OBJECT (hello_label),
+ "expand", TRUE,
+ NULL);
+ button = gtk_button_new_with_mnemonic ("_Quit");
+ gtk_container_add (GTK_CONTAINER (window),
+ grid);
+ gtk_container_add (GTK_CONTAINER (grid),
+ hello_label);
+ gtk_container_add (GTK_CONTAINER (grid),
+ button);
+ g_signal_connect (button,
+ "clicked",
+ G_CALLBACK (close_window),
+ NULL);
+ g_signal_connect (window,
+ "destroy",
+ G_CALLBACK (close_window),
+ NULL);
+ gtk_widget_show_all (window);
+ gtk_main ();
+ return 0;
+}
+\end{lstlisting}
+
+\end{document}
diff --git a/tex/handout-03-glade.tex b/tex/handout-03-glade.tex
new file mode 100644
index 0000000..e7f51e5
--- /dev/null
+++ b/tex/handout-03-glade.tex
@@ -0,0 +1,83 @@
+% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
+% International License. To view a copy of this license, visit
+% http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+\documentclass[a4paper, 11pt]{article}
+
+\usepackage{fontspec}
+
+\setmainfont{Cantarell}
+
+\usepackage[ngerman]{babel}
+
+% No uppercase hyphenation.
+\uchyph=0
+
+\usepackage[parfill]{parskip}
+\usepackage{listings}
+
+\usepackage{fancyhdr}
+\setlength{\headheight}{14.5pt}
+\setlength{\footskip}{0pt}
+\lhead{Handout 3: Glade}
+\rhead{\thepage}
+\cfoot{}
+\pagestyle{fancy}
+
+\begin{document}
+
+So baut man eine GUI mit dem Glade-Editor:
+
+\begin{enumerate}
+\item Unter \emph{Top"|levels} ein \emph{Window} hin"|zu"|fügen.
+\item Dann z.B. unter \emph{Containers} ein \emph{Grid} mit zwei Plätzen ins Fenster setzen.
+\item Und dort hin"|ein kann wieder ein \emph{Label} und ein \emph{Button} platziert werden.
+\item Unten rechts kann die Be"|schriftung an"|ge"|passt werden.
+\item IDs \texttt{window} und \texttt{button} müssen zu"|ge"|wiesen werden.
+\item Die fertige Ober"|fläche kann dann als \texttt{hello.ui} ge"|speichert werden.
+% MAN KANN HIER AUCH SIGNALE EINFÜGEN, ABER DAS IST UMSTÄNDLICHER ZU LADEN
+\end{enumerate}
+
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+#include <gtk/gtk.h>
+
+static void
+close_window (GtkWidget *widget)
+{
+ gtk_main_quit ();
+}
+
+int
+main ()
+{
+ GtkBuilder *builder;
+ GObject *window, *button;
+ gtk_init (0, NULL);
+ builder = gtk_builder_new_from_file ("./hello.ui");
+ window = gtk_builder_get_object (builder,
+ "window");
+ button = gtk_builder_get_object (builder,
+ "button");
+ g_signal_connect (window,
+ "destroy",
+ G_CALLBACK (close_window),
+ NULL);
+ g_signal_connect (button,
+ "clicked",
+ G_CALLBACK (close_window),
+ NULL);
+ gtk_widget_show_all (GTK_WIDGET (window));
+ gtk_main ();
+ return 0;
+}
+\end{lstlisting}
+
+Kom"|pilieren mit:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ gcc `pkg-config --cflags gtk+-3.0` -o hello
+ hello.c `pkg-config --libs gtk+-3.0` -Wall
+\end{lstlisting}
+
+\end{document}
diff --git a/tex/handout-04-text-editor.tex b/tex/handout-04-text-editor.tex
new file mode 100644
index 0000000..01a1e85
--- /dev/null
+++ b/tex/handout-04-text-editor.tex
@@ -0,0 +1,83 @@
+% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
+% International License. To view a copy of this license, visit
+% http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+\documentclass[a4paper, 11pt]{article}
+
+\usepackage{fontspec}
+
+\setmainfont{Cantarell}
+
+\usepackage[ngerman]{babel}
+
+% No uppercase hyphenation.
+\uchyph=0
+
+\tolerance=362
+\hyphenpenalty=10
+
+\usepackage[parfill]{parskip}
+\usepackage{listings}
+\usepackage{hyperref}
+\let\oldurl\url
+\renewcommand\url[1]{{\footnotesize\oldurl{#1}}}
+
+\usepackage{fancyhdr}
+\setlength{\headheight}{14.5pt}
+\setlength{\footskip}{0pt}
+\lhead{Handout 4: Texteditor}
+\rhead{\thepage}
+\cfoot{}
+\pagestyle{fancy}
+
+\begin{document}
+
+\begin{center}
+\includegraphics[scale=0.5]{text-editor.png}
+\end{center}
+\vspace{1em}
+
+Wor"|aus zu"|sammen"|setzen? Zum Bei"|spiel:
+
+\begin{enumerate}
+\item Grund"|lage ist ein \emph{Window} mit Client-side-Fenster"|dekoration.
+\item Dar"|in so"|wohl eine \emph{Header"|Bar} als auch ein \emph{Scrolled"|Window}.
+\item Die \emph{Header"|Bar} ent"|hält einen \emph{Button} zum Öffnen und einen \emph{Button} zum Speichern.
+\item Das \emph{Scrolled"|Window} ent"|hält eine \emph{Text"|View}.
+\end{enumerate}
+
+\emph{Hin"|weis}:
+
+\url{https://pelzflorian.de/gui-prog-gtk-2016/text-view-utils.tar.gz}
+
+Dieser Code liest eine Datei an einem Stück ein. So"|lange die Datei ge"|laden wird, wird das Pro"|gramm blockiert. Für große Dateien wäre das also nicht akzeptabel.
+
+\pagebreak
+
+Statt eines ein"|fachen \texttt{gtk\_main()} kann man zur besseren Integration in das Be"|triebs"|system bzw. die Be"|nutzer"|ober"|fläche eine \emph{Application} be"|nutzen. Für weitere Features -- wie die Ab"|frage, ob Menü"|leisten im Fenster (wie bei Windows) ge"|zeigt werden sollen oder nicht (bei Ubuntus Unity, Mac OS X, \mbox{GNOME}) -- sollte dann auch ein \emph{ApplicationWindow} statt eines \emph{Window} ver"|wendet werden.
+
+\begin{itemize}
+\item Eine An"|wendung läuft nur ein"|mal gleich"|zeitig.
+\item Wieder"|holtes Öffnen aktiviert nur die be"|reits be"|stehende An"|wendung, welche dann z.B. ein neues Fenster öffnet.
+\item D.h. die \texttt{main()}-Methode er"|zeugt nur noch eine \emph{Application}, bindet ein \emph{activate}-Signal und startet die An"|wendung per \texttt{g\_application\_run()}-Auf"|ruf. \texttt{gtk\_main()} ist Teil der \emph{Application} und wird nicht separat auf"|ge"|rufen.
+\item Zu"|dem sollten Funktionen des An"|wendungs"|menüs, der Menü"|leiste und Tasten"|kürzel über die \emph{Action"|Map}-Eigen"|schaften der \emph{Application} be"|reit"|ge"|stellt werden.
+\end{itemize}
+
+Bei"|spiele für den Ein"|bau in den Editor vor"|her:
+
+\begin{itemize}
+\item \url{https://pelzflorian.de/git/gui-prog-gtk-2016/tree/bin/text2/text.c}
+\item \url{https://developer.gnome.org/gtk3/stable/ch01s04.html}
+\item Dokumentation für \emph{Gtk"|Application}, \emph{Gtk"|Application"|Window}
+\end{itemize}
+
+Weitere Ideen:
+
+\begin{itemize}
+\item An Stelle des \emph{Button}s zum Öffnen kann auch wie bei gedit ein \emph{Menu"|Button} mit \emph{Pop"|over} be"|nutzt werden. Dar"|in kann dann z.B. ein \emph{Re"|cent"|Chooser} und der normale Öffnen-\emph{Button} platziert werden.
+\item Die Bibliothek „Gtk"|Source"|View“ bietet ein spezialisiertes \emph{Text"|View}-Widget für Text"|editoren.
+\item Ana"|log kann auch ein Bild"|be"|trachter, PDF-Be"|trachter, Web-Browser u.s.w. ge"|schrieben werden. Neben der Ent"|wicklung des End"|nutzer"|pro"|gramms liegt die Haupt"|arbeit bei solchen Pro"|grammen beim Be"|reit"|stellen eines passenden Widgets.
+\end{itemize}
+
+\end{document}
diff --git a/tex/handout-05-hangman.tex b/tex/handout-05-hangman.tex
new file mode 100644
index 0000000..6d5886f
--- /dev/null
+++ b/tex/handout-05-hangman.tex
@@ -0,0 +1,51 @@
+% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
+% International License. To view a copy of this license, visit
+% http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+\documentclass[a4paper, 11pt]{article}
+
+\usepackage{fontspec}
+
+\setmainfont{Cantarell}
+
+\usepackage[ngerman]{babel}
+
+% No uppercase hyphenation.
+\uchyph=0
+
+\tolerance=362
+\hyphenpenalty=10
+
+\usepackage[parfill]{parskip}
+\usepackage{listings}
+\usepackage{hyperref}
+\let\oldurl\url
+\renewcommand\url[1]{{\footnotesize\oldurl{#1}}}
+
+\usepackage{fancyhdr}
+\setlength{\headheight}{14.5pt}
+\setlength{\footskip}{0pt}
+\lhead{Handout 5: Galgenmännchen}
+\rhead{\thepage}
+\cfoot{}
+\pagestyle{fancy}
+
+\begin{document}
+
+\begin{center}
+\includegraphics[scale=0.5]{hangman-term.png}
+\includegraphics[scale=0.5]{hangman-gtk.png}
+\end{center}
+\vspace{1em}
+
+Mehrere Sachen sind zu tun:
+\begin{enumerate}
+\item Zeichnen des Galgen"|männchens. Da"|für kann eine \emph{Drawing"|Area} be"|nutzt werden.
+\item Eine Datei mit Wörtern muss ein"|ge"|lesen werden. Zum Bei"|spiel:\\\url{https://www.archlinux.org/packages/community/any/words/}
+\item Ein Wort dar"|aus muss zu"|fällig aus"|ge"|wählt werden.
+\item Es muss mit Lücken an"|ge"|zeigt werden, d.h. als \emph{Label} oder z.B. in einer \emph{Drawing"|Area} mit Pango.
+\item Die Ein"|gabe muss ver"|arbeitet werden. Da"|bei kann ein \emph{IM"|Multi"|con"|text} helfen.
+\end{enumerate}
+
+\end{document}
diff --git a/tex/handout-06-autotools.tex b/tex/handout-06-autotools.tex
new file mode 100644
index 0000000..a3f1b43
--- /dev/null
+++ b/tex/handout-06-autotools.tex
@@ -0,0 +1,139 @@
+% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
+% International License. To view a copy of this license, visit
+% http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+\documentclass[a4paper, 11pt]{article}
+
+\usepackage{fontspec}
+
+\setmainfont{Cantarell}
+
+\usepackage[ngerman]{babel}
+
+% No uppercase hyphenation.
+\uchyph=0
+
+\tolerance=808
+\hyphenpenalty=10
+
+\usepackage[parfill]{parskip}
+\usepackage{listings}
+\usepackage{hyperref}
+\let\oldurl\url
+\renewcommand\url[1]{{\footnotesize\oldurl{#1}}}
+
+\usepackage{fancyhdr}
+\setlength{\headheight}{14.5pt}
+\setlength{\footskip}{0pt}
+\lhead{Handout 6: Autotools}
+\rhead{\thepage}
+\cfoot{}
+\pagestyle{fancy}
+
+\begin{document}
+
+\begin{center}
+\includegraphics[scale=0.5]{copyshop.png}
+\end{center}
+\vspace{1em}
+
+Wir wollen GNU Auto"|tools ver"|wenden, um auch größere Pro"|jekte leicht bauen, testen, ver"|breiten, etc. zu können.
+
+Da"|zu sollte in einem neuen, leeren Pro"|jekt"|ordner ein Unter"|ver"|zeich"|nis \texttt{src} oder \texttt{my"|copy"|shop} oder Ähn"|liches mit z.B. einer noch leeren Datei namens \texttt{main.c} als Grund"|ge"|rüst er"|zeugt werden. In diesem Ordner werden später alle Quell"|dateien des Pro"|gramms stehen.
+
+Nun wird im ur"|sprüng"|lichen Pro"|jekt"|ordner ein Terminal ge"|öffnet und dort folgende Be"|fehle aus"|ge"|führt:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ git init
+$ git add src/main.c
+$ autoscan
+\end{lstlisting}
+
+Mit \texttt{git} kann leicht ver"|waltet werden, welche Dateien zum Pro"|jekt da"|zu"|ge"|hören. Alle fremden Dateien können mit \texttt{git clean -df} ge"|löscht werden. Mit \texttt{git status} wird der Zu"|stand der Dateien im Pro"|jekt"|ordner an"|ge"|zeigt.
+
+\texttt{auto"|scan} er"|zeugt eine GNU-Auto"|conf-Datei \texttt{con"|figure.scan}, in welcher Pro"|jekt"|name etc. ein"|zu"|tragen sind. An"|schließend muss die fertige Datei in \texttt{con"|figure.ac} um"|be"|nannt werden. Auch später kann \texttt{auto"|scan} noch aus"|ge"|führt werden, um Ver"|besserungs"|vor"|schläge für den In"|halt von \texttt{con"|figure.ac} aus"|zu"|geben.
+
+Um da"|mit nun ein Pro"|jekt zu kon"|figurieren wird üblicher"|weise eine Datei \texttt{auto"|gen.sh} be"|reit"|ge"|stellt, z.B. mit folgendem In"|halt:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+#!/bin/sh
+cd $(dirname $0)
+autoreconf --force --install --verbose -Wall
+\end{lstlisting}
+
+Folgende Be"|fehle machen die Datei aus"|führ"|bar und führen sie da"|nach aus:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ chmod +x autogen.sh
+$ ./autogen.sh
+\end{lstlisting}
+
+Nun kann das Pro"|jekt zwar auto"|matisch kon"|figuriert werden, d.h. leicht an das Be"|triebs"|system und vom Nutzer ge"|wünschte Kon"|figuration z.B. des C-Com"|pilers an"|ge"|passt werden, aber noch nicht leicht auto"|matisch ge"|baut werden. Da"|bei hilft GNU Auto"|make:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ automake --add-missing
+\end{lstlisting}
+
+Zudem sollte folgendes in \texttt{con"|figure.ac} ein"|ge"|fügt werden, um Auto"|make zu nutzen und dar"|in Unter"|ver"|zeich"|nisse be"|nutzen zu können:
+
+\begin{lstlisting}[basicstyle=\ttfamily]
+AC_CONFIG_FILES([Makefile])
+AM_INIT_AUTOMAKE([-Wall -Werror -Wno-portability
+ subdir-objects])
+\end{lstlisting}
+
+Dies liefert zu"|sammen mit \texttt{auto"|gen.sh} die weiteren In"|struktionen, um das nötige \texttt{Make"|file.am} lauf"|fähig zu machen.
+
+Um dar"|in an"|zu"|geben, dass ein Pro"|gramm namens \texttt{copy"|shop} aus \texttt{src/main.c} und \texttt{src/cshopapp.c} er"|zeugt werden soll, sollte folgender Code ins \texttt{Make"|file.am} ein"|ge"|fügt werden. Achtung, das Einrücken muss mit Tabulatoren geschehen.
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=make]
+AM_CPPFLAGS = -DDATADIR=\"$(datadir)\"
+bin_PROGRAMS = src/copyshop
+src_copyshop_SOURCES = \
+ src/main.c \
+ src/cshopapplication.c \
+ src/cshopapplication.h \
+ src/cshopwindow.c \
+ src/cshopwindow.h
+src_copyshop_LDADD = $(GTK_LIBS)
+src_copyshop_CFLAGS = \
+ -I$(top_srcdir)/ \
+ $(GTK_CFLAGS)
+dist_data_DATA = \
+ src/ui/menu.ui
+\end{lstlisting}
+
+Folgender Code in \texttt{con"|figure.ac} de"|finiert die nötigen Variablen \texttt{GTK\_LIBS} und \texttt{GTK\_CFLAGS}:
+
+\begin{lstlisting}[basicstyle=\ttfamily]
+# Checks for libraries.
+PKG_CHECK_MODULES([GTK],[gtk+-3.0 >= 3.16])
+\end{lstlisting}
+
+Auf die Kon"|figuration kann zu"|ge"|griffen werden mit \\\texttt{\#include <config.h>}.
+
+Nun kann das Pro"|gramm wie folgt mit den Standard"|optionen kon"|figuriert und kom"|piliert, in"|stalliert und wieder de"|in"|stalliert werden:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ ./autogen.sh
+$ CFLAGS="-Wall" CPPFLAGS="-Wall" ./configure
+$ make
+# make install
+# make uninstall
+\end{lstlisting}
+
+Folgender Be"|fehl er"|zeugt eine Datei mit allem Quell"|code („Tarball“) zur Dis"|tribution:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ make dist
+\end{lstlisting}
+
+Bei ernst"|haften Pro"|jekten bietet es sich an, die Hand"|bücher der GNU Auto"|tools nach weiteren Empfehlungen zu durch"|suchen:
+
+\begin{itemize}
+\item \url{https://www.gnu.org/software/autoconf/manual/autoconf.html}
+\item \url{https://www.gnu.org/software/automake/manual/automake.html}
+\end{itemize}
+
+\end{document}
diff --git a/tex/handout-07-translations.tex b/tex/handout-07-translations.tex
new file mode 100644
index 0000000..a5d7b63
--- /dev/null
+++ b/tex/handout-07-translations.tex
@@ -0,0 +1,125 @@
+% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
+% International License. To view a copy of this license, visit
+% http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+\documentclass[a4paper, 11pt]{article}
+
+\usepackage{fontspec}
+
+\setmainfont{Cantarell}
+
+\usepackage[ngerman]{babel}
+
+% No uppercase hyphenation.
+\uchyph=0
+
+\tolerance=808
+\hyphenpenalty=10
+
+\usepackage[parfill]{parskip}
+\usepackage{listings}
+\usepackage{hyperref}
+\let\oldurl\url
+\renewcommand\url[1]{{\footnotesize\oldurl{#1}}}
+
+\usepackage{fancyhdr}
+\setlength{\headheight}{14.5pt}
+\setlength{\footskip}{0pt}
+\lhead{Handout 7: Übersetzungen}
+\rhead{\thepage}
+\cfoot{}
+\pagestyle{fancy}
+
+\begin{document}
+
+\begin{center}
+\includegraphics[scale=0.3]{copyshop.png}
+\includegraphics[scale=0.3]{copyshop-de.png}
+\end{center}
+\vspace{1em}
+
+Zu"|nächst sollten alle wichtigen Dateien mit \texttt{git add} auf"|ge"|nommen werden und an"|schließend alles ge"|löscht werden, was keine Quell"|datei ist:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ git clean -df
+\end{lstlisting}
+
+Nun müssen zu über"|setzende Zeichen"|ketten markiert werden. C-Code-Quell"|dateien, die Zeichen"|ketten ent"|halten, welche über"|setzt werden müssen, müssen da"|zu diesen Header ein"|binden:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=c]
+#include <glib/gi18n.h>
+\end{lstlisting}
+
+Zum Markieren wird z.B. \texttt{"My Text"} er"|setzt durch \texttt{\_("My Text")}. Wenn zu"|dem Kon"|text"|in"|formationen für die Über"|setzer mit"|ge"|geben werden sollen, dann können andere Markierungen ver"|wendet werden; diese sind in der GLib-Re"|ferenz er"|klärt. Eben"|so muss die \texttt{main()}-Funktion nun Code auf"|rufen, um die Über"|setzungen zu be"|nutzen; dieser ist auch in der GLib-Re"|ferenz zu finden.
+
+\texttt{.ui}-Dateien werden so markiert:
+\begin{lstlisting}[basicstyle=\footnotesize\ttfamily,language=xml]
+<property name="…" translatable="yes">My Text</property>
+\end{lstlisting}
+
+Wenn alles markiert ist, sollte man sich mit \texttt{cd} in das Grund"|ver"|zeich"|nis des Pro"|jekts be"|geben und dort folgenden Be"|fehl aus"|führen:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ gettextize
+\end{lstlisting}
+
+Dieser passt \texttt{con"|figure.ac} und \texttt{Make"|file.am} so an, dass eine Über"|setzung generiert und ge"|nutzt wird. Er gibt auch aus, was man manuell ändern wollen könnte. Das Herunter"|laden von Dateien mit \texttt{w"|get} über HTTP ist aller"|dings nicht not"|wendig und auch nicht zu empfehlen. Das Hin"|zu"|fügen von \texttt{get"|text.h} ist nicht nötig mit GLib und auch nicht zu empfehlen. \texttt{ac"|local} und \texttt{auto"|conf} wird schon von \texttt{./auto"|gen.sh} aus"|ge"|führt, muss also nicht be"|nutzt werden.
+
+In der Datei \texttt{po/POTFILES.in} sollten alle Dateien mit zu über"|setzenden Zeichen"|ketten auf"|ge"|listet werden, zum Bei"|spiel so:
+\begin{lstlisting}[basicstyle=\ttfamily]
+# List of source files which contain
+# translatable strings.
+src/cshopapplication.c
+src/cshopraw.c
+src/cshopwindow.c
+src/main.c
+src/ui/menu.ui
+src/ui/toolbar.ui
+\end{lstlisting}
+
+In \texttt{Make"|vars} muss u.U. folgende Option ge"|setzt werden, wenn die Quell"|dateien Nicht-ASCII-Zeichen be"|in"|halten können:
+\begin{lstlisting}[basicstyle=\footnotesize\ttfamily]
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --from-code=UTF-8
+\end{lstlisting}
+
+Manche Compiler haben aber ohne"|hin Probleme mit Quell"|dateien mit solchen Zeichen, des"|wegen will man sie viel"|leicht ohne"|hin ver"|meiden.
+
+In \texttt{con"|figure.ac} sollte außer"|dem folgendes stehen:
+\begin{lstlisting}
+AC_SUBST([GETTEXT_PACKAGE], [$PACKAGE_TARNAME])
+AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],
+ ["$GETTEXT_PACKAGE"], [Package name for gettext])
+\end{lstlisting}
+
+In \texttt{main.c} muss folgendes ein"|ge"|bunden werden:
+\begin{lstlisting}[basicstyle=\ttfamily,language=c]
+#include <config.h>
+\end{lstlisting}
+
+Wenn alle wichtigen Dateien mit \texttt{git add} ein"|ge"|bunden sind, kann wie üb"|lich folgendes aus"|ge"|führt werden:
+
+\begin{lstlisting}[basicstyle=\ttfamily,language=sh]
+$ ./autogen.sh # statt aclocal und autoconf
+$ ./configure
+$ make
+\end{lstlisting}
+
+Da"|mit ist die Inter"|nationalisierung des Pro"|jekts ab"|ge"|schlossen. Zum Lokalisieren ins Deutsche muss in die Datei \texttt{po/LINGUAS} eine Zeile \texttt{de} ein"|ge"|fügt werden, für Englisch eine Zeile \texttt{en}, U.S.-Englisch \texttt{en\_US} u.s.w.
+
+Am Ende sieht \texttt{po/LINGUAS} so aus:
+\begin{lstlisting}[basicstyle=\ttfamily]
+de
+en
+\end{lstlisting}
+
+Die Zeilen sollten alpha"|betisch sortiert sein. Nun kann das Pro"|jekt neu ge"|baut werden. \texttt{msg"|init} er"|zeugt dann ent"|sprechende Dateien im \texttt{po}-Ordner, wo z.B. mit \texttt{g"|trans"|lator} die Über"|setzung ein"|ge"|tragen werden kann.
+
+Neu"|bauen des Pro"|jekts er"|zeugt nun auch die über"|setzte Fassung. Diese kann aus"|ge"|führt werden z.B. wie:
+
+\begin{lstlisting}
+$ LANG=en_US.UTF-8 copyshop
+\end{lstlisting}
+
+\end{document}
diff --git a/tex/hangman-gtk.png b/tex/hangman-gtk.png
new file mode 100644
index 0000000..471f475
--- /dev/null
+++ b/tex/hangman-gtk.png
Binary files differ
diff --git a/tex/hangman-term.png b/tex/hangman-term.png
new file mode 100644
index 0000000..2affd11
--- /dev/null
+++ b/tex/hangman-term.png
Binary files differ
diff --git a/tex/heckert_gnu.transparent.png b/tex/heckert_gnu.transparent.png
new file mode 100644
index 0000000..0aa3b90
--- /dev/null
+++ b/tex/heckert_gnu.transparent.png
Binary files differ
diff --git a/tex/hello.png b/tex/hello.png
new file mode 100644
index 0000000..2de03a7
--- /dev/null
+++ b/tex/hello.png
Binary files differ
diff --git a/tex/poster-portrait.tex b/tex/poster-portrait.tex
new file mode 100644
index 0000000..4ec50d6
--- /dev/null
+++ b/tex/poster-portrait.tex
@@ -0,0 +1,80 @@
+% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
+% International License. To view a copy of this license, visit
+% http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+\documentclass[xetex]{beamer}
+
+\usepackage{fontspec}
+
+\usecolortheme{guipro}
+\setmainfont{Cantarell}
+\mode<presentation>
+\setbeamertemplate{navigation symbols}{} % remove navigation symbols
+
+% No uppercase hyphenation.
+\uchyph=0
+
+\usepackage[size=a3,orientation=portrait]{beamerposter}
+
+\usepackage{graphicx}
+
+\usepackage[ngerman]{babel}
+
+\usepackage[parfill]{parskip}
+\usepackage{listings}
+
+% stolen from https://github.com/deselaers/latex-beamerposter/blob/master/examples/02/beamerthemeI6pd2.sty
+\setbeamertemplate{itemize items}[triangle]
+\setbeamertemplate{itemize item}{\raisebox{0.12ex}{$\blacktriangleright$}\hskip0.1em}
+\setbeamertemplate{itemize subitem}{\raisebox{0.12ex}{$\triangleright$}\hskip0.1em}
+
+\title{GUI-Programmierung mit GTK+}
+\author{Florian Pelz}
+
+\begin{document}
+\begin{frame}[fragile=singleslide]
+\begin{columns}
+\begin{column}{.70\textwidth}
+
+\huge
+
+\begin{flushright}
+FS-Info-Event
+\end{flushright}
+
+\begin{center}
+\includegraphics{hello.png}
+\vspace{1cm}
+
+\textbf{\veryHuge\inserttitle}\\[1ex]
+\textbf{\Huge\insertauthor}\\[1ex]
+\end{center}
+\setlength{\parskip}{1em}
+
+Auch heute spielen Desktop-An"|wendungen eine große Rolle bei der Arbeit mit dem Computer. Doch wie er"|stellt man moderne graphische Pro"|gramme?
+
+Der Work"|shop ver"|mittelt, wie man An"|wendungen mit graphischer Be"|nutzer"|ober"|fläche schreibt, wie man sie ver"|öffent"|licht und welche An"|lauf"|stellen es gibt, um Dinge ge"|nauer nach"|zu"|lesen.
+
+\begin{itemize}
+\item Wird An"|fang Juni 2016 statt"|finden.
+\item 2-tägiger Work"|shop für An"|fänger.
+\item Thema ist der Um"|gang mit der GTK+-Biblio"|thek zum Schreiben von GUI-Pro"|grammen.
+\item Grund"|legende Kenntnisse in der Pro"|grammier"|sprache C werden ver"|mittelt.
+\end{itemize}
+
+Bei Inter"|esse bitte an"|melden: \\
+\url{https://pelzflorian.de/gui-prog-anmelden/}
+
+\begin{center}
+\includegraphics[scale=0.45]{anmelden-qr.png}
+\end{center}
+
+Kon"|takt: \\
+E-Mail: \texttt{pelzflorian@pelzflorian.de} \\
+XMPP: \texttt{pelzflorian@chat.pelzflorian.de}
+
+\end{column}
+\end{columns}
+\end{frame}
+\end{document}
diff --git a/tex/poster.tex b/tex/poster.tex
new file mode 100644
index 0000000..641939c
--- /dev/null
+++ b/tex/poster.tex
@@ -0,0 +1,132 @@
+% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
+% International License. To view a copy of this license, visit
+% http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+\documentclass[xetex]{beamer}
+
+\usepackage{fontspec}
+
+\usecolortheme{guipro}
+\setmainfont{Cantarell}
+\mode<presentation>
+\setbeamertemplate{navigation symbols}{} % remove navigation symbols
+
+% No uppercase hyphenation.
+\uchyph=0
+
+\usepackage[size=a3]{beamerposter}
+
+\usepackage{graphicx}
+
+\usepackage[ngerman]{babel}
+
+\usepackage[parfill]{parskip}
+\usepackage{listings}
+
+% stolen from https://github.com/deselaers/latex-beamerposter/blob/master/examples/02/beamerthemeI6pd2.sty
+\setbeamertemplate{itemize items}[triangle]
+\setbeamertemplate{itemize item}{\raisebox{0.12ex}{$\blacktriangleright$}\hskip0.1em}
+\setbeamertemplate{itemize subitem}{\raisebox{0.12ex}{$\triangleright$}\hskip0.1em}
+
+\title{GUI-Programmierung mit GTK+}
+\author{Florian Pelz\hfill FS-Info-Event}
+
+\begin{document}
+\begin{frame}[fragile=singleslide]
+\begin{columns}
+
+\begin{column}{.39\textwidth}
+{
+\huge
+\begin{center}
+\textbf{\veryHuge\inserttitle}\\[1ex]
+\textbf{\Huge\insertauthor}\\[1ex]
+\end{center}
+\setlength{\parskip}{1em}
+
+Auch heute spielen Desktop-An"|wendungen eine große Rolle bei der Arbeit mit dem Computer. Doch wie er"|stellt man moderne graphische Pro"|gramme?
+
+Der Work"|shop ver"|mittelt, wie man An"|wendungen mit graphischer Be"|nutzer"|ober"|fläche schreibt, wie man sie ver"|öffent"|licht und welche An"|lauf"|stellen es gibt, um Dinge ge"|nauer nach"|zu"|lesen.
+
+\begin{itemize}
+\item Wird An"|fang Juni 2016 statt"|finden.
+\item 2-tägiger Work"|shop für An"|fänger.
+\item Thema ist der Um"|gang mit der GTK+-Biblio"|thek zum Schreiben von GUI-Pro"|grammen.
+\item Grund"|legende Kenntnisse in der Pro"|grammier"|sprache C werden ver"|mittelt.
+\end{itemize}
+
+Bei Inter"|esse bitte an"|melden: \\
+\url{https://pelzflorian.de/gui-prog-anmelden/}
+
+\begin{center}
+\includegraphics[scale=0.45]{anmelden-qr.png}
+\end{center}
+
+Kon"|takt: \\
+E-Mail: \texttt{pelzflorian@pelzflorian.de} \\
+XMPP: \texttt{pelzflorian@chat.pelzflorian.de}
+
+}
+\end{column}
+
+\begin{column}{.49\textwidth}
+{
+\huge
+
+\begin{block}{}
+\begin{center}
+\includegraphics[scale=0.8]{hello.png}
+\end{center}
+\end{block}
+
+\begin{block}{\huge hello.c}
+\begin{lstlisting}[numbers=left,xleftmargin=.1\linewidth,numbersep=2em,basicstyle=\Large\ttfamily,language=c]
+#include <gtk/gtk.h>
+
+static void
+close_window (GtkWidget *widget)
+{
+ gtk_main_quit ();
+}
+
+int
+main ()
+{
+ GtkWidget *window, *box, *hello_label, *button;
+ gtk_init (0, NULL);
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ box = gtk_box_new (GTK_ORIENTATION_VERTICAL,
+ 0);
+ hello_label = gtk_label_new ("Hello World!");
+ g_object_set (G_OBJECT (hello_label),
+ "expand", TRUE,
+ NULL);
+ button = gtk_button_new_with_mnemonic ("_Quit");
+ gtk_container_add (GTK_CONTAINER (window),
+ box);
+ gtk_container_add (GTK_CONTAINER (box),
+ hello_label);
+ gtk_container_add (GTK_CONTAINER (box),
+ button);
+ g_signal_connect (button,
+ "clicked",
+ G_CALLBACK (close_window),
+ NULL);
+ g_signal_connect (window,
+ "destroy",
+ G_CALLBACK (close_window),
+ NULL);
+ gtk_widget_show_all (window);
+ gtk_main ();
+ return 0;
+}
+\end{lstlisting}
+\end{block}
+
+}
+\end{column}
+
+\end{columns}
+\end{frame}
+\end{document}
diff --git a/tex/slides-01.tex b/tex/slides-01.tex
new file mode 100644
index 0000000..59d9d41
--- /dev/null
+++ b/tex/slides-01.tex
@@ -0,0 +1,443 @@
+% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
+% International License. To view a copy of this license, visit
+% http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+\documentclass[xetex]{beamer}
+
+% Remove "| from sections of PDF Outline.
+\pdfstringdefDisableCommands{
+ \declare@shorthand{ngerman}{"|}{}
+}
+
+\usepackage{fontspec}
+
+\usecolortheme{guipro}
+\setmainfont{Cantarell}
+\mode<presentation>
+
+% Remove navigation symbols.
+\setbeamertemplate{navigation symbols}{}
+
+% No uppercase hyphenation.
+\uchyph=0
+
+\usepackage[ngerman]{babel}
+
+\usepackage{listings}
+\usepackage{array}
+
+\title{GUI-Programmierung mit GTK+}
+\subtitle{Erster Teil}
+\author{Florian Pelz}
+\date{}
+
+\begin{document}
+
+\begin{frame}
+\titlepage
+\begin{center}
+E-Mail: \texttt{pelzflorian@pelzflorian.de} \\
+XMPP: \texttt{pelzflorian@chat.pelzflorian.de}
+\end{center}
+\end{frame}
+
+\begin{frame}
+\frametitle{Heute…}
+\tableofcontents
+\end{frame}
+
+\section{Über"|blick} % 30min
+
+\begin{frame}
+\frametitle{GTK+}
+\begin{flushright}
+\includegraphics{gtk-logo.png}
+\end{flushright}
+\begin{itemize}
+\item GUI-Tool"|kit.
+\item Teil des GNOME-Pro"|jekts.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{GNOME}
+\begin{center}
+\includegraphics[scale=0.25]{activities-overview.png}
+\end{center}
+Be"|in"|haltet:
+\begin{itemize}
+\item Be"|nutzer"|ober"|fläche,
+\item An"|wendungen,
+\item zu Grunde liegende Soft"|ware-Biblio"|theken wie GTK+.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{GNU}
+\begin{flushright}
+\includegraphics[scale=0.25]{heckert_gnu.transparent.png}
+\end{flushright}
+\begin{itemize}
+\item Freies Be"|triebs"|system.
+\item Studieren, Modifizieren und Weiter"|ver"|breiten ist er"|wünscht.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{GNU LGPL}
+\begin{flushright}
+\includegraphics[scale=0.2]{copyleft.png}
+\end{flushright}
+\begin{itemize}
+\item GTK+ darf nur als freie Soft"|ware weiter"|ver"|breitet werden.
+\item Soft"|ware, die GTK+ be"|nutzt, muss nicht frei sein.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{C}
+\begin{flushright}
+\includegraphics[scale=0.25]{c-language.png}
+\end{flushright}
+\begin{itemize}
+\item Hard"|ware"|nahe Pro"|grammier"|sprache.
+\item GTK+ ist in C ge"|schrieben.
+\item Auch mit anderen Sprachen nutz"|bar.
+\item Wir ver"|wenden C.
+\end{itemize}
+\end{frame}
+
+\section{In"|stallation} % 1h
+
+\begin{frame}
+\begin{center}
+\underline{In"|stallation von Ent"|wickler"|werk"|zeugen}
+\end{center}
+\begin{itemize}
+\item Siehe Hand"|outs.
+\end{itemize}
+\end{frame}
+
+\section{C-Grund"|lagen} % 45min
+
+\begin{frame}[fragile=singleslide]
+\frametitle{Ein"|faches C-Pro"|gramm}
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+int
+main ()
+{
+ return 5;
+}
+\end{lstlisting}
+\begin{itemize}
+\item Speichern als \texttt{fuenf.c}.
+\item Kom"|pilieren und Testen:
+\end{itemize}
+\begin{lstlisting}[basicstyle=\small\ttfamily,language=sh]
+$ gcc -o fuenf fuenf.c
+$ ./fuenf
+$ echo $?
+5
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile=singleslide]
+\frametitle{Daten speichern}
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+int
+main ()
+{
+ int a; /* Variable a deklarieren. */
+ a = 5; /* 5 in a speichern. */
+ return a;
+}
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile=singleslide]
+\frametitle{\texttt{while}-Schleife}
+\begin{columns}
+\begin{column}{.39\textwidth}
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+int
+main ()
+{
+ int a;
+ int i;
+ a = 1;
+ i = 1;
+ while (i < 5)
+ {
+ a = a * i;
+ i = i + 1;
+ }
+ return a;
+}
+\end{lstlisting}
+\end{column}
+\begin{column}{.39\textwidth}
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+int
+main ()
+{
+ int a, i;
+ a = i = 1;
+ while (i < 5)
+ {
+ a *= i;
+ i++;
+ }
+ return a;
+}
+\end{lstlisting}
+\end{column}
+\end{columns}
+\end{frame}
+
+\begin{frame}[fragile=singleslide]
+\frametitle{\texttt{for}-Schleife}
+\begin{columns}
+\begin{column}{.49\textwidth}
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+int
+main ()
+{
+ int a, i;
+ a = 1;
+ for (i = 1; i < 5; i++)
+ {
+ a *= i;
+ }
+ return a;
+}
+\end{lstlisting}
+\end{column}
+\begin{column}{.49\textwidth}
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+int
+main ()
+{
+ int a, i;
+ a = 1;
+ for (i = 1; i < 5; i++)
+ a *= i;
+ return a;
+}
+\end{lstlisting}
+\end{column}
+\end{columns}
+\end{frame}
+
+\begin{frame}[fragile=singleslide]
+\frametitle{Funktions"|auf"|rufe}
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+int
+fakultaet (int n)
+{
+ if (n == 0)
+ return 1;
+ else
+ return n * fakultaet (n-1);
+}
+
+int
+main ()
+{
+ return fakultaet (4);
+}
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile=singleslide]
+\frametitle{Modularisierung}
+\begin{itemize}
+\item \texttt{fakultaet.c}:
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+int
+fakultaet (int n)
+{
+ if (n == 0)
+ return 1;
+ else
+ return n * fakultaet (n-1);
+}
+\end{lstlisting}
+\item \texttt{main.c}:
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+int fakultaet (int n);
+
+int
+main ()
+{
+ return fakultaet (4);
+}
+\end{lstlisting}
+\item \texttt{\$ gcc -o main fakultaet.c main.c}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile=singleslide]
+\frametitle{Header}
+\begin{itemize}
+\item \texttt{fakultaet.h}:
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+int fakultaet (int n);
+\end{lstlisting}
+\item \texttt{main.c}:
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+#include "fakultaet.h"
+
+int
+main ()
+{
+ return fakultaet (4);
+}
+\end{lstlisting}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile=singleslide]
+\frametitle{Standard"|biblio"|thek}
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+#include <stdio.h>
+#include "fakultaet.h"
+
+int
+main ()
+{
+ printf ("Hallo Welt!\n");
+ printf ("4! = %d.\n", fakultaet (4));
+ return 0;
+}
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile=singleslide]
+\frametitle{Eigene Daten"|typen}
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c]
+struct _Vector {
+ double x;
+ double y;
+ double z;
+};
+
+typedef struct _Vector Vector;
+\end{lstlisting}
+\end{frame}
+
+\section{Hallo GTK+!} % 45min
+
+\begin{frame}[fragile=singleslide]
+\frametitle{Hallo GTK+!}
+\begin{itemize}
+\item Siehe Hand"|outs.
+\item \texttt{\$ gcc `pkg-config --cflags gtk+-3.0` -o hello hello.c `pkg-config --libs gtk+-3.0` -Wall}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile=singleslide]
+\frametitle{Hallo GTK+!}
+\begin{itemize}
+\item Fügen wir Text hin"|zu!
+\end{itemize}
+\begin{lstlisting}[numbers=left,basicstyle=\small\ttfamily,language=c,escapechar=@]
+int
+main ()
+{
+ GtkWidget *window;
+ GtkWidget *hello_label;
+ gtk_init (0, NULL);
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ hello_label = gtk_label_new ("Hello World!");
+ gtk_container_add (GTK_CONTAINER (window),
+ hello_label);
+ @…@
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile=singleslide]
+\frametitle{Hallo GTK+!}
+\begin{itemize}
+\item Und einen Knopf → Handouts.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Was kann GTK+?}
+\begin{itemize}
+\item Was kann man noch machen?
+\begin{itemize}
+\item Text und Knopf ver"|tauschen.
+\item Mit dem Knopf den Text ändern.
+\item …
+\end{itemize}
+\item \url{https://developer.gnome.org/}
+\item \texttt{gtk3-widget-factory}
+\item \texttt{gtk3-demo}
+\item \texttt{gtk3-icon-browser}, \texttt{gnome-characters}, …
+\item \url{https://git.gnome.org}, Mailing-Listen, IRC, …
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\begin{center}
+\vfill
+Pause.
+\vfill
+\end{center}
+\end{frame}
+
+% Pause
+\section{Graphische GUI-Editoren} % 1h15min
+
+\begin{frame}
+\frametitle{Graphische GUI-Editoren}
+\begin{itemize}
+\item Eine GUI kann auch
+\begin{enumerate}
+\item mit Glade graphisch zu"|sammen"|ge"|stellt,
+\item als XML-Datei ge"|speichert und
+\item dann mit GTK+ ge"|laden werden.
+\end{enumerate}
+\item Siehe Hand"|outs.
+\end{itemize}
+\end{frame}
+
+\section{Ein eigener Text"|editor} % 1h15min
+
+\begin{frame}
+\frametitle{}
+\begin{itemize}
+\item Das waren die GTK+-Grund"|lagen.
+\item Wie kann man nun üben?
+\begin{itemize}
+\item Ein eigener Text"|editor
+\item oder ein Bild"|be"|trachter
+\item oder ein Taschen"|rechner
+\item oder Galgen"|männ"|chen
+\item oder …
+\item und dann ein Mini-In"|ventar"|ver"|waltungs"|system.
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Bild"|quellen etc.}
+{
+\footnotesize
+\begin{itemize}
+\item Folien-De"|sign basiert auf \url{https://git.gnome.org/browse/presentation-templates/}.
+\item GNOME-Screen"|shot von \url{https://people.gnome.org/~engagement/screenshots/} CC-BY-SA GNOME Pro"|ject.
+\item GNU-Kopf von \url{https://www.gnu.org/graphics/heckert_gnu.html} u.A. CC-BY-SA Etienne Suvasa, Peter Gerwinski. Marken"|recht"|lich ge"|schützt.
+\item Weitere Bilder aus Wikimedia Commons: \url{https://en.wikipedia.org/wiki/File:GTK\%2B_logo.svg}, \url{https://en.wikipedia.org/wiki/File:Copyleft.svg}, \url{https://en.wikipedia.org/wiki/File:The_C_Programming_Language_logo.svg}
+\item Ideen zum Üben teils aus "`Foundations of GTK+ Development"' von Andrew Krause.
+\item Übriges von mir CC-BY-SA, Code auch CC0. Siehe \url{https://pelzflorian.de/git/gui-prog-gtk-2016/}.
+\end{itemize}
+}
+\end{frame}
+
+\begin{frame}
+\end{frame}
+
+\end{document}
diff --git a/tex/slides-02.tex b/tex/slides-02.tex
new file mode 100644
index 0000000..a34d256
--- /dev/null
+++ b/tex/slides-02.tex
@@ -0,0 +1,342 @@
+% This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
+% International License. To view a copy of this license, visit
+% http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to
+% Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+
+\documentclass[xetex]{beamer}
+% Remove "| from sections of PDF Outline.
+\pdfstringdefDisableCommands{
+ \declare@shorthand{ngerman}{"|}{}
+}
+
+\usepackage{fontspec}
+
+\usecolortheme{guipro}
+\setmainfont{Cantarell}
+\mode<presentation>
+
+% Remove navigation symbols.
+\setbeamertemplate{navigation symbols}{}
+
+% No uppercase hyphenation.
+\uchyph=0
+
+\usepackage{graphicx}
+
+\usepackage[ngerman]{babel}
+
+\usepackage{listings}
+\usepackage{array}
+
+\title{GUI-Programmierung mit GTK+}
+\subtitle{Zweiter Teil}
+\author{Florian Pelz}
+\date{}
+
+\begin{document}
+
+\begin{frame}
+\titlepage
+\begin{center}
+E-Mail: \texttt{pelzflorian@pelzflorian.de} \\
+XMPP: \texttt{pelzflorian@chat.pelzflorian.de}
+\end{center}
+\end{frame}
+
+\begin{frame}
+\frametitle{Heute…}
+\tableofcontents
+\end{frame}
+
+\section{Dis"|tribution} % 1h15min
+
+\begin{frame}
+\frametitle{Letztes Mal}
+Wir haben be"|handelt
+\begin{itemize}
+\item wie man C-Pro"|gramme schreibt,
+\item wie man in C mit GTK+ Fenster-An"|wendungen pro"|grammiert,
+\item wie man den graphischen Glade-Editor da"|bei be"|nutzen kann und
+\item ein kleines Pro"|gramm ent"|wickelt.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Probleme}
+Aller"|dings
+\begin{itemize}
+\item wollen End"|nutzer ihre Soft"|ware nicht erst kom"|pilieren und
+\item das Kom"|pilieren mit vielen Terminal"|be"|fehlen ist auch für Ent"|wickler um"|ständ"|lich.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Main"|tainer}
+\begin{itemize}
+\item Main"|tainer über"|nehmen eine wichtige Rolle für die Soft"|ware-Infra"|struktur.
+\item In einem Soft"|ware-Pro"|jekt sorgen Main"|tainer da"|für, dass die Soft"|ware
+\begin{itemize}
+\item leicht kon"|figuriert, kom"|piliert, ge"|testet etc. werden kann,
+\item auf allen Systemen läuft, wo sie laufen soll,
+\item leicht an End"|nutzer aus"|ge"|liefert werden kann und
+\item die übrige Infra"|struktur (Web"|seite, Wiki, Bug-Tracker, …) funktioniert,
+\item gute und nur gute Patches akzeptiert werden,
+\item der Change Log bzw. die News sauber ge"|führt werden,
+\item alle Autoren und Copy"|rights ge"|nannt werden,
+\item …
+\end{itemize}
+\item Main"|tainer für ein Be"|triebs"|system nutzen die Infra"|struktur, um die Soft"|ware an End"|nutzer aus"|zu"|liefern.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{GNU Auto"|tools}
+\begin{itemize}
+\item \texttt{auto"|conf} auto"|matisiert
+\begin{itemize}
+\item das Finden von Be"|triebs"|system"|werk"|zeugen,
+\item das Fest"|stellen von Be"|triebs"|system"|fähig"|keiten,
+\item Compile-Time-Kon"|figurationen (z.B. Compiler-Aus"|wahl).
+\end{itemize}
+\item \texttt{auto"|make} auto"|matisiert
+\begin{itemize}
+\item das Kom"|pilieren der Soft"|ware,
+\item das Testen (Be"|weisen?) der Soft"|ware,
+\item das In"|stallieren der Soft"|ware und
+\item den Re"|lease einer Version kom"|pilier"|fähigen Quell"|codes.
+\end{itemize}
+\item Wir wollen das für unser Pro"|gramm nutzen!
+\item Siehe Hand"|outs.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Versions"|kontroll"|systeme}
+\begin{itemize}
+\item Versions"|kontroll"|systeme wie \texttt{git} ver"|walten mehrere Versionen des Quell"|codes.
+\item Sie er"|lauben
+\begin{itemize}
+\item paralleles Arbeiten mehrerer Ent"|wickler am gleichen Code,
+\item paralleles Arbeiten eines Ent"|wicklers an unter"|schied"|lichen Teilen des Codes,
+\item eine leichte Rück"|kehr zu alten Versionen und
+\item leichtes Finden der Version, mit der ein Bug zum ersten Mal auf"|trat.
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Für die End"|nutzer: Pakete}
+\begin{itemize}
+\item Auf GNU/Linux u.Ä. wird Soft"|ware oft mit Paket"|managern aus"|ge"|liefert.
+\item Sie be"|stehen meist haupt"|säch"|lich aus
+\begin{itemize}
+\item ent"|weder einem ge"|testeten auto"|matischen Skript zum Kom"|pilieren und In"|stallieren
+\item oder durch einen Skript werden die fertigen Dateien der Soft"|ware an ihren be"|triebs"|system"|spezifischen Platz.
+\end{itemize}
+\item In der Regel heißt das, Pakete werden mit \texttt{./con"|figure}, \texttt{make} und \texttt{make in"|stall} er"|stellt.
+\item De"|tails hängen vom Paket"|manager ab.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Für die End"|nutzer: Bundles}
+\begin{itemize}
+\item Auf den meisten Be"|triebs"|systemen sind auch (evtl. erst nach In"|stallation) selbst"|ständig lauf"|fähige Bundles üb"|lich.
+\item Ein Bundle ist ein Ver"|zeichnis mit der Soft"|ware \emph{und allen Ab"|hängig"|keiten}.
+\item Meta"|daten und Kon"|figurations"|dateien be"|finden sich unter Um"|ständen außer"|halb des Bundles.
+\item Ein solches Bundle kann dann z.B. zum Down"|load im Web, in einem App"|store oder auf physischen Daten"|trägern ver"|trieben werden.
+\item Sicher"|heits"|risiko?
+\item Quell"|code mit"|liefern oder ver"|füg"|bar haben!
+\end{itemize}
+\end{frame}
+
+% Pause
+\section{Mini-IMS} % 2h
+
+\begin{frame}
+\frametitle{Mini-IMS}
+\begin{flushright}
+\includegraphics[scale=0.4]{copyshop.png}
+\end{flushright}
+\begin{itemize}
+\item Wir bauen uns zum Üben ein kleines In"|ventar"|ver"|waltungs"|system für einen fiktiven Copy"|shop.
+\item Da das ein "`großes Pro"|jekt"' ist, ver"|wenden wir Ob"|jekte:
+\begin{itemize}
+\item Ver"|erbung.
+\item Modularisierung.
+\item Andere Sprachen.
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+% Pause
+\section{Inter"|nationalisierung} % 45min
+
+\begin{frame}
+\frametitle{Lokalisierung}
+\begin{itemize}
+\item Be"|zeichnet das An"|passen einer Soft"|ware an die lokale Sprache und Kultur.
+\begin{itemize}
+\item Über"|setzung,
+\item Dar"|stellung von Datum und Uhr"|zeit,
+\item Maß"|ein"|heiten,
+\item Dezimal"|trenn"|zeichen,
+\item …
+\end{itemize}
+\item Kurz: l10n.
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile=singleslide]
+\frametitle{Inter"|nationalisierung}
+\begin{itemize}
+\item Be"|zeichnet das Be"|reit"|stellen der zur Lokalisierung nötigen Infra"|struktur.
+\item Kurz: i18n.
+\item PO-Dateien (wie "`\texttt{de.po}"') be"|in"|halten Über"|setzungen zu allen sicht"|baren Zeichen"|ketten.
+\item Im Code be"|nutzt man statt
+\begin{lstlisting}[basicstyle=\small\ttfamily,language=c]
+label = gtk_label_new ("Hello World");
+\end{lstlisting}
+nun
+\begin{lstlisting}[basicstyle=\small\ttfamily,language=c]
+label = gtk_label_new (_("Hello World"));
+\end{lstlisting}
+\item Die Funktion \texttt{\_()} von GNU Get"|text
+liefert die passende Über"|setzung.
+\item Das \texttt{\_()} kann auch als "`Markierung"' der Zeichen"|kette ver"|standen werden.
+\item Ähn"|liche Markierungen geben noch Kon"|text für Über"|setzer mit, z.B. wo im Pro"|gramm die Zeichen"|kette auf"|taucht.
+\item Siehe Hand"|outs.
+\end{itemize}
+\end{frame}
+
+\section{Weiter"|führendes} % 50min
+ % Total: 10h20min
+
+\begin{frame}
+\frametitle{Accessibility}
+\begin{itemize}
+\item D.h. Soft"|ware Unter"|stützungs"|pro"|grammen
+zu"|gäng"|lich machen und "`be"|hinderten"|ge"|recht"' ge"|stalten.
+\item Accessibility um"|fasst:
+\begin{itemize}
+\item Kom"|patibilität mit Screen"|readern,
+\item Kom"|patibilität mit großer Schrift,
+\item Farb"|wahl und Kon"|trast,
+\item …
+\end{itemize}
+\item Kurz: a11y.
+\item In GTK+ größten"|teils auto"|matisch.
+\item Aber ATK sollte z.B. zum An"|geben von Be"|ziehungen zwischen Widgets be"|nutzt werden.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Unit-Tests}
+\begin{itemize}
+\item Fehler im Pro"|gramm findet man u.A. durch Testen.
+\item GLib ent"|hält ein Frame"|work für Unit-Tests.
+\item Auto"|tools kann dar"|in ge"|schriebene Tests aus"|führen.
+\item Siehe z.B. den Quell"|code von lib"|soup für ein Bei"|spiel.
+\item ref"|tests ver"|gleichen das Aus"|sehen Pixel für Pixel \\
+$\rightarrow$ wird in GTK+ be"|nutzt.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Statische und dynamische Ana"|lyse}
+\begin{itemize}
+\item Statisch: Ohne das Pro"|gramm laufen zu lassen.
+\begin{itemize}
+\item Mehrere Com"|piler.
+\item coala für Coding-Style-Fehler.
+\item …
+\end{itemize}
+\item Dynamisch:
+\begin{itemize}
+\item Val"|grind.
+\item Pro"|filer.
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Pro"|filing}
+\begin{itemize}
+\item Ein Pro"|filer misst, welche Teile des Pro"|gramms
+\begin{itemize}
+\item wie oft laufen und
+\item wie lange brauchen.
+\end{itemize}
+\item So weiß man, welcher Code optimiert werden sollte.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{gtk-doc}
+\begin{itemize}
+\item Code kann in den Quell"|dateien dokumentiert
+\item gtk-doc er"|zeugt dar"|aus eine HTML-Dokumentation.
+\item Diese kann z.B. mit Dev"|help ge"|lesen werden.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Intro"|spection}
+\begin{itemize}
+\item Er"|laubt das Ab"|fragen von In"|formationen über Typen und Klassen:
+\begin{itemize}
+\item Methoden"|namen,
+\item Signale,
+\item Pro"|perties,
+\item …
+\end{itemize}
+\item Er"|laubt auto"|matisches Generieren von Bindings für andere Pro"|grammier"|sprachen.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{D-Bus}
+\begin{itemize}
+\item Für Inter-Pro"|cess Communication.
+\item Ins"|be"|sondere für Kommunikation mit der Be"|nutzer"|ober"|fläche:
+\begin{itemize}
+\item Auf"|rufen von Aktionen im Pro"|gramm,
+\item Notifications,
+\item …
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{CSS}
+\begin{itemize}
+\item CSS er"|mög"|licht es, das Aus"|sehen von Widgets in GTK+ zu ver"|ändern.
+\item Noch in Arbeit.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Weiteres}
+\begin{itemize}
+\item G"|Settings speichert Ein"|stellungen, alten Pro"|gramm"|zu"|stand etc.
+\item G"|Re"|source er"|mög"|licht das Kom"|pilieren von Binär"|daten in die An"|wendung hin"|ein.
+\item Gtk"|In"|spector zeigt und ändert GTK+-In"|formationen zu laufenden Pro"|grammen.
+\item \texttt{g\_autoptr} lässt Speicher auto"|matisch frei"|geben.
+\item Human Inter"|face Guide"|lines be"|achten.
+\item Nicht alles braucht eine GUI.
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Ressourcen}
+\begin{itemize}
+\item GLib- und GTK+-Lehr"|buch:\\\url{https://people.gnome.org/~swilmet/glib-gtk-dev-platform.pdf}
+\item Für C++-Pro"|grammierer:\\\url{https://developer.gnome.org/gtkmm-tutorial/stable/}
+\item Inter"|nationalisierung:\\\url{https://wiki.gnome.org/TranslationProject/DevGuidelines}
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\end{frame}
+
+\end{document}
diff --git a/tex/text-editor.png b/tex/text-editor.png
new file mode 100644
index 0000000..97b19af
--- /dev/null
+++ b/tex/text-editor.png
Binary files differ
diff --git a/web/handout-01-install.pdf b/web/handout-01-install.pdf
new file mode 100644
index 0000000..9058339
--- /dev/null
+++ b/web/handout-01-install.pdf
Binary files differ
diff --git a/web/handout-02-hello-gtk.pdf b/web/handout-02-hello-gtk.pdf
new file mode 100644
index 0000000..c74a529
--- /dev/null
+++ b/web/handout-02-hello-gtk.pdf
Binary files differ
diff --git a/web/handout-03-glade.pdf b/web/handout-03-glade.pdf
new file mode 100644
index 0000000..08bb5bf
--- /dev/null
+++ b/web/handout-03-glade.pdf
Binary files differ
diff --git a/web/handout-04-text-editor.pdf b/web/handout-04-text-editor.pdf
new file mode 100644
index 0000000..2109491
--- /dev/null
+++ b/web/handout-04-text-editor.pdf
Binary files differ
diff --git a/web/handout-05-hangman.pdf b/web/handout-05-hangman.pdf
new file mode 100644
index 0000000..af02327
--- /dev/null
+++ b/web/handout-05-hangman.pdf
Binary files differ
diff --git a/web/handout-06-autotools.pdf b/web/handout-06-autotools.pdf
new file mode 100644
index 0000000..ed95ef0
--- /dev/null
+++ b/web/handout-06-autotools.pdf
Binary files differ
diff --git a/web/handout-07-translations.pdf b/web/handout-07-translations.pdf
new file mode 100644
index 0000000..7a8122e
--- /dev/null
+++ b/web/handout-07-translations.pdf
Binary files differ
diff --git a/web/index.css b/web/index.css
new file mode 100644
index 0000000..a8b9d47
--- /dev/null
+++ b/web/index.css
@@ -0,0 +1,30 @@
+@charset "UTF-8";
+
+@viewport {
+ width: device-width;
+}
+
+body {
+ padding : 0;
+ margin : 0;
+}
+
+#top {
+ position : absolute;
+ width : 100%;
+ height : 100px;
+ background : linear-gradient(to bottom, #CCF, #FFF);
+}
+
+#main {
+ max-width : 690px;
+ padding-top : 80px;
+ margin : 0 auto;
+ font-family : serif;
+ text-align : left;
+ overflow-wrap : break-word;
+}
+
+#main div {
+ margin : 8pt;
+}
diff --git a/web/index.htm b/web/index.htm
new file mode 100644
index 0000000..3989f7a
--- /dev/null
+++ b/web/index.htm
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+
+<html lang="en">
+
+<head>
+<meta charset="UTF-8">
+<!--REMOVE ASAP WHEN CSS VIEWPORT BECOMES NORMATIVE:--><meta name=viewport content="width=device-width, initial-scale=1">
+<title>GUI-Programmierung mit GTK+</title>
+<link rel="stylesheet" type="text/css" href="index.css">
+<link rel="icon" type="image/png" href="/favicon.png">
+</head>
+
+<body>
+
+<div id="top"/>
+
+<div id="main">
+ <p>
+ Vielen Dank für Ihr Interesse an meinem Workshop
+ „GUI-Programmierung mit GTK+”. Zur Anmeldung geht es
+ <a href="/gui-prog-anmelden/">hier</a>. Weitere Informationen
+ siehe <a href="/gui-prog-poster.pdf">hier</a>.
+ </p>
+
+ <p>
+ <ul>
+ <li><a href="slides-01.pdf">Foliensatz 1</a></li>
+ <li><a href="slides-02.pdf">Foliensatz 2</a></li>
+ <li><a href="handout-01-install.pdf">
+ Handout 1: Installieren
+ </a></li>
+ <li><a href="handout-02-hello-gtk.pdf">
+ Handout 2: Hallo GTK+
+ </a></li>
+ <li><a href="handout-03-glade.pdf">
+ Handout 3: Glade
+ </a></li>
+ <li><a href="handout-04-text-editor.pdf">
+ Handout 4: Texteditor
+ </a></li>
+ <li><a href="handout-05-hangman.pdf">
+ Handout 5: Galgenmännchen
+ </a></li>
+ <li><a href="handout-06-autotools.pdf">
+ Handout 6: Autotools
+ </a></li>
+ <li><a href="handout-07-translations.pdf">
+ Handout 7: Übersetzungen
+ </a></li>
+ </ul>
+ </p>
+
+ <p>
+ <a href="/git/gui-prog-gtk-2016/">
+ Aller Quellcode zum Workshop.
+ </a>
+ </p>
+</div>
+
+</body>
+</html>
diff --git a/web/slides-01.pdf b/web/slides-01.pdf
new file mode 100644
index 0000000..e97305e
--- /dev/null
+++ b/web/slides-01.pdf
Binary files differ
diff --git a/web/slides-02.pdf b/web/slides-02.pdf
new file mode 100644
index 0000000..c218782
--- /dev/null
+++ b/web/slides-02.pdf
Binary files differ
diff --git a/web/text-view-utils.tar.gz b/web/text-view-utils.tar.gz
new file mode 100644
index 0000000..cd322a0
--- /dev/null
+++ b/web/text-view-utils.tar.gz
Binary files differ