1/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(termios_tcgetattr__doc__,
6"tcgetattr($module, fd, /)\n"
7"--\n"
8"\n"
9"Get the tty attributes for file descriptor fd.\n"
10"\n"
11"Returns a list [iflag, oflag, cflag, lflag, ispeed, ospeed, cc]\n"
12"where cc is a list of the tty special characters (each a string of\n"
13"length 1, except the items with indices VMIN and VTIME, which are\n"
14"integers when these fields are defined). The interpretation of the\n"
15"flags and the speeds as well as the indexing in the cc array must be\n"
16"done using the symbolic constants defined in this module.");
17
18#define TERMIOS_TCGETATTR_METHODDEF \
19 {"tcgetattr", (PyCFunction)termios_tcgetattr, METH_O, termios_tcgetattr__doc__},
20
21static PyObject *
22termios_tcgetattr_impl(PyObject *module, int fd);
23
24static PyObject *
25termios_tcgetattr(PyObject *module, PyObject *arg)
26{
27 PyObject *return_value = NULL;
28 int fd;
29
30 if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
31 goto exit;
32 }
33 return_value = termios_tcgetattr_impl(module, fd);
34
35exit:
36 return return_value;
37}
38
39PyDoc_STRVAR(termios_tcsetattr__doc__,
40"tcsetattr($module, fd, when, attributes, /)\n"
41"--\n"
42"\n"
43"Set the tty attributes for file descriptor fd.\n"
44"\n"
45"The attributes to be set are taken from the attributes argument, which\n"
46"is a list like the one returned by tcgetattr(). The when argument\n"
47"determines when the attributes are changed: termios.TCSANOW to\n"
48"change immediately, termios.TCSADRAIN to change after transmitting all\n"
49"queued output, or termios.TCSAFLUSH to change after transmitting all\n"
50"queued output and discarding all queued input.");
51
52#define TERMIOS_TCSETATTR_METHODDEF \
53 {"tcsetattr", (PyCFunction)(void(*)(void))termios_tcsetattr, METH_FASTCALL, termios_tcsetattr__doc__},
54
55static PyObject *
56termios_tcsetattr_impl(PyObject *module, int fd, int when, PyObject *term);
57
58static PyObject *
59termios_tcsetattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
60{
61 PyObject *return_value = NULL;
62 int fd;
63 int when;
64 PyObject *term;
65
66 if (!_PyArg_CheckPositional("tcsetattr", nargs, 3, 3)) {
67 goto exit;
68 }
69 if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
70 goto exit;
71 }
72 when = _PyLong_AsInt(args[1]);
73 if (when == -1 && PyErr_Occurred()) {
74 goto exit;
75 }
76 term = args[2];
77 return_value = termios_tcsetattr_impl(module, fd, when, term);
78
79exit:
80 return return_value;
81}
82
83PyDoc_STRVAR(termios_tcsendbreak__doc__,
84"tcsendbreak($module, fd, duration, /)\n"
85"--\n"
86"\n"
87"Send a break on file descriptor fd.\n"
88"\n"
89"A zero duration sends a break for 0.25-0.5 seconds; a nonzero duration\n"
90"has a system dependent meaning.");
91
92#define TERMIOS_TCSENDBREAK_METHODDEF \
93 {"tcsendbreak", (PyCFunction)(void(*)(void))termios_tcsendbreak, METH_FASTCALL, termios_tcsendbreak__doc__},
94
95static PyObject *
96termios_tcsendbreak_impl(PyObject *module, int fd, int duration);
97
98static PyObject *
99termios_tcsendbreak(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
100{
101 PyObject *return_value = NULL;
102 int fd;
103 int duration;
104
105 if (!_PyArg_CheckPositional("tcsendbreak", nargs, 2, 2)) {
106 goto exit;
107 }
108 if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
109 goto exit;
110 }
111 duration = _PyLong_AsInt(args[1]);
112 if (duration == -1 && PyErr_Occurred()) {
113 goto exit;
114 }
115 return_value = termios_tcsendbreak_impl(module, fd, duration);
116
117exit:
118 return return_value;
119}
120
121PyDoc_STRVAR(termios_tcdrain__doc__,
122"tcdrain($module, fd, /)\n"
123"--\n"
124"\n"
125"Wait until all output written to file descriptor fd has been transmitted.");
126
127#define TERMIOS_TCDRAIN_METHODDEF \
128 {"tcdrain", (PyCFunction)termios_tcdrain, METH_O, termios_tcdrain__doc__},
129
130static PyObject *
131termios_tcdrain_impl(PyObject *module, int fd);
132
133static PyObject *
134termios_tcdrain(PyObject *module, PyObject *arg)
135{
136 PyObject *return_value = NULL;
137 int fd;
138
139 if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
140 goto exit;
141 }
142 return_value = termios_tcdrain_impl(module, fd);
143
144exit:
145 return return_value;
146}
147
148PyDoc_STRVAR(termios_tcflush__doc__,
149"tcflush($module, fd, queue, /)\n"
150"--\n"
151"\n"
152"Discard queued data on file descriptor fd.\n"
153"\n"
154"The queue selector specifies which queue: termios.TCIFLUSH for the input\n"
155"queue, termios.TCOFLUSH for the output queue, or termios.TCIOFLUSH for\n"
156"both queues.");
157
158#define TERMIOS_TCFLUSH_METHODDEF \
159 {"tcflush", (PyCFunction)(void(*)(void))termios_tcflush, METH_FASTCALL, termios_tcflush__doc__},
160
161static PyObject *
162termios_tcflush_impl(PyObject *module, int fd, int queue);
163
164static PyObject *
165termios_tcflush(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
166{
167 PyObject *return_value = NULL;
168 int fd;
169 int queue;
170
171 if (!_PyArg_CheckPositional("tcflush", nargs, 2, 2)) {
172 goto exit;
173 }
174 if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
175 goto exit;
176 }
177 queue = _PyLong_AsInt(args[1]);
178 if (queue == -1 && PyErr_Occurred()) {
179 goto exit;
180 }
181 return_value = termios_tcflush_impl(module, fd, queue);
182
183exit:
184 return return_value;
185}
186
187PyDoc_STRVAR(termios_tcflow__doc__,
188"tcflow($module, fd, action, /)\n"
189"--\n"
190"\n"
191"Suspend or resume input or output on file descriptor fd.\n"
192"\n"
193"The action argument can be termios.TCOOFF to suspend output,\n"
194"termios.TCOON to restart output, termios.TCIOFF to suspend input,\n"
195"or termios.TCION to restart input.");
196
197#define TERMIOS_TCFLOW_METHODDEF \
198 {"tcflow", (PyCFunction)(void(*)(void))termios_tcflow, METH_FASTCALL, termios_tcflow__doc__},
199
200static PyObject *
201termios_tcflow_impl(PyObject *module, int fd, int action);
202
203static PyObject *
204termios_tcflow(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
205{
206 PyObject *return_value = NULL;
207 int fd;
208 int action;
209
210 if (!_PyArg_CheckPositional("tcflow", nargs, 2, 2)) {
211 goto exit;
212 }
213 if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
214 goto exit;
215 }
216 action = _PyLong_AsInt(args[1]);
217 if (action == -1 && PyErr_Occurred()) {
218 goto exit;
219 }
220 return_value = termios_tcflow_impl(module, fd, action);
221
222exit:
223 return return_value;
224}
225/*[clinic end generated code: output=a129179f1e2545cc input=a9049054013a1b77]*/
226