-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmachmgr.h
138 lines (114 loc) · 5.25 KB
/
machmgr.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/* machmgr.h
*
* Omnitty SSH Multiplexer
* Copyright (c) 2004 Bruno Takahashi C. de Oliveira
* All rights reserved.
*
* LICENSE INFORMATION:
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program 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 Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Copyright (c) 2002 Bruno T. C. de Oliveira
*/
#ifndef omnitty_machmgr_h
#define omnitty_machmgr_h
#include <ncurses.h>
#include <sys/types.h>
/* Initialize the machine manager. The given window will be used as the
* "list window", that is, the window that will display the list of the
* available machines. The vtrows,vtcols arguments specify the
* size of the virtual terminal of the machines. It needs to know this
* because it will handle machine creation when you call machmgr_add()
* for example, and it needs to pass those dimensions to the machine-creating
* functions (e.g. machine_new) */
void machmgr_init(WINDOW *w, int vtrows, int vtcols);
/* Draws the machine list onto the list window */
void machmgr_draw_list();
/* Draws the summary area in the passed window. The "summary" consists of
* a few characters for each machine, and those characters give the user an
* idea of what is going on in that machine's terminal. Those characters
* will be the characters that are "near" the cursor. This is difficult
* to define, so see the implementation :-)
*
* The supplied window should be on either side of the list window, and
* vertically aligned with it (i.e. its top should match the list window's top,
* same for bottom), because this function will draw the summaries that
* correspond to each machine in the list window in the corresponding line
* of the supplied window.
*
* list win summary window (the one you supply to this function)
* +----------+--------------------------+
* | mach 1 | summary for machine 1 |
* | mach 2 | summary for machine 2 |
* | mach 3 | summary for machine 3 |
* | ... | ... |
* +----------+--------------------------+
*/
void machmgr_draw_summary(WINDOW *w);
/* Draws the virtual terminal for the currently selected machine in the
* given window. Assumes the dimensions of the given window match the
* vtrows,vtcols arguments passed to machmgr_init. */
void machmgr_draw_vt(WINDOW *w);
/* Adds a new machine to the machine manager given its name. Takes care
* of creating the machine and adding it to the list. */
void machmgr_add(const char *);
/* Deletes currently selected machine. */
void machmgr_delete_current();
/* Updates the virtual terminals of all machines. This function should
* be called regularly. */
void machmgr_update();
/* Toggles multicast mode. When multicast mode is on, machmgr_forward_keypress
* will send the keypress to all tagged machines; when multicast mode is
* off, machmgr_forward_keypress will send keypresses only to the currently
* selected machine.
*
* Multicast mode is initially off.
*/
void machmgr_toggle_multicast();
/* Returns whether multicast mode is on. */
bool machmgr_is_multicast();
/* Toggles the 'tagged' state of the currently selected machine */
void machmgr_toggle_tag_current();
/* Deletes all the machines! */
void machmgr_delete_all();
/* Deletes all dead machines, that is, all machines whose 'alive' flag
* is false. A machine's 'alive' flag is dropped when you call
* machmgr_handle_death(pid) with a pid matching that machine's child
* ssh process. Ordinarily the main program should monitor SIGCHLD signals
* and call machmgr_handle_death appropriately when it detects the death
* of a child process. */
void machmgr_delete_dead();
/* Deletes all tagged machines */
void machmgr_delete_tagged();
/* Tags all machines. If ignore_dead, does not tag dead machines (i.e. machines
* whose alive flag is down). */
void machmgr_tag_all(bool ignore_dead);
/* Resets the 'tagged' attribute of all machines */
void machmgr_untag_all();
/* Moves the selection to the previous machine; that is, makes the previous
* machine in the list the selected machine. */
void machmgr_prev_machine();
/* Moves to the next machine, that is, makes the next machine in the list
* the selected machine. */
void machmgr_next_machine();
/* Forwards the given keypress to the appropriate machines. If multicast
* mode is on, the keypress will be forwarded to all tagged machines;
* otherwise, it will be directed only to the currently selected machine. */
void machmgr_forward_keypress(int k);
/* Handles the death of PID p. This will check if that PID matches the PID
* of the child ssh process of any of the machines registered in the manager.
* If so, it will mark that machine as dead. */
void machmgr_handle_death(pid_t p);
/* Rename the currently selected machine */
void machmgr_rename(char *newname);
#endif