monitor send gets access to the (shared) pannable of the track/bus, thus ensuring...
[ardour2.git] / libs / pbd / transmitter.cc
blob9a2dda86c4a315778c5730c69b1efd075e3fa82f
1 /*
2 Copyright (C) 1998-99 Paul Barton-Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 $Id$
21 #include <cstdlib>
22 #include <signal.h>
23 #include <iostream>
24 #include <string>
26 #include "pbd/transmitter.h"
27 #include "pbd/error.h"
29 using std::string;
30 using std::ios;
32 Transmitter::Transmitter (Channel c)
34 channel = c;
35 switch (c) {
36 case Error:
37 send = &error;
38 break;
39 case Warning:
40 send = &warning;
41 break;
42 case Info:
43 send = &info;
44 break;
45 case Fatal:
46 send = &fatal;
47 break;
48 case Throw:
49 /* we should never call Transmitter::deliver
50 for thrown messages (because its overridden in the
51 class heirarchy). force a segv if we do.
53 send = 0;
54 break;
58 void
59 Transmitter::deliver ()
62 string foo;
64 /* NOTE: this is just a default action for a Transmitter or a
65 derived class. Any class can override this to produce some
66 other action when deliver() is called.
69 *this << '\0';
71 /* send the SigC++ signal */
73 foo = str();
74 (*send) (channel, foo.c_str());
76 /* XXX when or how can we delete this ? */
77 // delete foo;
79 /* return to a pristine state */
81 clear ();
82 seekp (0, ios::beg);
83 seekg (0, ios::beg);
85 /* do the right thing if this should not return */
87 if (does_not_return()) {
88 sigset_t mask;
90 sigemptyset (&mask);
91 sigsuspend (&mask);
92 /*NOTREACHED*/
93 exit (1);
97 bool
98 Transmitter::does_not_return ()
101 if (channel == Fatal || channel == Throw) {
102 return true;
103 } else {
104 return false;
109 extern "C" {
110 void pbd_c_error (const char *str)
113 PBD::error << str << endmsg;