diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8c09798 --- /dev/null +++ b/LICENSE @@ -0,0 +1,531 @@ +Common Public Attribution License Version 1.0 (CPAL-1.0) + +SPDX short identifier: CPAL-1.0 + +Common Public Attribution License Version 1.0 (CPAL-1.0) + +1. “Definitions” + + 1.0.1 “Commercial Use” means distribution or otherwise making the Covered + Code available to a third party. + + 1.1 “Contributor” means each entity that creates or contributes to the + creation of Modifications. + + 1.2 “Contributor Version” means the combination of the Original Code, prior + Modifications used by a Contributor, and the Modifications made by that + particular Contributor. + + 1.3 “Covered Code” means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case including + portions thereof. + + 1.4 “Electronic Distribution Mechanism” means a mechanism generally + accepted in the software development community for the electronic transfer + of data. + + 1.5 “Executable” means Covered Code in any form other than Source Code. + + 1.6 “Initial Developer” means the individual or entity identified as the + Initial Developer in the Source Code notice required by Exhibit A. + + 1.7 “Larger Work” means a work which combines Covered Code or portions + thereof with code not governed by the terms of this License. + + 1.8 “License” means this document. + + 1.8.1 “Licensable” means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9 “Modifications” means any addition to or deletion from the substance or + structure of either the Original Code or any previous Modifications. When + Covered Code is released as a series of files, a Modification is: + + A. Any addition to or deletion from the contents of a file containing + Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or previous + Modifications. + + 1.10 “Original Code” means Source Code of computer software code which is + described in the Source Code notice required by Exhibit A as Original Code, + and which, at the time of its release under this License is not already + Covered Code governed by this License. + + 1.10.1 “Patent Claims” means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, and + apparatus claims, in any patent Licensable by grantor. + + 1.11 “Source Code” means the preferred form of the Covered Code for making + modifications to it, including all modules it contains, plus any associated + interface definition files, scripts used to control compilation and + installation of an Executable, or source code differential comparisons + against either the Original Code or another well known, available Covered + Code of the Contributor’s choice. The Source Code can be in a compressed or + archival form, provided the appropriate decompression or de-archiving + software is widely available for no charge. + + 1.12 “You” (or “Your”) means an individual or a legal entity exercising + rights under, and complying with all of the terms of, this License or a + future version of this License issued under Section 6.1. For legal + entities, “You” includes any entity which controls, is controlled by, or is + under common control with You. For purposes of this definition, “control” + means (a) the power, direct or indirect, to cause the direction or + management of such entity, whether by contract or otherwise, or (b) + ownership of more than fifty percent (50%) of the outstanding shares or + beneficial ownership of such entity. + +2. Source Code License. + + 2.1 The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property claims: + + (a) under intellectual property rights (other than patent or trademark) + Licensable by Initial Developer to use, reproduce, modify, display, + perform, sublicense and distribute the Original Code (or portions + thereof) with or without Modifications, and/or as part of a Larger + Work; and + + (b) under Patents Claims infringed by the making, using or selling of + Original Code, to make, have made, use, practice, sell, and offer for + sale, and/or otherwise dispose of the Original Code (or portions + thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are effective + on the date Initial Developer first distributes Original Code under the + terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is granted: + 1) for code that You delete from the Original Code; 2) separate from + the Original Code; or 3) for infringements caused by: i) the + modification of the Original Code or ii) the combination of the + Original Code with other software or devices. + + 2.2 Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or trademark) + Licensable by Contributor, to use, reproduce, modify, display, perform, + sublicense and distribute the Modifications created by such Contributor + (or portions thereof) either on an unmodified basis, with other + Modifications, as Covered Code and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or selling of + Modifications made by that Contributor either alone and/or in + combination with its Contributor Version (or portions of such + combination), to make, use, sell, offer for sale, have made, and/or + otherwise dispose of: 1) Modifications made by that Contributor (or + portions thereof); and 2) the combination of Modifications made by that + Contributor with its Contributor Version (or portions of such + combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on + the date Contributor first makes Commercial Use of the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is granted: + 1) for any code that Contributor has deleted from the Contributor + Version; 2) separate from the Contributor Version; 3) for infringements + caused by: i) third party modifications of Contributor Version or ii) + the combination of Modifications made by that Contributor with other + software (except as part of the Contributor Version) or other devices; + or 4) under Patent Claims infringed by Covered Code in the absence of + Modifications made by that Contributor. + +3. Distribution Obligations. + + 3.1 Application of License. + The Modifications which You create or to which You contribute are governed + by the terms of this License, including without limitation Section 2.2. The + Source Code version of Covered Code may be distributed only under the terms + of this License or a future version of this License released under Section + 6.1, and You must include a copy of this License with every copy of the + Source Code You distribute. You may not offer or impose any terms on any + Source Code version that alters or restricts the applicable version of this + License or the recipients’ rights hereunder. However, You may include an + additional document offering the additional rights described in Section + 3.5. + + 3.2 Availability of Source Code. + Any Modification which You create or to which You contribute must be made + available in Source Code form under the terms of this License either on the + same media as an Executable version or via an accepted Electronic + Distribution Mechanism to anyone to whom you made an Executable version + available; and if made available via Electronic Distribution Mechanism, + must remain available for at least twelve (12) months after the date it + initially became available, or at least six (6) months after a subsequent + version of that particular Modification has been made available to such + recipients. You are responsible for ensuring that the Source Code version + remains available even if the Electronic Distribution Mechanism is + maintained by a third party. + + 3.3 Description of Modifications. + You must cause all Covered Code to which You contribute to contain a file + documenting the changes You made to create that Covered Code and the date + of any change. You must include a prominent statement that the Modification + is derived, directly or indirectly, from Original Code provided by the + Initial Developer and including the name of the Initial Developer in (a) + the Source Code, and (b) in any notice in an Executable version or related + documentation in which You describe the origin or ownership of the Covered + Code. + + 3.4 Intellectual Property Matters + + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party’s + intellectual property rights is required to exercise the rights granted + by such Contributor under Sections 2.1 or 2.2, Contributor must include + a text file with the Source Code distribution titled “LEGAL” which + describes the claim and the party making the claim in sufficient detail + that a recipient will know whom to contact. If Contributor obtains such + knowledge after the Modification is made available as described in + Section 3.2, Contributor shall promptly modify the LEGAL file in all + copies Contributor makes available thereafter and shall take other + steps (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered Code + that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor’s Modifications include an application programming + interface and Contributor has knowledge of patent licenses which are + reasonably necessary to implement that API, Contributor must also + include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to Section + 3.4(a) above, Contributor believes that Contributor’s Modifications are + Contributor’s original creation(s) and/or Contributor has sufficient + rights to grant the rights conveyed by this License. + + 3.5 Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source Code. + If it is not possible to put such notice in a particular Source Code file + due to its structure, then You must include such notice in a location (such + as a relevant directory) where a user would be likely to look for such a + notice. If You created one or more Modification(s) You may add your name as + a Contributor to the notice described in Exhibit A. You must also duplicate + this License in any documentation for the Source Code where You describe + recipients’ rights or ownership rights relating to Covered Code. You may + choose to offer, and to charge a fee for, warranty, support, indemnity or + liability obligations to one or more recipients of Covered Code. However, + You may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than any + such warranty, support, indemnity or liability obligation is offered by You + alone, and You hereby agree to indemnify the Initial Developer and every + Contributor for any liability incurred by the Initial Developer or such + Contributor as a result of warranty, support, indemnity or liability terms + You offer. + + 3.6 Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the requirements + of Section 3.1-3.5 have been met for that Covered Code, and if You include + a notice stating that the Source Code version of the Covered Code is + available under the terms of this License, including a description of how + and where You have fulfilled the obligations of Section 3.2. The notice + must be conspicuously included in any notice in an Executable version, + related documentation or collateral in which You describe recipients’ + rights relating to the Covered Code. You may distribute the Executable + version of Covered Code or ownership rights under a license of Your choice, + which may contain terms different from this License, provided that You are + in compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient’s + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different license + You must make it absolutely clear that any terms which differ from this + License are offered by You alone, not by the Initial Developer, Original + Developer or any Contributor. You hereby agree to indemnify the Initial + Developer, Original Developer and every Contributor for any liability + incurred by the Initial Developer, Original Developer or such Contributor + as a result of any such terms You offer. + + 3.7 Larger Works. + You may create a Larger Work by combining Covered Code with other code not + governed by the terms of this License and distribute the Larger Work as a + single product. In such a case, You must make sure the requirements of this + License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Code due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this + License to the maximum extent possible; and (b) describe the limitations + and the code they affect. Such description must be included in the LEGAL + file described in Section 3.4 and must be included with all distributions + of the Source Code. Except to the extent prohibited by statute or + regulation, such description must be sufficiently detailed for a recipient + of ordinary skill to be able to understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has attached + the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1 New Versions. + Socialtext, Inc. (“Socialtext”) may publish revised and/or new versions of + the License from time to time. Each version will be given a distinguishing + version number. + + 6.2 Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that version. + You may also choose to use such Covered Code under the terms of any + subsequent version of the License published by Socialtext. No one other + than Socialtext has the right to modify the terms applicable to Covered + Code created under this License. + + 6.3 Derivative Works. + If You create or use a modified version of this License (which you may only + do in order to apply it to code which is not already Covered Code governed + by this License), You must (a) rename Your license so that the phrases + “Socialtext”, “CPAL” or any confusingly similar phrase do not appear in + your license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license contains + terms which differ from the CPAL. (Filling in the name of the Initial + Developer, Original Developer, Original Code or Contributor in the notice + described in Exhibit A shall not of themselves be deemed to be + modifications of this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS” BASIS, WITHOUT + WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT + LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, + MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE + RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. + SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE + INITIAL DEVELOPER, ORIGINAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF + WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY + COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1 This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure such + breach within 30 days of becoming aware of the breach. All sublicenses to + the Covered Code which are properly granted shall survive any termination + of this License. Provisions which, by their nature, must remain in effect + beyond the termination of this License shall survive. + + 8.2 If You initiate litigation by asserting a patent infringement claim + (excluding declatory judgment actions) against Initial Developer, Original + Developer or a Contributor (the Initial Developer, Original Developer or + Contributor against whom You file such action is referred to as + “Participant”) alleging that: + +   + + (a) such Participant’s Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License shall, + upon 60 days notice from Participant terminate prospectively, unless if + within 60 days after receipt of notice You either: (i) agree in writing + to pay Participant a mutually agreeable reasonable royalty for Your + past and future use of Modifications made by such Participant, or (ii) + withdraw Your litigation claim with respect to the Contributor Version + against such Participant. If within 60 days of notice, a reasonable + royalty and payment arrangement are not mutually agreed upon in writing + by the parties or the litigation claim is not withdrawn, the rights + granted by Participant to You under Sections 2.1 and/or 2.2 + automatically terminate at the expiration of the 60 day notice period + specified above. + + (b) any software, hardware, or device, other than such Participant’s + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) and + 2.2(b) are revoked effective as of the date You first made, used, sold, + distributed, or had made, Modifications made by that Participant. + + 8.3 If You assert a patent infringement claim against Participant alleging + that such Participant’s Contributor Version directly or indirectly + infringes any patent where such claim is resolved (such as by license or + settlement) prior to the initiation of patent infringement litigation, then + the reasonable value of the licenses granted by such Participant under + Sections 2.1 or 2.2 shall be taken into account in determining the amount + or value of any payment or license. + + 8.4 In the event of termination under Sections 8.1 or 8.2 above, all end + user license agreements (excluding distributors and resellers) which have + been validly granted by You or any distributor hereunder prior to + termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING + NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, + ORIGINAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED + CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK + STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL + DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE + POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY + TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY’S + NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME + JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR + CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO + YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a “commercial item,” as that term is defined in 48 + C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software” and + “commercial computer software documentation,” as such terms are used in 48 + C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. + 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users + acquire Covered Code with only those rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. This License shall be governed by California law provisions + (except to the extent applicable law, if any, provides otherwise), + excluding its conflict-of-law provisions. With respect to disputes in which + at least one party is a citizen of, or an entity chartered or registered to + do business in the United States of America, any litigation relating to + this License shall be subject to the jurisdiction of the Federal Courts of + the Northern District of California, with venue lying in Santa Clara + County, California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys’ fees and + expenses. The application of the United Nations Convention on Contracts for + the International Sale of Goods is expressly excluded. Any law or + regulation which provides that the language of a contract shall be + construed against the drafter shall not apply to this License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer, Original Developer and the Contributors, each + party is responsible for claims and damages arising, directly or + indirectly, out of its utilization of rights under this License and You + agree to work with Initial Developer, Original Developer and Contributors + to distribute such responsibility on an equitable basis. Nothing herein is + intended or shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + Multiple-Licensed. Multiple-Licensed means that the Initial Developer + permits you to utilize portions of the Covered Code under Your choice of + the CPAL or the alternative licenses, if any, specified by the Initial + Developer in the file described in Exhibit A. + +14. ADDITIONAL TERM: ATTRIBUTION + + (a) As a modest attribution to the organizer of the development of the + Original Code (“Original Developer”), in the hope that its promotional + value may help justify the time, money and effort invested in writing the + Original Code, the Original Developer may include in Exhibit B + (“Attribution Information”) a requirement that each time an Executable and + Source Code or a Larger Work is launched or initially run (which includes + initiating a session), a prominent display of the Original Developer’s + Attribution Information (as defined below) must occur on the graphic user + interface employed by the end user to access such Covered Code (which may + include display on a splash screen), if any. The size of the graphic image + should be consistent with the size of the other elements of the Attribution + Information. If the access by the end user to the Executable and Source + Code does not create a graphic user interface for access to the Covered + Code, this obligation shall not apply. If the Original Code displays such + Attribution Information in a particular form (such as in the form of a + splash screen, notice at login, an “about” display, or dedicated + attribution area on user interface screens), continued use of such form for + that Attribution Information is one way of meeting this requirement for + notice. + + (b) Attribution information may only include a copyright notice, a brief + phrase, graphic image and a URL (“Attribution Information”) and is subject + to the Attribution Limits as defined below. For these purposes, prominent + shall mean display for sufficient duration to give reasonable notice to the + user of the identity of the Original Developer and that if You include + Attribution Information or similar information for other parties, You must + ensure that the Attribution Information for the Original Developer shall be + no less prominent than such Attribution Information or similar information + for the other party. For greater certainty, the Original Developer may + choose to specify in Exhibit B below that the above attribution requirement + only applies to an Executable and Source Code resulting from the Original + Code or any Modification, but not a Larger Work. The intent is to provide + for reasonably modest attribution, therefore the Original Developer cannot + require that You display, at any time, more than the following information + as Attribution Information: (a) a copyright notice including the name of + the Original Developer; (b) a word or one phrase (not exceeding 10 words); + (c) one graphic image provided by the Original Developer; and (d) a URL + (collectively, the “Attribution Limits”). + + (c) If Exhibit B does not include any Attribution Information, then there + are no requirements for You to display any Attribution Information of the + Original Developer. + + (d) You acknowledge that all trademarks, service marks and/or trade names + contained within the Attribution Information distributed with the Covered + Code are the exclusive property of their owners and may only be used with + the permission of their owners, or under circumstances otherwise permitted + by law or as expressly set out in this License. + +15. ADDITIONAL TERM: NETWORK USE. + + The term “External Deployment” means the use, distribution, or + communication of the Original Code or Modifications in any way such that + the Original Code or Modifications may be used by anyone other than You, + whether those works are distributed or communicated to those persons or + made available as an application intended for use over a network. As an + express condition for the grants of license hereunder, You must treat any + External Deployment by You of the Original Code or Modifications as a + distribution under section 3.1 and make Source Code available under Section + 3.2. + +EXHIBIT A. Common Public Attribution License Version 1.0. + + “The contents of this file are subject to the Common Public Attribution + License Version 1.0 (the “License”); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + https://opensource.org/licenses/CPAL-1.0. The License is based on the Mozilla Public License Version + 1.1 but Sections 14 and 15 have been added to cover use of software over a + computer network and provide for limited attribution for the Original + Developer. In addition, Exhibit A has been modified to be consistent with + Exhibit B. + +   + + Software distributed under the License is distributed on an “AS IS” basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the + License. + + The Original Code is Linux Game Manager. + + The Original Developer is not the Initial Developer and is __________. If + left blank, the Original Developer is the Initial Developer. + + The Initial Developer of the Original Code is Billy "Storm Dragon" Wolfe. All portions of + the code written by Billy Wolfe are Copyright (c) 2020. All Rights + Reserved. + + Contributor Michael Taboada. + + [NOTE: The text of this Exhibit A may differ slightly from the text of the + notices in the Source Code files of the Original Code. You should use the + text of this Exhibit A rather than the text found in the Original Code + Source Code for Your Modifications.] + +EXHIBIT B. Attribution Information + + Attribution Copyright Notice: Linux Game manager copyright 2022 Storm Dragon. All rights reserved. + +   + + Attribution Phrase (not exceeding 10 words): A Stormux project + + Attribution URL: https://stormgames.wolfe.casa + + Graphic Image as provided in the Covered Code, if any. + + Display of Attribution Information is required in Larger + Works which are defined in the CPAL as a work which combines Covered Code + or portions thereof with code not governed by the terms of the CPAL. + diff --git a/linux-game-manager.sh b/linux-game-manager.sh new file mode 100755 index 0000000..038fb40 --- /dev/null +++ b/linux-game-manager.sh @@ -0,0 +1,325 @@ +#!/usr/bin/env bash + +license() { + cat << EOF + ■The contents of this file are subject to the Common Public Attribution + License Version 1.0 (the ■License■); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + https://opensource.org/licenses/CPAL-1.0. The License is based on the Mozilla Public License Version + 1.1 but Sections 14 and 15 have been added to cover use of software over a + computer network and provide for limited attribution for the Original + Developer. In addition, Exhibit A has been modified to be consistent with + Exhibit B. + + Software distributed under the License is distributed on an ■AS IS■ basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the + License. + + The Original Code is linux-game-manager. + + The Original Developer is not the Initial Developer and is . If + left blank, the Original Developer is the Initial Developer. + + The Initial Developer of the Original Code is Billy "Storm Dragon" Wolfe. All portions of + the code written by Billy Wolfe are Copyright (c) 2020. All Rights + Reserved. + + Contributor Michael Taboada. + + Attribution Copyright Notice: linux-game-manager copyright 2022 Storm Dragon. All rights reserved. + + Attribution Phrase (not exceeding 10 words): A Stormux project + + Attribution URL: https://stormgames.wolfe.casa + + Graphic Image as provided in the Covered Code, if any. + + Display of Attribution Information is required in Larger + Works which are defined in the CPAL as a work which combines Covered Code + or portions thereof with code not governed by the terms of the CPAL. +EOF +} + +# Dialog accessibility +export DIALOGOPTS='--no-lines --visit-items' + + +# Function to open urls +open_url() { + xdg-open "${*}" 2> /dev/null +} + +# Create desktop launcher file +desktop_launcher() { + local desktopFile="${HOME}/linux-game-manager.desktop" + if [[ -e "${desktopFile}" ]]; then + echo "the file ${desktopFile} exists. Cannot create the launcher." + exit 1 + fi + local dotDesktop + local terminal + # Try to find an accessible terminal + for i in mate-terminal lxterminal terminator gnome-terminal ; do + if command -v $i &> /dev/null ; then + terminal="$i" + break + fi + done + dotDesktop=('[Desktop Entry]' + 'Name=Linux game manager' + 'GenericName=Linux game Manager' + 'Comment=Install and launch games that are accessible to the blind' + "Exec=${terminal} -t \"Linux Game Manager\" -e \"/usr/bin/bash -c 'nohup $(readlink -e "$0") 2> /dev/null'\"" + 'Terminal=false' + 'Type=Application' + 'StartupNotify=false' + 'Keywords=game;' + 'Categories=Game;' + 'Version=1.0') + for i in "${dotDesktop[@]}" ; do + echo "$i" >> "${desktopFile}" + done + desktop-file-install --dir "${HOME}/.local/share/applications" -m 755 "${desktopFile}" + xdg-desktop-icon install ~/.local/share/applications/linux-game-manager.desktop + rm "${desktopFile}" + exit 0 +} + +clear_cache() { + local answer + if [[ ! -d "${cache}" ]]; then + echo "No cache found at ${cache}." + return + fi + while ! [[ "${answer,,}" =~ ^yes$|^no$ ]]; do + echo "This will delete all contents of ${cache}. Are you sure you want to continue?" + echo "Please type yes or no." + echo + read -r answer + done + if [[ "$answer" == "no" ]]; then + return + fi + # All safety checks done. Delete the cache. + rm -rfv "${cache}" + echo "Cache deleted." +} + +download() { + local source=($@) + for i in "${source[@]}" ; do + local dest="${i##*/}" + dest="${dest//%20/ }" + # Remove the destination file if it is empty. + test -s "${cache}/${dest}" || rm -f "${cache}/${dest}" 2> /dev/null + if [[ "${redownload}" == "true" ]] && [[ -e "${cache}/${dest}" ]]; then + rm -v "${cache}/${dest}" + fi + # Skip if the item is in cache. + test -e "${cache}/${dest}" && continue + if ! wget -4 -O "${cache}/${dest}" "${i}" ; then + echo "Could not download \"$i\"..." + exit 1 + fi + done +} + +get_installer() { + trap "exit 0" SIGINT + # If the file is in cache nothing else needs to be done. + if [[ -f "${cache}/$1" ]]; then + return + fi + # Create message for dialog. + local message="Make sure $1 is available in either your Downloads or Desktop directory and press enter to continue." + if [[ -n "$2" ]]; then + message+="\n\nThe last good known URL for $game is:" + message+="\n$2" + fi + if echo "$2" | xclip -selection clipboard 2> /dev/null ; then + message+="\n\nThe URL has been copied to the clipboard." + fi + dialog --ok-label "Continue" \ + --backtitle "Linux Game Manager" \ + --msgbox "$message" -1 -1 + # Search the Desktop and Downloads directories for the installation file + for i in ~/Downloads ~/Desktop ; do + find $i -type f -name "$1" -exec cp -v {} "${cache}/" \; + done + # If the file is still not available abort. + if [[ ! -f "${cache}/$1" ]]; then + echo "couldn't find $1. Please download the file and try again." + exit 1 + fi +} + +help() { + echo "${0##*/}" + echo "Released under the terms of the Common Public Attribution License Version 1.0" + echo -e "This is a Stormux project: https://stormux.org\n" + echo -e "Usage:\n" + echo "With no arguments, open the game launcher." + for i in "${!command[@]}" ; do + echo "-${i/:/ }: ${command[${i}]}" + done | sort + exit 0 +} + + +# main script + +add_launcher() { + local launchSettings="${game}|${*}" + if ! grep -F -q -x "${launchSettings}" "${configFile}" 2> /dev/null ; then + echo "${launchSettings}" >> "${configFile}" + sort -o "${configFile}" "${configFile}" + fi +} + +# Install games +game_installer() { + mapfile -t installedGames < <(sed '/^$/d' "${configFile}" 2> /dev/null | cut -d '|' -f3) + # Create the menu of installed games + declare -a menuList + for i in "${gameList[@]}" ; do + local menuItem="$i" + for j in "${installedGames[@]}" ; do + if [[ "$j" == "$menuItem" ]]; then + unset menuItem + fi + done + if [[ -n "$menuItem" ]]; then + menuList+=("$menuItem" "$menuItem") + fi + done + if [[ ${#menuList[@]} -eq 0 ]]; then + echo "All games are already installed." + exit 0 + fi + menuList+=("Donate" "Donate") + game="$(dialog --backtitle "Game Installer" \ + --clear \ + --no-tags \ + --menu "Please select a game to install" 0 0 0 "${menuList[@]}" --stdout)" +} + +# launch games that are installed +game_launcher() { + mapfile -t lines < <(sed '/^$/d' "${configFile}" 2> /dev/null) + if [[ ${#lines} -eq 0 ]]; then + echo "Install some games first." + exit 0 + fi + # Create the menu of installed games + declare -a menuList + for i in "${lines[@]}" ; do + menuList+=("${i#*|}" "${i%|*}") + done + menuList+=("Donate" "Donate") + game="$(dialog --backtitle "Linux Game Launcher" \ + --clear \ + --no-tags \ + --menu "Please select a game to play" 0 0 0 "${menuList[@]}" --stdout)" + local menuCode=$? + if [[ $menuCode -eq 1 ]]; then + exit 0 + fi + if [[ "$game" == "Donate" ]]; then + open_url "https://ko-fi.com/stormux" + exit 0 + fi + exec ${game%|} +} + + +# If display isn't set assume we are launching from console and an X environment is running using display :0 +if [[ -z "$DISPLAY" ]]; then + export DISPLAY=":0" +fi +# Settings file +cache="${XDG_CACHE_HOME:-$HOME/.cache}/linux-game-manager" +configFile="${XDG_CONFIG_HOME:-$HOME/.config}/storm-games/linux-game-manager/games.conf" +mkdir -p "${cache}" +mkdir -p "${configFile%/*}" +# Load any arguments from settings.conf file +if [[ -r "${configFile%/*}/settings.conf" ]]; then + source "${configFile%/*}/settings.conf" +fi +unset noCache + +# Set up logging +echo -e "\n\n-----> Logging started at $(date '+%A, %B %d, %Y at %I:%M%p')\n" >> "${cache}/linux-game-manager.log" +exec &> >(/usr/bin/tee -a "${cache}/linux-game-manager.log") + +# The list of games available for installation. +# Use menu friendly names. +gameList=( + "Fantasy Story II" +) + +# Check for required packages +requiredPackages=( + "curl" + "unzip" + "wget" +) +for i in "${requiredPackages}" ; do + if ! command -v $i &> /dev/null ; then + echo "Please install $i before continuing." + exit 1 + fi +done +# With no arguments, open the game launcher. +if [[ $# -eq 0 ]]; then + game_launcher +fi + +# Array of command line arguments +declare -A command=( + [C]="Clear the cache. All game installers will be deleted." + [D]="Create desktop shortcut. You can launch Linux Game Manager from the desktop or applications menu." + [h]="This help screen." + [i]="Install games." + [L]="Display license information." + [N]="No cache, delete the installer after it has been extracted." + [R]="Redownload. Removes old versions of packages from cache before installing." +) + +# Convert the keys of the associative array to a format usable by getopts +args="${!command[*]}" +args="${args//[[:space:]]/}" +while getopts "${args}" i ; do + case "$i" in + C) clear_cache;; + D) desktop_launcher;; + h) help;; + i) game_installer;; + L) license;; + N) noCache="true";; + R) redownload="true";; + esac +done + +# Install game based on the selection above. +installPath="${HOME}/.local/games" +mkdir -p "${installPath}" +case "${game}" in + "Fantasy Story II") + get_installer "FS2_2.6_Linux.zip" "https://drive.google.com/file/d/187OaD1HhPoty85yJafZyvfqD5_G3P04c/view?usp=sharing" + pushd "${installPath}" + unzip "${cache}/FS2_2.6_Linux.zip" + popd + chmod +x "${installPath}/FS2_2.6_Linux/FS2.x86_64" + add_launcher "${installPath}/FS2_2.6_Linux/FS2.x86_64" "-ESpeakApplication=espeak-ng" + ;; + "Donate") + open_url "https://ko-fi.com/stormux" + ;; + *) + [[ -n "${game}" ]] && echo "Game \"${game}\" not found." + exit 1 + ;; +esac + +exit 0