int y, x;
} pos;
+#ifdef OPTIMISE_SCROLL
+struct scrollregion {
+ struct scrollregion *next;
+ int topline; /* Top line of scroll region. */
+ int botline; /* Bottom line of scroll region. */
+ int lines; /* Number of lines to scroll by - +ve is forwards. */
+};
+#endif /* OPTIMISE_SCROLL */
+
struct terminal_tag {
int compatibility_level;
tree234 *screen; /* lines on primary screen */
tree234 *alt_screen; /* lines on alternate screen */
int disptop; /* distance scrolled back (0 or -ve) */
+ int tempsblines; /* number of lines in temporary
+ scrollback */
unsigned long *cpos; /* cursor position (convenience) */
int beep_overloaded;
long lastbeep;
-#define TSIZE (sizeof(unsigned long))
+#define TTYPE unsigned long
+#define TSIZE (sizeof(TTYPE))
#define fix_cpos do { \
term->cpos = lineptr(term->curs.y) + term->curs.x; \
} while(0)
- unsigned long curr_attr, save_attr;
+#ifdef OPTIMISE_SCROLL
+ struct scrollregion *scrollhead, *scrolltail;
+#endif /* OPTIMISE_SCROLL */
+
+ unsigned long default_attr, curr_attr, save_attr;
unsigned long erase_char;
bufchain inbuf; /* terminal input buffer */
long last_tblink;
int xterm_mouse; /* send mouse messages to app */
+ int mouse_is_down; /* used while tracking mouse buttons */
unsigned long cset_attr[2];
int alt_cset, alt_sco_acs, alt_utf;
int alt_t, alt_b;
int alt_which;
+ int alt_sblines; /* # of lines on alternate screen that should be used for scrollback. */
#define ARGS_MAX 32 /* max # of esc sequence arguments */
#define ARG_DEFAULT 0 /* if an arg isn't specified */
short wordness[256];
+ /* Mask of attributes to pay attention to when painting. */
+ unsigned long attr_mask;
+
wchar_t *paste_buffer;
int paste_len, paste_pos, paste_hold;
long last_paste;
void (*resize_fn)(void *, int, int);
void *resize_ctx;
+
+ void *ldisc;
+
+ void *frontend;
+
+ void *logctx;
+
+ struct unicode_data *ucsdata;
+
+ /*
+ * We maintain a full _copy_ of a Config structure here, not
+ * merely a pointer to it. That way, when we're passed a new
+ * one for reconfiguration, we can check the differences and
+ * adjust the _current_ setting of (e.g.) auto wrap mode rather
+ * than only the default.
+ */
+ Config cfg;
+
+ /*
+ * from_backend calls term_out, but it can also be called from
+ * the ldisc if the ldisc is called _within_ term_out. So we
+ * have to guard against re-entrancy - if from_backend is
+ * called recursively like this, it will simply add data to the
+ * end of the buffer term_out is in the process of working
+ * through.
+ */
+ int in_term_out;
+
+ /*
+ * These are buffers used by the bidi and Arabic shaping code.
+ */
+ unsigned long *ltemp;
+ bidi_char *wcFrom, *wcTo;
+ unsigned long **pre_bidi_cache, **post_bidi_cache;
+ int bidi_cache_size;
};
-#define in_utf(term) ((term)->utf || line_codepage==CP_UTF8)
+#define in_utf(term) ((term)->utf || (term)->ucsdata->line_codepage==CP_UTF8)
#endif