Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 281 lines (232 sloc) 8.402 kb
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
1 /*
2 * Internals of the Terminal structure, for those other modules
3 * which need to look inside it. It would be nice if this could be
4 * folded back into terminal.c in future, with an abstraction layer
5 * to handle everything that other modules need to know about it;
6 * but for the moment, this will do.
7 */
8
9 #ifndef PUTTY_TERMINAL_H
10 #define PUTTY_TERMINAL_H
11
12 #include "tree234.h"
13
14 struct beeptime {
15 struct beeptime *next;
16 unsigned long ticks;
17 };
18
19 typedef struct {
20 int y, x;
21 } pos;
22
341eb97 Richard's lazy-scrolling patch. This builds up scroll operations in a l...
ben authored
23 #ifdef OPTIMISE_SCROLL
24 struct scrollregion {
25 struct scrollregion *next;
26 int topline; /* Top line of scroll region. */
27 int botline; /* Bottom line of scroll region. */
28 int lines; /* Number of lines to scroll by - +ve is forwards. */
29 };
30 #endif /* OPTIMISE_SCROLL */
31
3656600 Re-engineering of terminal emulator, phase 1.
simon authored
32 typedef struct termchar termchar;
33 typedef struct termline termline;
34
35 struct termchar {
c6958df First-stage support for Unicode combining characters. The `chars'
simon authored
36 /*
37 * Any code in terminal.c which definitely needs to be changed
38 * when extra fields are added here is labelled with a comment
39 * saying FULL-TERMCHAR.
40 */
3656600 Re-engineering of terminal emulator, phase 1.
simon authored
41 unsigned long chr;
42 unsigned long attr;
c6958df First-stage support for Unicode combining characters. The `chars'
simon authored
43
44 /*
45 * The cc_next field is used to link multiple termchars
46 * together into a list, so as to fit more than one character
47 * into a character cell (Unicode combining characters).
48 *
49 * cc_next is a relative offset into the current array of
50 * termchars. I.e. to advance to the next character in a list,
51 * one does `tc += tc->next'.
52 *
53 * Zero means end of list.
54 */
55 int cc_next;
3656600 Re-engineering of terminal emulator, phase 1.
simon authored
56 };
57
58 struct termline {
59 unsigned short lattr;
c6958df First-stage support for Unicode combining characters. The `chars'
simon authored
60 int cols; /* number of real columns on the line */
61 int size; /* number of allocated termchars
62 * (cc-lists may make this > cols) */
3656600 Re-engineering of terminal emulator, phase 1.
simon authored
63 int temporary; /* TRUE if decompressed from scrollback */
c6958df First-stage support for Unicode combining characters. The `chars'
simon authored
64 int cc_free; /* offset to first cc in free list */
3656600 Re-engineering of terminal emulator, phase 1.
simon authored
65 struct termchar *chars;
66 };
67
2caf3cd Store line widths in the bidi cache, so we don't fail to re-bidi a
simon authored
68 struct bidi_cache_entry {
69 int width;
70 struct termchar *chars;
3c5a620 Cursor position, selection highlights and mouse clicks are now all
simon authored
71 int *forward, *backward; /* the permutations of line positions */
2caf3cd Store line widths in the bidi cache, so we don't fail to re-bidi a
simon authored
72 };
73
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
74 struct terminal_tag {
75
76 int compatibility_level;
77
78 tree234 *scrollback; /* lines scrolled off top of screen */
79 tree234 *screen; /* lines on primary screen */
80 tree234 *alt_screen; /* lines on alternate screen */
81 int disptop; /* distance scrolled back (0 or -ve) */
e6717a9 Add/tweak a couple of comments.
jacob authored
82 int tempsblines; /* number of lines of .scrollback that
83 can be retrieved onto the terminal
84 ("temporary scrollback") */
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
85
3656600 Re-engineering of terminal emulator, phase 1.
simon authored
86 termline **disptext; /* buffer of text on real screen */
87 int dispcursx, dispcursy; /* location of cursor on real screen */
88 int curstype; /* type of cursor on real screen */
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
89
90 #define VBELL_TIMEOUT (TICKSPERSEC/10) /* visual bell lasts 1/10 sec */
91
92 struct beeptime *beephead, *beeptail;
93 int nbeeps;
94 int beep_overloaded;
95 long lastbeep;
96
3656600 Re-engineering of terminal emulator, phase 1.
simon authored
97 #define TTYPE termchar
3d88e64 Introduced wrapper macros snew(), snewn() and sresize() for the
simon authored
98 #define TSIZE (sizeof(TTYPE))
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
99
341eb97 Richard's lazy-scrolling patch. This builds up scroll operations in a l...
ben authored
100 #ifdef OPTIMISE_SCROLL
101 struct scrollregion *scrollhead, *scrolltail;
102 #endif /* OPTIMISE_SCROLL */
103
3656600 Re-engineering of terminal emulator, phase 1.
simon authored
104 int default_attr, curr_attr, save_attr;
105 termchar basic_erase_char, erase_char;
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
106
107 bufchain inbuf; /* terminal input buffer */
108 pos curs; /* cursor */
109 pos savecurs; /* saved cursor position */
110 int marg_t, marg_b; /* scroll margins */
111 int dec_om; /* DEC origin mode flag */
112 int wrap, wrapnext; /* wrap flags */
113 int insert; /* insert-mode flag */
114 int cset; /* 0 or 1: which char set */
115 int save_cset, save_csattr; /* saved with cursor position */
116 int save_utf, save_wnext; /* saved with cursor position */
117 int rvideo; /* global reverse video flag */
118 unsigned long rvbell_startpoint; /* for ESC[?5hESC[?5l vbell */
119 int cursor_on; /* cursor enabled flag */
120 int reset_132; /* Flag ESC c resets to 80 cols */
121 int use_bce; /* Use Background coloured erase */
39934de New timing infrastructure. There's a new function schedule_timer()
simon authored
122 int cblinker; /* When blinking is the cursor on ? */
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
123 int tblinker; /* When the blinking text is on */
124 int blink_is_real; /* Actually blink blinking text */
125 int term_echoing; /* Does terminal want local echo? */
126 int term_editing; /* Does terminal want local edit? */
127 int sco_acs, save_sco_acs; /* CSI 10,11,12m -> OEM charset */
128 int vt52_bold; /* Force bold on non-bold colours */
129 int utf; /* Are we in toggleable UTF-8 mode? */
130 int utf_state; /* Is there a pending UTF-8 character */
131 int utf_char; /* and what is it so far. */
132 int utf_size; /* The size of the UTF character. */
133 int printing, only_printing; /* Are we doing ANSI printing? */
134 int print_state; /* state of print-end-sequence scan */
135 bufchain printer_buf; /* buffered data for printer */
136 printer_job *print_job;
137
fc9748e Er, ahem. Other half of r6788. :-/
simon authored
138 /* ESC 7 saved state for the alternate screen */
139 pos alt_savecurs;
140 int alt_save_attr;
141 int alt_save_cset, alt_save_csattr;
142 int alt_save_utf, alt_save_wnext;
143 int alt_save_sco_acs;
144
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
145 int rows, cols, savelines;
146 int has_focus;
147 int in_vbell;
39934de New timing infrastructure. There's a new function schedule_timer()
simon authored
148 long vbell_end;
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
149 int app_cursor_keys, app_keypad_keys, vt52_mode;
150 int repeat_off, cr_lf_return;
151 int seen_disp_event;
152 int big_cursor;
153
0fab031 Cosmetic: clarify that term->xterm_mouse is not boolean, etc.
jacob authored
154 int xterm_mouse; /* send mouse messages to host */
b9d7bca Line discipline module now uses dynamically allocated data. Also
simon authored
155 int mouse_is_down; /* used while tracking mouse buttons */
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
156
3656600 Re-engineering of terminal emulator, phase 1.
simon authored
157 int cset_attr[2];
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
158
159 /*
160 * Saved settings on the alternate screen.
161 */
162 int alt_x, alt_y, alt_om, alt_wrap, alt_wnext, alt_ins;
163 int alt_cset, alt_sco_acs, alt_utf;
164 int alt_t, alt_b;
165 int alt_which;
876e5d5 Richard B's patch to push erased text into the scrollback on ESC[2J
simon authored
166 int alt_sblines; /* # of lines on alternate screen that should be used for scrollback. */
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
167
168 #define ARGS_MAX 32 /* max # of esc sequence arguments */
169 #define ARG_DEFAULT 0 /* if an arg isn't specified */
170 #define def(a,d) ( (a) == ARG_DEFAULT ? (d) : (a) )
171 int esc_args[ARGS_MAX];
172 int esc_nargs;
173 int esc_query;
174 #define ANSI(x,y) ((x)+((y)<<8))
175 #define ANSI_QUE(x) ANSI(x,TRUE)
176
177 #define OSC_STR_MAX 2048
178 int osc_strlen;
179 char osc_string[OSC_STR_MAX + 1];
180 int osc_w;
181
182 char id_string[1024];
183
184 unsigned char *tabs;
185
186 enum {
187 TOPLEVEL,
188 SEEN_ESC,
189 SEEN_CSI,
190 SEEN_OSC,
191 SEEN_OSC_W,
192
193 DO_CTRLS,
194
195 SEEN_OSC_P,
196 OSC_STRING, OSC_MAYBE_ST,
197 VT52_ESC,
198 VT52_Y1,
199 VT52_Y2,
200 VT52_FG,
201 VT52_BG
202 } termstate;
203
204 enum {
205 NO_SELECTION, ABOUT_TO, DRAGGING, SELECTED
206 } selstate;
207 enum {
208 LEXICOGRAPHIC, RECTANGULAR
209 } seltype;
210 enum {
211 SM_CHAR, SM_WORD, SM_LINE
212 } selmode;
213 pos selstart, selend, selanchor;
214
215 short wordness[256];
216
2647b10 Improve support for non-colour displays by adding a mask of attributes t...
ben authored
217 /* Mask of attributes to pay attention to when painting. */
3656600 Re-engineering of terminal emulator, phase 1.
simon authored
218 int attr_mask;
2647b10 Improve support for non-colour displays by adding a mask of attributes t...
ben authored
219
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
220 wchar_t *paste_buffer;
221 int paste_len, paste_pos, paste_hold;
222 long last_paste;
5147029 Major destabilisation, phase 2. This time it's the backends' turn:
simon authored
223
224 void (*resize_fn)(void *, int, int);
225 void *resize_ctx;
b9d7bca Line discipline module now uses dynamically allocated data. Also
simon authored
226
227 void *ldisc;
a832773 Yet more global-removal. The static variables in logging.c are now
simon authored
228
229 void *frontend;
230
231 void *logctx;
f6b1422 Add a "Config *" argument to term_init(), and use that instead of the gl...
ben authored
232
21d2b24 Deglobalise the Unicode module. Despite all my grand plans, I've
simon authored
233 struct unicode_data *ucsdata;
234
6473492 term->cfg is now a full copy of the Config structure, not a pointer;
simon authored
235 /*
236 * We maintain a full _copy_ of a Config structure here, not
237 * merely a pointer to it. That way, when we're passed a new
238 * one for reconfiguration, we can check the differences and
239 * adjust the _current_ setting of (e.g.) auto wrap mode rather
240 * than only the default.
241 */
242 Config cfg;
74aca06 pterm now uses the new uxsel module, so it's one step closer to
simon authored
243
244 /*
245 * from_backend calls term_out, but it can also be called from
246 * the ldisc if the ldisc is called _within_ term_out. So we
247 * have to guard against re-entrancy - if from_backend is
248 * called recursively like this, it will simply add data to the
249 * end of the buffer term_out is in the process of working
250 * through.
251 */
252 int in_term_out;
f0fccd5 At last! After much delay, much faffing back and forth, and much
simon authored
253
254 /*
39934de New timing infrastructure. There's a new function schedule_timer()
simon authored
255 * We schedule a window update shortly after receiving terminal
256 * data. This tracks whether one is currently pending.
257 */
258 int window_update_pending;
259 long next_update;
260
261 /*
262 * Track pending blinks and tblinks.
263 */
264 int tblink_pending, cblink_pending;
265 long next_tblink, next_cblink;
266
267 /*
f0fccd5 At last! After much delay, much faffing back and forth, and much
simon authored
268 * These are buffers used by the bidi and Arabic shaping code.
269 */
3656600 Re-engineering of terminal emulator, phase 1.
simon authored
270 termchar *ltemp;
c6958df First-stage support for Unicode combining characters. The `chars'
simon authored
271 int ltemp_size;
f0fccd5 At last! After much delay, much faffing back and forth, and much
simon authored
272 bidi_char *wcFrom, *wcTo;
c6958df First-stage support for Unicode combining characters. The `chars'
simon authored
273 int wcFromTo_size;
2caf3cd Store line widths in the bidi cache, so we don't fail to re-bidi a
simon authored
274 struct bidi_cache_entry *pre_bidi_cache, *post_bidi_cache;
f0fccd5 At last! After much delay, much faffing back and forth, and much
simon authored
275 int bidi_cache_size;
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
276 };
277
21d2b24 Deglobalise the Unicode module. Despite all my grand plans, I've
simon authored
278 #define in_utf(term) ((term)->utf || (term)->ucsdata->line_codepage==CP_UTF8)
2df34b4 Oops. Forgot to check in terminal.h from yesterday's work. There's
simon authored
279
280 #endif
Something went wrong with that request. Please try again.