@@ -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; | ||||
} | } | ||||