| @@ -46,6 +46,12 @@ While NSM can start and stop any program it only becomes convenient if clients s | |||||
| implement support. This enables saving and hiding the GUI, amongst other features. | implement support. This enables saving and hiding the GUI, amongst other features. | ||||
| Documentation and tutorials for software-developers will be added at a later date. | Documentation and tutorials for software-developers will be added at a later date. | ||||
| ## Documentation and Manual | |||||
| See the generated website installed in your systems SHARE dir or docs/out/index.html from this | |||||
| repository. Alternatively you can read the online version on our github page. All are the same | |||||
| files. We also provide a set of manpages for each executable (see below). | |||||
| ## Fork and License | ## Fork and License | ||||
| This is a fork of non-session-manager, by Jonathan Moore Liles <male@tuxfamily.net> http://non.tuxfamily.org/ | This is a fork of non-session-manager, by Jonathan Moore Liles <male@tuxfamily.net> http://non.tuxfamily.org/ | ||||
| which was released under the GNU GENERAL PUBLIC LICENSE Version 2, June 1991. | which was released under the GNU GENERAL PUBLIC LICENSE Version 2, June 1991. | ||||
| @@ -53,11 +59,20 @@ which was released under the GNU GENERAL PUBLIC LICENSE Version 2, June 1991. | |||||
| All files, except nsm.h kept in this fork were GPL "version 2 of the License, or (at your | All files, except nsm.h kept in this fork were GPL "version 2 of the License, or (at your | ||||
| option) any later version." | option) any later version." | ||||
| `nsm.h` is licensed under the ISCL. | |||||
| `nsm.h` is licensed under the ISC License. | |||||
| New-Session-Manager changed the license to GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007. | New-Session-Manager changed the license to GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007. | ||||
| See file COPYING | See file COPYING | ||||
| Documentation in docs/ is licensed Creative Commons CC-By-Sa. | |||||
| It consist of mostly generated files and snippet files which do not have a license header for | |||||
| technical reasons. | |||||
| All original documentation source files are CC-By-Sa Version v4.0 (see file docs/src/LICENSE), | |||||
| the source file docs/src/api/index.adoc is a derived work from NON-Session-Managers API file which | |||||
| is licensed CC-By-Sa v2.5. Therefore our derived API document is also CC-By-Sa v2.5 | |||||
| (see files docs/src/api/readme.txt and docs/src/api/LICENSE) | |||||
| ## Build | ## Build | ||||
| The build system is meson. | The build system is meson. | ||||
| @@ -442,8 +442,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b | |||||
| <div class="details"> | <div class="details"> | ||||
| <span id="author" class="author">Jonathan Moore Liles</span><br> | <span id="author" class="author">Jonathan Moore Liles</span><br> | ||||
| <span id="email" class="email"><<a href="mailto:male@tuxfamily.org">male@tuxfamily.org</a>></span><br> | <span id="email" class="email"><<a href="mailto:male@tuxfamily.org">male@tuxfamily.org</a>></span><br> | ||||
| <span id="revnumber">version 1.2,</span> | |||||
| <span id="revdate">2013-04-06</span> | |||||
| <span id="revnumber">version 1.2</span> | |||||
| </div> | </div> | ||||
| <div id="toc" class="toc"> | <div id="toc" class="toc"> | ||||
| <div id="toctitle">Table of Contents</div> | <div id="toctitle">Table of Contents</div> | ||||
| @@ -1453,7 +1452,7 @@ of which might respond to the message by updating their own tempo maps.</p> | |||||
| <div id="footer"> | <div id="footer"> | ||||
| <div id="footer-text"> | <div id="footer-text"> | ||||
| Version 1.2<br> | Version 1.2<br> | ||||
| Last updated 2020-07-06 22:15:39 +0200 | |||||
| Last updated 2020-07-07 02:52:30 +0200 | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </body> | </body> | ||||
| @@ -556,7 +556,7 @@ Documentation and tutorials for software-developers will be added at a later dat | |||||
| <div id="footer"> | <div id="footer"> | ||||
| <div id="footer-text"> | <div id="footer-text"> | ||||
| Version 1.4<br> | Version 1.4<br> | ||||
| Last updated 2020-07-06 22:15:39 +0200 | |||||
| Last updated 2020-07-07 02:52:30 +0200 | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </body> | </body> | ||||
| @@ -0,0 +1,430 @@ | |||||
| from: https://creativecommons.org/licenses/by-sa/4.0/legalcode.txt | |||||
| Attribution-ShareAlike 4.0 International | |||||
| ======================================================================= | |||||
| Creative Commons Corporation ("Creative Commons") is not a law firm and | |||||
| does not provide legal services or legal advice. Distribution of | |||||
| Creative Commons public licenses does not create a lawyer-client or | |||||
| other relationship. Creative Commons makes its licenses and related | |||||
| information available on an "as-is" basis. Creative Commons gives no | |||||
| warranties regarding its licenses, any material licensed under their | |||||
| terms and conditions, or any related information. Creative Commons | |||||
| disclaims all liability for damages resulting from their use to the | |||||
| fullest extent possible. | |||||
| Using Creative Commons Public Licenses | |||||
| Creative Commons public licenses provide a standard set of terms and | |||||
| conditions that creators and other rights holders may use to share | |||||
| original works of authorship and other material subject to copyright | |||||
| and certain other rights specified in the public license below. The | |||||
| following considerations are for informational purposes only, are not | |||||
| exhaustive, and do not form part of our licenses. | |||||
| Considerations for licensors: Our public licenses are | |||||
| intended for use by those authorized to give the public | |||||
| permission to use material in ways otherwise restricted by | |||||
| copyright and certain other rights. Our licenses are | |||||
| irrevocable. Licensors should read and understand the terms | |||||
| and conditions of the license they choose before applying it. | |||||
| Licensors should also secure all rights necessary before | |||||
| applying our licenses so that the public can reuse the | |||||
| material as expected. Licensors should clearly mark any | |||||
| material not subject to the license. This includes other CC- | |||||
| licensed material, or material used under an exception or | |||||
| limitation to copyright. More considerations for licensors: | |||||
| wiki.creativecommons.org/Considerations_for_licensors | |||||
| Considerations for the public: By using one of our public | |||||
| licenses, a licensor grants the public permission to use the | |||||
| licensed material under specified terms and conditions. If | |||||
| the licensor's permission is not necessary for any reason--for | |||||
| example, because of any applicable exception or limitation to | |||||
| copyright--then that use is not regulated by the license. Our | |||||
| licenses grant only permissions under copyright and certain | |||||
| other rights that a licensor has authority to grant. Use of | |||||
| the licensed material may still be restricted for other | |||||
| reasons, including because others have copyright or other | |||||
| rights in the material. A licensor may make special requests, | |||||
| such as asking that all changes be marked or described. | |||||
| Although not required by our licenses, you are encouraged to | |||||
| respect those requests where reasonable. More considerations | |||||
| for the public: | |||||
| wiki.creativecommons.org/Considerations_for_licensees | |||||
| ======================================================================= | |||||
| Creative Commons Attribution-ShareAlike 4.0 International Public | |||||
| License | |||||
| By exercising the Licensed Rights (defined below), You accept and agree | |||||
| to be bound by the terms and conditions of this Creative Commons | |||||
| Attribution-ShareAlike 4.0 International Public License ("Public | |||||
| License"). To the extent this Public License may be interpreted as a | |||||
| contract, You are granted the Licensed Rights in consideration of Your | |||||
| acceptance of these terms and conditions, and the Licensor grants You | |||||
| such rights in consideration of benefits the Licensor receives from | |||||
| making the Licensed Material available under these terms and | |||||
| conditions. | |||||
| Section 1 -- Definitions. | |||||
| a. Adapted Material means material subject to Copyright and Similar | |||||
| Rights that is derived from or based upon the Licensed Material | |||||
| and in which the Licensed Material is translated, altered, | |||||
| arranged, transformed, or otherwise modified in a manner requiring | |||||
| permission under the Copyright and Similar Rights held by the | |||||
| Licensor. For purposes of this Public License, where the Licensed | |||||
| Material is a musical work, performance, or sound recording, | |||||
| Adapted Material is always produced where the Licensed Material is | |||||
| synched in timed relation with a moving image. | |||||
| b. Adapter's License means the license You apply to Your Copyright | |||||
| and Similar Rights in Your contributions to Adapted Material in | |||||
| accordance with the terms and conditions of this Public License. | |||||
| c. BY-SA Compatible License means a license listed at | |||||
| creativecommons.org/compatiblelicenses, approved by Creative | |||||
| Commons as essentially the equivalent of this Public License. | |||||
| d. Copyright and Similar Rights means copyright and/or similar rights | |||||
| closely related to copyright including, without limitation, | |||||
| performance, broadcast, sound recording, and Sui Generis Database | |||||
| Rights, without regard to how the rights are labeled or | |||||
| categorized. For purposes of this Public License, the rights | |||||
| specified in Section 2(b)(1)-(2) are not Copyright and Similar | |||||
| Rights. | |||||
| e. Effective Technological Measures means those measures that, in the | |||||
| absence of proper authority, may not be circumvented under laws | |||||
| fulfilling obligations under Article 11 of the WIPO Copyright | |||||
| Treaty adopted on December 20, 1996, and/or similar international | |||||
| agreements. | |||||
| f. Exceptions and Limitations means fair use, fair dealing, and/or | |||||
| any other exception or limitation to Copyright and Similar Rights | |||||
| that applies to Your use of the Licensed Material. | |||||
| g. License Elements means the license attributes listed in the name | |||||
| of a Creative Commons Public License. The License Elements of this | |||||
| Public License are Attribution and ShareAlike. | |||||
| h. Licensed Material means the artistic or literary work, database, | |||||
| or other material to which the Licensor applied this Public | |||||
| License. | |||||
| i. Licensed Rights means the rights granted to You subject to the | |||||
| terms and conditions of this Public License, which are limited to | |||||
| all Copyright and Similar Rights that apply to Your use of the | |||||
| Licensed Material and that the Licensor has authority to license. | |||||
| j. Licensor means the individual(s) or entity(ies) granting rights | |||||
| under this Public License. | |||||
| k. Share means to provide material to the public by any means or | |||||
| process that requires permission under the Licensed Rights, such | |||||
| as reproduction, public display, public performance, distribution, | |||||
| dissemination, communication, or importation, and to make material | |||||
| available to the public including in ways that members of the | |||||
| public may access the material from a place and at a time | |||||
| individually chosen by them. | |||||
| l. Sui Generis Database Rights means rights other than copyright | |||||
| resulting from Directive 96/9/EC of the European Parliament and of | |||||
| the Council of 11 March 1996 on the legal protection of databases, | |||||
| as amended and/or succeeded, as well as other essentially | |||||
| equivalent rights anywhere in the world. | |||||
| m. You means the individual or entity exercising the Licensed Rights | |||||
| under this Public License. Your has a corresponding meaning. | |||||
| Section 2 -- Scope. | |||||
| a. License grant. | |||||
| 1. Subject to the terms and conditions of this Public License, | |||||
| the Licensor hereby grants You a worldwide, royalty-free, | |||||
| non-sublicensable, non-exclusive, irrevocable license to | |||||
| exercise the Licensed Rights in the Licensed Material to: | |||||
| a. reproduce and Share the Licensed Material, in whole or | |||||
| in part; and | |||||
| b. produce, reproduce, and Share Adapted Material. | |||||
| 2. Exceptions and Limitations. For the avoidance of doubt, where | |||||
| Exceptions and Limitations apply to Your use, this Public | |||||
| License does not apply, and You do not need to comply with | |||||
| its terms and conditions. | |||||
| 3. Term. The term of this Public License is specified in Section | |||||
| 6(a). | |||||
| 4. Media and formats; technical modifications allowed. The | |||||
| Licensor authorizes You to exercise the Licensed Rights in | |||||
| all media and formats whether now known or hereafter created, | |||||
| and to make technical modifications necessary to do so. The | |||||
| Licensor waives and/or agrees not to assert any right or | |||||
| authority to forbid You from making technical modifications | |||||
| necessary to exercise the Licensed Rights, including | |||||
| technical modifications necessary to circumvent Effective | |||||
| Technological Measures. For purposes of this Public License, | |||||
| simply making modifications authorized by this Section 2(a) | |||||
| (4) never produces Adapted Material. | |||||
| 5. Downstream recipients. | |||||
| a. Offer from the Licensor -- Licensed Material. Every | |||||
| recipient of the Licensed Material automatically | |||||
| receives an offer from the Licensor to exercise the | |||||
| Licensed Rights under the terms and conditions of this | |||||
| Public License. | |||||
| b. Additional offer from the Licensor -- Adapted Material. | |||||
| Every recipient of Adapted Material from You | |||||
| automatically receives an offer from the Licensor to | |||||
| exercise the Licensed Rights in the Adapted Material | |||||
| under the conditions of the Adapter's License You apply. | |||||
| c. No downstream restrictions. You may not offer or impose | |||||
| any additional or different terms or conditions on, or | |||||
| apply any Effective Technological Measures to, the | |||||
| Licensed Material if doing so restricts exercise of the | |||||
| Licensed Rights by any recipient of the Licensed | |||||
| Material. | |||||
| 6. No endorsement. Nothing in this Public License constitutes or | |||||
| may be construed as permission to assert or imply that You | |||||
| are, or that Your use of the Licensed Material is, connected | |||||
| with, or sponsored, endorsed, or granted official status by, | |||||
| the Licensor or others designated to receive attribution as | |||||
| provided in Section 3(a)(1)(A)(i). | |||||
| b. Other rights. | |||||
| 1. Moral rights, such as the right of integrity, are not | |||||
| licensed under this Public License, nor are publicity, | |||||
| privacy, and/or other similar personality rights; however, to | |||||
| the extent possible, the Licensor waives and/or agrees not to | |||||
| assert any such rights held by the Licensor to the limited | |||||
| extent necessary to allow You to exercise the Licensed | |||||
| Rights, but not otherwise. | |||||
| 2. Patent and trademark rights are not licensed under this | |||||
| Public License. | |||||
| 3. To the extent possible, the Licensor waives any right to | |||||
| collect royalties from You for the exercise of the Licensed | |||||
| Rights, whether directly or through a collecting society | |||||
| under any voluntary or waivable statutory or compulsory | |||||
| licensing scheme. In all other cases the Licensor expressly | |||||
| reserves any right to collect such royalties. | |||||
| Section 3 -- License Conditions. | |||||
| Your exercise of the Licensed Rights is expressly made subject to the | |||||
| following conditions. | |||||
| a. Attribution. | |||||
| 1. If You Share the Licensed Material (including in modified | |||||
| form), You must: | |||||
| a. retain the following if it is supplied by the Licensor | |||||
| with the Licensed Material: | |||||
| i. identification of the creator(s) of the Licensed | |||||
| Material and any others designated to receive | |||||
| attribution, in any reasonable manner requested by | |||||
| the Licensor (including by pseudonym if | |||||
| designated); | |||||
| ii. a copyright notice; | |||||
| iii. a notice that refers to this Public License; | |||||
| iv. a notice that refers to the disclaimer of | |||||
| warranties; | |||||
| v. a URI or hyperlink to the Licensed Material to the | |||||
| extent reasonably practicable; | |||||
| b. indicate if You modified the Licensed Material and | |||||
| retain an indication of any previous modifications; and | |||||
| c. indicate the Licensed Material is licensed under this | |||||
| Public License, and include the text of, or the URI or | |||||
| hyperlink to, this Public License. | |||||
| 2. You may satisfy the conditions in Section 3(a)(1) in any | |||||
| reasonable manner based on the medium, means, and context in | |||||
| which You Share the Licensed Material. For example, it may be | |||||
| reasonable to satisfy the conditions by providing a URI or | |||||
| hyperlink to a resource that includes the required | |||||
| information. | |||||
| 3. If requested by the Licensor, You must remove any of the | |||||
| information required by Section 3(a)(1)(A) to the extent | |||||
| reasonably practicable. | |||||
| b. ShareAlike. | |||||
| In addition to the conditions in Section 3(a), if You Share | |||||
| Adapted Material You produce, the following conditions also apply. | |||||
| 1. The Adapter's License You apply must be a Creative Commons | |||||
| license with the same License Elements, this version or | |||||
| later, or a BY-SA Compatible License. | |||||
| 2. You must include the text of, or the URI or hyperlink to, the | |||||
| Adapter's License You apply. You may satisfy this condition | |||||
| in any reasonable manner based on the medium, means, and | |||||
| context in which You Share Adapted Material. | |||||
| 3. You may not offer or impose any additional or different terms | |||||
| or conditions on, or apply any Effective Technological | |||||
| Measures to, Adapted Material that restrict exercise of the | |||||
| rights granted under the Adapter's License You apply. | |||||
| Section 4 -- Sui Generis Database Rights. | |||||
| Where the Licensed Rights include Sui Generis Database Rights that | |||||
| apply to Your use of the Licensed Material: | |||||
| a. for the avoidance of doubt, Section 2(a)(1) grants You the right | |||||
| to extract, reuse, reproduce, and Share all or a substantial | |||||
| portion of the contents of the database; | |||||
| b. if You include all or a substantial portion of the database | |||||
| contents in a database in which You have Sui Generis Database | |||||
| Rights, then the database in which You have Sui Generis Database | |||||
| Rights (but not its individual contents) is Adapted Material, | |||||
| including for purposes of Section 3(b); and | |||||
| c. You must comply with the conditions in Section 3(a) if You Share | |||||
| all or a substantial portion of the contents of the database. | |||||
| For the avoidance of doubt, this Section 4 supplements and does not | |||||
| replace Your obligations under this Public License where the Licensed | |||||
| Rights include other Copyright and Similar Rights. | |||||
| Section 5 -- Disclaimer of Warranties and Limitation of Liability. | |||||
| a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE | |||||
| EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS | |||||
| AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF | |||||
| ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, | |||||
| IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, | |||||
| WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR | |||||
| PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, | |||||
| ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT | |||||
| KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT | |||||
| ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. | |||||
| b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE | |||||
| TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, | |||||
| NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, | |||||
| INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, | |||||
| COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR | |||||
| USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN | |||||
| ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR | |||||
| DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR | |||||
| IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. | |||||
| c. The disclaimer of warranties and limitation of liability provided | |||||
| above shall be interpreted in a manner that, to the extent | |||||
| possible, most closely approximates an absolute disclaimer and | |||||
| waiver of all liability. | |||||
| Section 6 -- Term and Termination. | |||||
| a. This Public License applies for the term of the Copyright and | |||||
| Similar Rights licensed here. However, if You fail to comply with | |||||
| this Public License, then Your rights under this Public License | |||||
| terminate automatically. | |||||
| b. Where Your right to use the Licensed Material has terminated under | |||||
| Section 6(a), it reinstates: | |||||
| 1. automatically as of the date the violation is cured, provided | |||||
| it is cured within 30 days of Your discovery of the | |||||
| violation; or | |||||
| 2. upon express reinstatement by the Licensor. | |||||
| For the avoidance of doubt, this Section 6(b) does not affect any | |||||
| right the Licensor may have to seek remedies for Your violations | |||||
| of this Public License. | |||||
| c. For the avoidance of doubt, the Licensor may also offer the | |||||
| Licensed Material under separate terms or conditions or stop | |||||
| distributing the Licensed Material at any time; however, doing so | |||||
| will not terminate this Public License. | |||||
| d. Sections 1, 5, 6, 7, and 8 survive termination of this Public | |||||
| License. | |||||
| Section 7 -- Other Terms and Conditions. | |||||
| a. The Licensor shall not be bound by any additional or different | |||||
| terms or conditions communicated by You unless expressly agreed. | |||||
| b. Any arrangements, understandings, or agreements regarding the | |||||
| Licensed Material not stated herein are separate from and | |||||
| independent of the terms and conditions of this Public License. | |||||
| Section 8 -- Interpretation. | |||||
| a. For the avoidance of doubt, this Public License does not, and | |||||
| shall not be interpreted to, reduce, limit, restrict, or impose | |||||
| conditions on any use of the Licensed Material that could lawfully | |||||
| be made without permission under this Public License. | |||||
| b. To the extent possible, if any provision of this Public License is | |||||
| deemed unenforceable, it shall be automatically reformed to the | |||||
| minimum extent necessary to make it enforceable. If the provision | |||||
| cannot be reformed, it shall be severed from this Public License | |||||
| without affecting the enforceability of the remaining terms and | |||||
| conditions. | |||||
| c. No term or condition of this Public License will be waived and no | |||||
| failure to comply consented to unless expressly agreed to by the | |||||
| Licensor. | |||||
| d. Nothing in this Public License constitutes or may be interpreted | |||||
| as a limitation upon, or waiver of, any privileges and immunities | |||||
| that apply to the Licensor or You, including from the legal | |||||
| processes of any jurisdiction or authority. | |||||
| ======================================================================= | |||||
| Creative Commons is not a party to its public | |||||
| licenses. Notwithstanding, Creative Commons may elect to apply one of | |||||
| its public licenses to material it publishes and in those instances | |||||
| will be considered the “Licensor.” The text of the Creative Commons | |||||
| public licenses is dedicated to the public domain under the CC0 Public | |||||
| Domain Dedication. Except for the limited purpose of indicating that | |||||
| material is shared under a Creative Commons public license or as | |||||
| otherwise permitted by the Creative Commons policies published at | |||||
| creativecommons.org/policies, Creative Commons does not authorize the | |||||
| use of the trademark "Creative Commons" or any other trademark or logo | |||||
| of Creative Commons without its prior written consent including, | |||||
| without limitation, in connection with any unauthorized modifications | |||||
| to any of its public licenses or any other arrangements, | |||||
| understandings, or agreements concerning use of licensed material. For | |||||
| the avoidance of doubt, this paragraph does not form part of the | |||||
| public licenses. | |||||
| Creative Commons may be contacted at creativecommons.org. | |||||
| @@ -1,6 +1,5 @@ | |||||
| #!/bin/sh | #!/bin/sh | ||||
| #The documentation is built statically and does not belong to the normal build process. | #The documentation is built statically and does not belong to the normal build process. | ||||
| #Updating is part of the development process, not compiling or packaging. | #Updating is part of the development process, not compiling or packaging. | ||||
| #Run this before a release, or any time you want to update the docs or the README. | #Run this before a release, or any time you want to update the docs or the README. | ||||
| @@ -8,10 +7,9 @@ | |||||
| #This script takes common snippets of information and updates or generates source info files from | #This script takes common snippets of information and updates or generates source info files from | ||||
| #them. | #them. | ||||
| # parse src/nsmd.cpp for API version, insert into /docs/src/api/index.adoc | # parse src/nsmd.cpp for API version, insert into /docs/src/api/index.adoc | ||||
| # parse /CHANGELOG first line for package version, insert into /meson.build and /docs/src/index.adoc | |||||
| # parse src/nsmd.cpp for package version, insert into /meson.build and /docs/src/index.adoc | |||||
| # generate /README.md (shares text with manual index) | # generate /README.md (shares text with manual index) | ||||
| # generate /docs/src/index.adoc (shares text with readme) | |||||
| # generate manpages (need all kind of information) | |||||
| # generate manpages | |||||
| # convert all .adoc files to html in /docs/ (This enables github to directly present this dir as website) | # convert all .adoc files to html in /docs/ (This enables github to directly present this dir as website) | ||||
| # | # | ||||
| #We do _not_ change the copyright date in files license-headers. | #We do _not_ change the copyright date in files license-headers. | ||||
| @@ -23,11 +21,14 @@ set -u #Trace unset variables as an error. | |||||
| #Change pwd to root dir | #Change pwd to root dir | ||||
| parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) | parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) | ||||
| cd "$parent_path"/../.. | cd "$parent_path"/../.. | ||||
| [ -f "CHANGELOG" ] || exit 1 #assert correct dir | |||||
| [ -f "CHANGELOG" ] || ( echo "not in the root dir"; exit 1 ) #assert correct dir | |||||
| [ -f "build/nsmd" ] || ( echo "no build/ dir with binaries"; exit 1 ) #assert build was made, for manpages | |||||
| #Gather data | #Gather data | ||||
| ROOT=$(pwd) #save for later | ROOT=$(pwd) #save for later | ||||
| VERSION=$(head -n 1 "CHANGELOG") | |||||
| VERSION=$(grep "define VERSION_STRING" "src/nsmd.cpp" | cut -d ' ' -f 3) #Get version as "1.4" string | |||||
| VERSION="${VERSION%\"}" #Remove " | |||||
| VERSION="${VERSION#\"}" #Remove " | |||||
| _MAJORAPI=$(grep "define NSM_API_VERSION_MAJOR" "src/nsmd.cpp" | cut -d ' ' -f 3) | _MAJORAPI=$(grep "define NSM_API_VERSION_MAJOR" "src/nsmd.cpp" | cut -d ' ' -f 3) | ||||
| _MINORAPI=$(grep "define NSM_API_VERSION_MINOR" "src/nsmd.cpp" | cut -d ' ' -f 3) | _MINORAPI=$(grep "define NSM_API_VERSION_MINOR" "src/nsmd.cpp" | cut -d ' ' -f 3) | ||||
| @@ -37,6 +38,7 @@ APIVERSION=$_MAJORAPI"."$_MINORAPI | |||||
| echo "Root: $ROOT" | echo "Root: $ROOT" | ||||
| echo "Version: $VERSION" | echo "Version: $VERSION" | ||||
| echo "API Version: $APIVERSION" | echo "API Version: $APIVERSION" | ||||
| echo "Please make sure that your meson build dir is up to date for manpage generation" | |||||
| read -p "Is parsed data correct? Continue by writing files? [y|n] " -n 1 -r | read -p "Is parsed data correct? Continue by writing files? [y|n] " -n 1 -r | ||||
| if [[ ! $REPLY =~ ^[Yy]$ ]] | if [[ ! $REPLY =~ ^[Yy]$ ]] | ||||
| then | then | ||||
| @@ -45,23 +47,42 @@ then | |||||
| exit 1 | exit 1 | ||||
| fi | fi | ||||
| echo | echo | ||||
| echo | |||||
| #Package Version Number | |||||
| echo "Update meson.build version number" | |||||
| cd "$ROOT" | |||||
| sed -i "/^version :.*/c\version : '$VERSION'," meson.build #Find the version line and replace with entire new line | |||||
| echo "Update docs to programs version number" | |||||
| cd "$ROOT/docs/src" | cd "$ROOT/docs/src" | ||||
| sed -i '/^\:revnumber.*/c\:revnumber: '$VERSION index.adoc #Find the revnumber line and replace with entire new line | sed -i '/^\:revnumber.*/c\:revnumber: '$VERSION index.adoc #Find the revnumber line and replace with entire new line | ||||
| #API Version Number | |||||
| echo "Update API document to API version number" | |||||
| cd "$ROOT/docs/src/api" | cd "$ROOT/docs/src/api" | ||||
| sed -i '/^\:revnumber.*/c\:revnumber: '$APIVERSION index.adoc #Find the revnumber line and replace with entire new line | sed -i '/^\:revnumber.*/c\:revnumber: '$APIVERSION index.adoc #Find the revnumber line and replace with entire new line | ||||
| #Generate README.md | |||||
| echo "Generate README from snippets" | |||||
| cd "$ROOT/docs/src" | cd "$ROOT/docs/src" | ||||
| cat "readme-00.md" "readme-01.md" "readme-02.md" > "$ROOT/README.md" | cat "readme-00.md" "readme-01.md" "readme-02.md" > "$ROOT/README.md" | ||||
| #Generate website and documentation with Asciidoctor | |||||
| cd "$ROOT/docs" | |||||
| echo "Generate website and documentation with Asciidoctor using README snippets" | |||||
| echo " We generate directly into docs/ and not into e.g. docs/out because github can read docs/ directly." | |||||
| cd "$ROOT/docs/" | |||||
| mkdir -p "api" | mkdir -p "api" | ||||
| asciidoctor src/index.adoc -o index.html | asciidoctor src/index.adoc -o index.html | ||||
| asciidoctor src/api/index.adoc -o api/index.html | asciidoctor src/api/index.adoc -o api/index.html | ||||
| echo "Generate all manpages" | |||||
| cd "$ROOT/docs/src" #We tested earlier that a build-dir exists | |||||
| help2man ../../build/nsmd --version-string="nsmd Version $VERSION" --no-info --include manpage-common.h2m > nsmd.1 | |||||
| help2man ../../build/nsm-legacy-gui --version-string="nsm-legacy-gui Version $VERSION" --no-info --include manpage-common.h2m > nsm-legacy-gui.1 | |||||
| help2man ../../build/nsm-proxy --version-string="nsm-proxy Version $VERSION" --no-info --include manpage-common.h2m > nsm-proxy.1 | |||||
| help2man ../../build/nsm-proxy-gui --version-string="nsm-proxy-gui Version $VERSION" --no-info --include manpage-common.h2m > nsm-proxy-gui.1 | |||||
| help2man ../../build/jackpatch --version-string="jackpatch Version $VERSION" --no-info --include manpage-common.h2m > jackpatch.1 | |||||
| echo | |||||
| echo "Finished. You need to commit your changes to git manually" | |||||
| @@ -0,0 +1,30 @@ | |||||
| .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.15. | |||||
| .TH JACKPATCH "1" "July 2020" "jackpatch Version 1.4" "User Commands" | |||||
| .SH NAME | |||||
| jackpatch \- manual page for jackpatch Version 1.4 | |||||
| .SH DESCRIPTION | |||||
| jackpatch \- Remember the JACK Audio Connection Kit Graph in NSM | |||||
| .PP | |||||
| It is a module for the 'New Session Manager' and only communicates | |||||
| over OSC in an NSM\-Session and has no standalone functionality. | |||||
| .SS "Usage:" | |||||
| .IP | |||||
| jackpatch \fB\-\-help\fR | |||||
| .SH OPTIONS | |||||
| .TP | |||||
| \fB\-\-help\fR | |||||
| Show this screen | |||||
| .SH "REPORTING BUGS" | |||||
| https://github.com/linuxaudio/new-session-manager/issues | |||||
| .SH COPYRIGHT | |||||
| up to 2020: | |||||
| Jonathan Moore Liles https://non.tuxfamily.org/ | |||||
| from 2020: | |||||
| https://github.com/linuxaudio/new-session-manager | |||||
| .SH "SEE ALSO" | |||||
| The full documentation for NSM is maintained as html site in your systems doc-dir. | |||||
| For example: | |||||
| xdg-open file:///usr/share/doc/new-session-manager/index.html | |||||
| The documentation can also be found online https://github.com/linuxaudio/new-session-manager | |||||
| @@ -0,0 +1,24 @@ | |||||
| [name] | |||||
| jackpatch - JACK Audio Connection Kit environment saver for the "New Session Manager" | |||||
| [usage] | |||||
| jackapatch is a module for "New Session Manager". | |||||
| It only communicates over OSC in an NSM-Session and has no standalone functionality. | |||||
| [Reporting bugs] | |||||
| https://github.com/linuxaudio/new-session-manager/issues | |||||
| [copyright] | |||||
| up to 2020: | |||||
| Jonathan Moore Liles https://non.tuxfamily.org/ | |||||
| from 2020: | |||||
| https://github.com/linuxaudio/new-session-manager | |||||
| [see also] | |||||
| The full documentation for NSM is maintained as html site in your systems doc-dir. | |||||
| For example: | |||||
| xdg-open file:///usr/share/doc/new-session-manager/index.html | |||||
| The documentation can also be found online https://github.com/linuxaudio/new-session-manager | |||||
| @@ -0,0 +1,17 @@ | |||||
| [Reporting bugs] | |||||
| https://github.com/linuxaudio/new-session-manager/issues | |||||
| [copyright] | |||||
| up to 2020: | |||||
| Jonathan Moore Liles https://non.tuxfamily.org/ | |||||
| from 2020: | |||||
| https://github.com/linuxaudio/new-session-manager | |||||
| [see also] | |||||
| The full documentation for NSM is maintained as html site in your systems doc-dir. | |||||
| For example: | |||||
| xdg-open file:///usr/share/doc/new-session-manager/index.html | |||||
| The documentation can also be found online https://github.com/linuxaudio/new-session-manager | |||||
| @@ -0,0 +1,36 @@ | |||||
| .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.15. | |||||
| .TH NSM-LEGACY-GUI "1" "July 2020" "nsm-legacy-gui Version 1.4" "User Commands" | |||||
| .SH NAME | |||||
| nsm-legacy-gui \- manual page for nsm-legacy-gui Version 1.4 | |||||
| .SH DESCRIPTION | |||||
| legacy\-gui \- FLTK GUI for the 'New Session Manager' | |||||
| .SS "Usage:" | |||||
| .IP | |||||
| legacy\-gui | |||||
| legacy\-gui \fB\-\-help\fR | |||||
| .SH OPTIONS | |||||
| .TP | |||||
| \fB\-\-help\fR | |||||
| Show this screen | |||||
| .TP | |||||
| \fB\-\-nsm\-url\fR url | |||||
| Connect to a running nsmd [Example: osc.udp://mycomputer.localdomain:38356/]. | |||||
| .TP | |||||
| \fB\-\-\fR | |||||
| Everything after \fB\-\-\fR will be given to nsmd as server options. See nsmd \fB\-\-help\fR . | |||||
| .PP | |||||
| For backwards compatibility this executable also exist as symlink 'non\-session_manager | |||||
| .SH "REPORTING BUGS" | |||||
| https://github.com/linuxaudio/new-session-manager/issues | |||||
| .SH COPYRIGHT | |||||
| up to 2020: | |||||
| Jonathan Moore Liles https://non.tuxfamily.org/ | |||||
| from 2020: | |||||
| https://github.com/linuxaudio/new-session-manager | |||||
| .SH "SEE ALSO" | |||||
| The full documentation for NSM is maintained as html site in your systems doc-dir. | |||||
| For example: | |||||
| xdg-open file:///usr/share/doc/new-session-manager/index.html | |||||
| The documentation can also be found online https://github.com/linuxaudio/new-session-manager | |||||
| @@ -0,0 +1,34 @@ | |||||
| .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.15. | |||||
| .TH NSM-PROXY-GUI "1" "July 2020" "nsm-proxy-gui Version 1.4" "User Commands" | |||||
| .SH NAME | |||||
| nsm-proxy-gui \- manual page for nsm-proxy-gui Version 1.4 | |||||
| .SH DESCRIPTION | |||||
| nsm\-proxy\-gui \- GUI for nsm\-proxy, a wrapper for executables without direct NSM\-Support. | |||||
| .SS "Usage:" | |||||
| .IP | |||||
| nsm\-proxy\-gui \fB\-\-help\fR | |||||
| nsm\-proxy\-gui \fB\-\-connect\-to\fR | |||||
| .SH OPTIONS | |||||
| .TP | |||||
| \fB\-\-help\fR | |||||
| Show this screen | |||||
| .TP | |||||
| \fB\-\-connect\-to\fR | |||||
| Connect to running nsm\-proxy | |||||
| .PP | |||||
| nsmd\-proxy\-gui is usually not called by the user directly, | |||||
| but autostarted when nsm\-proxy is added to a session (through a GUI). | |||||
| .SH "REPORTING BUGS" | |||||
| https://github.com/linuxaudio/new-session-manager/issues | |||||
| .SH COPYRIGHT | |||||
| up to 2020: | |||||
| Jonathan Moore Liles https://non.tuxfamily.org/ | |||||
| from 2020: | |||||
| https://github.com/linuxaudio/new-session-manager | |||||
| .SH "SEE ALSO" | |||||
| The full documentation for NSM is maintained as html site in your systems doc-dir. | |||||
| For example: | |||||
| xdg-open file:///usr/share/doc/new-session-manager/index.html | |||||
| The documentation can also be found online https://github.com/linuxaudio/new-session-manager | |||||
| @@ -0,0 +1,30 @@ | |||||
| .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.15. | |||||
| .TH NSM-PROXY "1" "July 2020" "nsm-proxy Version 1.4" "User Commands" | |||||
| .SH NAME | |||||
| nsm-proxy \- manual page for nsm-proxy Version 1.4 | |||||
| .SH DESCRIPTION | |||||
| nsm\-proxy \- Wrapper for executables without direct NSM\-Support. | |||||
| .PP | |||||
| It is a module for the 'New Session Manager' and only communicates | |||||
| over OSC in an NSM\-Session and has no standalone functionality. | |||||
| .SS "Usage:" | |||||
| .IP | |||||
| nsm\-proxy \fB\-\-help\fR | |||||
| .SH OPTIONS | |||||
| .TP | |||||
| \fB\-\-help\fR | |||||
| Show this screen | |||||
| .SH "REPORTING BUGS" | |||||
| https://github.com/linuxaudio/new-session-manager/issues | |||||
| .SH COPYRIGHT | |||||
| up to 2020: | |||||
| Jonathan Moore Liles https://non.tuxfamily.org/ | |||||
| from 2020: | |||||
| https://github.com/linuxaudio/new-session-manager | |||||
| .SH "SEE ALSO" | |||||
| The full documentation for NSM is maintained as html site in your systems doc-dir. | |||||
| For example: | |||||
| xdg-open file:///usr/share/doc/new-session-manager/index.html | |||||
| The documentation can also be found online https://github.com/linuxaudio/new-session-manager | |||||
| @@ -0,0 +1,50 @@ | |||||
| .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.15. | |||||
| .TH NSMD "1" "July 2020" "nsmd Version 1.4" "User Commands" | |||||
| .SH NAME | |||||
| nsmd \- manual page for nsmd Version 1.4 | |||||
| .SH DESCRIPTION | |||||
| nsmd \- Daemon and server for the 'New Session Manager' | |||||
| .SS "Usage:" | |||||
| .IP | |||||
| nsmd | |||||
| nsmd \fB\-\-help\fR | |||||
| nsmd \fB\-\-version\fR | |||||
| .SH OPTIONS | |||||
| .TP | |||||
| \fB\-\-help\fR | |||||
| Show this screen | |||||
| .TP | |||||
| \fB\-\-version\fR | |||||
| Show version | |||||
| .TP | |||||
| \fB\-\-osc\-port\fR portnum | |||||
| OSC port number [Default: provided by system]. | |||||
| .TP | |||||
| \fB\-\-session\-root\fR path | |||||
| Base path for sessions [Default: \fI\,~/NSM\/\fP Sessions]. | |||||
| .TP | |||||
| \fB\-\-load\-session\fR name | |||||
| Load existing session [Example: "My Song"]. | |||||
| .TP | |||||
| \fB\-\-gui\-url\fR url | |||||
| Connect to running legacy\-gui [Example: osc.udp://mycomputer.localdomain:38356/]. | |||||
| .TP | |||||
| \fB\-\-detach\fR | |||||
| Detach from console. | |||||
| .PP | |||||
| nsmd can be run headless with existing sessions. To create new ones it is recommended to use a GUI | |||||
| such as nsm\-legacy\-gui (included) or Argodejo (separate package) | |||||
| .SH "REPORTING BUGS" | |||||
| https://github.com/linuxaudio/new-session-manager/issues | |||||
| .SH COPYRIGHT | |||||
| up to 2020: | |||||
| Jonathan Moore Liles https://non.tuxfamily.org/ | |||||
| from 2020: | |||||
| https://github.com/linuxaudio/new-session-manager | |||||
| .SH "SEE ALSO" | |||||
| The full documentation for NSM is maintained as html site in your systems doc-dir. | |||||
| For example: | |||||
| xdg-open file:///usr/share/doc/new-session-manager/index.html | |||||
| The documentation can also be found online https://github.com/linuxaudio/new-session-manager | |||||
| @@ -1,4 +1,10 @@ | |||||
| ## Documentation and Manual | |||||
| See the generated website installed in your systems SHARE dir or docs/out/index.html from this | |||||
| repository. Alternatively you can read the online version on our github page. All are the same | |||||
| files. We also provide a set of manpages for each executable (see below). | |||||
| ## Fork and License | ## Fork and License | ||||
| This is a fork of non-session-manager, by Jonathan Moore Liles <male@tuxfamily.net> http://non.tuxfamily.org/ | This is a fork of non-session-manager, by Jonathan Moore Liles <male@tuxfamily.net> http://non.tuxfamily.org/ | ||||
| which was released under the GNU GENERAL PUBLIC LICENSE Version 2, June 1991. | which was released under the GNU GENERAL PUBLIC LICENSE Version 2, June 1991. | ||||
| @@ -6,11 +12,20 @@ which was released under the GNU GENERAL PUBLIC LICENSE Version 2, June 1991. | |||||
| All files, except nsm.h kept in this fork were GPL "version 2 of the License, or (at your | All files, except nsm.h kept in this fork were GPL "version 2 of the License, or (at your | ||||
| option) any later version." | option) any later version." | ||||
| `nsm.h` is licensed under the ISCL. | |||||
| `nsm.h` is licensed under the ISC License. | |||||
| New-Session-Manager changed the license to GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007. | New-Session-Manager changed the license to GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007. | ||||
| See file COPYING | See file COPYING | ||||
| Documentation in docs/ is licensed Creative Commons CC-By-Sa. | |||||
| It consist of mostly generated files and snippet files which do not have a license header for | |||||
| technical reasons. | |||||
| All original documentation source files are CC-By-Sa Version v4.0 (see file docs/src/LICENSE), | |||||
| the source file docs/src/api/index.adoc is a derived work from NON-Session-Managers API file which | |||||
| is licensed CC-By-Sa v2.5. Therefore our derived API document is also CC-By-Sa v2.5 | |||||
| (see files docs/src/api/readme.txt and docs/src/api/LICENSE) | |||||
| ## Build | ## Build | ||||
| The build system is meson. | The build system is meson. | ||||
| @@ -1,7 +0,0 @@ | |||||
| Hallo Welt | |||||
| Lol Rolf | |||||
| == Cool Cool | |||||
| Cool | |||||
| @@ -17,7 +17,16 @@ | |||||
| # along with New-Session-Manager. If not, see <https://www.gnu.org/licenses/>. | # along with New-Session-Manager. If not, see <https://www.gnu.org/licenses/>. | ||||
| ############################################################################## | ############################################################################## | ||||
| project('new-session-manager', 'c', 'cpp', version : '1.4', license : 'GPLv3') | |||||
| #Please keep the version number in a separate line so we can automatically update it. | |||||
| #Also keep it at the beginning of the line and leave spaces around the colon. | |||||
| #It's source is in src/nsmd.cpp #DEFINE VERSION_STRING | |||||
| project( | |||||
| 'new-session-manager', | |||||
| 'c', 'cpp', | |||||
| version : '1.4', | |||||
| license : 'GPLv3', | |||||
| ) | |||||
| ############## | ############## | ||||
| #Dependencies | #Dependencies | ||||
| @@ -96,6 +105,11 @@ if get_option('nsm-legacy-gui') | |||||
| ) | ) | ||||
| install_data('src/org.linuxaudio.nsm-legacy-gui.desktop', install_dir : get_option('datadir') / 'applications') | install_data('src/org.linuxaudio.nsm-legacy-gui.desktop', install_dir : get_option('datadir') / 'applications') | ||||
| install_data('docs/index.html', install_dir : get_option('datadir') / 'doc/new-session-manager') | |||||
| install_data('docs/api/index.html', install_dir : get_option('datadir') / 'doc/new-session-manager/api') | |||||
| install_data('CHANGELOG', install_dir : get_option('datadir') / 'doc/new-session-manager') | |||||
| install_data('README.md', install_dir : get_option('datadir') / 'doc/new-session-manager') | |||||
| install_man(['docs/src/nsmd.1', 'docs/src/nsm-proxy.1', 'docs/src/nsm-proxy-gui.1', 'docs/src/nsm-legacy-gui.1', 'docs/src/jackpatch.1', ]) | |||||
| meson.add_install_script('sh', '-c', | meson.add_install_script('sh', '-c', | ||||
| 'ln -sf nsm-legacy-gui ${DESTDIR}@0@/@1@/non-session-manager'.format( | 'ln -sf nsm-legacy-gui ${DESTDIR}@0@/@1@/non-session-manager'.format( | ||||
| @@ -45,6 +45,7 @@ | |||||
| #include <errno.h> | #include <errno.h> | ||||
| #include <stdlib.h> | #include <stdlib.h> | ||||
| #include <jack/jack.h> | #include <jack/jack.h> | ||||
| #include <getopt.h> | |||||
| #include <lo/lo.h> | #include <lo/lo.h> | ||||
| @@ -756,7 +757,40 @@ port_registration_callback( jack_port_id_t id, int reg, void *arg ) | |||||
| int | int | ||||
| main ( int argc, char **argv ) | main ( int argc, char **argv ) | ||||
| { | { | ||||
| /* get_args( argc, argv ); */ | |||||
| //Command line parameters | |||||
| static struct option long_options[] = | |||||
| { | |||||
| { "help", no_argument, 0, 'h' }, | |||||
| { 0, 0, 0, 0 } | |||||
| }; | |||||
| int option_index = 0; | |||||
| int c = 0; | |||||
| while ( ( c = getopt_long_only( argc, argv, "", long_options, &option_index ) ) != -1 ) | |||||
| { | |||||
| switch ( c ) | |||||
| { | |||||
| case 'h': | |||||
| { | |||||
| const char *usage = | |||||
| "jackpatch - Remember the JACK Audio Connection Kit Graph in NSM\n\n" | |||||
| "It is a module for the 'New Session Manager' and only communicates\n" | |||||
| "over OSC in an NSM-Session and has no standalone functionality.\n" | |||||
| "\n" | |||||
| "Usage:\n" | |||||
| " jackpatch --help\n" | |||||
| "\n" | |||||
| "Options:\n" | |||||
| " --help Show this screen\n" | |||||
| ""; | |||||
| printf ( usage ); | |||||
| exit(0); | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| jack_status_t status; | jack_status_t status; | ||||
| @@ -1348,7 +1348,22 @@ main (int argc, char **argv ) | |||||
| break; | break; | ||||
| } | } | ||||
| case 'h': | case 'h': | ||||
| printf( "Usage: %s [--nsm-url...] [-- server options ]\n\n", argv[0] ); | |||||
| //Print usage message according to POSIX.1-2017 | |||||
| const char *usage = | |||||
| "legacy-gui - FLTK GUI for the 'New Session Manager'\n\n" | |||||
| "Usage:\n" | |||||
| " legacy-gui\n" | |||||
| " legacy-gui --help\n" | |||||
| "\n" | |||||
| "Options:\n" | |||||
| " --help Show this screen\n" | |||||
| " --nsm-url url Connect to a running nsmd [Example: osc.udp://mycomputer.localdomain:38356/].\n" | |||||
| " -- Everything after -- will be given to nsmd as server options. See nsmd --help .\n" | |||||
| "\n" | |||||
| "For backwards compatibility this executable also exist as symlink 'non-session_manager\n" | |||||
| "\n" | |||||
| ""; | |||||
| printf ( usage ); | |||||
| exit(0); | exit(0); | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -35,6 +35,8 @@ | |||||
| #include <stdio.h> | #include <stdio.h> | ||||
| #include <stdlib.h> | #include <stdlib.h> | ||||
| #include <string.h> | #include <string.h> | ||||
| #include <getopt.h> | |||||
| lo_server losrv; | lo_server losrv; | ||||
| lo_address nsmp_addr; | lo_address nsmp_addr; | ||||
| @@ -171,9 +173,9 @@ void | |||||
| handle_save_signal ( Fl_Widget *o, void *v ) | handle_save_signal ( Fl_Widget *o, void *v ) | ||||
| { | { | ||||
| int sig = 0; | int sig = 0; | ||||
| const char* picked = ui->save_signal_choice->mvalue()->label(); | const char* picked = ui->save_signal_choice->mvalue()->label(); | ||||
| if ( !strcmp( picked, "SIGUSR1" ) ) | if ( !strcmp( picked, "SIGUSR1" ) ) | ||||
| sig = SIGUSR1; | sig = SIGUSR1; | ||||
| else if ( !strcmp( picked, "SIGUSR2" ) ) | else if ( !strcmp( picked, "SIGUSR2" ) ) | ||||
| @@ -189,9 +191,9 @@ void | |||||
| handle_stop_signal ( Fl_Widget *o, void *v ) | handle_stop_signal ( Fl_Widget *o, void *v ) | ||||
| { | { | ||||
| int sig = SIGTERM; | int sig = SIGTERM; | ||||
| const char* picked = ui->stop_signal_choice->mvalue()->label(); | const char* picked = ui->stop_signal_choice->mvalue()->label(); | ||||
| if ( !strcmp( picked, "SIGTERM" ) ) | if ( !strcmp( picked, "SIGTERM" ) ) | ||||
| sig = SIGTERM; | sig = SIGTERM; | ||||
| else if ( !strcmp( picked, "SIGINT" ) ) | else if ( !strcmp( picked, "SIGINT" ) ) | ||||
| @@ -250,28 +252,71 @@ check_error ( void *v ) | |||||
| o->show(); | o->show(); | ||||
| } | } | ||||
| free(client_error); | free(client_error); | ||||
| client_error = NULL; | client_error = NULL; | ||||
| } | } | ||||
| Fl::repeat_timeout( 0.5f, check_error, v ); | Fl::repeat_timeout( 0.5f, check_error, v ); | ||||
| } | } | ||||
| int | int | ||||
| main ( int argc, char **argv ) | main ( int argc, char **argv ) | ||||
| { | { | ||||
| if ( argc != 3 ) | |||||
| //Command line parameters | |||||
| const char * gui_url = NULL; | |||||
| static struct option long_options[] = | |||||
| { | { | ||||
| fprintf( stderr, "Usage: %s --connect-to url\n", argv[0] ); | |||||
| return 1; | |||||
| { "connect-to", required_argument, 0, 'u' }, | |||||
| { "help", no_argument, 0, 'h' }, | |||||
| { 0, 0, 0, 0 } | |||||
| }; | |||||
| int option_index = 0; | |||||
| int c = 0; | |||||
| while ( ( c = getopt_long_only( argc, argv, "", long_options, &option_index ) ) != -1 ) | |||||
| { | |||||
| switch ( c ) | |||||
| { | |||||
| case 'u': | |||||
| { | |||||
| gui_url = optarg; | |||||
| break; | |||||
| } | |||||
| case 'h': | |||||
| { | |||||
| const char *usage = | |||||
| "nsm-proxy-gui - GUI for nsm-proxy, a wrapper for executables without direct NSM-Support.\n\n" | |||||
| "Usage:\n" | |||||
| " nsm-proxy-gui --help\n" | |||||
| " nsm-proxy-gui --connect-to\n" | |||||
| "\n" | |||||
| "Options:\n" | |||||
| " --help Show this screen\n" | |||||
| " --connect-to Connect to running nsm-proxy\n" | |||||
| "\n\n" | |||||
| "nsmd-proxy-gui is usually not called by the user directly,\n" | |||||
| "but autostarted when nsm-proxy is added to a session (through a GUI).\n" | |||||
| ""; | |||||
| printf ( usage ); | |||||
| exit(0); | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | } | ||||
| if ( gui_url == NULL ) | |||||
| exit(1); | |||||
| init_osc( NULL ); | init_osc( NULL ); | ||||
| nsmp_addr = lo_address_new_from_url( argv[2] ); | |||||
| nsmp_addr = lo_address_new_from_url( gui_url ); | |||||
| printf( "Connecting to nsm-proxy at: %s\n", argv[2] ); | |||||
| if ( ! nsmp_addr ) | |||||
| exit(1); | |||||
| printf( "Connecting to nsm-proxy at: %s\n", gui_url ); | |||||
| ui = new NSM_Proxy_UI; | ui = new NSM_Proxy_UI; | ||||
| @@ -280,7 +325,7 @@ main ( int argc, char **argv ) | |||||
| connect_ui(); | connect_ui(); | ||||
| lo_send_from( nsmp_addr, losrv, LO_TT_IMMEDIATE, "/nsm/proxy/update", "" ); | lo_send_from( nsmp_addr, losrv, LO_TT_IMMEDIATE, "/nsm/proxy/update", "" ); | ||||
| w->show(); | w->show(); | ||||
| Fl::lock(); | Fl::lock(); | ||||
| @@ -40,6 +40,7 @@ | |||||
| #include <sys/signalfd.h> | #include <sys/signalfd.h> | ||||
| #include <sys/stat.h> | #include <sys/stat.h> | ||||
| #include <sys/wait.h> | #include <sys/wait.h> | ||||
| #include <getopt.h> | |||||
| static lo_server losrv; | static lo_server losrv; | ||||
| static lo_address nsm_addr; | static lo_address nsm_addr; | ||||
| @@ -149,7 +150,7 @@ public: | |||||
| if ( ! (pid = fork()) ) | if ( ! (pid = fork()) ) | ||||
| { | { | ||||
| MESSAGE( "Launching %s\n", _executable ); | MESSAGE( "Launching %s\n", _executable ); | ||||
| // char *args[] = { strdup( executable ), NULL }; | // char *args[] = { strdup( executable ), NULL }; | ||||
| char *cmd; | char *cmd; | ||||
| @@ -160,13 +161,13 @@ public: | |||||
| asprintf( &cmd, "exec %s >error.log 2>&1", _executable ); | asprintf( &cmd, "exec %s >error.log 2>&1", _executable ); | ||||
| char *args[] = { strdup("/bin/sh"), strdup( "-c" ), cmd, NULL }; | char *args[] = { strdup("/bin/sh"), strdup( "-c" ), cmd, NULL }; | ||||
| setenv( "NSM_CLIENT_ID", nsm_client_id, 1 ); | setenv( "NSM_CLIENT_ID", nsm_client_id, 1 ); | ||||
| setenv( "NSM_SESSION_NAME", nsm_display_name, 1 ); | setenv( "NSM_SESSION_NAME", nsm_display_name, 1 ); | ||||
| if ( _config_file ) | if ( _config_file ) | ||||
| setenv( "CONFIG_FILE", _config_file, 1 ); | setenv( "CONFIG_FILE", _config_file, 1 ); | ||||
| unsetenv( "NSM_URL" ); | unsetenv( "NSM_URL" ); | ||||
| if ( -1 == execvp( "/bin/sh", args ) ) | if ( -1 == execvp( "/bin/sh", args ) ) | ||||
| { | { | ||||
| WARNING( "Error starting process: %s", strerror( errno ) ); | WARNING( "Error starting process: %s", strerror( errno ) ); | ||||
| @@ -188,7 +189,7 @@ public: | |||||
| { | { | ||||
| _stop_signal = s; | _stop_signal = s; | ||||
| } | } | ||||
| void label ( const char *s ) | void label ( const char *s ) | ||||
| { | { | ||||
| if ( _label ) | if ( _label ) | ||||
| @@ -208,14 +209,14 @@ public: | |||||
| bool dump ( const char *path ) | bool dump ( const char *path ) | ||||
| { | |||||
| { | |||||
| char *fname; | char *fname; | ||||
| asprintf( &fname, "%s/%s", path, CONFIG_FILE_NAME ); | asprintf( &fname, "%s/%s", path, CONFIG_FILE_NAME ); | ||||
| FILE *fp = fopen( fname, "w" ); | FILE *fp = fopen( fname, "w" ); | ||||
| free( fname ); | free( fname ); | ||||
| if ( !fp ) | if ( !fp ) | ||||
| { | { | ||||
| WARNING( "Error opening file for saving: %s", strerror( errno ) ); | WARNING( "Error opening file for saving: %s", strerror( errno ) ); | ||||
| @@ -234,7 +235,7 @@ public: | |||||
| fprintf( fp, "save signal\n\t%i\n", _save_signal ); | fprintf( fp, "save signal\n\t%i\n", _save_signal ); | ||||
| fprintf( fp, "stop signal\n\t%i\n", _stop_signal ); | fprintf( fp, "stop signal\n\t%i\n", _stop_signal ); | ||||
| if ( _label && strlen(_label) ) | if ( _label && strlen(_label) ) | ||||
| fprintf( fp, "label\n\t%s\n", _label ); | fprintf( fp, "label\n\t%s\n", _label ); | ||||
| @@ -255,13 +256,13 @@ public: | |||||
| char *name; | char *name; | ||||
| char *value; | char *value; | ||||
| MESSAGE( "Loading file config \"%s\"", path ); | |||||
| MESSAGE( "Loading file config \"%s\"", path ); | |||||
| while ( 2 == fscanf( fp, "%m[^\n]\n\t%m[^\n]\n", &name, &value ) ) | while ( 2 == fscanf( fp, "%m[^\n]\n\t%m[^\n]\n", &name, &value ) ) | ||||
| { | { | ||||
| DMESSAGE( "%s=%s", name, value ); | DMESSAGE( "%s=%s", name, value ); | ||||
| if ( !strcmp( name, "executable" ) ) | if ( !strcmp( name, "executable" ) ) | ||||
| _executable = value; | _executable = value; | ||||
| else if (!strcmp( name, "arguments" ) ) | else if (!strcmp( name, "arguments" ) ) | ||||
| @@ -383,10 +384,10 @@ osc_announce_reply ( const char *path, const char *types, lo_arg **argv, int arg | |||||
| return -1; | return -1; | ||||
| printf( "Successfully registered. NSM says: %s", &argv[1]->s ); | printf( "Successfully registered. NSM says: %s", &argv[1]->s ); | ||||
| nsm_is_active = 1; | nsm_is_active = 1; | ||||
| nsm_addr = lo_address_new_from_url( lo_address_get_url( lo_message_get_source( msg ) ) ); | nsm_addr = lo_address_new_from_url( lo_address_get_url( lo_message_get_source( msg ) ) ); | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -417,19 +418,19 @@ show_gui ( void ) | |||||
| char executable[] = "nsm-proxy-gui"; | char executable[] = "nsm-proxy-gui"; | ||||
| MESSAGE( "Launching %s\n", executable ); | MESSAGE( "Launching %s\n", executable ); | ||||
| char *url = lo_server_get_url( losrv ); | char *url = lo_server_get_url( losrv ); | ||||
| char *args[] = { executable, strdup( "--connect-to" ), url, NULL }; | char *args[] = { executable, strdup( "--connect-to" ), url, NULL }; | ||||
| if ( -1 == execvp( executable, args ) ) | if ( -1 == execvp( executable, args ) ) | ||||
| { | { | ||||
| WARNING( "Error starting process: %s", strerror( errno ) ); | WARNING( "Error starting process: %s", strerror( errno ) ); | ||||
| exit(1); | exit(1); | ||||
| } | } | ||||
| } | } | ||||
| gui_pid = pid; | gui_pid = pid; | ||||
| lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/nsm/client/gui_is_shown", "" ); | lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/nsm/client/gui_is_shown", "" ); | ||||
| @@ -492,7 +493,7 @@ osc_open ( const char *path, const char *types, lo_arg **argv, int argc, lo_mess | |||||
| mkdir( new_path, 0777 ); | mkdir( new_path, 0777 ); | ||||
| chdir( new_path ); | chdir( new_path ); | ||||
| asprintf( &new_filename, "%s/%s", new_path, CONFIG_FILE_NAME ); | asprintf( &new_filename, "%s/%s", new_path, CONFIG_FILE_NAME ); | ||||
| struct stat st; | struct stat st; | ||||
| @@ -517,7 +518,7 @@ osc_open ( const char *path, const char *types, lo_arg **argv, int argc, lo_mess | |||||
| if ( project_file ) | if ( project_file ) | ||||
| free( project_file ); | free( project_file ); | ||||
| project_file = strdup( new_path ); | project_file = strdup( new_path ); | ||||
| // new_filename; | // new_filename; | ||||
| @@ -546,7 +547,7 @@ int | |||||
| osc_save_signal ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) | osc_save_signal ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) | ||||
| { | { | ||||
| nsm_proxy->save_signal( argv[0]->i ); | nsm_proxy->save_signal( argv[0]->i ); | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -554,7 +555,7 @@ int | |||||
| osc_stop_signal ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) | osc_stop_signal ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) | ||||
| { | { | ||||
| nsm_proxy->stop_signal( argv[0]->i ); | nsm_proxy->stop_signal( argv[0]->i ); | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -567,7 +568,7 @@ osc_start ( const char *path, const char *types, lo_arg **argv, int argc, lo_mes | |||||
| { | { | ||||
| hide_gui(); | hide_gui(); | ||||
| } | } | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -575,7 +576,7 @@ int | |||||
| osc_kill ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) | osc_kill ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) | ||||
| { | { | ||||
| nsm_proxy->kill(); | nsm_proxy->kill(); | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -662,9 +663,9 @@ void handle_sigchld ( ) | |||||
| int status; | int status; | ||||
| pid_t pid = waitpid(-1, &status, WNOHANG); | pid_t pid = waitpid(-1, &status, WNOHANG); | ||||
| if (pid <= 0) | |||||
| if (pid <= 0) | |||||
| break; | break; | ||||
| if ( pid == gui_pid ) | if ( pid == gui_pid ) | ||||
| { | { | ||||
| lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/nsm/client/gui_is_hidden", "" ); | lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/nsm/client/gui_is_hidden", "" ); | ||||
| @@ -725,6 +726,40 @@ main ( int argc, char **argv ) | |||||
| signal_fd = signalfd( -1, &mask, SFD_NONBLOCK ); | signal_fd = signalfd( -1, &mask, SFD_NONBLOCK ); | ||||
| //Command line parameters | |||||
| static struct option long_options[] = | |||||
| { | |||||
| { "help", no_argument, 0, 'h' }, | |||||
| { 0, 0, 0, 0 } | |||||
| }; | |||||
| int option_index = 0; | |||||
| int c = 0; | |||||
| while ( ( c = getopt_long_only( argc, argv, "", long_options, &option_index ) ) != -1 ) | |||||
| { | |||||
| switch ( c ) | |||||
| { | |||||
| case 'h': | |||||
| { | |||||
| const char *usage = | |||||
| "nsm-proxy - Wrapper for executables without direct NSM-Support.\n\n" | |||||
| "It is a module for the 'New Session Manager' and only communicates\n" | |||||
| "over OSC in an NSM-Session and has no standalone functionality.\n" | |||||
| "\n" | |||||
| "Usage:\n" | |||||
| " nsm-proxy --help\n" | |||||
| "\n" | |||||
| "Options:\n" | |||||
| " --help Show this screen\n" | |||||
| ""; | |||||
| printf ( usage ); | |||||
| exit(0); | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| nsm_proxy = new NSM_Proxy(); | nsm_proxy = new NSM_Proxy(); | ||||
| init_osc( NULL ); | init_osc( NULL ); | ||||
| @@ -748,16 +783,16 @@ main ( int argc, char **argv ) | |||||
| for ( ;; ) | for ( ;; ) | ||||
| { | { | ||||
| ssize_t s = read(signal_fd, &fdsi, sizeof(struct signalfd_siginfo)); | ssize_t s = read(signal_fd, &fdsi, sizeof(struct signalfd_siginfo)); | ||||
| if (s == sizeof(struct signalfd_siginfo)) | if (s == sizeof(struct signalfd_siginfo)) | ||||
| { | { | ||||
| if (fdsi.ssi_signo == SIGCHLD) | if (fdsi.ssi_signo == SIGCHLD) | ||||
| handle_sigchld(); | handle_sigchld(); | ||||
| } | } | ||||
| lo_server_recv_noblock( losrv, 500 ); | lo_server_recv_noblock( losrv, 500 ); | ||||
| if ( die_now ) | if ( die_now ) | ||||
| die(); | die(); | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -69,6 +69,7 @@ static char *session_root; | |||||
| #define NSM_API_VERSION_MAJOR 1 | #define NSM_API_VERSION_MAJOR 1 | ||||
| #define NSM_API_VERSION_MINOR 2 | #define NSM_API_VERSION_MINOR 2 | ||||
| #define VERSION_STRING "1.4" | |||||
| #define ERR_OK 0 | #define ERR_OK 0 | ||||
| #define ERR_GENERAL_ERROR -1 | #define ERR_GENERAL_ERROR -1 | ||||
| @@ -2432,17 +2433,17 @@ int main(int argc, char *argv[]) | |||||
| load_session = optarg; | load_session = optarg; | ||||
| break; | break; | ||||
| case 'v': | case 'v': | ||||
| printf( "%s 1.4\n", argv[0] ); | |||||
| printf( "%s " VERSION_STRING "\n", argv[0] ); | |||||
| exit(0); | exit(0); | ||||
| break; | break; | ||||
| case 'h': | case 'h': | ||||
| //Print usage message according to POSIX.1-2017 | //Print usage message according to POSIX.1-2017 | ||||
| const char *usage = | const char *usage = | ||||
| "%s\n\n" | |||||
| "nsmd - Daemon and server for the 'New Session Manager'\n\n" | |||||
| "Usage:\n" | "Usage:\n" | ||||
| " %s\n" | |||||
| " %s --help\n" | |||||
| " %s --version\n" | |||||
| " nsmd\n" | |||||
| " nsmd --help\n" | |||||
| " nsmd --version\n" | |||||
| "\n" | "\n" | ||||
| "Options:\n" | "Options:\n" | ||||
| " --help Show this screen\n" | " --help Show this screen\n" | ||||
| @@ -2452,8 +2453,11 @@ int main(int argc, char *argv[]) | |||||
| " --load-session name Load existing session [Example: \"My Song\"].\n" | " --load-session name Load existing session [Example: \"My Song\"].\n" | ||||
| " --gui-url url Connect to running legacy-gui [Example: osc.udp://mycomputer.localdomain:38356/].\n" | " --gui-url url Connect to running legacy-gui [Example: osc.udp://mycomputer.localdomain:38356/].\n" | ||||
| " --detach Detach from console.\n" | " --detach Detach from console.\n" | ||||
| "\n\n" | |||||
| "nsmd can be run headless with existing sessions. To create new ones it is recommended to use a GUI\n" | |||||
| "such as nsm-legacy-gui (included) or Argodejo (separate package)\n" | |||||
| ""; | ""; | ||||
| printf ( usage, argv[0], argv[0], argv[0], argv[0] ); | |||||
| printf ( usage ); | |||||
| exit(0); | exit(0); | ||||
| break; | break; | ||||
| } | } | ||||