Oops - check in leftovers from yesterday's development. That's what
[u/mdw/putty] / terminal.c
index a224afd..b0ad356 100644 (file)
@@ -1,5 +1,3 @@
-#include <windows.h>
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
@@ -59,7 +57,7 @@ static unsigned long *disptext;              /* buffer of text on real screen */
 static unsigned long *dispcurs;               /* location of cursor on real screen */
 static unsigned long curstype;        /* type of cursor on real screen */
 
-#define VBELL_TIMEOUT 100             /* millisecond len of visual bell */
+#define VBELL_TIMEOUT (TICKSPERSEC/10) /* visual bell lasts 1/10 sec */
 
 struct beeptime {
     struct beeptime *next;
@@ -918,7 +916,7 @@ static void toggle_mode(int mode, int query, int state)
             * effective visual bell, so that ESC[?5hESC[?5l will
             * always be an actually _visible_ visual bell.
             */
-           ticks = GetTickCount();
+           ticks = GETTICKCOUNT();
            /* turn off a previous vbell to avoid inconsistencies */
            if (ticks - vbell_startpoint >= VBELL_TIMEOUT)
                in_vbell = FALSE;
@@ -1044,6 +1042,9 @@ static void term_print_finish(void)
     int len, size;
     char c;
 
+    if (!printing && !only_printing)
+       return;                        /* we need do nothing */
+
     term_print_flush();
     while ((size = bufchain_size(&printer_buf)) > 0) {
        bufchain_prefix(&printer_buf, &data, &len);
@@ -1074,6 +1075,7 @@ void term_out(void)
 
     unget = -1;
 
+    chars = NULL;                     /* placate compiler warnings */
     while (nchars > 0 || bufchain_size(&inbuf) > 0) {
        if (unget == -1) {
            if (nchars == 0) {
@@ -1110,7 +1112,6 @@ void term_out(void)
         * buffer.
         */
        if (printing) {
-           char cc = c;
            bufchain_add(&printer_buf, &c, 1);
 
            /*
@@ -1132,7 +1133,6 @@ void term_out(void)
                else
                    print_state = 0;
                if (print_state == 4) {
-                   printing = only_printing = FALSE;
                    term_print_finish();
                }
                continue;
@@ -1317,7 +1317,7 @@ void term_out(void)
                        } else
                            *d++ = *s;
                    }
-                   lpage_send(CP_ACP, abuf, d - abuf, 0);
+                   lpage_send(DEFAULT_CODEPAGE, abuf, d - abuf, 0);
                }
                break;
              case '\007':
@@ -1325,7 +1325,7 @@ void term_out(void)
                    struct beeptime *newbeep;
                    unsigned long ticks;
 
-                   ticks = GetTickCount();
+                   ticks = GETTICKCOUNT();
 
                    if (!beep_overloaded) {
                        newbeep = smalloc(sizeof(struct beeptime));
@@ -1376,12 +1376,12 @@ void term_out(void)
                     * Perform an actual beep if we're not overloaded.
                     */
                    if (!cfg.bellovl || !beep_overloaded) {
-                       beep(cfg.beep);
                        if (cfg.beep == BELL_VISUAL) {
                            in_vbell = TRUE;
                            vbell_startpoint = ticks;
                            term_update();
-                       }
+                       } else
+                           beep(cfg.beep);
                    }
                    disptop = 0;
                }
@@ -1907,7 +1907,6 @@ void term_out(void)
                      case ANSI_QUE('i'):
                        compatibility(VT100);
                        {
-                           int i;
                            if (esc_nargs != 1) break;
                            if (esc_args[0] == 5 && *cfg.printer) {
                                printing = TRUE;
@@ -1915,8 +1914,6 @@ void term_out(void)
                                print_state = 0;
                                term_print_setup();
                            } else if (esc_args[0] == 4 && printing) {
-                               printing = FALSE;
-                               only_printing = FALSE;
                                term_print_finish();
                            }
                        }
@@ -2800,7 +2797,7 @@ static void do_paint(Context ctx, int may_optimise)
      * Check the visual bell state.
      */
     if (in_vbell) {
-       ticks = GetTickCount();
+       ticks = GETTICKCOUNT();
        if (ticks - vbell_startpoint >= VBELL_TIMEOUT)
            in_vbell = FALSE; 
    }
@@ -2995,11 +2992,11 @@ void term_blink(int flg)
     static long last_tblink = 0;
     long now, blink_diff;
 
-    now = GetTickCount();
+    now = GETTICKCOUNT();
     blink_diff = now - last_tblink;
 
-    /* Make sure the text blinks no more than 2Hz */
-    if (blink_diff < 0 || blink_diff > 450) {
+    /* Make sure the text blinks no more than 2Hz; we'll use 0.45 s period. */
+    if (blink_diff < 0 || blink_diff > (TICKSPERSEC * 9 / 20)) {
        last_tblink = now;
        tblinker = !tblinker;
     }
@@ -3012,8 +3009,8 @@ void term_blink(int flg)
 
     blink_diff = now - last_blink;
 
-    /* Make sure the cursor blinks no faster than GetCaretBlinkTime() */
-    if (blink_diff >= 0 && blink_diff < (long) GetCaretBlinkTime())
+    /* Make sure the cursor blinks no faster than system blink rate */
+    if (blink_diff >= 0 && blink_diff < (long) CURSORBLINK)
        return;
 
     last_blink = now;
@@ -3180,16 +3177,14 @@ static void clipme(pos top, pos bottom, int rect)
                    unsigned char buf[4];
                    WCHAR wbuf[4];
                    int rv;
-                   if (IsDBCSLeadByteEx(font_codepage, (BYTE) c)) {
+                   if (is_dbcs_leadbyte(font_codepage, (BYTE) c)) {
                        buf[0] = c;
                        buf[1] = (unsigned char) ldata[top.x + 1];
-                       rv = MultiByteToWideChar(font_codepage,
-                                                0, buf, 2, wbuf, 4);
+                       rv = mb_to_wc(font_codepage, 0, buf, 2, wbuf, 4);
                        top.x++;
                    } else {
                        buf[0] = c;
-                       rv = MultiByteToWideChar(font_codepage,
-                                                0, buf, 1, wbuf, 4);
+                       rv = mb_to_wc(font_codepage, 0, buf, 1, wbuf, 4);
                    }
 
                    if (rv > 0) {
@@ -3223,8 +3218,10 @@ static void clipme(pos top, pos bottom, int rect)
        top.y++;
        top.x = rect ? old_top_x : 0;
     }
+#if SELECTION_NUL_TERMINATED
     wblen++;
     *wbptr++ = 0;
+#endif
     write_clip(workbuf, wblen, FALSE); /* transfer to clipboard */
     if (buflen > 0)                   /* indicates we allocated this buffer */
        sfree(workbuf);
@@ -3688,8 +3685,12 @@ void term_mouse(Mouse_Button b, Mouse_Action a, int x, int y,
        } else
            selstate = NO_SELECTION;
     } else if (b == MBT_PASTE
-              && (a == MA_CLICK || a == MA_2CLK || a == MA_3CLK)) {
-        term_do_paste();
+              && (a == MA_CLICK
+#if MULTICLICK_ONLY_EVENT
+                  || a == MA_2CLK || a == MA_3CLK
+#endif
+                  )) {
+       request_paste();
     }
 
     term_update();
@@ -3704,6 +3705,11 @@ void term_nopaste()
     paste_len = 0;
 }
 
+int term_paste_pending(void)
+{
+    return paste_len != 0;
+}
+
 void term_paste()
 {
     static long last_paste = 0;
@@ -3714,7 +3720,7 @@ void term_paste()
 
     /* Don't wait forever to paste */
     if (paste_hold) {
-       now = GetTickCount();
+       now = GETTICKCOUNT();
        paste_diff = now - last_paste;
        if (paste_diff >= 0 && paste_diff < 450)
            return;