another update from CVS HEAD, for QA
[alioth/jupp.git] / scrn.h
1 /*
2  *      Device independant tty interface for JOE
3  *      Copyright
4  *              (C) 1992 Joseph H. Allen
5  *
6  *      This file is part of JOE (Joe's Own Editor)
7  */
8 #ifndef _JOE_SCRN_H
9 #define _JOE_SCRN_H 1
10
11 #ifdef EXTERN
12 __IDSTRING(rcsid_scrn_h, "$MirOS: contrib/code/jupp/scrn.h,v 1.10 2017/12/06 23:02:05 tg Exp $");
13 #endif
14
15 #include "tty.h"                /* ttputc() */
16
17 extern int skiptop;
18
19 /* SCRN *nopen(void);
20  *
21  * Open the screen (sets TTY mode so that screen may be used immediatly after
22  * the 'nopen').
23  */
24 SCRN *nopen(CAP *cap);
25
26 /* void nresize(SCRN *t,int w,int h);
27  *
28  * Change size of screen.  For example, call this when you find out that
29  * the Xterm changed size.
30  */
31 void nresize(SCRN *t, int w, int h);
32
33 /* void nredraw(SCRN *t);
34  *
35  * Invalidate all state variables for the terminal.  This way, everything gets
36  * redrawn.
37  */
38 void nredraw(SCRN *t);
39
40 void npartial(SCRN *t);
41 void nescape(SCRN *t);
42 void nreturn(SCRN *t);
43
44 /* void nclose(SCRN *t);
45  *
46  * Close the screen and restore TTY to initial state.
47  *
48  * if 'flg' is set, tclose doesn't mess with the signals.
49  */
50 void nclose(SCRN *t);
51
52 /* int cpos(SCRN *t,int x,int y);
53  *
54  * Set cursor position
55  */
56 int cpos(register SCRN *t, register int x, register int y);
57
58 /* int attr(SCRN *t,int a);
59  *
60  * Set attributes
61  */
62 int set_attr(SCRN *t, int c);
63
64 /* Encode character as utf8 */
65 void utf8_putc(int c);
66
67 /* void outatr(SCRN *t,int *scrn,int *attr,int x,int y,int c,int a);
68  *
69  * Output a character at the given screen cooridinate.  The cursor position
70  * after this function is executed is indeterminate.
71  */
72
73 /* Character attribute bits */
74
75 #define INVERSE          256
76 #define UNDERLINE        512
77 #define BOLD            1024
78 #define BLINK           2048
79 #define DIM             4096
80 #define AT_MASK         (INVERSE+UNDERLINE+BOLD+BLINK+DIM)
81
82 #define BG_SHIFT 13
83 #define BG_VALUE (7<<BG_SHIFT)
84 #define BG_NOT_DEFAULT (8<<BG_SHIFT)
85 #define BG_MASK (15<<BG_SHIFT)
86
87 #define BG_DEFAULT (0<<BG_SHIFT) /* default */
88 #define BG_BLACK (8<<BG_SHIFT)
89 #define BG_RED (9<<BG_SHIFT)
90 #define BG_GREEN (10<<BG_SHIFT)
91 #define BG_YELLOW (11<<BG_SHIFT)
92 #define BG_BLUE (12<<BG_SHIFT)
93 #define BG_MAGENTA (13<<BG_SHIFT)
94 #define BG_CYAN (14<<BG_SHIFT)
95 #define BG_WHITE (15<<BG_SHIFT)
96
97 #define FG_SHIFT 17
98 #define FG_VALUE (7<<FG_SHIFT)
99 #define FG_NOT_DEFAULT (8<<FG_SHIFT)
100 #define FG_MASK (15<<FG_SHIFT)
101
102 #define FG_DEFAULT (0<<FG_SHIFT)
103 #define FG_WHITE (8<<FG_SHIFT) /* default */
104 #define FG_CYAN (9<<FG_SHIFT)
105 #define FG_MAGENTA (10<<FG_SHIFT)
106 #define FG_BLUE (11<<FG_SHIFT)
107 #define FG_YELLOW (12<<FG_SHIFT)
108 #define FG_GREEN (13<<FG_SHIFT)
109 #define FG_RED (14<<FG_SHIFT)
110 #define FG_BLACK (15<<FG_SHIFT)
111
112 #define HAS_COMBINING 0x200000
113
114 void outatr(struct charmap *map,SCRN *t,int *scrn,int *attrf,int xx,int yy,int c,int a);
115 void outatr_help(SCRN *,int *,int *,int,int,int,int);
116
117 /*
118  * translate character and its attribute into something printable
119  */
120 void xlat(int *attr, unsigned char *c);
121 void xlat_utf_ctrl(int *attr, unsigned char *c);
122
123 /* int eraeol(SCRN *t,int x,int y);
124  *
125  * Erase from screen coordinate to end of line.
126  */
127 int eraeol(SCRN *t, int x, int y);
128
129 /* void nscrlup(SCRN *t,int top,int bot,int amnt);
130  *
131  * Buffered scroll request.  Request that some lines up.  'top' and 'bot'
132  * indicate which lines to scroll.  'bot' is the last line to scroll + 1.
133  * 'amnt' is distance in lines to scroll.
134  */
135 void nscrlup(SCRN *t, int top, int bot, int amnt);
136
137 /* void nscrldn(SCRN *t,int top,int bot,int amnt);
138  *
139  * Buffered scroll request.  Scroll some lines down.  'top' and 'bot'
140  * indicate which lines to scroll.  'bot' is the last line to scroll + 1.
141  * 'amnt' is distance in lines to scroll.
142  */
143 void nscrldn(SCRN *t, int top, int bot, int amnt);
144
145 /* void nscroll(SCRN *t);
146  *
147  * Execute buffered scroll requests
148  */
149 void nscroll(SCRN *t);
150
151 /* void magic(SCRN *t,int y,int *cur,int *new);
152  *
153  * Figure out and execute line shifting
154  */
155 void magic(SCRN *t, int y, int *cs, int *ca, int *s, int *a,int placex);
156
157 int clrins(SCRN *t);
158
159 int meta_color(unsigned char *s);
160
161 /* Generate a field */
162 void genfield(SCRN *t,int *scrn,int *attr,int x,int y,int ofst,unsigned char *s,int len,int atr,int width,int flg,int *fmt);
163
164 /* Column width of a string takes into account utf-8) */
165 int txtwidth(unsigned char *s,int len);
166
167 /* Generate a field: formatted */
168 void genfmt(SCRN *t, int x, int y, int ofst, const unsigned char *s, int flg);
169
170 /* Column width of formatted string */
171 int fmtlen(const unsigned char *s);
172
173 /* Offset within formatted string of particular column */
174 int fmtpos(unsigned char *s, int goal);
175
176 #endif