Commit 401d98f2 authored by jcarpent's avatar jcarpent
Browse files

[All] Change pininvdyn to tsid

parent b89a61ef
#
# Copyright (c) 2017 CNRS
#
# This file is part of PinInvDyn
# This file is part of tsid
# pinocchio is free software: you can redistribute it
# and/or modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation, either version
......@@ -22,7 +22,7 @@ INCLUDE(cmake/eigen.cmake)
INCLUDE(cmake/python.cmake)
INCLUDE(cmake2/ide.cmake)
SET(PROJECT_NAME PinInvDyn)
SET(PROJECT_NAME tsid)
SET(PROJECT_DESCRIPTION "Efficient Inverse Dynamics for Multi-body Systems")
SET(PROJECT_URL "http://github.com/stack-of-tasks/pinocchio")
OPTION(INSTALL_DOCUMENTATION "Generate and install the documentation" FALSE)
......@@ -99,75 +99,75 @@ INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
# ----------------------------------------------------
SET(${PROJECT_NAME}_MATH_HEADERS
include/pininvdyn/math/fwd.hpp
include/pininvdyn/math/utils.hpp
include/pininvdyn/math/constraint-base.hpp
include/pininvdyn/math/constraint-equality.hpp
include/pininvdyn/math/constraint-inequality.hpp
include/pininvdyn/math/constraint-bound.hpp
include/tsid/math/fwd.hpp
include/tsid/math/utils.hpp
include/tsid/math/constraint-base.hpp
include/tsid/math/constraint-equality.hpp
include/tsid/math/constraint-inequality.hpp
include/tsid/math/constraint-bound.hpp
)
SET(${PROJECT_NAME}_TASKS_HEADERS
include/pininvdyn/tasks/fwd.hpp
include/pininvdyn/tasks/task-base.hpp
include/pininvdyn/tasks/task-motion.hpp
include/pininvdyn/tasks/task-actuation.hpp
include/pininvdyn/tasks/task-contact-force.hpp
include/pininvdyn/tasks/task-com-equality.hpp
include/pininvdyn/tasks/task-se3-equality.hpp
include/pininvdyn/tasks/task-contact-force-equality.hpp
include/pininvdyn/tasks/task-actuation-equality.hpp
include/pininvdyn/tasks/task-actuation-bounds.hpp
include/pininvdyn/tasks/task-joint-bounds.hpp
include/pininvdyn/tasks/task-joint-posture.hpp
include/tsid/tasks/fwd.hpp
include/tsid/tasks/task-base.hpp
include/tsid/tasks/task-motion.hpp
include/tsid/tasks/task-actuation.hpp
include/tsid/tasks/task-contact-force.hpp
include/tsid/tasks/task-com-equality.hpp
include/tsid/tasks/task-se3-equality.hpp
include/tsid/tasks/task-contact-force-equality.hpp
include/tsid/tasks/task-actuation-equality.hpp
include/tsid/tasks/task-actuation-bounds.hpp
include/tsid/tasks/task-joint-bounds.hpp
include/tsid/tasks/task-joint-posture.hpp
)
SET(${PROJECT_NAME}_CONTACTS_HEADERS
include/pininvdyn/contacts/fwd.hpp
include/pininvdyn/contacts/contact-base.hpp
include/pininvdyn/contacts/contact-6d.hpp
include/tsid/contacts/fwd.hpp
include/tsid/contacts/contact-base.hpp
include/tsid/contacts/contact-6d.hpp
)
SET(${PROJECT_NAME}_TRAJECTORIES_HEADERS
include/pininvdyn/trajectories/fwd.hpp
include/pininvdyn/trajectories/trajectory-base.hpp
include/pininvdyn/trajectories/trajectory-se3.hpp
include/pininvdyn/trajectories/trajectory-euclidian.hpp
include/tsid/trajectories/fwd.hpp
include/tsid/trajectories/trajectory-base.hpp
include/tsid/trajectories/trajectory-se3.hpp
include/tsid/trajectories/trajectory-euclidian.hpp
)
SET(${PROJECT_NAME}_SOLVERS_HEADERS
include/pininvdyn/solvers/eiquadprog_2011.hpp
include/pininvdyn/solvers/eiquadprog-rt.hpp
include/pininvdyn/solvers/eiquadprog-rt.hxx
include/pininvdyn/solvers/eiquadprog-fast.hpp
include/pininvdyn/solvers/fwd.hpp
include/pininvdyn/solvers/utils.hpp
include/pininvdyn/solvers/solver-HQP-output.hpp
include/pininvdyn/solvers/solver-HQP-base.hpp
include/pininvdyn/solvers/solver-HQP-factory.hpp
include/pininvdyn/solvers/solver-HQP-factory.hxx
include/pininvdyn/solvers/solver-HQP-qpoases.hpp
include/pininvdyn/solvers/solver-HQP-eiquadprog.hpp
include/pininvdyn/solvers/solver-HQP-eiquadprog-rt.hpp
include/pininvdyn/solvers/solver-HQP-eiquadprog-rt.hxx
include/pininvdyn/solvers/solver-HQP-eiquadprog-fast.hpp
include/tsid/solvers/eiquadprog_2011.hpp
include/tsid/solvers/eiquadprog-rt.hpp
include/tsid/solvers/eiquadprog-rt.hxx
include/tsid/solvers/eiquadprog-fast.hpp
include/tsid/solvers/fwd.hpp
include/tsid/solvers/utils.hpp
include/tsid/solvers/solver-HQP-output.hpp
include/tsid/solvers/solver-HQP-base.hpp
include/tsid/solvers/solver-HQP-factory.hpp
include/tsid/solvers/solver-HQP-factory.hxx
include/tsid/solvers/solver-HQP-qpoases.hpp
include/tsid/solvers/solver-HQP-eiquadprog.hpp
include/tsid/solvers/solver-HQP-eiquadprog-rt.hpp
include/tsid/solvers/solver-HQP-eiquadprog-rt.hxx
include/tsid/solvers/solver-HQP-eiquadprog-fast.hpp
)
SET(${PROJECT_NAME}_ROBOTS_HEADERS
include/pininvdyn/robots/fwd.hpp
include/pininvdyn/robots/robot-wrapper.hpp
include/tsid/robots/fwd.hpp
include/tsid/robots/robot-wrapper.hpp
)
SET(${PROJECT_NAME}_FORMULATIONS_HEADERS
include/pininvdyn/formulations/inverse-dynamics-formulation-base.hpp
include/pininvdyn/formulations/inverse-dynamics-formulation-acc-force.hpp
include/tsid/formulations/inverse-dynamics-formulation-base.hpp
include/tsid/formulations/inverse-dynamics-formulation-acc-force.hpp
)
SET(HEADERS
include/pininvdyn/config.hpp
include/pininvdyn/utils/statistics.hpp
include/pininvdyn/utils/stop-watch.hpp
include/pininvdyn/utils/Stdafx.hh
include/tsid/config.hpp
include/tsid/utils/statistics.hpp
include/tsid/utils/stop-watch.hpp
include/tsid/utils/Stdafx.hh
${${PROJECT_NAME}_MATH_HEADERS}
${${PROJECT_NAME}_TASKS_HEADERS}
${${PROJECT_NAME}_CONTACTS_HEADERS}
......
# invdyn
C++ library for optimization-based inverse-dynamics control based on the rigid multi-body dynamics library [Pinocchio](https://github.com/stack-of-tasks/pinocchio).
Take a look at the project [wiki](https://github.com/stack-of-tasks/invdyn/wiki) for more details.
# TSID - Task Space Inverse Dynamics
TSID is C++ library for optimization-based inverse-dynamics control based on the rigid multi-body dynamics library [Pinocchio](https://github.com/stack-of-tasks/pinocchio).
Take a look at the project [wiki](https://github.com/stack-of-tasks/tsid/wiki) for more details.
## Dependencies
* boost (unit_test_framework)
......@@ -15,8 +15,8 @@ To install [pinocchio](https://github.com/stack-of-tasks/pinocchio) follow the i
## Installation
cd $DEVEL/openrobots/src/
git clone --recursive git@github.com:stack-of-tasks/invdyn.git
cd invdyn
git clone --recursive git@github.com:stack-of-tasks/tsid.git
cd tsid
mkdir _build-RELEASE
cd _build-RELEASE
cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=$DEVEL/openrobots
......
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// PinInvDyn If not, see
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
......@@ -19,7 +19,7 @@
#define _invdyn_lib_config_hpp
// Package version (header).
# define PININVDYN_VERSION "UNKNOWN"
# define TSID_VERSION "UNKNOWN"
// Handle portable symbol export.
// Defining manually which symbol should be exported is required
......@@ -33,37 +33,37 @@
// is handled by the compiler, see: http://gcc.gnu.org/wiki/Visibility
# if defined _WIN32 || defined __CYGWIN__
// On Microsoft Windows, use dllimport and dllexport to tag symbols.
# define PININVDYN_DLLIMPORT __declspec(dllimport)
# define PININVDYN_DLLEXPORT __declspec(dllexport)
# define PININVDYN_DLLLOCAL
# define TSID_DLLIMPORT __declspec(dllimport)
# define TSID_DLLEXPORT __declspec(dllexport)
# define TSID_DLLLOCAL
# else
// On Linux, for GCC >= 4, tag symbols using GCC extension.
# if __GNUC__ >= 4
# define PININVDYN_DLLIMPORT __attribute__ ((visibility("default")))
# define PININVDYN_DLLEXPORT __attribute__ ((visibility("default")))
# define PININVDYN_DLLLOCAL __attribute__ ((visibility("hidden")))
# define TSID_DLLIMPORT __attribute__ ((visibility("default")))
# define TSID_DLLEXPORT __attribute__ ((visibility("default")))
# define TSID_DLLLOCAL __attribute__ ((visibility("hidden")))
# else
// Otherwise (GCC < 4 or another compiler is used), export everything.
# define PININVDYN_DLLIMPORT
# define PININVDYN_DLLEXPORT
# define PININVDYN_DLLLOCAL
# define TSID_DLLIMPORT
# define TSID_DLLEXPORT
# define TSID_DLLLOCAL
# endif // __GNUC__ >= 4
# endif // defined _WIN32 || defined __CYGWIN__
# ifdef PININVDYN_STATIC
# ifdef TSID_STATIC
// If one is using the library statically, get rid of
// extra information.
# define PININVDYN_DLLAPI
# define PININVDYN_LOCAL
# define TSID_DLLAPI
# define TSID_LOCAL
# else
// Depending on whether one is building or using the
// library define DLLAPI to import or export.
# ifdef PININVDYN_EXPORTS
# define PININVDYN_DLLAPI PININVDYN_DLLEXPORT
# ifdef TSID_EXPORTS
# define TSID_DLLAPI TSID_DLLEXPORT
# else
# define PININVDYN_DLLAPI PININVDYN_DLLIMPORT
# endif // PININVDYN_EXPORTS
# define PININVDYN_LOCAL PININVDYN_DLLLOCAL
# endif // PININVDYN_STATIC
# define TSID_DLLAPI TSID_DLLIMPORT
# endif // TSID_EXPORTS
# define TSID_LOCAL TSID_DLLLOCAL
# endif // TSID_STATIC
#endif //_invdyn_lib_config_hpp
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// PinInvDyn If not, see
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#ifndef __invdyn_contact_6d_hpp__
#define __invdyn_contact_6d_hpp__
#include "pininvdyn/contacts/contact-base.hpp"
#include "pininvdyn/tasks/task-se3-equality.hpp"
#include "pininvdyn/math/constraint-inequality.hpp"
#include "pininvdyn/math/constraint-equality.hpp"
#include "tsid/contacts/contact-base.hpp"
#include "tsid/tasks/task-se3-equality.hpp"
#include "tsid/math/constraint-inequality.hpp"
#include "tsid/math/constraint-equality.hpp"
namespace pininvdyn
namespace tsid
{
namespace contacts
{
......
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// PinInvDyn If not, see
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#ifndef __invdyn_contact_base_hpp__
#define __invdyn_contact_base_hpp__
#include "pininvdyn/math/fwd.hpp"
#include "pininvdyn/robots/fwd.hpp"
#include "pininvdyn/tasks/task-motion.hpp"
#include "tsid/math/fwd.hpp"
#include "tsid/robots/fwd.hpp"
#include "tsid/tasks/task-motion.hpp"
namespace pininvdyn
namespace tsid
{
namespace contacts
{
......
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// PinInvDyn If not, see
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#ifndef __invdyn_tasks_fwd_hpp__
#define __invdyn_tasks_fwd_hpp__
namespace pininvdyn
namespace tsid
{
namespace tasks
{
......
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// PinInvDyn If not, see
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#ifndef __invdyn_inverse_dynamics_formulation_acc_force_hpp__
#define __invdyn_inverse_dynamics_formulation_acc_force_hpp__
#include "pininvdyn/formulations/inverse-dynamics-formulation-base.hpp"
#include "pininvdyn/math/constraint-equality.hpp"
#include "tsid/formulations/inverse-dynamics-formulation-base.hpp"
#include "tsid/math/constraint-equality.hpp"
#include <vector>
namespace pininvdyn
namespace tsid
{
class TaskLevel
......
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// PinInvDyn If not, see
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#ifndef __invdyn_inverse_dynamics_formulation_base_hpp__
#define __invdyn_inverse_dynamics_formulation_base_hpp__
#include "pininvdyn/math/fwd.hpp"
#include "pininvdyn/robots/robot-wrapper.hpp"
#include "pininvdyn/tasks/task-actuation.hpp"
#include "pininvdyn/tasks/task-motion.hpp"
#include "pininvdyn/tasks/task-contact-force.hpp"
#include "pininvdyn/contacts/contact-base.hpp"
#include "pininvdyn/solvers/solver-HQP-base.hpp"
#include "tsid/math/fwd.hpp"
#include "tsid/robots/robot-wrapper.hpp"
#include "tsid/tasks/task-actuation.hpp"
#include "tsid/tasks/task-motion.hpp"
#include "tsid/tasks/task-contact-force.hpp"
#include "tsid/contacts/contact-base.hpp"
#include "tsid/solvers/solver-HQP-base.hpp"
#include <string>
namespace pininvdyn
namespace tsid
{
///
......
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// PinInvDyn If not, see
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#ifndef __invdyn_math_constraint_base_hpp__
#define __invdyn_math_constraint_base_hpp__
#include "pininvdyn/math/fwd.hpp"
#include "tsid/math/fwd.hpp"
#include <string>
namespace pininvdyn
namespace tsid
{
namespace math
{
......
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// PinInvDyn If not, see
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#ifndef __invdyn_math_constraint_bound_hpp__
#define __invdyn_math_constraint_bound_hpp__
#include "pininvdyn/math/constraint-base.hpp"
#include "tsid/math/constraint-base.hpp"
namespace pininvdyn
namespace tsid
{
namespace math
{
......
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// PinInvDyn. If not, see
// tsid. If not, see
// <http://www.gnu.org/licenses/>.
//
#ifndef __invdyn_math_constraint_equality_hpp__
#define __invdyn_math_constraint_equality_hpp__
#include "pininvdyn/math/constraint-base.hpp"
#include "tsid/math/constraint-base.hpp"
namespace pininvdyn
namespace tsid
{
namespace math
{
......
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// PinInvDyn. If not, see
// tsid. If not, see
// <http://www.gnu.org/licenses/>.
//
#ifndef __invdyn_math_constraint_inequality_hpp__
#define __invdyn_math_constraint_inequality_hpp__
#include "pininvdyn/math/constraint-base.hpp"
#include "tsid/math/constraint-base.hpp"
namespace pininvdyn
namespace tsid
{
namespace math
{
......
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// PinInvDyn If not, see
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
......@@ -23,7 +23,7 @@
#define EIGEN_MALLOC_ALLOWED Eigen::internal::set_is_malloc_allowed(true);
#define EIGEN_MALLOC_NOT_ALLOWED Eigen::internal::set_is_malloc_allowed(false);
namespace pininvdyn
namespace tsid
{
namespace math
{
......
//
// Copyright (c) 2017 CNRS
//
// This file is part of PinInvDyn
// PinInvDyn is free software: you can redistribute it
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// PinInvDyn is distributed in the hope that it will be
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License