1YASCREEN(3)                       User-Manual                      YASCREEN(3)
2
3
4

NAME

6       yascreen  -  Yet Another Screen Library (curses replacement for daemons
7       and embedded apps)
8
9
10

SYNOPSIS

12       #include <yascreen.h>
13
14
15

DESCRIPTION

Main features

18              · small footprint
19
20              · does not have external dependencies
21
22              · allows both internal and external event loop
23
24              · allows stdin/stdout or external input/output  (can  work  over
25                socket)
26
27              · supports basic set of telnet sequences, making it suitable for
28                built-in terminal interfaces for daemons
29
30              · supports a limited set of input keystroke sequences
31
32              · fully unicode compatible (parts of this depend on  wcwidth  in
33                libc)
34
35              · supports utf8 verification of input
36
37              · relies  only  on a limited subset of ansi/xterm ESC sequences,
38                making  it  compatible  with  mostly  all   modern   terminals
39                (inspired by linenoise ⟨https://github.com/antirez/linenoise⟩)
40
41              · there  is  no  curses  API and ancient terminal compatibility,
42                hence less bloat
43
44              · there is no autoconf - there is no need to have one
45
46              · clean API with opaque private data, usable from C/C++
47
48              · easy cross compilation setup (by setting  CC,  AR,  STRIP  and
49                RANLIB)
50
51
52
53       Current  development is done on Linux, with additional testing on Open‐
54       BSD/FreeBSD; other platforms may need minimal fixes.
55
56
57       On *BSD a gmake is required to build.
58
59

Architecture

61       yascreen uses an opaque data structure, allocated by  the  library  and
62       dynamically  resized  when  needed  -  yascreen_init(int  sx, int sy) /
63       yascreen_resize(yascreen *s, int sx, int sy). An application may  spec‐
64       ify (0,0) for both calls to let yascreen detect the size or use a fixed
65       size.
66
67
68       There are two modes of operation - telnet protocol over socket or  run‐
69       ning in terminal. For sockets the event loop would typically be handled
70       outside of the library while for terminals a built-in event loop may be
71       used.
72
73
74       Modes of operation can be modified at runtime.
75
76
77       For terminal use signal handling (SIGWINCH) should always be handled by
78       the application.
79
80

Example initialization for terminal and handling of SIGWINCH

82              yascreen *s;
83              int winch=0;
84
85              void sigwinch(int sign) {
86                   winch=1;
87              }
88
89              s=yascreen_init(0,0); // let yascreen get term size
90              yascreen_term_set(s,YAS_NOBUFF|YAS_NOSIGN|YAS_NOECHO);
91              signal(SIGWINCH,sigwinch);
92
93              for (;;) { // main loop
94                   if (winch) {
95                        winch=0;
96                        if (yascreen_resize(s,0,0))
97                             // handle a fatal error - no memory
98                        // get the new sizes and redraw
99                        newsizex=yascreen_sx(s);
100                        newsizey=yascreen_sy(s);
101                   }
102
103
104                   // option 1
105
106                   // input is handled in external event loop and fed to yascreen via yascreen_feed
107                   if (FD_ISSET(STDIN_FILENO,r)sizeof c==read(STDIN_FILENO,c,sizeof c))
108                        yascreen_feed(s,c); // pump state machine with bytestream
109
110                   // keys are processed only when available without delay/blocking
111                   while ((ch=yascreen_getch_nowait(s))!=-1) {
112                        // handle processed keys
113                   }
114
115
116                   // option 2
117
118                   // input is handled by yascreen and key or -1 is returned not longer than TIMEOUT ms
119                   // note: if screen update is based on this, keypresses will force it
120                   while ((ch=yascreen_getch_to(s,TIMEOUT))!=-1) {
121                        // handle processed keys
122                   }
123
124
125                   // option 3
126
127                   // input is handled by yascreen and the following call will block until a key is pressed
128                   if ((ch=yascreen_getch(s))!=-1) {
129                        // handle processed key
130                   }
131              }
132
133
134
135       For sockets input is handled like option 1 in  the  example  above  and
136       yascreen needs to be provided with a callback for output.
137
138
139       In  multiprocess  mode  daemons  where stdin/stdout are redirected to a
140       socket the same model from the example above  can  be  used.  Obviously
141       SIGWINCH  will  work only for terminals and for sockets the screen size
142       can get to be known either via telnet or ASNI sequences.
143
144

Example initialization for socket with external event loop and telnet

146       sequences processing
147              yascreen *s;
148
149              s=yascreen_init(80,25); // there is no guarantee that screen size detection is supported on the remote end
150              yascreen_setout(s,output_cb); // set callback for output
151              yascreen_set_telnet(s,1); // enable processing of telnet sequences
152              yascreen_init_telnet(s); // try to negotiate telnet options (regardless if telnet processing is enabled)
153              yascreen_reqsize(s); // request initial screen size
154              for (;;) { // main loop
155
156                   yascreen_feed(s,c); // feed input from the socket to yascreen
157
158                   // keys are processed only when available without delay/blocking
159                   while ((ch=yascreen_getch_nowait(s))!=-1) {
160                        // handle processed keys
161
162                        // screen size change is reported as a special keypress code:
163                        if (ch==YAS_TELNET_SIZE||ch==YAS_SCREEN_SIZE) // screen size change reported via telnet or ANSI sequence
164                             // redraw
165                   }
166              }
167
168
169
170
171

API Reference

Predefined constants and Helper macros

174       Internally  style is kept into bitfields in a single integer variable -
175       that includes  foreground/background  colors,  style  modifiers  (bold,
176       italic, underline, inverse and blink.
177
178
179       Style codes
180
181
182       ┌────────────┬───────────┐
183Name        Function  
184       ├────────────┼───────────┤
185YAS_ITALIC  │ italic    │
186       ├────────────┼───────────┤
187YAS_UNDERL  │ underline │
188       ├────────────┼───────────┤
189YAS_STRIKE  │ stikeout  │
190       ├────────────┼───────────┤
191YAS_INVERSE │ inverse   │
192       ├────────────┼───────────┤
193YAS_BOLD    │ bold      │
194       ├────────────┼───────────┤
195YAS_BLINK   │ blink     │
196       └────────────┴───────────┘
197
198       Color codes
199
200
201       ┌───────────────┬─────────────────────────────┐
202Name           Color                       
203       ├───────────────┼─────────────────────────────┤
204YAS_BLACK      │ black                       │
205       ├───────────────┼─────────────────────────────┤
206YAS_RED        │ red                         │
207       ├───────────────┼─────────────────────────────┤
208YAS_GREEN      │ green                       │
209       ├───────────────┼─────────────────────────────┤
210YAS_YELLOW     │ yellow                      │
211       ├───────────────┼─────────────────────────────┤
212YAS_BLUE       │ blue                        │
213       ├───────────────┼─────────────────────────────┤
214YAS_MAGENTA    │ magenta                     │
215       ├───────────────┼─────────────────────────────┤
216YAS_CYAN       │ cyan                        │
217       ├───────────────┼─────────────────────────────┤
218YAS_WHITE      │ white                       │
219       ├───────────────┼─────────────────────────────┤
220YAS_FGCOLORDEF │ default terminal foreground │
221       ├───────────────┼─────────────────────────────┤
222YAS_BGCOLORDEF │ default terminal background │
223       └───────────────┴─────────────────────────────┘
224
225       Helper macros
226
227
228       ┌────────────────────┬────────────────────────────┐
229Name                Description                
230       ├────────────────────┼────────────────────────────┤
231YAS_FG(attribute)   │ extract foreground color   │
232       ├────────────────────┼────────────────────────────┤
233YAS_BG(attribute)   │ extract background color   │
234       ├────────────────────┼────────────────────────────┤
235YAS_FGCOLOR(color)  │ shift  simple  color value │
236       │                    │ into foreground color      │
237       ├────────────────────┼────────────────────────────┤
238YAS_BGCOLOR(color)  │ shift simple  color  value │
239       │                    │ into background color      │
240       ├────────────────────┼────────────────────────────┤
241YAS_FGXCOLOR(color) │ shift  256  palette  color │
242       │                    │ value   into    foreground │
243       │                    │ color                      │
244       ├────────────────────┼────────────────────────────┤
245YAS_BGXCOLOR(color) │ shift  256  palette  color │
246       │                    │ value   into    background │
247       │                    │ color                      │
248       └────────────────────┴────────────────────────────┘
249
250       All  of  the  above can be or'ed into attribute, provided that the bits
251       for foreground/background color are all zeroes.
252
253
254       Key codes
255
256
257              · Special, generated internally
258
259
260
261       ┌────────────────┬───────┬─────────────────────┐
262Name            Value Description         
263       ├────────────────┼───────┼─────────────────────┤
264YAS_K_NONE      │ -1    │ no  key  is  avail‐ │
265       │                │       │ able;  in time lim‐ │
266       │                │       │ ited   mode   means │
267       │                │       │ that the time limit │
268       │                │       │ expired             │
269       ├────────────────┼───────┼─────────────────────┤
270YAS_SCREEN_SIZE │ 0x800 │ notification    for │
271       │                │       │ screen  size change │
272       │                │       │ (may  come  because │
273       │                │       │ of  telnet  or ANSI │
274       │                │       │ sequence)           │
275       ├────────────────┼───────┼─────────────────────┤
276YAS_TELNET_SIZE │ 0x801 │ notification    for │
277       │                │       │ screen size change; │
278       │                │       │ duplicates      the │
279       │                │       │ above,  may be used │
280       │                │       │ to    differentiate │
281       │                │       │ how   screen   size │
282       │                │       │ change  event   was │
283       │                │       │ generated           │
284       └────────────────┴───────┴─────────────────────┘
285
286              · Normal keys
287
288
289
290       ┌─────────────┬───────┬───────────────────────────────┐
291Name         Value Description                   
292       ├─────────────┼───────┼───────────────────────────────┤
293YAS_K_NUL    │ 0x00  │ Nul; on some terminals Ctrl-2 │
294       ├─────────────┼───────┼───────────────────────────────┤
295YAS_K_C_A    │ 0x01  │ Ctrl-A                        │
296       ├─────────────┼───────┼───────────────────────────────┤
297YAS_K_C_B    │ 0x02  │ Ctrl-B                        │
298       ├─────────────┼───────┼───────────────────────────────┤
299YAS_K_C_C    │ 0x03  │ Ctrl-C                        │
300       ├─────────────┼───────┼───────────────────────────────┤
301YAS_K_C_D    │ 0x04  │ Ctrl-D                        │
302       ├─────────────┼───────┼───────────────────────────────┤
303YAS_K_C_E    │ 0x05  │ Ctrl-E                        │
304       ├─────────────┼───────┼───────────────────────────────┤
305YAS_K_C_F    │ 0x06  │ Ctrl-F                        │
306       ├─────────────┼───────┼───────────────────────────────┤
307YAS_K_C_G    │ 0x07  │ Ctrl-G                        │
308       ├─────────────┼───────┼───────────────────────────────┤
309YAS_K_C_H    │ 0x08  │ Ctrl-H;  depends  on terminal │
310       │             │       │ see YAS_K_BSP, YAS_K_C_8      
311       ├─────────────┼───────┼───────────────────────────────┤
312YAS_K_C_I    │ 0x09  │ Ctrl-I                        │
313       ├─────────────┼───────┼───────────────────────────────┤
314YAS_K_TAB    │ 0x09  │ Tab                           │
315       ├─────────────┼───────┼───────────────────────────────┤
316YAS_K_C_J    │ 0x0a  │ Ctrl-J                        │
317       ├─────────────┼───────┼───────────────────────────────┤
318YAS_K_C_K    │ 0x0b  │ Ctrl-K                        │
319       ├─────────────┼───────┼───────────────────────────────┤
320YAS_K_C_L    │ 0x0c  │ Ctrl-L                        │
321       ├─────────────┼───────┼───────────────────────────────┤
322YAS_K_C_M    │ 0x0d  │ Enter,  Return,  Ctrl-M;  see │
323       │             │       │ below                         │
324       ├─────────────┼───────┼───────────────────────────────┤
325YAS_K_RET    │ 0x0d  │ Enter,  Return,  Ctrl-M;  see │
326       │             │       │ above                         │
327       ├─────────────┼───────┼───────────────────────────────┤
328YAS_K_C_N    │ 0x0e  │ Ctrl-N                        │
329       ├─────────────┼───────┼───────────────────────────────┤
330YAS_K_C_O    │ 0x0f  │ Ctrl-O                        │
331       ├─────────────┼───────┼───────────────────────────────┤
332YAS_K_C_P    │ 0x10  │ Ctrl-O                        │
333       ├─────────────┼───────┼───────────────────────────────┤
334YAS_K_C_Q    │ 0x11  │ Ctrl-Q                        │
335       ├─────────────┼───────┼───────────────────────────────┤
336YAS_K_C_R    │ 0x12  │ Ctrl-R                        │
337       ├─────────────┼───────┼───────────────────────────────┤
338YAS_K_C_S    │ 0x13  │ Ctrl-S                        │
339       ├─────────────┼───────┼───────────────────────────────┤
340YAS_K_C_T    │ 0x14  │ Ctrl-T                        │
341       ├─────────────┼───────┼───────────────────────────────┤
342YAS_K_C_U    │ 0x15  │ Ctrl-U                        │
343       ├─────────────┼───────┼───────────────────────────────┤
344YAS_K_C_V    │ 0x16  │ Ctrl-V                        │
345       ├─────────────┼───────┼───────────────────────────────┤
346YAS_K_C_W    │ 0x17  │ Ctrl-W                        │
347       ├─────────────┼───────┼───────────────────────────────┤
348YAS_K_C_X    │ 0x18  │ Ctrl-X                        │
349       ├─────────────┼───────┼───────────────────────────────┤
350YAS_K_C_Y    │ 0x19  │ Ctrl-Y                        │
351       ├─────────────┼───────┼───────────────────────────────┤
352YAS_K_C_Z    │ 0x1a  │ Ctrl-Z                        │
353       ├─────────────┼───────┼───────────────────────────────┤
354YAS_K_ESC    │ 0x1b  │ Esc, Ctrl-3; see  below;  All │
355       │             │       │ ANSI   sequences  start  with │
356       │             │       │ Esc, this is return  after  a │
357       │             │       │ timeout or double Esc         │
358       ├─────────────┼───────┼───────────────────────────────┤
359YAS_K_C_3    │ 0x1b  │ Esc,  Ctrl-3;  see above; All │
360       │             │       │ ANSI  sequences  start   with │
361       │             │       │ Esc,  this  is return after a │
362       │             │       │ timeout or double Esc         │
363       ├─────────────┼───────┼───────────────────────────────┤
364YAS_K_C_4    │ 0x1c  │ Ctrl-4                        │
365       ├─────────────┼───────┼───────────────────────────────┤
366YAS_K_C_5    │ 0x1d  │ Ctrl-5                        │
367       ├─────────────┼───────┼───────────────────────────────┤
368YAS_K_C_6    │ 0x1e  │ Ctrl-6                        │
369       ├─────────────┼───────┼───────────────────────────────┤
370YAS_K_C_7    │ 0x1f  │ Ctrl-7                        │
371       ├─────────────┼───────┼───────────────────────────────┤
372YAS_K_SPACE  │ 0x20  │ Space                         │
373       ├─────────────┼───────┼───────────────────────────────┤
374YAS_K_EXCL   │ 0x21  │ !                             │
375       ├─────────────┼───────┼───────────────────────────────┤
376YAS_K_DQUOT  │ 0x22  │ "                             │
377       ├─────────────┼───────┼───────────────────────────────┤
378YAS_K_HASH   │ 0x23  │ #                             │
379       ├─────────────┼───────┼───────────────────────────────┤
380YAS_K_POUND  │ 0x24  │ $                             │
381       ├─────────────┼───────┼───────────────────────────────┤
382YAS_K_PERC   │ 0x25  │ %                             │
383       ├─────────────┼───────┼───────────────────────────────┤
384YAS_K_AND    │ 0x26  │ Ampersand                     │
385       ├─────────────┼───────┼───────────────────────────────┤
386YAS_K_QUOT   │ 0x27  │ '                             │
387       ├─────────────┼───────┼───────────────────────────────┤
388YAS_K_OBRA   │ 0x28  │ (                             │
389       ├─────────────┼───────┼───────────────────────────────┤
390YAS_K_CBRA   │ 0x29  │ )                             │
391       ├─────────────┼───────┼───────────────────────────────┤
392YAS_K_STAR   │ 0x2a  │ *                             │
393       ├─────────────┼───────┼───────────────────────────────┤
394YAS_K_PLUS   │ 0x2b  │ +                             │
395       ├─────────────┼───────┼───────────────────────────────┤
396YAS_K_COMMA  │ 0x2c  │ ,                             │
397       ├─────────────┼───────┼───────────────────────────────┤
398YAS_K_MINUS  │ 0x2d  │ -                             │
399       ├─────────────┼───────┼───────────────────────────────┤
400YAS_K_DOT    │ 0x2e  │ .                             │
401       ├─────────────┼───────┼───────────────────────────────┤
402YAS_K_SLASH  │ 0x2f  │ /                             │
403       ├─────────────┼───────┼───────────────────────────────┤
404YAS_K_0      │ 0x30  │ 0                             │
405       ├─────────────┼───────┼───────────────────────────────┤
406YAS_K_1      │ 0x31  │ 1                             │
407       ├─────────────┼───────┼───────────────────────────────┤
408YAS_K_2      │ 0x32  │ 2                             │
409       ├─────────────┼───────┼───────────────────────────────┤
410YAS_K_3      │ 0x33  │ 3                             │
411       ├─────────────┼───────┼───────────────────────────────┤
412YAS_K_4      │ 0x34  │ 4                             │
413       ├─────────────┼───────┼───────────────────────────────┤
414YAS_K_5      │ 0x35  │ 5                             │
415       ├─────────────┼───────┼───────────────────────────────┤
416YAS_K_6      │ 0x36  │ 6                             │
417       ├─────────────┼───────┼───────────────────────────────┤
418YAS_K_7      │ 0x37  │ 7                             │
419       ├─────────────┼───────┼───────────────────────────────┤
420YAS_K_8      │ 0x38  │ 8                             │
421       ├─────────────┼───────┼───────────────────────────────┤
422YAS_K_9      │ 0x39  │ 9                             │
423       ├─────────────┼───────┼───────────────────────────────┤
424YAS_K_COLON  │ 0x3a  │ :                             │
425       ├─────────────┼───────┼───────────────────────────────┤
426YAS_K_SEMI   │ 0x3b  │ ;                             │
427       ├─────────────┼───────┼───────────────────────────────┤
428YAS_K_LT     │ 0x3c  │ <                             │
429       ├─────────────┼───────┼───────────────────────────────┤
430YAS_K_EQ     │ 0x3d  │ =                             
431       ├─────────────┼───────┼───────────────────────────────┤
432YAS_K_GT     │ 0x3e  │ >                             │
433       ├─────────────┼───────┼───────────────────────────────┤
434YAS_K_QUEST  │ 0x3f  │ ?                             │
435       ├─────────────┼───────┼───────────────────────────────┤
436YAS_K_AT     │ 0x40  │ @                             │
437       ├─────────────┼───────┼───────────────────────────────┤
438YAS_K_A      │ 0x41  │ A                             │
439       ├─────────────┼───────┼───────────────────────────────┤
440YAS_K_B      │ 0x42  │ B                             │
441       ├─────────────┼───────┼───────────────────────────────┤
442YAS_K_C      │ 0x43  │ C                             │
443       ├─────────────┼───────┼───────────────────────────────┤
444YAS_K_D      │ 0x44  │ D                             │
445       ├─────────────┼───────┼───────────────────────────────┤
446YAS_K_E      │ 0x45  │ E                             │
447       ├─────────────┼───────┼───────────────────────────────┤
448YAS_K_F      │ 0x46  │ F                             │
449       ├─────────────┼───────┼───────────────────────────────┤
450YAS_K_G      │ 0x47  │ G                             │
451       ├─────────────┼───────┼───────────────────────────────┤
452YAS_K_H      │ 0x48  │ H                             │
453       ├─────────────┼───────┼───────────────────────────────┤
454YAS_K_I      │ 0x49  │ I                             │
455       ├─────────────┼───────┼───────────────────────────────┤
456YAS_K_J      │ 0x4a  │ J                             │
457       ├─────────────┼───────┼───────────────────────────────┤
458YAS_K_K      │ 0x4b  │ K                             │
459       ├─────────────┼───────┼───────────────────────────────┤
460YAS_K_L      │ 0x4c  │ L                             │
461       ├─────────────┼───────┼───────────────────────────────┤
462YAS_K_M      │ 0x4d  │ M                             │
463       ├─────────────┼───────┼───────────────────────────────┤
464YAS_K_N      │ 0x4e  │ N                             │
465       ├─────────────┼───────┼───────────────────────────────┤
466YAS_K_O      │ 0x4f  │ O                             │
467       ├─────────────┼───────┼───────────────────────────────┤
468YAS_K_P      │ 0x50  │ P                             │
469       ├─────────────┼───────┼───────────────────────────────┤
470YAS_K_Q      │ 0x51  │ Q                             │
471       ├─────────────┼───────┼───────────────────────────────┤
472YAS_K_R      │ 0x52  │ R                             │
473       ├─────────────┼───────┼───────────────────────────────┤
474YAS_K_S      │ 0x53  │ S                             │
475       ├─────────────┼───────┼───────────────────────────────┤
476YAS_K_T      │ 0x54  │ T                             │
477       ├─────────────┼───────┼───────────────────────────────┤
478YAS_K_U      │ 0x55  │ U                             │
479       ├─────────────┼───────┼───────────────────────────────┤
480YAS_K_V      │ 0x56  │ V                             │
481       ├─────────────┼───────┼───────────────────────────────┤
482YAS_K_W      │ 0x57  │ W                             │
483       ├─────────────┼───────┼───────────────────────────────┤
484YAS_K_X      │ 0x58  │ X                             │
485       ├─────────────┼───────┼───────────────────────────────┤
486YAS_K_Y      │ 0x59  │ Y                             │
487       ├─────────────┼───────┼───────────────────────────────┤
488YAS_K_Z      │ 0x5a  │ Z                             │
489       ├─────────────┼───────┼───────────────────────────────┤
490YAS_K_OSQ    │ 0x5b  │ [                             │
491       ├─────────────┼───────┼───────────────────────────────┤
492YAS_K_BSLASH │ 0x5c  │ \                             
493       ├─────────────┼───────┼───────────────────────────────┤
494YAS_K_CSQ    │ 0x5d  │ ]                             │
495       ├─────────────┼───────┼───────────────────────────────┤
496YAS_K_CARRET │ 0x5e  │ ^                             │
497       ├─────────────┼───────┼───────────────────────────────┤
498YAS_K_USCORE │ 0x5f  │ _                             
499       ├─────────────┼───────┼───────────────────────────────┤
500YAS_K_BTICK  │ 0x60  │ `                             │
501       ├─────────────┼───────┼───────────────────────────────┤
502YAS_K_a      │ 0x61  │ a                             │
503       ├─────────────┼───────┼───────────────────────────────┤
504YAS_K_b      │ 0x62  │ b                             │
505       ├─────────────┼───────┼───────────────────────────────┤
506YAS_K_c      │ 0x63  │ c                             │
507       ├─────────────┼───────┼───────────────────────────────┤
508YAS_K_d      │ 0x64  │ d                             │
509       ├─────────────┼───────┼───────────────────────────────┤
510YAS_K_e      │ 0x65  │ e                             │
511       ├─────────────┼───────┼───────────────────────────────┤
512YAS_K_f      │ 0x66  │ f                             │
513       ├─────────────┼───────┼───────────────────────────────┤
514YAS_K_g      │ 0x67  │ g                             │
515       ├─────────────┼───────┼───────────────────────────────┤
516YAS_K_h      │ 0x68  │ h                             │
517       ├─────────────┼───────┼───────────────────────────────┤
518YAS_K_i      │ 0x69  │ i                             │
519       ├─────────────┼───────┼───────────────────────────────┤
520YAS_K_j      │ 0x6a  │ j                             │
521       ├─────────────┼───────┼───────────────────────────────┤
522YAS_K_k      │ 0x6b  │ k                             │
523       ├─────────────┼───────┼───────────────────────────────┤
524YAS_K_l      │ 0x6c  │ l                             │
525       ├─────────────┼───────┼───────────────────────────────┤
526YAS_K_m      │ 0x6d  │ m                             │
527       ├─────────────┼───────┼───────────────────────────────┤
528YAS_K_n      │ 0x6e  │ n                             │
529       ├─────────────┼───────┼───────────────────────────────┤
530YAS_K_o      │ 0x6f  │ o                             │
531       ├─────────────┼───────┼───────────────────────────────┤
532YAS_K_p      │ 0x70  │ p                             │
533       ├─────────────┼───────┼───────────────────────────────┤
534YAS_K_q      │ 0x71  │ q                             │
535       ├─────────────┼───────┼───────────────────────────────┤
536YAS_K_r      │ 0x72  │ r                             │
537       ├─────────────┼───────┼───────────────────────────────┤
538YAS_K_s      │ 0x73  │ s                             │
539       ├─────────────┼───────┼───────────────────────────────┤
540YAS_K_t      │ 0x74  │ t                             │
541       ├─────────────┼───────┼───────────────────────────────┤
542YAS_K_u      │ 0x75  │ u                             │
543       ├─────────────┼───────┼───────────────────────────────┤
544YAS_K_v      │ 0x76  │ v                             │
545       ├─────────────┼───────┼───────────────────────────────┤
546YAS_K_w      │ 0x77  │ w                             │
547       ├─────────────┼───────┼───────────────────────────────┤
548YAS_K_x      │ 0x78  │ x                             │
549       ├─────────────┼───────┼───────────────────────────────┤
550YAS_K_y      │ 0x79  │ y                             │
551       ├─────────────┼───────┼───────────────────────────────┤
552YAS_K_z      │ 0x7a  │ z                             │
553       ├─────────────┼───────┼───────────────────────────────┤
554YAS_K_OCUR   │ 0x7b  │ {                             │
555       ├─────────────┼───────┼───────────────────────────────┤
556YAS_K_PIPE   │ 0x7c  │ |                             │
557       ├─────────────┼───────┼───────────────────────────────┤
558YAS_K_CCUR   │ 0x7d  │ }                             │
559       ├─────────────┼───────┼───────────────────────────────┤
560YAS_K_TLD    │ 0x7e  │ Tilde                         │
561       ├─────────────┼───────┼───────────────────────────────┤
562YAS_K_C_8    │ 0x7f  │ Backspace; see below; depends │
563       │             │       │ on terminal see YAS_K_C_H     
564       ├─────────────┼───────┼───────────────────────────────┤
565YAS_K_BSP    │ 0x7f  │ Backspace; see below; depends │
566       │             │       │ on terminal see YAS_K_C_H     
567       └─────────────┴───────┴───────────────────────────────┘
568
569              · Extended keys, parsed from ANSI sequences
570
571
572
573       ┌──────────────┬───────┬─────────────┐
574Name          Value Description 
575       ├──────────────┼───────┼─────────────┤
576YAS_K_F1      │ 0x100 │ F1          │
577       ├──────────────┼───────┼─────────────┤
578YAS_K_F2      │ 0x101 │ F2          │
579       ├──────────────┼───────┼─────────────┤
580YAS_K_F3      │ 0x102 │ F3          │
581       ├──────────────┼───────┼─────────────┤
582YAS_K_F4      │ 0x103 │ F4          │
583       ├──────────────┼───────┼─────────────┤
584YAS_K_F5      │ 0x104 │ F5          │
585       ├──────────────┼───────┼─────────────┤
586YAS_K_F6      │ 0x105 │ F6          │
587       ├──────────────┼───────┼─────────────┤
588YAS_K_F7      │ 0x106 │ F7          │
589       ├──────────────┼───────┼─────────────┤
590YAS_K_F8      │ 0x107 │ F8          │
591       ├──────────────┼───────┼─────────────┤
592YAS_K_F9      │ 0x108 │ F9          │
593       ├──────────────┼───────┼─────────────┤
594YAS_K_F10     │ 0x109 │ F10         │
595       ├──────────────┼───────┼─────────────┤
596YAS_K_F11     │ 0x10a │ F11         │
597       ├──────────────┼───────┼─────────────┤
598YAS_K_F12     │ 0x10b │ F12         │
599       ├──────────────┼───────┼─────────────┤
600YAS_K_S_F1    │ 0x10c │ Shift-F1    │
601       ├──────────────┼───────┼─────────────┤
602YAS_K_S_F2    │ 0x10d │ Shift-F2    │
603       ├──────────────┼───────┼─────────────┤
604YAS_K_S_F3    │ 0x10e │ Shift-F3    │
605       ├──────────────┼───────┼─────────────┤
606YAS_K_S_F4    │ 0x10f │ Shift-F4    │
607       ├──────────────┼───────┼─────────────┤
608YAS_K_S_F5    │ 0x110 │ Shift-F5    │
609       ├──────────────┼───────┼─────────────┤
610YAS_K_S_F6    │ 0x111 │ Shift-F6    │
611       ├──────────────┼───────┼─────────────┤
612YAS_K_S_F7    │ 0x112 │ Shift-F7    │
613       ├──────────────┼───────┼─────────────┤
614YAS_K_S_F8    │ 0x113 │ Shift-F8    │
615       ├──────────────┼───────┼─────────────┤
616YAS_K_S_F9    │ 0x114 │ Shift-F9    │
617       ├──────────────┼───────┼─────────────┤
618YAS_K_S_F10   │ 0x115 │ Shift-F10   │
619       ├──────────────┼───────┼─────────────┤
620YAS_K_S_F11   │ 0x116 │ Shift-F11   │
621       ├──────────────┼───────┼─────────────┤
622YAS_K_S_F12   │ 0x117 │ Shift-F12   │
623       ├──────────────┼───────┼─────────────┤
624YAS_K_C_F1    │ 0x118 │ Ctrl-F1     │
625       ├──────────────┼───────┼─────────────┤
626YAS_K_C_F2    │ 0x119 │ Ctrl-F2     │
627       ├──────────────┼───────┼─────────────┤
628YAS_K_C_F3    │ 0x11a │ Ctrl-F3     │
629       ├──────────────┼───────┼─────────────┤
630YAS_K_C_F4    │ 0x11b │ Ctrl-F4     │
631       ├──────────────┼───────┼─────────────┤
632YAS_K_C_F5    │ 0x11c │ Ctrl-F5     │
633       ├──────────────┼───────┼─────────────┤
634YAS_K_C_F6    │ 0x11d │ Ctrl-F6     │
635       ├──────────────┼───────┼─────────────┤
636YAS_K_C_F7    │ 0x11e │ Ctrl-F7     │
637       ├──────────────┼───────┼─────────────┤
638YAS_K_C_F8    │ 0x11f │ Ctrl-F8     │
639       ├──────────────┼───────┼─────────────┤
640YAS_K_C_F9    │ 0x120 │ Ctrl-F9     │
641       ├──────────────┼───────┼─────────────┤
642YAS_K_C_F10   │ 0x121 │ Ctrl-F10    │
643       ├──────────────┼───────┼─────────────┤
644YAS_K_C_F11   │ 0x122 │ Ctrl-F11    │
645       ├──────────────┼───────┼─────────────┤
646YAS_K_C_F12   │ 0x123 │ Ctrl-F12    │
647       ├──────────────┼───────┼─────────────┤
648YAS_K_A_F1    │ 0x124 │ Alt-F1      │
649       ├──────────────┼───────┼─────────────┤
650YAS_K_A_F2    │ 0x125 │ Alt-F2      │
651       ├──────────────┼───────┼─────────────┤
652YAS_K_A_F3    │ 0x126 │ Alt-F3      │
653       ├──────────────┼───────┼─────────────┤
654YAS_K_A_F4    │ 0x127 │ Alt-F4      │
655       ├──────────────┼───────┼─────────────┤
656YAS_K_A_F5    │ 0x128 │ Alt-F5      │
657       ├──────────────┼───────┼─────────────┤
658YAS_K_A_F6    │ 0x129 │ Alt-F6      │
659       ├──────────────┼───────┼─────────────┤
660YAS_K_A_F7    │ 0x12a │ Alt-F7      │
661       ├──────────────┼───────┼─────────────┤
662YAS_K_A_F8    │ 0x12b │ Alt-F8      │
663       ├──────────────┼───────┼─────────────┤
664YAS_K_A_F9    │ 0x12c │ Alt-F9      │
665       ├──────────────┼───────┼─────────────┤
666YAS_K_A_F10   │ 0x12d │ Alt-F10     │
667       ├──────────────┼───────┼─────────────┤
668YAS_K_A_F11   │ 0x12e │ Alt-F11     │
669       ├──────────────┼───────┼─────────────┤
670YAS_K_A_F12   │ 0x12f │ Alt-F12     │
671       ├──────────────┼───────┼─────────────┤
672YAS_K_LEFT    │ 0x130 │ Left        │
673       ├──────────────┼───────┼─────────────┤
674YAS_K_UP      │ 0x131 │ Up          │
675       ├──────────────┼───────┼─────────────┤
676YAS_K_DOWN    │ 0x132 │ Down        │
677       ├──────────────┼───────┼─────────────┤
678YAS_K_RIGHT   │ 0x133 │ Right       │
679       ├──────────────┼───────┼─────────────┤
680YAS_K_HOME    │ 0x134 │ Home        │
681       ├──────────────┼───────┼─────────────┤
682YAS_K_END     │ 0x135 │ End         │
683       ├──────────────┼───────┼─────────────┤
684YAS_K_PGUP    │ 0x136 │ PageUp      │
685       ├──────────────┼───────┼─────────────┤
686YAS_K_PGDN    │ 0x137 │ PageDown    │
687       ├──────────────┼───────┼─────────────┤
688YAS_K_INS     │ 0x138 │ Insert      │
689       ├──────────────┼───────┼─────────────┤
690YAS_K_DEL     │ 0x139 │ Delete      │
691       ├──────────────┼───────┼─────────────┤
692YAS_K_C_LEFT  │ 0x13a │ Ctrl-Left   │
693       ├──────────────┼───────┼─────────────┤
694YAS_K_C_UP    │ 0x13b │ Ctrl-Up     │
695       ├──────────────┼───────┼─────────────┤
696YAS_K_C_DOWN  │ 0x13c │ Ctrl-Down   │
697       ├──────────────┼───────┼─────────────┤
698YAS_K_C_RIGHT │ 0x13d │ Ctrl-Right  │
699       └──────────────┴───────┴─────────────┘
700
701              · Alt-<letter>
702
703
704
705       These codes are generated by a helper macro - YAS_K_ALT(keycode).
706
707
708       ┌───────────────┬───────────────┐
709Name           Description   
710       ├───────────────┼───────────────┤
711YAS_K_A_BT     │ Alt-Backtick  │
712       ├───────────────┼───────────────┤
713YAS_K_A_1      │ Alt-1         │
714       ├───────────────┼───────────────┤
715YAS_K_A_2      │ Alt-2         │
716       ├───────────────┼───────────────┤
717YAS_K_A_3      │ Alt-3         │
718       ├───────────────┼───────────────┤
719YAS_K_A_4      │ Alt-4         │
720       ├───────────────┼───────────────┤
721YAS_K_A_5      │ Alt-5         │
722       ├───────────────┼───────────────┤
723YAS_K_A_6      │ Alt-6         │
724       ├───────────────┼───────────────┤
725YAS_K_A_7      │ Alt-7         │
726       ├───────────────┼───────────────┤
727YAS_K_A_8      │ Alt-8         │
728       ├───────────────┼───────────────┤
729YAS_K_A_9      │ Alt-9         │
730       ├───────────────┼───────────────┤
731YAS_K_A_0      │ Alt-0         │
732       ├───────────────┼───────────────┤
733YAS_K_A_MINUS  │ Alt-Minus     │
734       ├───────────────┼───────────────┤
735YAS_K_A_EQ     │ Alt-=         │
736       ├───────────────┼───────────────┤
737YAS_K_A_BSP    │ Alt-Backspace │
738       ├───────────────┼───────────────┤
739YAS_K_A_TLD    │ Alt-Tilde     │
740       ├───────────────┼───────────────┤
741YAS_K_A_EXCL   │ Alt-!         │
742       ├───────────────┼───────────────┤
743YAS_K_A_AT     │ Alt-@         │
744       ├───────────────┼───────────────┤
745YAS_K_A_HASH   │ Alt-#         │
746       ├───────────────┼───────────────┤
747YAS_K_A_POUND  │ Alt-$         │
748       ├───────────────┼───────────────┤
749YAS_K_A_PERC   │ Alt-%         │
750       ├───────────────┼───────────────┤
751YAS_K_A_CARRET │ Alt-^         │
752       ├───────────────┼───────────────┤
753YAS_K_A_AND    │ Alt-Ampersand │
754       ├───────────────┼───────────────┤
755YAS_K_A_STAR   │ Alt-*         │
756       ├───────────────┼───────────────┤
757YAS_K_A_OBRA   │ Alt-(         │
758       ├───────────────┼───────────────┤
759YAS_K_A_CBRA   │ Alt-)         │
760       ├───────────────┼───────────────┤
761YAS_K_A_UND    │ Alt-_         │
762       ├───────────────┼───────────────┤
763YAS_K_A_PLUS   │ Alt-+         │
764       ├───────────────┼───────────────┤
765YAS_K_A_a      │ Alt-a         │
766       ├───────────────┼───────────────┤
767YAS_K_A_b      │ Alt-b         │
768       ├───────────────┼───────────────┤
769YAS_K_A_c      │ Alt-c         │
770       ├───────────────┼───────────────┤
771YAS_K_A_d      │ Alt-d         │
772       ├───────────────┼───────────────┤
773YAS_K_A_e      │ Alt-e         │
774       ├───────────────┼───────────────┤
775YAS_K_A_f      │ Alt-f         │
776       ├───────────────┼───────────────┤
777YAS_K_A_g      │ Alt-g         │
778       ├───────────────┼───────────────┤
779YAS_K_A_h      │ Alt-h         │
780       ├───────────────┼───────────────┤
781YAS_K_A_i      │ Alt-i         │
782       ├───────────────┼───────────────┤
783YAS_K_A_j      │ Alt-j         │
784       ├───────────────┼───────────────┤
785YAS_K_A_k      │ Alt-k         │
786       ├───────────────┼───────────────┤
787YAS_K_A_l      │ Alt-l         │
788       ├───────────────┼───────────────┤
789YAS_K_A_m      │ Alt-m         │
790       ├───────────────┼───────────────┤
791YAS_K_A_n      │ Alt-n         │
792       ├───────────────┼───────────────┤
793YAS_K_A_o      │ Alt-o         │
794       ├───────────────┼───────────────┤
795YAS_K_A_p      │ Alt-p         │
796       ├───────────────┼───────────────┤
797YAS_K_A_q      │ Alt-q         │
798       ├───────────────┼───────────────┤
799YAS_K_A_r      │ Alt-r         │
800       ├───────────────┼───────────────┤
801YAS_K_A_s      │ Alt-s         │
802       ├───────────────┼───────────────┤
803YAS_K_A_t      │ Alt-t         │
804       ├───────────────┼───────────────┤
805YAS_K_A_u      │ Alt-u         │
806       ├───────────────┼───────────────┤
807YAS_K_A_v      │ Alt-v         │
808       ├───────────────┼───────────────┤
809YAS_K_A_w      │ Alt-w         │
810       ├───────────────┼───────────────┤
811YAS_K_A_x      │ Alt-x         │
812       ├───────────────┼───────────────┤
813YAS_K_A_y      │ Alt-y         │
814       ├───────────────┼───────────────┤
815YAS_K_A_z      │ Alt-z         │
816       └───────────────┴───────────────┘
817

Functions

819       All functions in the API work with a  pointer  to  an  opaque  yascreen
820       structure.
821
822
823       The  structure  is allocated internally in the library by yascreen_init
824       and it is the job of the user program to keep track of it.
825
826
827       The library is thread safe, as long as each struct yascreen  object  is
828       accessed by a single thread.
829
830
831   yascreen_init
832              inline yascreen *yascreen_init(int sx,int sy);
833
834
835
836       allocate  and  initialize screen data output defaults to stdout in case
837       output is a terminal and initial size is  (0,0),  the  screen  size  is
838       autodetected
839
840
841       in case of error, returns NULL
842
843
844   yascreen_ver
845              inline const char *yascreen_ver(void);
846
847
848
849       returns a string with the library version
850
851
852   yascreen_setout
853              inline int yascreen_setout(yascreen *s,ssize_t (*out)(yascreen *s,const void *data,size_t len));
854
855
856
857       set callback that handles output if out=NULL, the output goes to stdout
858
859
860       the  callback may implement internal buffering, a flush is signalled by
861       calling out with len=0
862
863
864   yascreen_set_telnet
865              inline void yascreen_set_telnet(yascreen *s,int on);
866
867
868
869       enable (on is non-zero) or disable (on=0) telnet sequence processing
870
871
872   yascreen_init_telnet
873              inline void yascreen_init_telnet(yascreen *s);
874
875
876
877       depending on telnet sequence processing, sends a set of telnet initial‐
878       ization sequences
879
880
881   yascreen_resize
882              inline int yascreen_resize(yascreen *s,int sx,int sy);
883
884
885
886       resize  screen  should  redraw afterwards since allocation is involved,
887       this may fail and return -1
888
889
890   yascreen_free
891              inline void yascreen_free(yascreen *s);
892
893
894
895       finish the lifecycle of struct yascreen - all internally allocated mem‐
896       ory is freed
897
898
899   yascreen_term_save
900              inline void yascreen_term_save(yascreen *s);
901
902
903
904       save current terminal state on top of state stack
905
906
907   yascreen_term_restore
908              inline void yascreen_term_restore(yascreen *s);
909
910
911
912       restore previously saved terminal state from top of state stack
913
914
915   yascreen_term_push
916              inline void yascreen_term_push(yascreen *s);
917
918
919
920       push current terminal state to state stack
921
922
923   yascreen_term_pop
924              inline void yascreen_term_pop(yascreen *s);
925
926
927
928       pop and restore previously saved terminal state from state stack
929
930
931   yascreen_term_set
932              inline void yascreen_term_set(yascreen *s,int mode);
933
934
935
936       set terminal for proper screen operation
937
938
939   mode is a bitmask, containing one of
940       ┌───────────┬───────┬─────────────────────┐
941Name       Value Description         
942       ├───────────┼───────┼─────────────────────┤
943YAS_NOBUFF │ 1     │ turn  off canonical │
944       │           │       │ mode       (disable │
945       │           │       │ ICANON and IEXTEN)  │
946       ├───────────┼───────┼─────────────────────┤
947YAS_NOSIGN │ 2     │ disable ISIG        
948       ├───────────┼───────┼─────────────────────┤
949YAS_NOECHO │ 4     │ disable  local echo │
950       │           │       │ (ECHO)              │
951       ├───────────┼───────┼─────────────────────┤
952YAS_ONLCR  │ 8     │ ONLCR|OPOST         
953       └───────────┴───────┴─────────────────────┘
954
955   yascreen_printxy
956              inline int yascreen_printxy(yascreen *s,int x,int y,uint32_t attr,const char *format,...) __attribute__((format(printf,5,6)));
957
958
959
960   yascreen_putsxy
961              inline int yascreen_putsxy(yascreen *s,int x,int y,uint32_t attr,const char *str);
962
963
964
965       print at position, if data exceeds buffer, then it gets truncated
966
967
968   yascreen_printxyu
969              inline int yascreen_printxyu(yascreen *s,int x,int y,uint32_t attr,const char *format,...) __attribute__((format(printf,5,6)));
970
971
972
973   yascreen_putsxyu
974              inline int yascreen_putsxyu(yascreen *s,int x,int y,uint32_t attr,const char *str);
975
976
977
978       print at position, if data  exceeds  buffer,  then  it  gets  truncated
979       screen is immediately updated
980
981
982   yascreen_update
983              inline int yascreen_update(yascreen *s);
984
985
986
987       sync memory state to screen since allocation is involved, this may fail
988       and return -1
989
990
991   yascreen_redraw
992              inline void yascreen_redraw(yascreen *s);
993
994
995
996       set next update to be a full redraw
997
998
999   yascreen_clear_mem
1000              inline void yascreen_clear_mem(yascreen *s,uint32_t attr);
1001
1002
1003
1004       clear memory buffer all cells in the screen are  set  to  Space,  using
1005       attr for colors and style
1006
1007
1008   yascreen_cursor
1009              inline void yascreen_cursor(yascreen *s,int on);
1010
1011
1012
1013       hide  (on=0)  or show (on is non-zero) cusror screen is updated immedi‐
1014       ately
1015
1016
1017   yascreen_cursor_xy
1018              inline void yascreen_cursor_xy(yascreen *s,int x,int y);
1019
1020
1021
1022       set cursor position screen is updated immediately
1023
1024
1025   yascreen_altbuf
1026              inline void yascreen_altbuf(yascreen *s,int on);
1027
1028
1029
1030       switch between regular and alternative buffer screen is updated immedi‐
1031       ately
1032
1033
1034   yascreen_clear
1035              inline void yascreen_clear(yascreen *s);
1036
1037
1038
1039       clear real screen, no change to memory buffers
1040
1041
1042   yascreen_clearln
1043              inline void yascreen_clearln(yascreen *s);
1044
1045
1046
1047       clear current line, no change to memory buffers
1048
1049
1050   yascreen_update_attr
1051              inline void yascreen_update_attr(yascreen *s,uint32_t oattr,uint32_t nattr);
1052
1053
1054
1055       apply  difference  between  two  attrs  and  output  the optimized ANSI
1056       sequence to switch from oattr to nattr if  oattr=0xffffffff,  the  full
1057       ANSI sequence will be generated no change to memory buffers
1058
1059
1060   yascreen_set_attr
1061              yascreen_set_attr(s,attr)
1062
1063
1064
1065       reset all attrs and set specific one (attr)
1066
1067
1068   yascreen_print
1069              inline int yascreen_print(yascreen *s,const char *format,...) __attribute__((format(printf,2,3)));
1070
1071
1072
1073   yascreen_write
1074              inline int yascreen_write(yascreen *s,const char *str,int len);
1075
1076
1077
1078   yascreen_puts
1079              inline int yascreen_puts(yascreen *s,const char *str);
1080
1081
1082
1083   yascreen_clearln_s
1084              inline const char *yascreen_clearln_s(yascreen *s);
1085
1086
1087
1088       print in line mode
1089
1090
1091   yascreen_sx
1092              inline int yascreen_sx(yascreen *s);
1093
1094
1095
1096       get current x size
1097
1098
1099   yascreen_sy
1100              inline int yascreen_sy(yascreen *s);
1101
1102
1103
1104       get current y size
1105
1106
1107   yascreen_x
1108              inline int yascreen_x(yascreen *s);
1109
1110
1111
1112       get current x
1113
1114
1115   yascreen_y
1116              inline int yascreen_y(yascreen *s);
1117
1118
1119
1120       get current y
1121
1122
1123   yascreen_esc_to
1124              inline void yascreen_esc_to(yascreen *s,int timeout);
1125
1126
1127
1128       set timeout for single ESC key press
1129
1130
1131   yascreen_ckto
1132              inline void yascreen_ckto(yascreen *s);
1133
1134
1135
1136       in case of external event loop, this call will check for single ESC key
1137       should be called regularly enough so that the above  specified  timeout
1138       is  not  extended  too  much if not called often enough then single ESC
1139       will be yielded after longer timeout if not called at all  then  single
1140       ESC will be yielded with next key press
1141
1142
1143   yascreen_getch_to
1144              inline int yascreen_getch_to(yascreen *s,int timeout);
1145
1146
1147
1148       wait  for  a  key,  return ASCII or extended keycode, wait no more than
1149       timeout in milliseconds
1150
1151
1152   yascreen_getch
1153              yascreen_getch(s)
1154
1155
1156
1157       get a key without timeout this macro expands to  yascreen_getch_to(s,0)
1158       zero timeout=wait forever
1159
1160
1161   yascreen_getch_nowait
1162              yascreen_getch_nowait(s)
1163
1164
1165
1166       get  a  key,  if  available,  return  immediately this macro expands to
1167       yascreen_getch_to(s,-1) negative timeout=do not wait
1168
1169
1170   yascreen_ungetch
1171              inline void yascreen_ungetch(yascreen *s,int key);
1172
1173
1174
1175       put back key value in key buffer the internal key buffer is dynamically
1176       allocated,  hence  there  is  no limit of how many key codes may be put
1177       back, but in case of memory allocation failure, the error will  not  be
1178       reported and the key will not be put into the buffer
1179
1180
1181   yascreen_pushch
1182              inline void yascreen_pushch(yascreen *s,int key);
1183
1184
1185
1186       push key value at end of key buffer similar to yascreen_ungetch but the
1187       key code will be returned after all other key codes  currently  in  the
1188       buffer the internal key buffer is dynamically allocated, hence there is
1189       no limit of how many key codes may be put back, but in case  of  memory
1190       allocation failure, the error will not be reported and the key will not
1191       be put into the buffer
1192
1193
1194   yascreen_feed
1195              inline void yascreen_feed(yascreen *s,unsigned char c);
1196
1197
1198
1199       feed key sequence state machine with byte  stream  this  is  useful  to
1200       implement    external    event    loop    and   read   key   codes   by
1201       yascreen_getch_nowait until it returns -1
1202
1203
1204   yascreen_peekch
1205              inline int yascreen_peekch(yascreen *s);
1206
1207
1208
1209       peek for key without removing it from input queue
1210
1211
1212   yascreen_getsize
1213              inline void yascreen_getsize(yascreen *s,int *sx,int *sy);
1214
1215
1216
1217       get last reported screen size set both to 0 if there is none this  will
1218       yield valid result after YAS_SCREEN_SIZE is returned as keypress
1219
1220
1221   yascreen_reqsize
1222              inline void yascreen_reqsize(yascreen *s);
1223
1224
1225
1226       request terminal to report its size via ANSI sequence
1227
1228
1229   yascreen_set_hint_i
1230              inline void yascreen_set_hint_i(yascreen *s,int hint);
1231
1232
1233
1234   yascreen_get_hint_i
1235              inline int yascreen_get_hint_i(yascreen *s);
1236
1237
1238
1239   yascreen_set_hint_p
1240              inline void yascreen_set_hint_p(yascreen *s,void *hint);
1241
1242
1243
1244   yascreen_get_hint_p
1245              inline void *yascreen_get_hint_p(yascreen *s);
1246
1247
1248
1249       get/set  opaque  hint values integer and pointer hints are stored sepa‐
1250       rately and both can be used at the same time
1251
1252
1253       these are useful to link the yascreen instance to user program data
1254
1255
1256       for example a single output callback may output to socket or  a  termi‐
1257       nal, depending on the hint values
1258
1259
1260   yascreen_line_flush
1261              inline void yascreen_line_flush(yascreen *s,int on);
1262
1263
1264
1265       enable/disable  auto  flush  for line and direct screen oriented opera‐
1266       tions
1267
1268
1269       yascreen versions before 1.77 didn't  use  buffered  output  and  would
1270       immediately send the output to the screen
1271
1272
1273       disabling internal flush can help an application optimize the number of
1274       write calls at the cost of performing explicit flush after  each  group
1275       of operations
1276
1277
1278       explicit flush example:
1279
1280
1281              yascreen_write(s,"",0);
1282
1283
1284
1285
1286yascreen                      September 30, 2020                   YASCREEN(3)
Impressum