summaryrefslogtreecommitdiff
path: root/obsolete
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-03-10 03:04:05 +0000
committerNorbert Preining <norbert@preining.info>2023-03-10 03:04:05 +0000
commitf6cb3d263826846efe7b926e6ad2092198db0522 (patch)
tree16abd399e7b120d3c3ac7d75efc4d04cf7bb022f /obsolete
parent716c428e47ad2e893c0f970b9fa866d2a88f00e4 (diff)
CTAN sync 202303100304
Diffstat (limited to 'obsolete')
-rw-r--r--obsolete/support/tlaunch/COPYING674
-rw-r--r--obsolete/support/tlaunch/Changes36
-rw-r--r--obsolete/support/tlaunch/README28
-rw-r--r--obsolete/support/tlaunch/figures/custom_ed.pngbin0 -> 45360 bytes
-rw-r--r--obsolete/support/tlaunch/figures/tlaunch_rug.pngbin0 -> 11781 bytes
-rw-r--r--obsolete/support/tlaunch/figures/tlaunch_window.pngbin0 -> 9378 bytes
-rw-r--r--obsolete/support/tlaunch/tlaunch.ini103
-rw-r--r--obsolete/support/tlaunch/tlaunch.pdfbin0 -> 330268 bytes
-rw-r--r--obsolete/support/tlaunch/tlaunch.tex1110
-rw-r--r--obsolete/support/tlaunch/tlaunchmode.pl132
10 files changed, 2083 insertions, 0 deletions
diff --git a/obsolete/support/tlaunch/COPYING b/obsolete/support/tlaunch/COPYING
new file mode 100644
index 0000000000..94a9ed024d
--- /dev/null
+++ b/obsolete/support/tlaunch/COPYING
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/obsolete/support/tlaunch/Changes b/obsolete/support/tlaunch/Changes
new file mode 100644
index 0000000000..148a562466
--- /dev/null
+++ b/obsolete/support/tlaunch/Changes
@@ -0,0 +1,36 @@
+2017-06-29 Siep Kroonenberg <siepo@cybercomm.nl> Release 0.5.3
+
+ * Remember command-line option: restores file associations on login
+ * Better path handling: avoid duplicate entries in user path
+ * Save overwritten filetype associations as secondary ProgID
+ * Less rudimentary command-line parser, supporting more keywords
+ * Cancel button for editor choice dialog
+ * Manifest: added explicit support for all windows versions >= 7
+
+2017-03-09 Siep Kroonenberg <siepo@cybercomm.nl> Release 0.5.2
+
+ * Various silent command-line options added
+ * Updated documentation
+
+2017-02-01 Siep Kroonenberg <siepo@cybercomm.nl> Release 0.5.1
+
+ * Tlaunch uninst options are now called uninst and uninst_all
+ rather than uninst_keep_tldir and uninst.
+ * Added -v/--version option and help output
+ * Simpler root texmf.cnf in RUG example files
+ * Reorganized packaging
+
+2017-01-27 Siep Kroonenberg <siepo@cybercomm.nl> Release 0.5.0
+
+ * Name- and terminology changes:
+ installing => configuring; uninstalling => forgetting.
+ * Forgetter, formerly uninstaller, can now run silently.
+ * Changes in appearance
+ * Added rudimentary real install- and uninstall modes
+ * tlaunchmode.pl Perl script for switching between launcher- and
+ classic mode
+ * Added a manual
+
+2016-02-27 Siep Kroonenberg <siepo@cybercomm.nl> Release 0.4.0
+
+ Initial public release
diff --git a/obsolete/support/tlaunch/README b/obsolete/support/tlaunch/README
new file mode 100644
index 0000000000..5fe26a136a
--- /dev/null
+++ b/obsolete/support/tlaunch/README
@@ -0,0 +1,28 @@
+The TeX Live Launcher is an easy way to give Windows users access to
+a TeX Live installation on a network as if it were a local
+installation.
+
+Features:
+
+- On first startup, the launcher does the user configuration which
+ would otherwise have been done during a local installation.
+
+- the menu items and buttons within the launcher replace the several
+ Start menu items normally created during a local installation.
+
+- Easy customization with an ini file, e.g. incorporating additional
+ software
+
+See the manual for placement of tlaunch.exe and tlaunch.ini, and for
+customizing the ini file.
+
+The launcher is already part of TeX Live. The 2017 installer has an
+option to make the installation launcher-based.
+
+A script tlaunchmode is included which can convert a classic
+installation into a launcher-based one and back. The manual has a
+section on this script.
+
+The file rug.zip contains as an example a more elaborate
+configuration, based on the installation at the Rijksuniversiteit
+Groningen.
diff --git a/obsolete/support/tlaunch/figures/custom_ed.png b/obsolete/support/tlaunch/figures/custom_ed.png
new file mode 100644
index 0000000000..566ffda27d
--- /dev/null
+++ b/obsolete/support/tlaunch/figures/custom_ed.png
Binary files differ
diff --git a/obsolete/support/tlaunch/figures/tlaunch_rug.png b/obsolete/support/tlaunch/figures/tlaunch_rug.png
new file mode 100644
index 0000000000..86390b8e9b
--- /dev/null
+++ b/obsolete/support/tlaunch/figures/tlaunch_rug.png
Binary files differ
diff --git a/obsolete/support/tlaunch/figures/tlaunch_window.png b/obsolete/support/tlaunch/figures/tlaunch_window.png
new file mode 100644
index 0000000000..4570f8efd3
--- /dev/null
+++ b/obsolete/support/tlaunch/figures/tlaunch_window.png
Binary files differ
diff --git a/obsolete/support/tlaunch/tlaunch.ini b/obsolete/support/tlaunch/tlaunch.ini
new file mode 100644
index 0000000000..c5b3c154f7
--- /dev/null
+++ b/obsolete/support/tlaunch/tlaunch.ini
@@ -0,0 +1,103 @@
+[Strings]
+; %VERSION% detected
+TLNAME=TeX Live %VERSION%
+; configuration directory; a couple of suggestions:
+TLCONFIG=%userprofile%\.texlive%VERSION%\tlaunch
+; or:
+;TLCONFIG=%appdata%\.texlive%VERSION%\tlaunch
+; ProgID for user-selected LaTeX editor; the setting below is the default
+CUSTOMED_PROGID=TL.customed
+; optional announcement
+;ANNOUNCE=This is TLaunch with a sample ini file.
+
+; Filetypes
+
+[FT:TL.TeXworks.edit.%VERSION%]
+COMMAND="%tlroot%\bin\win32\TeXworks.exe"
+EXTENSIONS=.tex .cls .sty
+; filetype is regular file association for extension; already default:
+;PRIMARY=1
+
+; for illustration purposes:
+[FT:Notepad]
+COMMAND=%systemroot%\notepad.exe
+EXTENSIONS=.tex .cls .sty .txt .log
+; PRIMARY 0: only set OpenWithProgID key
+PRIMARY=0
+
+; right-clicking a file of one of the supported types
+; gives you the option to convert it to eps
+[FT:TL.bitmap2eps.convert.%VERSION%]
+COMMAND="%tlroot%\bin\win32\bitmap2eps.exe"
+EXTENSIONS=.bmp .gif .jpe .jpeg .jpg .png .tif .tiff
+PRIMARY=0
+
+[FT:TL.DVIOUT.view.%VERSION%]
+COMMAND="%tlroot%\bin\win32\dviout.exe"
+EXTENSIONS=.dvi
+
+[FT:TL.PSView.view.%VERSION%]
+COMMAND="%tlroot%\bin\win32\psv.exe"
+EXTENSIONS=.eps .ps .pdf
+
+; 2-level menu
+
+; key is display string, value is action
+; items can be:
+; SO: shell object, e.g. document or URL; opened with current default program.
+; SC: previously declared utility script; see tlaunch.ini in rug.zip
+; FT: previously declared filetype
+; FU: built-in function
+; general commands
+
+[MN:File]
+Browse TeX Live installation=explorer.exe "%tlroot%\.."
+Quit=FU:quit
+
+[MN:Editors]
+TeXworks=FT:TL.TeXworks.edit.%VERSION%
+Notepad=FT:Notepad
+Select default editor...=FU:options
+
+[MN:Viewers]
+PostScript Viewer=FT:TL.PSView.view.%VERSION%
+DVI Viewer=FT:TL.DVIOUT.view.%VERSION%
+
+[MN:Tools]
+TeX Live Command Prompt=%comspec% /T "%TLNAME%" /e:on
+=
+Re-initialize TeX Live=FU:initialize
+Remove TeX Live settings=FU:clear
+=
+TeX Live Manager="%tlroot%\bin\win32\tlmgr-gui.exe"
+Uninstall=FU:uninst
+=
+Editor choice=FU:editor_select
+
+[MN:Documentation]
+LaTeX Introduction=SO:%tlroot%\texmf-dist\doc\latex\lshort-english\lshort.pdf
+LaTeX Reference=SO:%tlroot%\texmf-dist\doc\latex\latex2e-help-texinfo\latex2e.pdf
+All TeX Live documentation by package=SO:%tlroot%\doc.html
+FAQ=SO:%tlroot%\texmf-dist\doc\generic\FAQ-en\newfaq.pdf
+Launcher=SO:%tlroot%\texmf-dist\doc\support\tlaunch\tlaunch.pdf
+=
+AmsMath User Guide=SO:%tlroot%\texmf-dist\doc\latex\amsmath\amsldoc.pdf
+Beamer User Guide=SO:%tlroot%\texmf-dist\doc\latex\beamer\doc\beameruserguide.pdf
+
+[MN:Online]
+TeX Users Group (international)=SO:http://www.tug.org/
+TeX and LaTeX Q & A=SO:http://tex.stackexchange.com/
+LaTeX Community site=SO:http://www.latex-community.org/
+UK TeX FAQ online=SO:http://www.tex.ac.uk/faq
+
+[MN:Help]
+About=FU:about
+
+[Buttons]
+; FU:default_editor invokes the `default editor' if there is one.
+; The editor_select dialog lets the user select a preconfigured editor
+; if there is one, or select an existing program.
+LaTeX Editor=FU:default_editor
+Select default editor...=FU:editor_select
+TeX Live Command Prompt=%comspec% /T "TeX Live" /e:on
+Quit=FU:quit
diff --git a/obsolete/support/tlaunch/tlaunch.pdf b/obsolete/support/tlaunch/tlaunch.pdf
new file mode 100644
index 0000000000..e8de54dbdd
--- /dev/null
+++ b/obsolete/support/tlaunch/tlaunch.pdf
Binary files differ
diff --git a/obsolete/support/tlaunch/tlaunch.tex b/obsolete/support/tlaunch/tlaunch.tex
new file mode 100644
index 0000000000..bda2369063
--- /dev/null
+++ b/obsolete/support/tlaunch/tlaunch.tex
@@ -0,0 +1,1110 @@
+\documentclass[11pt,a4paper,oneside]{report}
+
+% narrow margins, otherwise same layout as default
+\AtBeginDocument{%
+ \paperwidth\textwidth
+ \advance\paperwidth48bp
+ \oddsidemargin-48bp
+ \paperheight\textheight
+ \advance\paperheight48bp
+ \advance\paperheight\headheight
+ \advance\paperheight\headsep
+ \advance\paperheight\footskip
+ \topmargin=-48bp
+ \pdfpagewidth=\paperwidth
+ \pdfpageheight=\paperheight
+}
+
+\makeatletter
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \sbox\@tempboxa{\small \textbf{#1:} #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ {\small \textbf{#1:} #2\par}
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip}
+\makeatother
+
+% fonts
+\usepackage{tgpagella}
+\let\slshape\itshape
+\usepackage[TS1,T1]{fontenc}
+
+\usepackage{array,textcomp,graphicx}
+\setcounter{secnumdepth}{2}
+\setcounter{tocdepth}{2}
+\usepackage[%
+ raiselinks=false,%
+ colorlinks=true,%
+ bookmarksnumbered=true,%
+ bookmarksopen=true,%
+ bookmarksopenlevel=1%
+]{hyperref}
+\pagestyle{headings}
+
+\newcolumntype{P}[1]{%
+ >{\raggedright\hspace{0pt}\arraybackslash}p{#1}}
+\def\TL{\TeX~Live}
+\def\fta{filetype association}
+\def\FTA{Filetype association}
+% if bold small caps available:
+\def\mysc#1{{\rmfamily\textsc{#1}}}
+% if bold small caps unavailable:
+%\def\mysc#1{\textsc{\textmd{#1}}}
+\def\GUI{\mysc{gui}}
+\def\RUG{\mysc{rug}}
+\def\UWP{\mysc{uwp}}
+
+\def\TNC{TeXnicCenter}
+\def\TS{TeXstudio}
+
+\def\XeTeX{Xe\TeX}
+\def\dbr{\discretionary{}{}{}}
+\let\bsl\textbackslash
+\def\bslb{\bsl\discretionary{}{}{}}
+%\def\hkcu{HKEY\_\dbr CURRENT\_\dbr USER}
+\def\hkcu{\textsc{hkcu}}
+%\def\hklm{HKEY\_\dbr LOCAL\_\dbr MACHINE}
+\def\hklm{\textsc{hklm}}
+%\def\hkcr{HKEY\_\dbr CLASSES\_\dbr ROOT}
+\def\hkcr{\textsc{hkcr}}
+\newenvironment{ttdesc}{%
+ \def\descriptionlabel##1{\hspace\labelsep\ttfamily\selectfont ##1}%
+ \description}{\enddescription}
+\hyphenation{head-ache work-space}
+
+\title{TLaunch: a launcher for a \TL{} system}
+\author{Siep Kroonenberg}
+\begin{document}
+\maketitle
+\clearpage
+\thispagestyle{empty}
+\null\vfill
+{\small\parindent=0pt
+This manual is for tlaunch, the \TL{} Launcher, version 0.5.3.
+
+Copyright \textcopyright{} 2017 Siep Kroonenberg.
+
+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.\par}
+\clearpage
+\thispagestyle{empty}
+% let physical pages match logical ones
+\setcounter{page}{3}
+\tableofcontents
+
+\chapter{The launcher}
+\label{chap:launcher}
+
+\begin{figure}
+ \centering
+ \includegraphics[width=.7\linewidth]{figures/tlaunch_window}
+ \caption{A possible Launcher window}
+ \label{fig:launcher}
+\end{figure}
+
+\section*{About this document}
+
+This manual documents the \TL{} Launcher. The first chapter
+describes the launcher in general, its facilities, its ini file and
+its command-line parameters.
+
+The second chapter describes the launcher-based installation at the
+\RUG, or Rijksuniversiteit Groningen, as an example
+launcher-based installation.
+
+Since many \TeX{} developers spend as little time as they can help
+in a Windows environment, I also added an appendix with Windows
+background information.
+
+\section{Introduction}
+\label{sec:intro}
+
+I designed the \TL{} launcher for the Windows \TL{} installation on
+our university network, which contains \TL{} itself plus several
+other \TeX-related applications. The launcher provides a single
+access point to all this software, and to related local and online
+resources.
+
+The launcher also takes care of configuration: at first run, \TL{}
+is added to the searchpath, and relevant filetype associations are
+set up.
+
+This means that the launcher rather than the classic \TL{} installer
+takes care of Windows-specific configuration. Which is a good
+thing if the \TL{} directory tree is on a shared network drive, or
+if a \TL{} installation has to be copied to many workstations.
+
+Filetypes, menus and buttons and pre- and post configuration scripts
+are defined in a standard Windows ini file. The format of this file
+is described in section \ref{sec:config} of this chapter. The
+supplied ini file provides something more or less equivalent to a
+classic Windows \TL{} installation.
+
+\subsection{Localization}
+\label{sec:localize}
+
+Although at the moment the launcher lacks proper support for
+localization, most of the user interface strings are defined in the
+ini file and can be replaced with strings in other languages.
+
+\section{Modes}
+\label{sec:modes}
+
+\subsection{Normal mode}
+\label{sec:normal}
+
+In a normal run, the launcher displays a window with a menu or a
+series of buttons or both, see figure \ref{fig:launcher}. For
+anything launched via these controls, \TL{} is prepended to its
+process searchpath irrespective of the system- or user
+searchpath; see Appendix \ref{sec:env} on Windows searchpath
+handling.
+
+\subsection{Initializing}
+\label{sec:init}
+
+On first run, tlaunch creates file associations and prepends \TL{} to
+the user searchpath, see appendix~\ref{sec:env}. Such configuration
+allows users to start up their \LaTeX{} editor by double-clicking a
+\LaTeX{} file in their file manager, bypassing the launcher
+altogether.
+
+On first run, the launcher also creates a renamed copy of itself and
+a renamed modified copy of the configuration file to a directory
+inside the user's profile. This pair of copies serves as
+\emph{forgetter}, see below. tlaunch registers this forgetter as an
+uninstaller under Windows.
+
+\subsection{Forgetting}
+\label{sec:forget}
+
+Since a network- or multi-user \TL{} installation can be uninstalled
+by others, it is desirable that the configuration done on first run
+can be reversed without the presence of the original \TL{}. The
+forgetter takes care of this.
+
+The launcher detects from its location whether it should run normally
+or as forgetter.
+
+It is also possible to undo configuration from within a normal run
+if the ini file defines a button- or menu control for it.
+
+\section{Using scripts}
+\label{sec:scripts}
+
+External scripts may run on demand, as the action associated with a
+button or a menu control; see section \ref{sec:utscripts}. Scripts
+may also run automatically, as supplemental initialization or
+cleanup; see the \texttt{pre\_config}, \texttt{post\_config} and
+\texttt{pre\_forget} variables in table \ref{tab:strings}. Examples:
+\begin{itemize}
+\item Forgetting a previous release of \TL{} before configuring the
+ current one. This only makes sense for a centrally-managed \TeX{}
+ installation, where it is known what \TeX{} installation came
+ before.
+ \item Giving \TeX works some spelling dictionaries
+ \item Writing configuration data for non-\TL{} components
+ \item Adjusting \XeTeX{} font configuration, see Section
+ \ref{sec:xecache}
+\end{itemize}
+
+\section{The ini file}
+\label{sec:config}
+
+The ini file defines the menu items and buttons of the graphical
+interface. These controls can start up \GUI{} programs or run
+utility scripts, or run some predefined functions. The ini file also
+defines filetype associations, and may specify scripts for doing
+additional configuration and cleanup.
+
+\subsection{Location}
+\label{sec:loc}
+
+In \TL, the binary is in the \TL{} binary directory,
+\texttt{\emph{tlroot}/bin/win32}, and the ini file is in
+\texttt{\emph{tlroot}/texmf-dist/web2c}. The installer may have
+created a modified higher-priority copy in
+\texttt{\emph{tlroot}/texmf-var/web2c}. A custom
+\texttt{tlaunch.ini} in \texttt{\emph{tlroot}/texmf-config/web2c}
+will override either. In this case, the filename database should be
+updated.
+
+Another option is to place both the binary and the ini file in the
+root of the \TL{} installation.
+
+\subsection{Encoding}
+\label{sec:enc}
+
+The launcher tries to guess the encoding used, and accepts
+ASCII, UTF-8 and Windows' UTF-16, with or without BOM. If all else
+fails, it tries ANSI with the system default code page.
+
+\subsection{Syntax}
+\label{sec:synt}
+
+The ini file is a regular Windows ini file with sections,
+definitions and comment lines.
+\begin{itemize}
+\item A section starts with a line containing the section name
+ enclosed in square brackets `\texttt{[}' and `\texttt{]}'. It ends
+ at the start of the next section or at the end of the file.
+\item A definition line consists of a line
+ \texttt{\emph{key}=\emph{value}}.
+\item A comment line starts with `\texttt{;}'.
+\end{itemize}
+
+The ini file is processed in one go, which means that everything
+must be defined before it is used. The ordering of the list below of
+possible sections satisfies this requirement.
+
+However, it is not necessary that everything that is referred to
+actually exists; if a menu- or button control refers to a
+non-existent file, the control is quietly left out, and if the
+\texttt{COMMAND} of a filetype refers to a non-existent file then
+neither the filetype registry entry nor any control for it will be
+created.
+
+The ini file can contain the following sections:
+
+\subsection{The Strings section}
+\label{sec:strings}
+
+\begin{table}[tb]
+ \centering
+{\small
+\extrarowheight3pt\sffamily\noindent
+\begin{tabular}{|>{\ttfamily}llP{2in}|}
+ \hline
+ & DEFAULT & MEANING \\
+ tlroot & predefined & root of the \TL{} installation \\
+ version & predefined & release year \\
+ tlperl & predefined & path of the built-in Perl binary \\
+ tlwperl & predefined & same for the \GUI{} Perl binary \\
+ java & predefined & Java binary, if found \\
+ tlconfig & required & directory for the launcher's user data, see \emph{e.g.}
+ sections \ref{sec:strings} and Appendix \ref{sec:known_configs} \\
+ tlname & \texttt{TeX Live \%version\%} & used for \emph{e.g.}
+ window title and uninstaller `DisplayName' \\
+ customed\_progid & \texttt{TL.customed} & Filetype
+ for external, user-selected editor, see section \ref{sec:fta} \\
+ pre\_config & empty & optional program or script to be run before
+ first-time initialization \\
+ post\_config & empty & optional program or script to be run after
+ first-time initialization \\
+ pre\_forget & empty & optional program or script to be run before
+ undoing initialization \\
+ announce & empty & optional text to display \\[3pt]
+ \hline
+\end{tabular} \\[3pt]
+Note. All process environment variables, \emph{e.g.}
+\texttt{\%appdata\%}, are accessible while the
+launcher parses the ini file. Variable names are case-insensitive.\par}
+
+\caption{Strings with a special meaning in the ini file}
+\label{tab:strings}
+\end{table}
+
+In this section arbitrary strings can be defined to be used later
+during parsing. The names of the string variables are
+case-insensitive, their values are not. Various strings have a
+special meaning, see Table \ref{tab:strings}. Their values may be
+predefined, \emph{i.e.} they are set by the launcher before
+processing the ini file; they may be required, or they are allowed
+to stay empty.
+
+At a minimum, the \texttt{TLCONFIG} string should be defined in the
+ini file. This is the directory for launcher user files such as the
+forgetter. A few suggestions:
+ \begin{itemize}
+ \item \texttt{\%UserProfile\%\bsl.texlive\%version\%\bslb tlaunch},
+ \emph{i.e.} under the common root of \texttt{\%TEXMFVAR\%} and
+ \texttt{\%TEXMFCONFIG\%}
+ \item \texttt{\%appdata\%\bslb tlaunch\bslb\%version\%}; see Appendix
+ \ref{sec:known_configs}
+ \item or maybe \texttt{\%localappdata\%\bslb tlaunch\bslb\%version\%} if
+ \TL{} is installed on the local system
+ \end{itemize}
+
+\subsection{Sections for filetype associations (FTAs)}
+\label{sec:fta}
+
+In Windows, an extension is associated with a filetype and a
+filetype is associated with a program. An extension can also have
+alternate filetypes associated with it, which may show up if you
+right-click a file and select `Open with\textellipsis'. More on
+filetypes in appendix \ref{sec:wftas}.
+
+A filetype section has as name the string `\texttt{FT:}' followed by
+the filetype name. An example of a filetype section:
+
+\begin{verbatim}
+[FT:TL.TeXworks.edit.%VERSION%]
+COMMAND="%tlroot%\bin\win32\TeXworks.exe"
+;SHELL_CMD="%tlroot%\bin\win32\TeXworks.exe" "%1"
+;ICON="%tlroot%\bin\win32\TeXworks.exe,0"
+;NAME=TeXworks
+EXTENSIONS=.tex .cls .sty
+;PRIMARY=1
+;PATH_PREFIX=0
+\end{verbatim}
+
+The commented lines are optional and represent default values.
+
+\begin{ttdesc}
+\item [COMMAND] is the command to start the program.
+\item [SHELL\_CMD] is the command to open a file. The default is
+ \texttt{COMMAND} with `\texttt{~"\%1"}' appended.
+\item[ICON] is the icon to be used in GUI file managers. The default
+ is \texttt{COMMAND} with `\texttt{,0}' appended, without a
+ space. If there is no such icon then a fall-back icon will be
+ used; see \emph{e.g.} the right-most icon in Figure
+ \ref{fig:launcher}.
+\item[NAME] is only used for \LaTeX{} editors, in the
+ editor-selection window, see section \ref{sec:edsel}. If not
+ specified, it will be derived from the program filename.
+\item[EXTENSIONS] is the list of extensions that should have the
+ filetype as primary or secondary association.
+\item[PRIMARY] is default 1. If set to 0, then the program only
+ shows up in the Open with... dialog. Mainly of interest for the
+ bitmap2eps utility. See appendix \ref{sec:wftas} on primary and
+ secondary filetypes.
+\item[PATH\_PREFIX] is default 0. If set to 1, Windows will
+ prepend \TL{} to the program's searchpath. The launcher will only
+ do this if \texttt{COMMAND} is a bare or quoted filename, without
+ options or parameters; see Appendix \ref{sec:appreg}.
+\end{ttdesc}
+
+\subsection{Sections for utility scripts}
+\label{sec:utscripts}
+
+A batchfile or command-line program can be declared in a
+utility-script section. If a button or menu item invokes such a
+script, standard output is intercepted and displayed in a dialog box
+when the script has completed. Standard error is also captured, but
+shows up only in the log file \texttt{\%TEMP\%\bslb TeXLive\_\dbr
+ Launcher.\dbr log}. A splash text is displayed while the script is
+running. The default value for the splash text is `Working...'. An
+example adapted from the \RUG{} installation:
+\begin{verbatim}
+[SC:TNC_config]
+command=cscript "%TLROOT%\rugscripts\tnc_config.vbs" "%tlroot%"
+;splash=Reconfiguring TeXnicCenter...
+\end{verbatim}
+In this example, the script takes just a moment, so there is no
+point in defining a splash text.
+
+\subsection{The built-in functions}
+\label{sec:fun}
+
+The following functions are available:
+\begin{ttdesc}
+\item [FU:quit] Terminate the launcher
+\item [FU:clear] Undo all configuration and terminate
+\item [FU:initialize] Undo all configuration, terminate and
+ restart. This forces re-initialization.
+\item [FU:editor\_select] See section \ref{sec:edsel}
+\item [FU:default\_editor] See section \ref{sec:edsel}
+\item [FU:about] An About box
+\item [FU:uninst\_all] See section \ref{sec:lbased}
+\item [FU:uninst] See section \ref{sec:lbased}
+\end{ttdesc}
+
+\subsection{Menus and buttons}
+\label{sec:controls}
+
+The visible interface of the launcher consists of an optional menu
+with dropdown submenus and an optional row of buttons. There should be
+at least one button or one submenu with one entry.
+
+A submenu is defined in a section with name `\texttt{MN:}' followed
+by the submenu name, and the row of buttons is defined in a section
+named `\texttt{BUTTONS}'. A button- or a menu item has as key the
+string to be displayed and as value one of the following:
+\begin{itemize}
+\item A filetype. This invokes its \texttt{COMMAND}.
+\item A utility script. This also invokes its \texttt{COMMAND}.
+\item `\texttt{SO:}' (Shell Open) followed by a document or
+ \textsc{url}. The document or url will be opened in its default
+ program.
+\item A predefined function, see section \ref{sec:fun}.
+\item An arbitrary command.
+\end{itemize}
+In a submenu section, a sole `\texttt{=}' will produce a separator
+line. In the button section, it will do nothing.
+
+{\sloppy
+Example buttons- and submenu sections:
+\begin{verbatim}
+[MN:Tools]
+Editor choice=FU:editor_select
+TeX Live Command Prompt=%comspec% /T "TeX Live" /e:on
+=
+(Re)configure TeXnicCenter=SC:TNC_config
+
+[MN:Documentation]
+All TeX Live documentation by package=SO:%tlroot%\doc.html
+TeX and LaTeX Q & A=SO:http://tex.stackexchange.com/
+
+[BUTTONS]
+LaTeX Editor=FU:default_editor
+PostScript Viewer=FT:TL.PSView.view.%VERSION%
+Quit=FU:quit
+\end{verbatim}
+\par}
+
+\subsection{The General section}
+\label{sec:gen}
+
+This section is optional. Four keywords are allowed, of which the
+first two correspond to \TL{} installer options:
+\begin{ttdesc}
+\item[Filetypes] Allowed values are
+ \begin{itemize}
+ \item \texttt{none}: do not set or change filetype associations
+ \item \texttt{new}: create filetype associations only if they do
+ not override existing ones; default
+ \item \texttt{overwrite}: create filetype associations regardless
+ of existing ones
+ \end{itemize}
+\item[searchpath] {\sloppy Allowed values are 0 (leave searchpath
+ alone) and 1 (add \TL{} to the searchpath; default). See
+ appendix \ref{sec:env}. In any case, when a program is started
+ from the launcher it will have \TL{} prepended to its process
+ searchpath.\par}
+\item[remember] Allowed values are 0 (do nothing) and 1 (arrange
+ that \TeX-related filetype associations are restored on
+ login). This may be desirable in a Roaming Profiles setup, see
+ sections \ref{sec:roam} and \ref{sec:noroam}.
+\item[keeptemps] Allowed values are 0 (delete temporary files;
+ default) and 1 (keep them). This is a debug option for running
+ external scripts. In most cases however, the contents of the
+ temporary files are copied to the log file \texttt{\%TEMP\%\bslb
+ TeXLive\_\dbr Launcher.log} anyway.
+\end{ttdesc}
+
+An example general section:
+\begin{verbatim}
+[General]
+FILETYPES=new
+SEARCHPATH=1
+KEEPTEMPS=0
+\end{verbatim}
+The above values are the defaults.
+
+\section{Editor choice}
+\label{sec:edsel}
+
+\begin{figure}
+ \centering
+ \includegraphics[width=.8\linewidth]{figures/custom_ed}
+ \caption{Editor selection with a file browser for a custom editor}
+ \label{fig:ed_sel}
+\end{figure}
+If a filetype has \texttt{.tex} among its supported extensions, the
+launcher considers it an editor. On initialization, the first one
+becomes the default, unless \texttt{PRIMARY} is set to 0 and there
+is another candidate with \texttt{PRIMARY} 1. If in the
+\texttt{General} section \texttt{FILETYPES} is set to \texttt{none}
+or \texttt{new}, then an existing file association for \texttt{.tex}
+files will not be overwritten.
+
+The function \texttt{FU:default\_editor} invokes the default editor
+if there is one. The function \texttt{FU:editor\_select} invokes a
+dialog for selecting a default editor; the options are the ones
+defined in the ini file, the current default and selecting one via a
+file browser dialog, see figure \ref{fig:ed_sel}.
+
+If the new editor is selected via the file browser, it will be
+assigned to the filetype \texttt{TL.customed} and this filetype will
+become the default for \texttt{.tex} files. It is possible to
+configure another filetype string in the ini file, \emph{e.g.} one
+which includes the \texttt{\%VERSION\%} string.
+
+Appendix \ref{sec:userchoice} explains why a \texttt{.tex} file
+might still get opened in another editor.
+
+\section{Launcher-based installations}
+\label{sec:lbased}
+
+It seems possible to do away with much of the Windows-specific code
+of the current installer. To this end, I added install and uninstall
+options to the launcher. Installation merely means creating a Start
+menu entry for itself and to register itself as uninstaller.
+
+In installation mode, it is assumed that the launcher and its ini
+file are already in place as part of the regular \TL{}
+installation.
+
+The launcher can be invoked with the following command-line
+parameters:
+
+\begin{ttdesc}
+\item[user\_inst] Install the launcher for a single user. This
+ includes doing the first-time initialization as in a regular
+ invocation.
+\item[admin\_inst] Install the launcher for all users
+\item[uninst] Undo installation but leave the \TL{}
+ directory tree alone. Also runs the forgetter for the current
+ user silently, if it exists.
+\item[uninst\_all] Undo installation and remove the \TL{} directory
+ tree. Also runs the forgetter for the current user silently, if it
+ exists. This is the only option of these four which touches the
+ \TL{} installation itself.
+\item[remember] Recreate filetype associations, see sections
+ \ref{sec:roam} and \ref{sec:noroam}.
+\item[silent] Do not ask for confirmation and do not pop up
+ messages. Output is still written to the log file, at
+ \texttt{\%TEMP\%\bslb TeXLive\_\dbr Launcher.\dbr log}.
+\end{ttdesc}
+The \texttt{user\_inst\_silent} and \texttt{admin\_inst\_silent} are
+also still available.
+
+The non-silent uninstall options both ask which of the two uninstall
+options is desired. the only difference between them is which button
+is the default.
+
+The new launcher mode option of the 2017 \TL{} installer invokes the
+launcher with one of the silent installer options.
+
+Within the launcher, there are functions \texttt{FU:uninst\_all} and
+\texttt{FU:uninst} which can be assigned to a menu- or button
+control. If necessary, the launcher will pop up a \textsc{uac}
+prompt and restart in elevated mode.
+
+The \TL{} installer may create a higher-priority
+\texttt{tlaunch.ini} if for either the path setting option or the
+file associations option a non-default value was selected. This will
+happen even if launcher mode was not selected.
+
+\subsection{The tlaunchmode script}
+\label{sec:tlaunchmode}
+
+The included Perl script tlaunchmode can convert a local \TL{}
+installation between classic and launcher-based. Run with a
+parameter `on', the script turns launcher mode on; with `off' it
+reverts the installation to classic, and anything else prints a
+brief help message. It is already part of \TL.
+
+It aborts if admin permissions are required but missing.
+
+\subsection{\TeX{} Live Manager}
+
+Nothing special has been done for the \TL{} Manager. It can be
+assigned to a menu- or button control, although this makes little
+sense for a centrally managed network installation. If necessary it
+will automatically pop up a \textsc{uac} prompt.
+
+\chapter[The launcher at the RUG]{The launcher at the
+ Rijksuniversiteit Groningen}
+\label{chap:rug}
+
+\begin{figure}[tb]
+ \centering
+ \includegraphics[width=.7\linewidth]{figures/tlaunch_rug}
+ \caption{The launcher at the Rijksuniversiteit Groningen}
+ \label{fig:launcher_rug}
+\end{figure}
+
+This chapter deals with the launcher-based \TL{} installation at the
+\RUG{} (Rijksuniversiteit Groningen) and the environment in which it
+operates.
+
+Our \TL{} installation resides on the network. The \TL{} Launcher
+is available via a centrally managed start menu. From any Windows
+workstation connected to the network, one can click the launcher
+shortcut in this menu and start using \TeX{}.
+
+The files in the \texttt{tlrug.zip} zipfile are tidied up versions
+of those of the \RUG{} installation; they omit some ugly workarounds
+for specific local problems and also benefit from hindsight.
+
+\section{Historical}
+
+An earlier solution for \TL{} was implemented with a patchwork of
+scripts in various languages. An initialization script created
+filetype associations, Start Menu shortcuts and modified the
+searchpath. It made use of the built-in Perl and its \TL{} modules.
+
+When between 2013 to 2014 the university transitioned to centrally
+managed desktops, using the RES workspace management
+system\footnote{Real Enterprise Solutions,
+ \texttt{https://res.com/}}, I created the launcher. Because
+previously users might run the initializer / installer when they
+really want to run the already initialized / installed \TL, I opted
+this time for a launcher that configures itself automatically,
+without requiring a separate initialization step.
+
+For speed of development, a first version was written in the
+AutoIT\footnote{\texttt{https://\dbr www.\dbr autoitscript.\dbr
+ com/}} scripting language. AutoIT has good access to Windows'
+internals, and comes with a utility which packages a script with a
+AutoIT runtime into a self-contained executable. The AutoIT versions
+did not use an ini file; everything was coded into the script
+itself.
+
+For the 2015 \TL{} release, I finally had a usable C version, in
+which all configuration was read from an ini file.
+
+\section{RES desktops}
+\label{sec:res}
+
+The RES system synthesizes a desktop or workspace for the user on
+logon. Personal settings are selectively captured, stored in a
+database and restored on re-logon; the settings part of RES can be
+considered an alternative implementation of the roaming profiles
+described in Appendix \ref{sec:roam}.
+
+This desktop is also available remotely, which works reasonably well
+most of the time.
+
+For \TL, I submit a wish list of settings to be captured to the
+workspace management people, and they enter everything into the RES
+system. Unfortunately, the RES system has its quirks, and what I
+expect to happen is not always what actually does happen. Some of
+these problems are mentioned later on.
+
+\section{Components of the \RUG{} \TeX{} installation}
+\label{sec:comps}
+
+Various third-party programs are incorporated into our \TL{}
+installation. Below are some details.
+
+Most \TeX-related software does not have deep hooks into the
+system. Even if applications require elevated permissions to
+install, usuallly they can simply be copied to another location and
+work fine from there. This is the case with \emph{e.g.} \TL{}
+itself and with \TS.
+
+The add-ons are:
+\begin{itemize}
+\item Additional editors: \TNC{} and \TS{}
+\item The pdf viewer SumatraPDF
+\item The Java-based bibliography manager JabRef
+\item The epspdf \GUI{} with bundled single-file Tcl/Tk runtime
+\item The pseudo-wysywyg LyX \LaTeX{} editor
+\end{itemize}
+There are also controls for:
+\begin{itemize}
+\item browsing the \TL{} installation
+\item a command-prompt with \TL{} as the first directory on the
+ searchpath
+\item some manuals from the \TL{} installation
+\item links to \TeX-related websites
+\end{itemize}
+Such menu items are simply created by single lines in the
+ini file.
+
+There are no controls for the \TL{} manager or for uninstalling.
+
+Figure \ref{fig:launcher_rug} shows buttons for some of the
+additional software. Along the bottom of the window is an
+announcement text, which is an optional string item in the ini
+file. The Help menu item opens a help text in the configured default
+text editor -- probably Notepad.
+
+\section{Directory organization}
+\label{sec:rugdirs}
+
+There is a directory under the \TL{} root containing all the
+extras. There is another subdirectory for the various scripts. All
+paths in both the ini file and the scripts are relative to the root
+of the installation.
+
+I placed both the binary and the ini file in the root of the
+installation, but did not place anything into existing \TL{}
+subdirectories.
+
+\section{Fixes for add-ons}
+\label{sec:fixes}
+
+Some of the add-ons needed a bit more work than just copying the
+installed program directory to its place under the \TL{} root:
+
+\subsection{\TNC}
+\label{sec:tnc}
+The original university installation was based on MikTeX, with
+\TNC{} as editor. In 2008 I replaced MikTeX with \TL, and \TNC{}
+with the more up to date \TS{} editor. Since I did not want to force
+anyone to switch editors, I also kept \TNC{} around.
+
+While \TNC{} can autoconfigure itself nicely for MikTeX, it asks
+\TL{} users a series of questions about what is where. Since many
+users do not know their way around outside their home directory, I
+wrote a vbscript which emulates the MiKTeX autoconfiguration for
+\TL{} and spares the user awkward questions.
+
+\subsection{\TS}
+\label{sec:ts}
+
+\TS{} autoconfigures itself fine, but there were still two problems:
+\begin{enumerate}
+\item By default, it checks whether there is a more recent version,
+ while users are not in a position to do an update themselves.
+\item With our current desktop management software, programs do not
+ get the user searchpath appended to their process searchpath.
+\end{enumerate}
+The first problem is solved during first-time initialization of the
+launcher. If there is no \TS{} configuration file, then one is
+created with just the setting not to check for updates. If there is
+one, the update check option is edited to be off. Either way, there
+is no impact on other settings.
+
+A possible solution for the second problem is described in Appendix
+\ref{sec:appreg}, but I opted instead to start \TS{} via a small
+wrapper program.
+
+Note that the \TL{} runscript wrapper does already take care of the
+searchpath for TeXworks, Dviout and PSV[iew].
+
+\subsection{SumatraPDF}
+\label{sec:sumatra}
+
+In the absence of any registry settings, SumatraPDF assumes that it
+is a portable setup, and tries to write user configuration to its
+own directory. Following advice from its developers, I created a
+registry setting to tell SumatraPDF otherwise, and let it write
+its configuration data to the user's profile.
+
+Checks for updates are disabled in a similar way as for \TS.
+
+\subsection{LyX}
+\label{sec:lyx}
+
+On first start, LyX can take several minutes to take stock of its
+environment and figure out what it can use. During this time, it is not
+even clear that anything is happening.
+
+To prevent this delay, the post-config script copies a pre-generated
+configuration directory to the user's profile.
+
+In the LyX installation itself, in the file
+\texttt{\emph{lyxroot}\bslb Resources\bslb lyxrc.dist}, the setting
+\texttt{\bsl path\_prefix} has been rephrased to only contain paths
+relative to \texttt{\$LyXDir}, which is the root of the LyX
+installation.
+
+\section{Moving the \XeTeX{} font cache}
+\label{sec:xecache}
+
+The default location of the \XeTeX{} font cache in \TL{} is
+\texttt{\$TEXMFYSVAR/\dbr fonts/\dbr cache}, \emph{i.e.}
+\texttt{\emph{tlroot}/\dbr texmf-var/\dbr fonts/\dbr cache}. In a
+multi-user or network install, this location is not
+user-writable. Since this may be a problem,\footnote{\emph{E.g.} if
+ the set of Windows fonts changes, \XeTeX{} will try to update the
+ font cache but will not be able to save the updated cache.} a line
+\begin{verbatim}
+FC_CACHEDIR = $TEXMFVAR/fonts/cache
+\end{verbatim}
+in the file \texttt{\emph{tlroot}/\dbr texmf.cnf} will move the
+cache to a user-writable location. The \texttt{tlaunchmode} script,
+see section \ref{sec:tlaunchmode}, will take care of this
+automatically.
+
+Since I generate the \TL{} installation on a Linux system, the
+configured \TL{} font paths in \texttt{\$TEXMFSYSVAR/\dbr fonts/\dbr
+ conf/\dbr fonts.conf} do not match the target installation. Of
+course this generated file can be hand-edited, but I preferred to
+leave this file alone and move the font cache configuration files
+also to a user-writable location with another line:
+\begin{verbatim}
+FONTCONFIG_PATH = $TEXMFVAR/fonts/conf
+\end{verbatim}
+in \texttt{\emph{tlroot}/texmf.cnf}. A per-user font configuration
+is then created by a line
+\begin{verbatim}
+"%TLROOT%\tlpkg\tlperl\bin\perl.exe"
+ "%TLROOT%\tlpkg\tlpostcode\xetex.pl"
+ install "%TLROOT%" skip_gen 2>NUL
+\end{verbatim}
+(one line) in a post-config script, see section \ref{sec:scripts}.
+
+The last parameter, \emph{viz.} \texttt{skip\_gen}, suppresses
+actual cache generation, since that might take quite some time and
+only benefit \XeTeX{} users. Any non-null value would have had the
+same effect.
+
+\appendix
+
+\chapter{Windows issues}
+
+\section{User and system}
+\label{sec:usersys}
+
+Microsoft has wised up a lot security-wise. When Windows XP
+appeared, the line of Windows 9\emph{x} windowses made place for
+slightly crippled versions of the NT-based professional
+editions. Even for Home editions there is now a separation between
+per-user and system-wide settings and files. Since Windows Vista,
+this separation is much more strictly enforced, and even
+administrators have to take an extra step, such as clicking yes to a
+UAC\footnote{User Account Control} prompt, before they can do
+anything deemed risky.
+
+\section{Roaming}
+\label{sec:roam}
+
+On a Windows domain network, it can be arranged that users have more
+or less the same desktop, whatever computer within the network they
+happen to be working on. This is accomplished by either `folder
+redirection', \emph{i.e.} defining network locations for certain
+dedicated directories (see `Known Folders' in Appendix
+\ref{sec:known}), or by copying user data back and forth between
+workstation and network on logoff and logon. There may also be a
+dedicated network share for user documents which is accessible from
+any computer, and which may do double duty as home to redirected
+folders.
+
+\section{Windows configuration}
+\label{sec:wconfig}
+
+Some Windows configuration can only be stored in the registry, in
+particular file associations, see section \ref{sec:wftas} below, and
+environment variables, including the searchpath.
+
+Other configuration can be stored either in the registry or in
+configuration files, at the discretion of the developer.
+
+\subsection{Registry locations}
+\label{sec:hives}
+
+We have to deal with three locations or hives within the registry:
+\begin{itemize}
+\item \texttt{HKEY\_\dbr
+ CURRENT\_\dbr USER}, or \hkcu{} in short, for user-specific settings
+\item \texttt{HKEY\_\dbr
+ LOCAL\_\dbr MACHINE}, or \hklm{} in short, for system-level settings
+\item A third hive, \texttt{HKEY\_\dbr CLASSES\_\dbr ROOT}, or
+ \hkcr, will be described in the next subsection.
+\end{itemize}
+
+\subsection{Filetype associations}
+\label{sec:wftas}
+
+The basic idea is that an extension has a default filetype or
+ProgID, and this filetype in its turn can define commands such as
+open, edit, view or print. For example, the extension \texttt{.jar}
+has as its filetype or ProgID \texttt{jarfile}, and for the ProgID
+\texttt{jarfile} the open command is defined as \emph{e.g.}\par
+{\footnotesize
+\begin{verbatim}
+"C:\Program Files (x86)\Java\jre1.8.0_45\bin\javaw.exe" -jar "%1" %*
+\end{verbatim}
+}\normalsize
+Extensions can also have secondary file associations. These are
+the ones showing up when right-clicking a file and selecting `Open
+with\textellipsis'.
+
+Filetype associations exist in per-user and system-wide flavors:
+
+{\sloppy
+\begin{itemize}
+\item User-specific filetype associations are stored in
+ \hkcu\texttt{\bslb Software\bslb Classes}
+\item System-level filetype associations are stored in
+ \hklm\texttt{\bslb Software\bslb Classes}
+\item The effective filetype associations are stored in
+ \texttt{HKEY\_\dbr CLASSES\_\dbr ROOT} or \hkcr, which is a
+ runtime merge of the above two branches. Settings in \hkcu{}
+ override corresponding settings in \hklm.
+\end{itemize}}
+
+{\sloppy For example, the link from \texttt{.jar} to
+ \texttt{jarfile} is can be read from the \hkcr\texttt{\bslb.jar}
+ key and the link from \texttt{jarfile} to actual commands from the
+ \hkcr \texttt{\bslb jarfile} key.\footnote{In some situations,
+ reading from \hkcr{} proved not entirely reliable. Therefore, \TL{}
+ always explicitly checks first \hkcu{} and if necessary
+ \hklm.}\par}
+
+Secondary filetype associations can be stored in a subkey of the
+extension subkey, either the \texttt{OpenWithList} (obsolete) or
+the \texttt{OpenWithProgIds} subkey.
+
+\subsection{Non-roaming filetype associations}
+\label{sec:noroam}
+
+{\sloppy
+Unfortunately, these filetype associations do not roam. With the
+RES desktop management system at our university, this is no longer a
+problem for us. For other setups, the launcher contains a workaround
+which is activated by the \texttt{remember} ini file setting, see
+section \ref{sec:gen}.\par}
+
+When this is set to 1, the launcher will during first-time
+initialization place a shortcut to the forgetter in the Start / All
+Programs / Startup menu, with a `remember' parameter added. This
+will cause the forgetter to run automatically at logon with a
+remember parameter. With this parameter, it will just silently
+recreate the filetype associations and then terminate.
+
+\subsection{UserChoice}
+\label{sec:userchoice}
+
+{\sloppy
+Apart from the registry settings under the two \texttt{\bslb
+ Software\bslb Classes} keys, choices made by the user in the `Open
+with\textellipsis' dialog are stored under subkeys of \hkcu
+\texttt{\bslb Software\bslb Microsoft\bslb Windows\bslb
+ CurrentVersion\bslb Explorer\bslb FileExts\bslb \emph{.ext}}, the
+exact subkey(s) depending on the Windows version. Such entries
+should have priority over the ones described above, and do roam.\par}
+
+Windows 8 and later may pop up a dialog asking with what program to
+open a file even if there is already an answer in a
+\texttt{Software\bslb Classes} key. The answer will be a preference
+stored under the \texttt{FileExts} key mentioned above. This should
+alleviate the problem of non-roaming filetype associations.
+
+The launcher will not touch these registry entries.
+
+\subsection{Application registration}
+\label{sec:appreg}
+
+An application which is registered may have a better chance to be listed
+as an alternative in the `Open with...' dialog.
+
+{\sloppy The currently recommended way to register an application is
+ under the \texttt{SOFTWARE\bsl Microsoft\bslb Windows\bslb
+ CurrentVersion\bslb App Paths\bslb \emph{basename}} key
+ (\texttt{basename} including \texttt{.exe} file extension). The
+ default entry of such a key is the full path of the
+ file. Therefore, only one file with a given basename can have such
+ a registration entry.\par}
+
+The other entry of interest under this key is `Path', which is a
+searchpath fragment that should be prepended to the regular
+searchpath, just for this program. This prefixing happens if the
+program is opened by Windows Explorer. The path prefix is ignored
+if the program is started from the command-line or from the
+launcher.
+
+For filetypes defined in the launcher ini file, the launcher creates
+an application registration key for the associated program, but only
+if the \texttt{COMMAND} field is just a filename or -path, with or
+without quotes.
+
+{\sloppy
+Applications can also be registered under \hkcr \texttt{\bslb
+ Applications\bslb \emph{basename}}, but here is no option to set a
+searchpath prefix. Microsoft considers this location obsolete.\par}
+
+\subsection{The searchpath and other environment variables}
+\label{sec:env}
+
+Environment variables are also stored in the registry: per-user
+variables in \hkcu\texttt{\bslb software\bslb environment}, system
+environment variables in \hklm\texttt{\bslb System\bslb
+ CurrentControlSet\bslb Control\bslb Session Manager\bslb
+ Environment}.
+
+For the searchpath, the effective searchpath consists of the system
+\texttt{\%Path\%} variable, with the user \texttt{\%Path\%} variable
+\emph{appended} if it exists, with an intervening `;' of
+course. Therefore, \emph{directories on the system searchpath have
+ priority over the user searchpath}.
+
+Other environment variables from these registry locations behave as
+expected: the user version has priority if both exist. Note that the
+names of environment variables are case-insensitive.
+
+{\sloppy
+Various pieces of system information, such as \texttt{COMPUTERNAME}
+and \texttt{CommonProgramFiles}, are not explicitly stored as
+environment variables, but are nevertheless available as such.\par}
+
+\section{ Windows Known Folders}
+\label{sec:known}
+
+Windows has an elaborate and ever expanding system of `Known
+Folders': \emph{e.g.} Program Files, ProgramData, User Profile
+(HOME directory), Start Menu, Desktop, Documents, Downloads,
+History, SendTo, Templates, Administrative Tools, Pictures, Music,
+Videos, Account Pictures, Cookies, Favorites, and dozens more, many
+of them both in a system- and a user version.
+
+Sometimes a known folder is not a real folder but a virtual one, and
+for some known folders, 64-bits applications and 32-bits
+applications view things differently.
+
+There are APIs which associate known folder identifiers to actual
+directory paths.
+
+With Windows Vista a new API has been introduced, and the old one
+declared obsolete. One change for the better: the directory
+name `Documents and Settings' has been replaced with simply `Users'.
+
+This API also gives access to other properties, such as the
+localized names shown in Windows Explorer, such as `Programme'
+instead of `Program Files', or `Gebruikers' instead of `Users'.
+
+Microsoft recommends to avoid hard-coded paths, and to place
+everything under known folders instead. One benefit is at least that
+files in known folders have a better chance of surviving system
+upgrades.
+
+\subsection{Programs}
+\label{sec:knownprogs}
+
+The directory reserved for programs is normally \texttt{c:\bslb
+ Program Files}. On 64-bit systems, this directory is reserved for
+64-bits programs, and \texttt{c:\bslb Program Files (x86)} for
+32-bits programs. Directories under one of the Program Files folders
+are automatically write-protected.
+
+\subsection{Configuration- and data files}
+\label{sec:known_configs}
+
+There are also preferred locations for per-user- and system-wide
+program data. For Windows Vista and later these are:
+\begin{itemize}
+\item {\sloppy For user-specific settings, typical locations are
+ \texttt{\%appdata\%}, which is usually
+ \texttt{\%userprofile\%\bslb \%appdata\%\bslb roaming}, and
+ \texttt{\%localappdata\%}, which is usually
+ \texttt{\%userprofile\%\bslb \%appdata\%\bslb local}. For a
+ networked workstation, \texttt{\%appdata\%} may be relocated or
+ backed up to a location on the network, and be available to the
+ user on any workstation.\par}
+\item {\sloppy For system-wide settings there is \texttt{\%ProgramData\%},
+ usually \texttt{C:\bsl ProgramData}.\par}
+\end{itemize}
+On Windows Vista and later, these directories normally do \emph{not}
+have spaces in their path. They are by default also hidden.
+
+\subsection{\TL{} choices}
+\label{sec:known_tl}
+
+It is clear that \TL{} does not try very hard to conform to all
+Microsoft's recommendations, and I do not think that it should. A
+couple of obvious advantages of the existing default path
+\texttt{C:\bslb texlive\bslb \emph{yyyy}}\footnote{Regular users can
+ create directories in the root directory of the C:-drive, even
+ though they cannot create regular files there.} are the absence of
+spaces, and the locale-independence of the path seen in Windows
+Explorer.
+
+In this default location, \TL{} will not be write-protected
+automatically. For a system-wide installation, the \TL{} installer
+itself will take care of this.
+
+{\sloppy
+As to user files, it should be ok to put \texttt{\$TEXMFCONFIG},
+\texttt{\$TEXMFVAR} and tlaunch's \texttt{\%TLCONFIG\%} under
+\texttt{\%appdata\%} or \texttt{\%localappdata\%}. For the first
+two, this could also be done after the fact with a couple of lines
+in \texttt{\emph{tlroot}/texmf.cnf}, \emph{e.g.}:
+\begin{verbatim}
+TEXMFVAR = $APPDATA/texlive2017/texmf-var
+TEXMFCONFIG = $APPDATA/texlive2017/texmf-config
+\end{verbatim}
+There they will be hidden, but most users will never interact
+directly with files in these directories anyway.\par}
+
+\end{document}
diff --git a/obsolete/support/tlaunch/tlaunchmode.pl b/obsolete/support/tlaunch/tlaunchmode.pl
new file mode 100644
index 0000000000..e589ffbcaf
--- /dev/null
+++ b/obsolete/support/tlaunch/tlaunchmode.pl
@@ -0,0 +1,132 @@
+#!/usr/bin/env perl
+
+# This file is public domain.
+
+my $Master;
+
+BEGIN {
+ $^W = 1;
+ $Master = `%COMSPEC% /c kpsewhich -var-value=SELFAUTOPARENT`;
+ chomp($Master);
+ unshift (@INC, "$Master/tlpkg");
+}
+
+use TeXLive::TLWinGoo;
+use TeXLive::TLPDB;
+use TeXLive::TLPOBJ;
+use TeXLive::TLConfig;
+use TeXLive::TLUtils;
+
+sub help {
+ print <<ENDHELP;
+
+ tlaunchmode on
+ tlaunchmode off
+
+tlaunchmode switches a TeX Live installation between tlaunch mode
+and classic mode.
+
+tlaunchmode means:
+- a launcher with menus and buttons instead of a submenu
+- per-user configuration at first startup.
+ This configuration can be undone from within the launcher
+ and from the `Programs and Featurers' Control Panel item.
+
+See the manual for additional details and customization options.
+ENDHELP
+ exit;
+}
+my $do_lmode = shift;
+if (defined $do_lmode) {
+ if (lc($do_lmode) eq "on") { $do_lmode = 1; }
+ elsif (lc($do_lmode) eq "off") { $do_lmode = 0; }
+ else {help; }
+} else {
+ help;
+}
+
+die "Launchermode requires Vista or later\n"
+ unless TeXLive::TLWinGoo::is_vista();
+
+
+
+my $localtlpdb = TeXLive::TLPDB->new ("root" => $Master);
+
+die "Need admin permissions; please rerun from elevated command prompt\n"
+ unless ((!$localtlpdb->option("w32_multi_user") or
+ TeXLive::TLWinGoo::admin()));
+TeXLive::TLWinGoo::non_admin() if (TeXLive::TLWinGoo::admin() &&
+ !$localtlpdb->option("w32_multi_user"));
+
+if (!defined($localtlpdb)) {
+ die("Cannot load the TLPDB from $Master\n"); }
+
+my $Masterbsl;
+($Masterbsl = $Master) =~ s!/!\\!g;
+
+if ($do_lmode) {
+ for my $pkg ($localtlpdb->list_packages) {
+ # uninstall script: `&' before TeXLive
+ TeXLive::TLUtils::do_postaction("remove", $localtlpdb->get_package($pkg),
+ $localtlpdb->option("file_assocs"),
+ $localtlpdb->option("desktop_integration"),
+ $localtlpdb->option("desktop_integration"),
+ 0);
+ }
+ my $menupath = &TeXLive::TLWinGoo::menu_path();
+ $menupath =~ s!/!\\!g;
+ `rmdir /s /q "$menupath\\$TeXLive::TLConfig::WindowsMainMenuName" 2>nul`;
+
+ # remove bindir from PATH settings
+ TeXLive::TLUtils::w32_remove_from_path("$Master/bin/win32",
+ $localtlpdb->option("w32_multi_user"));
+
+ # unregister uninstaller
+ TeXLive::TLWinGoo::unregister_uninstaller(
+ $localtlpdb->option("w32_multi_user"));
+
+ # for multi-user, adjust root texmf.cnf for xetex
+ if ($localtlpdb->option("w32_multi_user")) {
+ if (!(-f "$Master/texmf.cnf.orig")) {
+ `copy /b $Masterbsl\\texmf.cnf $Masterbsl\\texmf.cnf.orig`;
+ }
+ if (open (TMF, ">> $Master/texmf.cnf")) {
+ print TMF "\nFC_CACHEDIR=\$TEXMFVAR/fonts/cache\n";
+ close(TMF);
+ }
+ }
+ if ($localtlpdb->option("w32_multi_user")) {
+ `"$Master/bin/win32/tlaunch.exe" admin_inst`;
+ } else {
+ `"$Master/bin/win32/tlaunch.exe" user_inst`;
+ }
+} else {
+ `"$Master/bin/win32/tlaunch.exe" uninst`;
+
+ TeXLive::TLWinGoo::create_uninstaller($Master);
+ TeXLive::TLUtils::w32_add_to_path("$Master/bin/win32",
+ $localtlpdb->option("w32_multi_user"));
+
+ for my $pkg ($localtlpdb->list_packages) {
+ # uninstall script: `&' before TeXLive
+ TeXLive::TLUtils::do_postaction("install", $localtlpdb->get_package($pkg),
+ $localtlpdb->option("file_assocs"),
+ $localtlpdb->option("desktop_integration"),
+ $localtlpdb->option("desktop_integration"),
+ 0);
+ }
+
+ TeXLive::TLWinGoo::broadcast_env();
+ TeXLive::TLWinGoo::update_assocs();
+
+ # restore original root texmf.cnf
+ if (-f "$Master/texmf.cnf.orig") {
+ chdir $Master;
+ unlink "texmf.cnf";
+ sleep 2;
+ rename "texmf.cnf.orig", "texmf.cnf";
+ }
+ if ((-f "$Master/texmf.cnf.orig") || !(-f "$Master/texmf.cnf")) {
+ print "Failed to restore root $Master/texmf.cnf; do this manually.";
+ }
+}