~mdw
/
sgt
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add the -xrm command-line option, to allow specification of an
[sgt/putty]
/
terminal.c
diff --git
a/terminal.c
b/terminal.c
index
a224afd
..
b0ad356
100644
(file)
--- a/
terminal.c
+++ b/
terminal.c
@@
-1,5
+1,3
@@
-#include <windows.h>
-
#include <stdio.h>
#include <stdlib.h>
#include <ctype.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 */
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;
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.
*/
* effective visual bell, so that ESC[?5hESC[?5l will
* always be an actually _visible_ visual bell.
*/
- ticks = G
etTickCount
();
+ ticks = G
ETTICKCOUNT
();
/* turn off a previous vbell to avoid inconsistencies */
if (ticks - vbell_startpoint >= VBELL_TIMEOUT)
in_vbell = FALSE;
/* 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;
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);
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;
unget = -1;
+ chars = NULL; /* placate compiler warnings */
while (nchars > 0 || bufchain_size(&inbuf) > 0) {
if (unget == -1) {
if (nchars == 0) {
while (nchars > 0 || bufchain_size(&inbuf) > 0) {
if (unget == -1) {
if (nchars == 0) {
@@
-1110,7
+1112,6
@@
void term_out(void)
* buffer.
*/
if (printing) {
* buffer.
*/
if (printing) {
- char cc = c;
bufchain_add(&printer_buf, &c, 1);
/*
bufchain_add(&printer_buf, &c, 1);
/*
@@
-1132,7
+1133,6
@@
void term_out(void)
else
print_state = 0;
if (print_state == 4) {
else
print_state = 0;
if (print_state == 4) {
- printing = only_printing = FALSE;
term_print_finish();
}
continue;
term_print_finish();
}
continue;
@@
-1317,7
+1317,7
@@
void term_out(void)
} else
*d++ = *s;
}
} else
*d++ = *s;
}
- lpage_send(
CP_ACP
, abuf, d - abuf, 0);
+ lpage_send(
DEFAULT_CODEPAGE
, abuf, d - abuf, 0);
}
break;
case '\007':
}
break;
case '\007':
@@
-1325,7
+1325,7
@@
void term_out(void)
struct beeptime *newbeep;
unsigned long ticks;
struct beeptime *newbeep;
unsigned long ticks;
- ticks = G
etTickCount
();
+ ticks = G
ETTICKCOUNT
();
if (!beep_overloaded) {
newbeep = smalloc(sizeof(struct beeptime));
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) {
* 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();
if (cfg.beep == BELL_VISUAL) {
in_vbell = TRUE;
vbell_startpoint = ticks;
term_update();
- }
+ } else
+ beep(cfg.beep);
}
disptop = 0;
}
}
disptop = 0;
}
@@
-1907,7
+1907,6
@@
void term_out(void)
case ANSI_QUE('i'):
compatibility(VT100);
{
case ANSI_QUE('i'):
compatibility(VT100);
{
- int i;
if (esc_nargs != 1) break;
if (esc_args[0] == 5 && *cfg.printer) {
printing = TRUE;
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) {
print_state = 0;
term_print_setup();
} else if (esc_args[0] == 4 && printing) {
- printing = FALSE;
- only_printing = FALSE;
term_print_finish();
}
}
term_print_finish();
}
}
@@
-2800,7
+2797,7
@@
static void do_paint(Context ctx, int may_optimise)
* Check the visual bell state.
*/
if (in_vbell) {
* Check the visual bell state.
*/
if (in_vbell) {
- ticks = G
etTickCount
();
+ ticks = G
ETTICKCOUNT
();
if (ticks - vbell_startpoint >= VBELL_TIMEOUT)
in_vbell = FALSE;
}
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;
static long last_tblink = 0;
long now, blink_diff;
- now = G
etTickCount
();
+ now = G
ETTICKCOUNT
();
blink_diff = now - last_tblink;
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;
}
last_tblink = now;
tblinker = !tblinker;
}
@@
-3012,8
+3009,8
@@
void term_blink(int flg)
blink_diff = now - last_blink;
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;
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;
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];
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;
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) {
}
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;
}
top.y++;
top.x = rect ? old_top_x : 0;
}
+#if SELECTION_NUL_TERMINATED
wblen++;
*wbptr++ = 0;
wblen++;
*wbptr++ = 0;
+#endif
write_clip(workbuf, wblen, FALSE); /* transfer to clipboard */
if (buflen > 0) /* indicates we allocated this buffer */
sfree(workbuf);
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
} 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();
}
term_update();
@@
-3704,6
+3705,11
@@
void term_nopaste()
paste_len = 0;
}
paste_len = 0;
}
+int term_paste_pending(void)
+{
+ return paste_len != 0;
+}
+
void term_paste()
{
static long last_paste = 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) {
/* Don't wait forever to paste */
if (paste_hold) {
- now = G
etTickCount
();
+ now = G
ETTICKCOUNT
();
paste_diff = now - last_paste;
if (paste_diff >= 0 && paste_diff < 450)
return;
paste_diff = now - last_paste;
if (paste_diff >= 0 && paste_diff < 450)
return;