From 47e30cc6b3879fe47fe36aeb528f676b72953238 Mon Sep 17 00:00:00 2001 From: Nils <> Date: Tue, 7 Jul 2020 02:53:25 +0200 Subject: [PATCH] Add documentation, manpages, update all executable to have --help commandline parameters --- README.md | 17 +- docs/api/index.html | 5 +- docs/index.html | 2 +- docs/src/LICENSE | 430 ++++++++++++++++++++++++++++++++++++ docs/src/generate.sh | 43 +++- docs/src/jackpatch.1 | 30 +++ docs/src/jackpatch.h2m | 24 ++ docs/src/manpage-common.h2m | 17 ++ docs/src/nsm-legacy-gui.1 | 36 +++ docs/src/nsm-proxy-gui.1 | 34 +++ docs/src/nsm-proxy.1 | 30 +++ docs/src/nsmd.1 | 50 +++++ docs/src/readme-02.md | 17 +- docs/src/test.txt | 7 - meson.build | 16 +- src/jackpatch.c | 36 ++- src/legacy-gui.cpp | 17 +- src/nsm-proxy-gui.cpp | 69 +++++- src/nsm-proxy.cpp | 89 +++++--- src/nsmd.cpp | 16 +- 20 files changed, 913 insertions(+), 72 deletions(-) create mode 100644 docs/src/LICENSE create mode 100644 docs/src/jackpatch.1 create mode 100644 docs/src/jackpatch.h2m create mode 100644 docs/src/manpage-common.h2m create mode 100644 docs/src/nsm-legacy-gui.1 create mode 100644 docs/src/nsm-proxy-gui.1 create mode 100644 docs/src/nsm-proxy.1 create mode 100644 docs/src/nsmd.1 delete mode 100644 docs/src/test.txt diff --git a/README.md b/README.md index 32e69bb..c5a06e5 100644 --- a/README.md +++ b/README.md @@ -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. 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 This is a fork of non-session-manager, by Jonathan Moore Liles http://non.tuxfamily.org/ 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 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. 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 The build system is meson. diff --git a/docs/api/index.html b/docs/api/index.html index d27b2ab..04b80f1 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -442,8 +442,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
Jonathan Moore Liles

-version 1.2, -2013-04-06 +version 1.2
Table of Contents
@@ -1453,7 +1452,7 @@ of which might respond to the message by updating their own tempo maps.

diff --git a/docs/index.html b/docs/index.html index 2981f38..3060771 100644 --- a/docs/index.html +++ b/docs/index.html @@ -556,7 +556,7 @@ Documentation and tutorials for software-developers will be added at a later dat diff --git a/docs/src/LICENSE b/docs/src/LICENSE new file mode 100644 index 0000000..aa44e5a --- /dev/null +++ b/docs/src/LICENSE @@ -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. + diff --git a/docs/src/generate.sh b/docs/src/generate.sh index ae47e8f..8eec4e4 100755 --- a/docs/src/generate.sh +++ b/docs/src/generate.sh @@ -1,6 +1,5 @@ #!/bin/sh - #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. #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 #them. # 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 /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) # #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 parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) 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 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) _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 "Version: $VERSION" 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 if [[ ! $REPLY =~ ^[Yy]$ ]] then @@ -45,23 +47,42 @@ then exit 1 fi 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" 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" 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" 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" asciidoctor src/index.adoc -o 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" diff --git a/docs/src/jackpatch.1 b/docs/src/jackpatch.1 new file mode 100644 index 0000000..109f47c --- /dev/null +++ b/docs/src/jackpatch.1 @@ -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 diff --git a/docs/src/jackpatch.h2m b/docs/src/jackpatch.h2m new file mode 100644 index 0000000..6db0ebf --- /dev/null +++ b/docs/src/jackpatch.h2m @@ -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 diff --git a/docs/src/manpage-common.h2m b/docs/src/manpage-common.h2m new file mode 100644 index 0000000..8a88b64 --- /dev/null +++ b/docs/src/manpage-common.h2m @@ -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 diff --git a/docs/src/nsm-legacy-gui.1 b/docs/src/nsm-legacy-gui.1 new file mode 100644 index 0000000..1824dbe --- /dev/null +++ b/docs/src/nsm-legacy-gui.1 @@ -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 diff --git a/docs/src/nsm-proxy-gui.1 b/docs/src/nsm-proxy-gui.1 new file mode 100644 index 0000000..4b1f5aa --- /dev/null +++ b/docs/src/nsm-proxy-gui.1 @@ -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 diff --git a/docs/src/nsm-proxy.1 b/docs/src/nsm-proxy.1 new file mode 100644 index 0000000..6f06260 --- /dev/null +++ b/docs/src/nsm-proxy.1 @@ -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 diff --git a/docs/src/nsmd.1 b/docs/src/nsmd.1 new file mode 100644 index 0000000..57cdbd6 --- /dev/null +++ b/docs/src/nsmd.1 @@ -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 diff --git a/docs/src/readme-02.md b/docs/src/readme-02.md index d5213c1..2d4f131 100644 --- a/docs/src/readme-02.md +++ b/docs/src/readme-02.md @@ -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 This is a fork of non-session-manager, by Jonathan Moore Liles http://non.tuxfamily.org/ 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 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. 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 The build system is meson. diff --git a/docs/src/test.txt b/docs/src/test.txt deleted file mode 100644 index f711d8b..0000000 --- a/docs/src/test.txt +++ /dev/null @@ -1,7 +0,0 @@ -Hallo Welt - -Lol Rolf - -== Cool Cool - -Cool diff --git a/meson.build b/meson.build index a3c1099..349d238 100644 --- a/meson.build +++ b/meson.build @@ -17,7 +17,16 @@ # along with New-Session-Manager. If not, see . ############################################################################## -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 @@ -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('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', 'ln -sf nsm-legacy-gui ${DESTDIR}@0@/@1@/non-session-manager'.format( diff --git a/src/jackpatch.c b/src/jackpatch.c index 7ea9ded..3a5ac4e 100644 --- a/src/jackpatch.c +++ b/src/jackpatch.c @@ -45,6 +45,7 @@ #include #include #include +#include #include @@ -756,7 +757,40 @@ port_registration_callback( jack_port_id_t id, int reg, void *arg ) int 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; diff --git a/src/legacy-gui.cpp b/src/legacy-gui.cpp index 1b851dc..42d24c7 100644 --- a/src/legacy-gui.cpp +++ b/src/legacy-gui.cpp @@ -1348,7 +1348,22 @@ main (int argc, char **argv ) break; } 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); break; } diff --git a/src/nsm-proxy-gui.cpp b/src/nsm-proxy-gui.cpp index b05c7a4..570c03a 100644 --- a/src/nsm-proxy-gui.cpp +++ b/src/nsm-proxy-gui.cpp @@ -35,6 +35,8 @@ #include #include #include +#include + lo_server losrv; lo_address nsmp_addr; @@ -171,9 +173,9 @@ void handle_save_signal ( Fl_Widget *o, void *v ) { int sig = 0; - + const char* picked = ui->save_signal_choice->mvalue()->label(); - + if ( !strcmp( picked, "SIGUSR1" ) ) sig = SIGUSR1; else if ( !strcmp( picked, "SIGUSR2" ) ) @@ -189,9 +191,9 @@ void handle_stop_signal ( Fl_Widget *o, void *v ) { int sig = SIGTERM; - + const char* picked = ui->stop_signal_choice->mvalue()->label(); - + if ( !strcmp( picked, "SIGTERM" ) ) sig = SIGTERM; else if ( !strcmp( picked, "SIGINT" ) ) @@ -250,28 +252,71 @@ check_error ( void *v ) o->show(); } - + free(client_error); client_error = NULL; } - + Fl::repeat_timeout( 0.5f, check_error, v ); } int 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 ); - 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; @@ -280,7 +325,7 @@ main ( int argc, char **argv ) connect_ui(); lo_send_from( nsmp_addr, losrv, LO_TT_IMMEDIATE, "/nsm/proxy/update", "" ); - + w->show(); Fl::lock(); diff --git a/src/nsm-proxy.cpp b/src/nsm-proxy.cpp index 39f9b48..23c5939 100644 --- a/src/nsm-proxy.cpp +++ b/src/nsm-proxy.cpp @@ -40,6 +40,7 @@ #include #include #include +#include static lo_server losrv; static lo_address nsm_addr; @@ -149,7 +150,7 @@ public: if ( ! (pid = fork()) ) { MESSAGE( "Launching %s\n", _executable ); - + // char *args[] = { strdup( executable ), NULL }; char *cmd; @@ -160,13 +161,13 @@ public: asprintf( &cmd, "exec %s >error.log 2>&1", _executable ); char *args[] = { strdup("/bin/sh"), strdup( "-c" ), cmd, NULL }; - + setenv( "NSM_CLIENT_ID", nsm_client_id, 1 ); setenv( "NSM_SESSION_NAME", nsm_display_name, 1 ); if ( _config_file ) setenv( "CONFIG_FILE", _config_file, 1 ); unsetenv( "NSM_URL" ); - + if ( -1 == execvp( "/bin/sh", args ) ) { WARNING( "Error starting process: %s", strerror( errno ) ); @@ -188,7 +189,7 @@ public: { _stop_signal = s; } - + void label ( const char *s ) { if ( _label ) @@ -208,14 +209,14 @@ public: bool dump ( const char *path ) - { + { char *fname; asprintf( &fname, "%s/%s", path, CONFIG_FILE_NAME ); - + FILE *fp = fopen( fname, "w" ); free( fname ); - + if ( !fp ) { 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, "stop signal\n\t%i\n", _stop_signal ); - + if ( _label && strlen(_label) ) fprintf( fp, "label\n\t%s\n", _label ); @@ -255,13 +256,13 @@ public: char *name; 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 ) ) { DMESSAGE( "%s=%s", name, value ); - + if ( !strcmp( name, "executable" ) ) _executable = value; 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; printf( "Successfully registered. NSM says: %s", &argv[1]->s ); - + nsm_is_active = 1; nsm_addr = lo_address_new_from_url( lo_address_get_url( lo_message_get_source( msg ) ) ); - + return 0; } @@ -417,19 +418,19 @@ show_gui ( void ) char executable[] = "nsm-proxy-gui"; MESSAGE( "Launching %s\n", executable ); - + char *url = lo_server_get_url( losrv ); char *args[] = { executable, strdup( "--connect-to" ), url, NULL }; - + if ( -1 == execvp( executable, args ) ) { WARNING( "Error starting process: %s", strerror( errno ) ); - + exit(1); } } - + gui_pid = pid; 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 ); chdir( new_path ); - + asprintf( &new_filename, "%s/%s", new_path, CONFIG_FILE_NAME ); 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 ) free( project_file ); - + project_file = strdup( new_path ); // 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 ) { nsm_proxy->save_signal( argv[0]->i ); - + 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 ) { nsm_proxy->stop_signal( argv[0]->i ); - + return 0; } @@ -567,7 +568,7 @@ osc_start ( const char *path, const char *types, lo_arg **argv, int argc, lo_mes { hide_gui(); } - + 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 ) { nsm_proxy->kill(); - + return 0; } @@ -662,9 +663,9 @@ void handle_sigchld ( ) int status; pid_t pid = waitpid(-1, &status, WNOHANG); - if (pid <= 0) + if (pid <= 0) break; - + if ( pid == gui_pid ) { 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 ); + //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(); init_osc( NULL ); @@ -748,16 +783,16 @@ main ( int argc, char **argv ) for ( ;; ) { ssize_t s = read(signal_fd, &fdsi, sizeof(struct signalfd_siginfo)); - + if (s == sizeof(struct signalfd_siginfo)) { if (fdsi.ssi_signo == SIGCHLD) handle_sigchld(); } - + lo_server_recv_noblock( losrv, 500 ); if ( die_now ) die(); } -} +} diff --git a/src/nsmd.cpp b/src/nsmd.cpp index 345e28b..779b565 100644 --- a/src/nsmd.cpp +++ b/src/nsmd.cpp @@ -69,6 +69,7 @@ static char *session_root; #define NSM_API_VERSION_MAJOR 1 #define NSM_API_VERSION_MINOR 2 +#define VERSION_STRING "1.4" #define ERR_OK 0 #define ERR_GENERAL_ERROR -1 @@ -2432,17 +2433,17 @@ int main(int argc, char *argv[]) load_session = optarg; break; case 'v': - printf( "%s 1.4\n", argv[0] ); + printf( "%s " VERSION_STRING "\n", argv[0] ); exit(0); break; case 'h': //Print usage message according to POSIX.1-2017 const char *usage = - "%s\n\n" + "nsmd - Daemon and server for the 'New Session Manager'\n\n" "Usage:\n" - " %s\n" - " %s --help\n" - " %s --version\n" + " nsmd\n" + " nsmd --help\n" + " nsmd --version\n" "\n" "Options:\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" " --gui-url url Connect to running legacy-gui [Example: osc.udp://mycomputer.localdomain:38356/].\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); break; }