diff options
author | Sadrul Habib Chowdhury <sadrul@users.sourceforge.net> | 2010-03-05 03:04:32 -0500 |
---|---|---|
committer | Sadrul Habib Chowdhury <sadrul@users.sourceforge.net> | 2010-03-05 03:04:32 -0500 |
commit | 12a65d46a32b620914514f896fe51beb01507a52 (patch) | |
tree | e26c75f458b47d6b1375233f9cde7b6749f25e8b | |
parent | 9222a13ff3f7214f71a0c2821eff5a41efa0e08b (diff) | |
download | screen-12a65d46a32b620914514f896fe51beb01507a52.tar.gz |
Fix screen refresh issues.
Some fix in pointer arithmetic seems to have fixed the screen
refresh issues. Also, remove some comments.
-rw-r--r-- | src/ansi.c | 27 | ||||
-rw-r--r-- | src/encoding.c | 22 | ||||
-rw-r--r-- | src/resize.c | 4 |
3 files changed, 15 insertions, 38 deletions
@@ -381,14 +381,7 @@ register int len; { c = FromUtf8(c, &curr->w_decodestate); if (c == -1) - { -#if 0 - FILE *f = fopen("/tmp/debug/utf-8", "a"); - fprintf(f, " %d ", ch); - fclose(f); -#endif - continue; - } + continue; if (c == -2) { c = UCS_REPL; @@ -398,14 +391,6 @@ register int len; } if (c > 0xff) debug1("read UNICODE %04x\n", c); -#if 0 - if (c & 0xffff0000) - { - FILE *f = fopen("/tmp/debug/utf-8", "a"); - fprintf(f, " %d ", ch); - fclose(f); - } -#endif } #endif @@ -2526,7 +2511,7 @@ int n, ys, ye, bce; ml->colorx = null; # endif #endif - bclear((char *)ml->image, p->w_width + 1); + bclear((char *)ml->image, (p->w_width + 1) * sizeof(int)); #ifdef COLOR if (bce) MBceLine(p, i, 0, p->w_width, bce); @@ -2571,7 +2556,7 @@ int n, ys, ye, bce; ml->colorx = null; # endif #endif - bclear((char *)ml->image, p->w_width + 1); + bclear((char *)ml->image, (p->w_width + 1) * sizeof(int)); #ifdef COLOR if (bce) MBceLine(p, i, 0, p->w_width, bce); @@ -2763,7 +2748,9 @@ int x, y; ml = &p->w_mlines[y]; MKillDwRight(p, ml, x); MKillDwLeft(p, ml, x + n - 1); - bcopy(s, (char *)ml->image + x, n); + ip = ml->image + x; + for (i = 0; i <= n; i++) + *ip++ = *s++; b = ml->attr + x; for (i = n; i-- > 0;) *b++ = r->attr; @@ -2866,7 +2853,7 @@ int ys, ye; debug2("MFindUsedLine: %d %d\n", ye, ys); for (y = ye; y >= ys; y--, ml--) { - if (bcmp((char*)ml->image, blank, p->w_width)) + if (bcmp((char*)ml->image, blank, p->w_width * sizeof(int))) break; if (ml->attr != null && bcmp((char*)ml->attr, null, p->w_width)) break; diff --git a/src/encoding.c b/src/encoding.c index 8b99b7c..be3ae62 100644 --- a/src/encoding.c +++ b/src/encoding.c @@ -557,13 +557,13 @@ int from, to; for (i = 0; i < 2; i++) { if (rml[i].image == 0) - rml[i].image = malloc(w); + rml[i].image = malloc(w * sizeof(int)); else - rml[i].image = realloc(rml[i].image, w); + rml[i].image = realloc(rml[i].image, w * sizeof(int)); if (rml[i].font == 0) - rml[i].font = malloc(w); + rml[i].font = malloc(w * sizeof(int)); else - rml[i].font = realloc(rml[i].font, w); + rml[i].font = realloc(rml[i].font, w * sizeof(int)); if (rml[i].image == 0 || rml[i].font == 0) { maxlen = 0; @@ -703,12 +703,12 @@ int c; if (c >= 0x800) { AddChar((c & 0xf000) >> 12 | 0xe0); - c = (c & 0x0fff) | 0x1000; + c = (c & 0x0fff) | 0x1000; } if (c >= 0x80) { AddChar((c & 0x1fc0) >> 6 ^ 0xc0); - c = (c & 0x3f) | 0x80; + c = (c & 0x3f) | 0x80; } AddChar(c); } @@ -809,16 +809,6 @@ int c, *utf8charp; *utf8charp = utf8char = (c & 0x80000000) ? c : 0; if (utf8char) return -1; -#if 0 - if (c & 0xffff0000) - { - FILE *f = fopen("/tmp/debug/utf-8", "a"); - fprintf(f, " %x ", c); - fclose(f); - } - if (c & 0xffff0000) - c = UCS_REPL; /* sorry, only know 16bit Unicode */ -#endif if (c >= 0xd800 && (c <= 0xdfff || c == 0xfffe || c == 0xffff)) c = UCS_REPL; /* illegal code */ return c; diff --git a/src/resize.c b/src/resize.c index c463f0f..430569c 100644 --- a/src/resize.c +++ b/src/resize.c @@ -452,7 +452,7 @@ int xf, xt, l, w; { int r = 0; - bcopy((char *)mlf->image + xf, (char *)mlt->image + xt, l * sizeof(int)); + bcopy((char *)(mlf->image + xf), (char *)(mlt->image + xt), l * sizeof(int)); if (mlf->attr != null && mlt->attr == null) { if ((mlt->attr = (unsigned char *)calloc(w, 1)) == 0) @@ -467,7 +467,7 @@ int xf, xt, l, w; mlt->font = (unsigned int *)null, r = -1; } if (mlt->font != (unsigned int *)null) - bcopy((char *)mlf->font + xf, (char *)mlt->font + xt, l * sizeof(int)); + bcopy((char *)(mlf->font + xf), (char *)(mlt->font + xt), l * sizeof(int)); #endif #ifdef COLOR if (mlf->color != null && mlt->color == null) |