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
|
/* Special protocol for terminal driver
Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc.
This file is part of the GNU Hurd.
The GNU Hurd 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, or (at your option)
any later version.
The GNU Hurd 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 the GNU Hurd; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Written by Michael I. Bushnell. */
subsystem term 28000;
#include <hurd/hurd_types.defs>
#ifdef TERM_IMPORTS
TERM_IMPORTS
#endif
/* Find out what the controlling terminal ID port is. */
routine term_getctty (
terminal: io_t;
out ctty: mach_port_send_t);
/*
Return a controlling terminal port for this terminal. This has the
following effects:
Certain input characters in certain modes will cause signals to be
sent to foreground processes which have made this call. The ctty ID
will be used as the reference port. Certain conditions will cause
SIGHUP to be sent. The foreground process group is the same as the
owner defined by io_set_owner and io_get_owner.
When background processes do certain operations on a port returned by
term_become_ctty, the EBACKGROUND error may be returned. This occurs
for io_read always, io_write if the appropriate bit is set in the
status, and various control operations always. The vanilla port to
the terminal can still be used to do these operations.
A "foreground process" is one making a request over a port returned by
term_become_ctty whose pid (as provided in the term_become_ctty call)
matches the current owner (as set by io_mod_owner) or whose pgrp
matches the owner in the same fashion. A "background process" is one
making a request over a port returned by term_become_ctty which is not
a foreground process. */
routine term_open_ctty (
terminal: io_t;
pid: pid_t;
pgrp: pid_t;
out newtty: mach_port_send_t);
/* This sets the name returned by future get_nodename calls. This is
conventionally the name of a file which can be opened, resulting in
a clone of this port. */
routine term_set_nodename (
terminal: io_t;
name: string_t);
/* Return the last value set with set_nodename. */
routine term_get_nodename (
terminal: io_t;
out name: string_t);
/* Set the underlying file to be used for chown/chmod, etc. */
routine term_set_filenode (
terminal: io_t;
filenode: file_t);
/* Find out what the bottom half of this terminal is using. */
routine term_get_bottom_type (
terminal: io_t;
out ttype: int);
/* Start running with the bottom half as a device port using the Mach
kernel device interface. The old bottom half (if any) is
discarded. */
routine term_on_machdev (
terminal: io_t;
machdev: device_t);
/* Start running with the bottom half as a hurd I/O port. (It is
assumed that io_t is being served by a Hurd I/O server). */
routine term_on_hurddev (
terminal: io_t;
hurddev: io_t);
/* Start running with the bottom half being an exported hurd I/O port.
This differs from term_on_hurddev in that with term_on_pty the
terminal driver will serve the port. The returned port is a pty,
similar in operation to the entity of the same name in BSD. */
routine term_on_pty (
terminal: io_t;
out ptymaster: io_t);
/* This call is made to the ctty port returned by term_getctty; it
may not be made to terminal I/O ports. */
/* Return an I/O port for the terminal opened as with flags FLAGS. */
routine termctty_open_terminal (
ctty: mach_port_t;
flags: int;
out terminal: mach_port_send_t);
|