static int insert; /* insert-mode flag */
static int cset; /* 0 or 1: which char set */
static int save_cset, save_csattr; /* saved with cursor position */
-static int save_utf; /* saved with cursor position */
+static int save_utf, save_wnext; /* saved with cursor position */
static int rvideo; /* global reverse video flag */
static unsigned long rvbell_startpoint;/* for ESC[?5hESC[?5l vbell */
static int cursor_on; /* cursor enabled flag */
static void swap_screen(int);
static void update_sbar(void);
static void deselect(void);
-/* log session to file stuff ... */
-static FILE *lgfp = NULL;
-static void logtraffic(unsigned char c, int logmode);
-static void xlatlognam(char *d, char *s, char *hostname, struct tm *tm);
/*
* Resize a line to make it `cols' columns wide.
save_attr = curr_attr;
save_cset = cset;
save_utf = utf;
+ save_wnext = wrapnext;
save_csattr = cset_attr[cset];
save_sco_acs = sco_acs;
} else {
curr_attr = save_attr;
cset = save_cset;
utf = save_utf;
+ wrapnext = save_wnext;
+ /*
+ * wrapnext might reset to False if the x position is no
+ * longer at the rightmost edge.
+ */
+ if (wrapnext && curs.x < cols-1)
+ wrapnext = FALSE;
cset_attr[cset] = save_csattr;
sco_acs = save_sco_acs;
fix_cpos;
break;
case 8:
if (esc_nargs >= 3) {
- request_resize(def(esc_args[1], cfg.width),
- def(esc_args[2], cfg.height));
+ request_resize(def(esc_args[2], cfg.width),
+ def(esc_args[1], cfg.height));
}
break;
case 9:
break;
case 18:
len = sprintf(buf, "\033[8;%d;%dt",
- cols, rows);
+ rows, cols);
ldisc_send(buf, len, 0);
break;
case 19:
*/
int from_backend(int is_stderr, char *data, int len)
{
+ assert(len > 0);
+
bufchain_add(&inbuf, data, len);
/*
*/
return 0;
}
-
-/*
- * Log session traffic.
- */
-void logtraffic(unsigned char c, int logmode)
-{
- if (cfg.logtype > 0) {
- if (cfg.logtype == logmode) {
- /* deferred open file from pgm start? */
- if (!lgfp)
- logfopen();
- if (lgfp)
- fputc(c, lgfp);
- }
- }
-}
-
-void settimstr(char *ta, int no_sec);
-char *subslfcode(char *dest, char *src, char *dstrt);
-char *stpncpy(char *dst, const char *src, size_t maxlen);
-char timdatbuf[20];
-char currlogfilename[FILENAME_MAX];
-
-/* open log file append/overwrite mode */
-void logfopen(void)
-{
- char buf[256];
- time_t t;
- struct tm tm;
- char writemod[4];
-
- if (!cfg.logtype)
- return;
- sprintf(writemod, "wb"); /* default to rewrite */
-
- time(&t);
- tm = *localtime(&t);
-
- /* substitute special codes in file name */
- xlatlognam(currlogfilename,cfg.logfilename,cfg.host, &tm);
-
- lgfp = fopen(currlogfilename, "r"); /* file already present? */
- if (lgfp) {
- int i;
- fclose(lgfp);
- i = askappend(currlogfilename);
- if (i == 1)
- writemod[0] = 'a'; /* set append mode */
- else if (i == 0) { /* cancelled */
- lgfp = NULL;
- cfg.logtype = 0; /* disable logging */
- return;
- }
- }
-
- lgfp = fopen(currlogfilename, writemod);
- if (lgfp) { /* enter into event log */
- sprintf(buf, "%s session log (%s mode) to file : ",
- (writemod[0] == 'a') ? "Appending" : "Writing new",
- (cfg.logtype == LGTYP_ASCII ? "ASCII" :
- cfg.logtype == LGTYP_DEBUG ? "raw" : "<ukwn>"));
- /* Make sure we do not exceed the output buffer size */
- strncat(buf, currlogfilename, 128);
- buf[strlen(buf)] = '\0';
- logevent(buf);
-
- /* --- write header line into log file */
- fputs("=~=~=~=~=~=~=~=~=~=~=~= PuTTY log ", lgfp);
- strftime(buf, 24, "%Y.%m.%d %H:%M:%S", &tm);
- fputs(buf, lgfp);
- fputs(" =~=~=~=~=~=~=~=~=~=~=~=\r\n", lgfp);
- }
-}
-
-void logfclose(void)
-{
- if (lgfp) {
- fclose(lgfp);
- lgfp = NULL;
- }
-}
-
-/*
- * translate format codes into time/date strings
- * and insert them into log file name
- *
- * "&Y":YYYY "&m":MM "&d":DD "&T":hhmm "&h":<hostname> "&&":&
- */
-static void xlatlognam(char *d, char *s, char *hostname, struct tm *tm) {
- char buf[10], *bufp;
- int size;
- char *ds = d; /* save start pos. */
- int len = FILENAME_MAX-1;
-
- while (*s) {
- /* Let (bufp, len) be the string to append. */
- bufp = buf; /* don't usually override this */
- if (*s == '&') {
- char c;
- s++;
- if (*s) switch (c = *s++, tolower(c)) {
- case 'y':
- size = strftime(buf, sizeof(buf), "%Y", tm);
- break;
- case 'm':
- size = strftime(buf, sizeof(buf), "%m", tm);
- break;
- case 'd':
- size = strftime(buf, sizeof(buf), "%d", tm);
- break;
- case 't':
- size = strftime(buf, sizeof(buf), "%H%M%S", tm);
- break;
- case 'h':
- bufp = hostname;
- size = strlen(bufp);
- break;
- default:
- buf[0] = '&';
- size = 1;
- if (c != '&')
- buf[size++] = c;
- }
- } else {
- buf[0] = *s++;
- size = 1;
- }
- if (size > len)
- size = len;
- memcpy(d, bufp, size);
- d += size;
- len -= size;
- }
- *d = '\0';
-}