joe-3.1jupp31.tgz (die zweite Klappeā€¦)
[alioth/jupp.git] / scrn.h
1 /* $MirOS: contrib/code/jupp/scrn.h,v 1.5 2017/07/09 01:03:54 tg Exp $ */
2 /*
3  *      Device independant tty interface for JOE
4  *      Copyright
5  *              (C) 1992 Joseph H. Allen
6  *
7  *      This file is part of JOE (Joe's Own Editor)
8  */
9 #ifndef _JOE_SCRN_H
10 #define _JOE_SCRN_H 1
11
12 #include "config.h"
13 #include "types.h"
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 PARAMS((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 PARAMS((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 PARAMS((SCRN *t));
39
40 void npartial PARAMS((SCRN *t));
41 void nescape PARAMS((SCRN *t));
42 void nreturn PARAMS((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 PARAMS((SCRN *t));
51
52 /* int cpos(SCRN *t,int x,int y);
53  *
54  * Set cursor position
55  */
56 int cpos PARAMS((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 PARAMS((SCRN *t, int c));
63
64 /* Encode character as utf8 */
65 void utf8_putc PARAMS((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 #ifdef __MSDOS__
76
77 #define INVERSE 1
78 #define UNDERLINE 2
79 #define BOLD 4
80 #define BLINK 8
81 #define DIM 16
82 extern unsigned atab[];
83
84 #define outatr(t,scrn,attr,x,y,c,a) do { \
85         (t); \
86         (x); \
87         (y); \
88         *(scrn) = ((unsigned)(c) | atab[a]); \
89 } while(0)
90
91 #else
92
93 #define INVERSE          256
94 #define UNDERLINE        512
95 #define BOLD            1024
96 #define BLINK           2048
97 #define DIM             4096
98 #define AT_MASK         (INVERSE+UNDERLINE+BOLD+BLINK+DIM)
99
100 #define BG_SHIFT 13
101 #define BG_VALUE (7<<BG_SHIFT)
102 #define BG_NOT_DEFAULT (8<<BG_SHIFT)
103 #define BG_MASK (15<<BG_SHIFT)
104
105 #define BG_DEFAULT (0<<BG_SHIFT) /* default */
106 #define BG_BLACK (8<<BG_SHIFT)
107 #define BG_RED (9<<BG_SHIFT)
108 #define BG_GREEN (10<<BG_SHIFT)
109 #define BG_YELLOW (11<<BG_SHIFT)
110 #define BG_BLUE (12<<BG_SHIFT)
111 #define BG_MAGENTA (13<<BG_SHIFT)
112 #define BG_CYAN (14<<BG_SHIFT)
113 #define BG_WHITE (15<<BG_SHIFT)
114
115 #define FG_SHIFT 17
116 #define FG_VALUE (7<<FG_SHIFT)
117 #define FG_NOT_DEFAULT (8<<FG_SHIFT)
118 #define FG_MASK (15<<FG_SHIFT)
119
120 #define FG_DEFAULT (0<<FG_SHIFT)
121 #define FG_WHITE (8<<FG_SHIFT) /* default */
122 #define FG_CYAN (9<<FG_SHIFT)
123 #define FG_MAGENTA (10<<FG_SHIFT)
124 #define FG_BLUE (11<<FG_SHIFT)
125 #define FG_YELLOW (12<<FG_SHIFT)
126 #define FG_GREEN (13<<FG_SHIFT)
127 #define FG_RED (14<<FG_SHIFT)
128 #define FG_BLACK (15<<FG_SHIFT)
129
130 #define HAS_COMBINING 0x200000
131
132 void outatr PARAMS((struct charmap *map,SCRN *t,int *scrn,int *attrf,int xx,int yy,int c,int a));
133
134 #endif
135
136 /*
137  * translate character and its attribute into something printable
138  */
139 void xlat PARAMS((int *attr, unsigned char *c));
140 void xlat_utf_ctrl PARAMS((int *attr, unsigned char *c));
141
142 /* int eraeol(SCRN *t,int x,int y);
143  *
144  * Erase from screen coordinate to end of line.
145  */
146 int eraeol PARAMS((SCRN *t, int x, int y));
147
148 /* void nscrlup(SCRN *t,int top,int bot,int amnt);
149  *
150  * Buffered scroll request.  Request that some lines up.  'top' and 'bot'
151  * indicate which lines to scroll.  'bot' is the last line to scroll + 1.
152  * 'amnt' is distance in lines to scroll.
153  */
154 void nscrlup PARAMS((SCRN *t, int top, int bot, int amnt));
155
156 /* void nscrldn(SCRN *t,int top,int bot,int amnt);
157  *
158  * Buffered scroll request.  Scroll some lines down.  'top' and 'bot'
159  * indicate which lines to scroll.  'bot' is the last line to scroll + 1.
160  * 'amnt' is distance in lines to scroll.
161  */
162 void nscrldn PARAMS((SCRN *t, int top, int bot, int amnt));
163
164 /* void nscroll(SCRN *t);
165  *
166  * Execute buffered scroll requests
167  */
168 void nscroll PARAMS((SCRN *t));
169
170 /* void magic(SCRN *t,int y,int *cur,int *new);
171  *
172  * Figure out and execute line shifting
173  */
174 void magic PARAMS((SCRN *t, int y, int *cs, int *ca, int *s, int *a,int placex));
175
176 int clrins PARAMS((SCRN *t));
177
178 int meta_color PARAMS((unsigned char *s));
179
180 /* Generate a field */
181 void genfield PARAMS((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));
182
183 /* Column width of a string takes into account utf-8) */
184 int txtwidth PARAMS((unsigned char *s,int len));
185
186 /* Generate a field: formatted */
187 void genfmt PARAMS((SCRN *t, int x, int y, int ofst, const unsigned char *s, int flg));
188
189 /* Column width of formatted string */
190 int fmtlen PARAMS((const unsigned char *s));
191
192 /* Offset within formatted string of particular column */
193 int fmtpos PARAMS((unsigned char *s, int goal));
194
195 #endif