X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/876e5d5e627d117190851e41c0fb3d2d08cac70d..7bd029472d96162f71f61df67baedc00fc0bb1a8:/terminal.h diff --git a/terminal.h b/terminal.h index d969ecc9..0050c0e2 100644 --- a/terminal.h +++ b/terminal.h @@ -37,6 +37,8 @@ struct terminal_tag { 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) */ @@ -51,7 +53,8 @@ struct terminal_tag { 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) @@ -195,6 +198,16 @@ struct terminal_tag { * 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; }; #define in_utf(term) ((term)->utf || (term)->ucsdata->line_codepage==CP_UTF8)