Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

  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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
.\"	$NetBSD: curses_input.3,v 1.30 2022/05/21 12:34:44 uwe Exp $
.\"
.\" Copyright (c) 2002
.\"	Brett Lymn (blymn@NetBSD.org, brett_lymn@yahoo.com.au)
.\"
.\" This code is donated to the NetBSD Foundation by the Author.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. The name of the Author may not be used to endorse or promote
.\"    products derived from this software without specific prior written
.\"    permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"
.Dd May 16, 2022
.Dt CURSES_INPUT 3
.Os
.Sh NAME
.Nm curses_input ,
.Nm getch ,
.Nm wgetch ,
.Nm mvgetch ,
.Nm mvwgetch ,
.Nm define_key ,
.Nm keyok ,
.Nm has_key ,
.Nm getnstr ,
.Nm wgetnstr ,
.Nm mvgetnstr ,
.Nm mvwgetnstr ,
.Nm getstr ,
.Nm wgetstr ,
.Nm mvgetstr ,
.Nm mvwgetstr ,
.Nm keypad ,
.Nm is_keypad ,
.Nm notimeout ,
.Nm timeout ,
.Nm wtimeout ,
.Nm nodelay ,
.Nm ungetch ,
.Nm set_escdelay
.Nd curses input stream routines
.Sh LIBRARY
.Lb libcurses
.Sh SYNOPSIS
.In curses.h
.Ft int
.Fn getch "void"
.Ft int
.Fn wgetch "WINDOW *win"
.Ft int
.Fn mvgetch "int y" "int x"
.Ft int
.Fn mvwgetch "WINDOW *win" "int y" "int x"
.Ft int
.Fn keyok "int key_symbol" "bool flag"
.Ft int
.Fn has_key "int key_symbol"
.Ft int
.Fn define_key "char *sequence" "int key_symbol"
.Ft int
.Fn getnstr "char *str" "int limit"
.Ft int
.Fn wgetnstr "WINDOW *win" "char *str" "int limit"
.Ft int
.Fn mvgetnstr "int y" "int x" "char *str" "int limit"
.Ft int
.Fn mvwgetnstr "WINDOW *win" "int y" "int x" "char *str" "int limit"
.Ft int
.Fn getstr "char *str"
.Ft int
.Fn wgetstr "WINDOW *win" "char *str"
.Ft int
.Fn mvgetstr "int y" "int x" "char *str"
.Ft int
.Fn mvwgetstr "WINDOW *win" "int y" "int x" "char *str"
.Ft int
.Fn keypad "WINDOW *win" "bool flag"
.Ft bool
.Fn is_keypad "const WINDOW *win"
.Ft int
.Fn notimeout "WINDOW *win" "bool flag"
.Ft void
.Fn timeout "int delay"
.Ft void
.Fn wtimeout "WINDOW *win" "int delay"
.Ft int
.Fn nodelay "WINDOW *win" "bool flag"
.Ft int
.Fn ungetch "int c"
.Ft int
.Fn set_escdelay "int escdelay"
.Pp
.Va extern int ESCDELAY ;
.Sh DESCRIPTION
These functions read characters and strings from the window input file
descriptor.
.Pp
The
.Fn getch
function reads a character from the
.Dv stdscr
input file descriptor and returns it.
If the
.Fn keypad
flag has been set to
.Dv TRUE ,
then
.Fn getch
will assemble multi-character key sequences into key symbols,
If the terminal is resized,
.Fn getch
will return
.Dv KEY_RESIZE ,
regardless of the setting of
.Fn keypad .
Calling
.Fn getch
will cause an implicit
.Fn refresh
on
.Dv stdscr .
.Pp
The
.Fn wgetch
function is the same as the
.Fn getch
function, excepting that it reads from the input file descriptor associated
with the window specified by
.Fa win .
.Pp
If the
.Fn keypad
flag is
.Dv TRUE
then the assembly of specific key symbols can be disabled by using the
.Fn keyok
function.
If the
.Fa flag
is set to
.Dv FALSE
on a key symbol then
.Fn getch
will behave as if the character sequence associated with that key symbol
was not recognised and will return the component characters one at a time to
the caller.
The
.Fn is_keypad
function returns
.Dv TRUE
if the
.Fn
keypad
flag is set for the window specified by
.Fa win .
.Pp
The
.Fn has_key
function takes a key value and returns
.Dv TRUE
if the current terminal recognises a key with that value, otherwise
.Dv FALSE .
.Pp
Custom associations between sequences of characters and a key symbol can
be made by using the
.Fn define_key
function.
Normally, these associations are made by the information in the
.Xr terminfo 5
database but the
.Fn define_key
function gives the capability to remove or add more associations.
If
.Fn define_key
is passed a non-NULL string in
.Fa sequence
it will associate that sequence with the key symbol passed in
.Fa key_symbol .
The key symbol may be one of the ones listed below or a custom value that
is application defined.
It is valid to have multiple character sequences map to the same key
symbol and there are no constraints on the length of the sequence allowed.
The assembly of custom sequences follow the same rules for inter-character
timing and so forth as the
.Xr terminfo 5
derived ones.
If
.Fn define_key
is passed a NULL in
.Fa sequence
then all associations for the key symbol in
.Fa key_symbol
will be deleted, this includes any associations that were derived from
.Xr terminfo 5 .
.Pp
The
.Fn mvgetch
and
.Fn mvwgetch
functions are the same as the
.Fn getch
and
.Fn wgetch
functions, respectively, excepting that
.Fn wmove
is called to move the cursor to the position specified by
.Fa y ,
.Fa x
before the character is read.
.Pp
Calling
.Fn getnstr ,
.Fn wgetnstr ,
.Fn mvgetnstr
or
.Fn mvwgetnstr
is effectively the same as calling
.Fn getch
repeatedly until a newline is received or the character limit
.Fa limit
is reached.
Once this happens the string is
.Dv NULL
terminated and returned in
.Fa str .
During input, the normal curses input key processing is performed and
affects the input buffer.
The
.Fn mvgetnstr
function calls
.Fn wmove
to move the cursor to the position given by
.Fa y ,
.Fa x
before getting the string,
.Fn wgetnstr
reads the input from the designated window,
.Fn mvwgetnstr
moves the cursor to the position given by
.Fa y ,
.Fa x
before getting the input from the designated window.
.Pp
The functions
.Fn getstr ,
.Fn wgetstr ,
.Fn mvgetstr ,
and
.Fn mvwgetstr
are similar to
.Fn getnstr ,
.Fn wgetnstr ,
.Fn mvgetnstr ,
and
.Fn mvwgetnstr ,
respectively, excepting that there is no limit on the number of characters
that may be inserted into
.Fa str .
This may cause the buffer to be overflowed, so their use is not recommended.
.Pp
The
.Fn keypad
function is used to affect how
.Fn getch
processes input characters.
If
.Fa flag
is set to
.Dv TRUE ,
then
.Fn getch
will scan the input stream looking for multi-character key sequences
that are emitted by some terminal function keys.
If a recognised sequence of characters is found, then
.Fn getch
will collapse that sequence into an integer key symbol, as shown below.
The default setting for the flag is
.Dv FALSE .
.Pp
The
.Fn notimeout
function controls whether or not
.Fn getch
will wait indefinitely between characters in a multi-character key
sequence or not.
If
.Fa flag
is
.Dv TRUE ,
then there is no timeout applied between characters comprising a
multi-character key sequence.
If
.Fa flag
is
.Dv FALSE ,
then the component characters of a multi-character sequence must not
have an inter-character gap of more than
.Va ESCDELAY .
If this timing is exceeded, then the multi-character key assembly is
deemed to have failed and the characters read thus far are returned
one at a time when
.Fn getch
is called.
The default setting for the flag is
.Dv FALSE .
The default value of
.Va ESCDELAY
is 300ms.
If
.Va ESCDELAY
is negative, no timeout is applied between characters comprising a
multi-character key sequence.
.Pp
The
.Fn timeout
function affects the behaviour of
.Fn getch
when reading a character from
.Dv stdscr .
If
.Fa delay
is negative, then
.Fn getch
will block indefinitely on a read.
If
.Fa delay
is 0, then
.Fn getch
will return immediately with
.Dv ERR
if there are no characters immediately available.
If
.Fa delay
is a positive number, then
.Fn getch
will wait for that many milliseconds before returning and, if no character
was available, then
.Dv ERR
will be returned.
Note that for a positive number, the timeout is only accurate to the nearest
tenth of a second.
Also, the maximum value of
.Fa delay
is 25500 milliseconds.
The
.Fn wtimeout
function does the same as
.Fn timeout
but applies to the specified window
.Fa win .
.Pp
The
.Fn nodelay
function turns on and off blocking reads for
.Fn getch .
If
.Fa flag
is
.Dv TRUE ,
then
.Fn getch
will not block on reads, if
.Fa flag
is
.Dv FALSE ,
then reads will block.
The default setting for the flag is
.Dv FALSE .
.Fn nodelay win TRUE
is equivalent to
.Fn wtimeout win 0
and
.Fn nodelay win FALSE
is equivalent to
.Fn wtimeout win \-1 .
.Pp
.Fn ungetch
will convert
.Fa c
into an unsigned char and push that character back onto the input stream.
Only one character of push-back is guaranteed to work, more may be possible
depending on system resources.
.Pp
The
.Fn set_escdelay
function sets the
.Va ESCDELAY
value of the current screen to
.Fa escdelay .
.Sh RETURN VALUES
The functions
.Fn getch ,
.Fn wgetch ,
.Fn mvgetch ,
and
.Fn mvwgetch
will return the value of the key pressed or
.Dv ERR
in the case of an error or a timeout.
Additionally, if
.Fn keypad TRUE
has been called on a window, then it may return one of the following values:
.Pp
.Bl -column "Termcap entry" "getch Return Value" "Key Function" -offset indent
.It Sy "Termcap entry" Ta Sy "getch Return Value" Ta Sy "Key Function"
.It \&!1 Ta KEY_SSAVE Ta Shift Save
.It \&!2 Ta KEY_SSUSPEND Ta Shift Suspend
.It \&!3 Ta KEY_SUNDO Ta Shift Undo
.It \&#1 Ta KEY_SHELP Ta Shift Help
.It \&#2 Ta KEY_SHOME Ta Shift Home
.It \&#3 Ta KEY_SIC Ta Shift Insert Character
.It \&#4 Ta KEY_SLEFT Ta Shift Left Arrow
.It \&%0 Ta KEY_REDO Ta Redo
.It \&%1 Ta KEY_HELP Ta Help
.It \&%2 Ta KEY_MARK Ta Mark
.It \&%3 Ta KEY_MESSAGE Ta Message
.It \&%4 Ta KEY_MOVE Ta Move
.It \&%5 Ta KEY_NEXT Ta Next Object
.It \&%6 Ta KEY_OPEN Ta Open
.It \&%7 Ta KEY_OPTIONS Ta Options
.It \&%8 Ta KEY_PREVIOUS Ta Previous Object
.It \&%9 Ta KEY_PRINT Ta Print
.It \&%a Ta KEY_SMESSAGE Ta Shift Message
.It \&%b Ta KEY_SMOVE Ta Shift Move
.It \&%c Ta KEY_SNEXT Ta Shift Next Object
.It \&%d Ta KEY_SOPTIONS Ta Shift Options
.It \&%e Ta KEY_SPREVIOUS Ta Shift Previous Object
.It \&%f Ta KEY_SPRINT Ta Shift Print
.It \&%g Ta KEY_SREDO Ta Shift Redo
.It \&%h Ta KEY_SREPLACE Ta Shift Replace
.It \&%i Ta KEY_SRIGHT Ta Shift Right Arrow
.It \&%j Ta KEY_SRSUME Ta Shift Resume
.It \&&0 Ta KEY_SCANCEL Ta Shift Cancel
.It \&&1 Ta KEY_REFERENCE Ta Reference
.It \&&2 Ta KEY_REFRESH Ta Refresh
.It \&&3 Ta KEY_REPLACE Ta Replace
.It \&&4 Ta KEY_RESTART Ta Restart
.It \&&5 Ta KEY_RESUME Ta Resume
.It \&&6 Ta KEY_SAVE Ta Save
.It \&&7 Ta KEY_SUSPEND Ta Suspend
.It \&&8 Ta KEY_UNDO Ta Undo
.It \&&9 Ta KEY_SBEG Ta Shift Begin
.It \&*0 Ta KEY_SFIND Ta Shift Find
.It \&*1 Ta KEY_SCOMMAND Ta Shift Command
.It \&*2 Ta KEY_SCOPY Ta Shift Copy
.It \&*3 Ta KEY_SCREATE Ta Shift Create
.It \&*4 Ta KEY_SDC Ta Shift Delete Character
.It \&*5 Ta KEY_SDL Ta Shift Delete Line
.It \&*6 Ta KEY_SELECT Ta Select
.It \&*7 Ta KEY_SEND Ta Shift End
.It \&*8 Ta KEY_SEOL Ta Shift Clear to EOL
.It \&*9 Ta KEY_SEXIT Ta Shift Exit
.It \&@0 Ta KEY_FIND Ta Find
.It \&@1 Ta KEY_BEG Ta Begin
.It \&@2 Ta KEY_CANCEL Ta Cancel
.It \&@3 Ta KEY_CLOSE Ta Close
.It \&@4 Ta KEY_COMMAND Ta Command
.It \&@5 Ta KEY_COPY Ta Copy
.It \&@6 Ta KEY_CREATE Ta Create
.It \&@7 Ta KEY_END Ta End
.It \&@8 Ta KEY_ENTER Ta Enter
.It \&@9 Ta KEY_EXIT Ta Exit
.It \&F1 Ta KEY_F(11) Ta Function Key 11
.It \&F2 Ta KEY_F(12) Ta Function Key 12
.It \&F3 Ta KEY_F(13) Ta Function Key 13
.It \&F4 Ta KEY_F(14) Ta Function Key 14
.It \&F5 Ta KEY_F(15) Ta Function Key 15
.It \&F6 Ta KEY_F(16) Ta Function Key 16
.It \&F7 Ta KEY_F(17) Ta Function Key 17
.It \&F8 Ta KEY_F(18) Ta Function Key 18
.It \&F9 Ta KEY_F(19) Ta Function Key 19
.It \&FA Ta KEY_F(20) Ta Function Key 20
.It \&FB Ta KEY_F(21) Ta Function Key 21
.It \&FC Ta KEY_F(22) Ta Function Key 22
.It \&FD Ta KEY_F(23) Ta Function Key 23
.It \&FE Ta KEY_F(24) Ta Function Key 24
.It \&FF Ta KEY_F(25) Ta Function Key 25
.It \&FG Ta KEY_F(26) Ta Function Key 26
.It \&FH Ta KEY_F(27) Ta Function Key 27
.It \&FI Ta KEY_F(28) Ta Function Key 28
.It \&FJ Ta KEY_F(29) Ta Function Key 29
.It \&FK Ta KEY_F(30) Ta Function Key 30
.It \&FL Ta KEY_F(31) Ta Function Key 31
.It \&FM Ta KEY_F(32) Ta Function Key 32
.It \&FN Ta KEY_F(33) Ta Function Key 33
.It \&FO Ta KEY_F(34) Ta Function Key 34
.It \&FP Ta KEY_F(35) Ta Function Key 35
.It \&FQ Ta KEY_F(36) Ta Function Key 36
.It \&FR Ta KEY_F(37) Ta Function Key 37
.It \&FS Ta KEY_F(38) Ta Function Key 38
.It \&FT Ta KEY_F(39) Ta Function Key 39
.It \&FU Ta KEY_F(40) Ta Function Key 40
.It \&FV Ta KEY_F(41) Ta Function Key 41
.It \&FW Ta KEY_F(42) Ta Function Key 42
.It \&FX Ta KEY_F(43) Ta Function Key 43
.It \&FY Ta KEY_F(44) Ta Function Key 44
.It \&FZ Ta KEY_F(45) Ta Function Key 45
.It \&Fa Ta KEY_F(46) Ta Function Key 46
.It \&Fb Ta KEY_F(47) Ta Function Key 47
.It \&Fc Ta KEY_F(48) Ta Function Key 48
.It \&Fd Ta KEY_F(49) Ta Function Key 49
.It \&Fe Ta KEY_F(50) Ta Function Key 50
.It \&Ff Ta KEY_F(51) Ta Function Key 51
.It \&Fg Ta KEY_F(52) Ta Function Key 52
.It \&Fh Ta KEY_F(53) Ta Function Key 53
.It \&Fi Ta KEY_F(54) Ta Function Key 54
.It \&Fj Ta KEY_F(55) Ta Function Key 55
.It \&Fk Ta KEY_F(56) Ta Function Key 56
.It \&Fl Ta KEY_F(57) Ta Function Key 57
.It \&Fm Ta KEY_F(58) Ta Function Key 58
.It \&Fn Ta KEY_F(59) Ta Function Key 59
.It \&Fo Ta KEY_F(60) Ta Function Key 60
.It \&Fp Ta KEY_F(61) Ta Function Key 61
.It \&Fq Ta KEY_F(62) Ta Function Key 62
.It \&Fr Ta KEY_F(63) Ta Function Key 63
.It \&K1 Ta KEY_A1 Ta Upper left key in keypad
.It \&K2 Ta KEY_B2 Ta Centre key in keypad
.It \&K3 Ta KEY_A3 Ta Upper right key in keypad
.It \&K4 Ta KEY_C1 Ta Lower left key in keypad
.It \&K5 Ta KEY_C3 Ta Lower right key in keypad
.It \&Km Ta KEY_MOUSE Ta Mouse Event
.It \&k0 Ta KEY_F0 Ta Function Key 0
.It \&k1 Ta KEY_F(1) Ta Function Key 1
.It \&k2 Ta KEY_F(2) Ta Function Key 2
.It \&k3 Ta KEY_F(3) Ta Function Key 3
.It \&k4 Ta KEY_F(4) Ta Function Key 4
.It \&k5 Ta KEY_F(5) Ta Function Key 5
.It \&k6 Ta KEY_F(6) Ta Function Key 6
.It \&k7 Ta KEY_F(7) Ta Function Key 7
.It \&k8 Ta KEY_F(8) Ta Function Key 8
.It \&k9 Ta KEY_F(9) Ta Function Key 9
.It \&k; Ta KEY_F(10) Ta Function Key 10
.It \&kA Ta KEY_IL Ta Insert Line
.It \&ka Ta KEY_CATAB Ta Clear All Tabs
.It \&kB Ta KEY_BTAB Ta Back Tab
.It \&kb Ta KEY_BACKSPACE Ta Backspace
.It \&kC Ta KEY_CLEAR Ta Clear
.It \&kD Ta KEY_DC Ta Delete Character
.It \&kd Ta KEY_DOWN Ta Down Arrow
.It \&kE Ta KEY_EOL Ta Clear to End Of Line
.It \&kF Ta KEY_SF Ta Scroll Forward one line
.It \&kH Ta KEY_LL Ta Home Down
.It \&kh Ta KEY_HOME Ta Home
.It \&kI Ta KEY_IC Ta Insert Character
.It \&kL Ta KEY_DL Ta Delete Line
.It \&kl Ta KEY_LEFT Ta Left Arrow
.It \&kM Ta KEY_EIC Ta Exit Insert Character Mode
.It \&kN Ta KEY_NPAGE Ta Next Page
.It \&kP Ta KEY_PPAGE Ta Previous Page
.It \&kR Ta KEY_SR Ta Scroll One Line Back
.It \&kr Ta KEY_RIGHT Ta Right Arrow
.It \&kS Ta KEY_EOS Ta Clear to End Of Screen
.It \&kT Ta KEY_STAB Ta Set Tab
.It \&kt Ta KEY_CTAB Ta Clear Tab
.It \&ku Ta KEY_UP Ta Up Arrow
.El
.Pp
Note that not all terminals are capable of generating all the keycodes
listed above nor are terminfo entries normally configured with all the
above capabilities defined.
.Pp
Other functions that return an int will return one of the following
values:
.Pp
.Bl -tag -width ERR -compact
.It Er OK
The function completed successfully.
.It Er ERR
An error occurred in the function.
.El
.Pp
Functions returning pointers will return
.Dv NULL
if an error is detected.
.Sh SEE ALSO
.Xr curses_cursor 3 ,
.Xr curses_keyname 3 ,
.Xr curses_refresh 3 ,
.Xr curses_tty 3 ,
.Xr terminfo 5
.Sh STANDARDS
The
.Nx
Curses library complies with the X/Open Curses specification, part of the
Single Unix Specification.
.Sh NOTES
The
.Fn keyok
and
.Fn define_key
functions are implementations of extensions made by the NCurses library
to the Curses standard.
Portable implementations should avoid the use of these functions.
.Sh HISTORY
The Curses package appeared in
.Bx 4.0 .
The
.Fn is_keypad
and
.Fn set_tabsize
functions are
.Em ncurses
extension to the Curses library and was added in
.Nx 8.0 .