diff options
author | Alexander Naumov <alexander_naumov@opensuse.org> | 2022-01-15 06:41:07 +0200 |
---|---|---|
committer | Alexander Naumov <alexander_naumov@opensuse.org> | 2022-01-15 06:41:07 +0200 |
commit | 19d60fc56274e38bebf1c7a45e5981e794031dea (patch) | |
tree | 716562b2732b7867fa848586464e6698c3626dee | |
parent | 70f794ae39c31607e002a4c6487f4b75709a9cab (diff) | |
download | screen-19d60fc56274e38bebf1c7a45e5981e794031dea.tar.gz |
Code Reformating: mark.c
-rw-r--r-- | src/mark.c | 2398 |
1 files changed, 1155 insertions, 1243 deletions
@@ -49,8 +49,8 @@ static int is_letter __P((char)); static void nextword __P((int *, int *, int, int)); static int linestart __P((int)); static int lineend __P((int)); -static int rem __P((int, int , int , int , int , char *, int)); -static int eq __P((int, int )); +static int rem __P((int, int, int, int, int, char *, int)); +static int eq __P((int, int)); static int MarkScrollDownDisplay __P((int)); static int MarkScrollUpDisplay __P((int)); @@ -69,76 +69,72 @@ extern struct mchar mchar_so; int pastefont = 1; #endif -struct LayFuncs MarkLf = -{ - MarkProcess, - MarkAbort, - MarkRedisplayLine, - DefClearLine, - MarkRewrite, - DefResize, - DefRestore, - 0 +struct LayFuncs MarkLf = { + MarkProcess, + MarkAbort, + MarkRedisplayLine, + DefClearLine, + MarkRewrite, + DefResize, + DefRestore, + 0 }; -int join_with_cr = 0; +int join_with_cr = 0; int compacthist = 0; unsigned char mark_key_tab[256]; /* this array must be initialised first! */ static struct markdata *markdata; - /* * VI like is_letter: 0 - whitespace * 1 - letter - * 2 - other + * 2 - other */ -static int is_letter(c) -char c; +static int +is_letter(char c) { - if ((c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - (c >= '0' && c <= '9') || - c == '_' || c == '.' || - c == '@' || c == ':' || - c == '%' || c == '!' || - c == '-' || c == '+') + if ((c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + c == '_' || c == '.' || + c == '@' || c == ':' || + c == '%' || c == '!' || + c == '-' || c == '+') /* thus we can catch email-addresses as a word :-) */ - return 1; - else if (c != ' ') - return 2; - return 0; + return 1; + else if (c != ' ') + return 2; + return 0; } static int -linestart(y) -int y; +linestart(int y) { - register int x; - register unsigned char *i; - - for (x = markdata->left_mar, i = WIN(y)->image + x; x < fore->w_width - 1; x++) - if (*i++ != ' ') - break; - if (x == fore->w_width - 1) - x = markdata->left_mar; - return x; + register int x; + register unsigned char *i; + + for (x = markdata->left_mar, i = WIN(y)->image + x; x < fore->w_width - 1; x++) + if (*i++ != ' ') + break; + if (x == fore->w_width - 1) + x = markdata->left_mar; + return x; } static int -lineend(y) -int y; +lineend(int y) { - register int x; - register unsigned char *i; - - for (x = markdata->right_mar, i = WIN(y)->image + x; x >= 0; x--) - if (*i-- != ' ') - break; - if (x < 0) - x = markdata->left_mar; - return x; + register int x; + register unsigned char *i; + + for (x = markdata->right_mar, i = WIN(y)->image + x; x >= 0; x--) + if (*i-- != ' ') + break; + if (x < 0) + x = markdata->left_mar; + return x; } /* @@ -149,50 +145,50 @@ int y; static int nextchar(int *xp, int *yp, int direction, char target, int num) { - int width; /* width of the current window. */ - int x; /* x coordinate of the current cursor position. */ - int step; /* amount to increment x (+1 or -1) */ - int adjust; /* Final adjustment of cursor position. */ - char *displayed_line; /* Line in which search takes place. */ - - debug("nextchar\n"); - - x = *xp; - step = 1; - adjust = 0; - width = fore->w_width; - displayed_line = (char *)WIN(*yp) -> image; - - switch(direction) { - case 't': - adjust = -1; /* fall through */ - case 'f': - step = 1; - break; - case 'T': - adjust = 1; /* fall through */ - case 'F': - step = -1; - break; - default: - ASSERT(0); - } - - x += step; - - debug1("ml->image = %s\n", displayed_line); - debug2("num = %d, width = %d\n",num, width); - debug2("x = %d target = %c\n", x, target ); - - for ( ;x>=0 && x <= width; x += step) { - if (displayed_line[x] == target) { - if (--num == 0) { - *xp = x + adjust; - return 0; - } - } - } - return -1; + int width; /* width of the current window. */ + int x; /* x coordinate of the current cursor position. */ + int step; /* amount to increment x (+1 or -1) */ + int adjust; /* Final adjustment of cursor position. */ + char *displayed_line; /* Line in which search takes place. */ + + debug("nextchar\n"); + + x = *xp; + step = 1; + adjust = 0; + width = fore->w_width; + displayed_line = (char *)WIN(*yp)->image; + + switch (direction) { + case 't': + adjust = -1; /* fall through */ + case 'f': + step = 1; + break; + case 'T': + adjust = 1; /* fall through */ + case 'F': + step = -1; + break; + default: + ASSERT(0); + } + + x += step; + + debug1("ml->image = %s\n", displayed_line); + debug2("num = %d, width = %d\n", num, width); + debug2("x = %d target = %c\n", x, target); + + for (; x >= 0 && x <= width; x += step) { + if (displayed_line[x] == target) { + if (--num == 0) { + *xp = x + adjust; + return 0; + } + } + } + return -1; } /* @@ -204,222 +200,201 @@ nextchar(int *xp, int *yp, int direction, char target, int num) * NW_BIG: match WORDs not words */ -#define NW_BACK (1<<0) -#define NW_ENDOFWORD (1<<1) -#define NW_MUSTMOVE (1<<2) -#define NW_BIG (1<<3) - - +#define NW_BACK (1<<0) +#define NW_ENDOFWORD (1<<1) +#define NW_MUSTMOVE (1<<2) +#define NW_BIG (1<<3) static void -nextword(xp, yp, flags, num) -int *xp, *yp, flags, num; +nextword(int *xp, int *yp, int flags, int num) { - int xx = fore->w_width, yy = fore->w_histheight + fore->w_height; - register int sx, oq, q, x, y; - struct mline *ml; - - x = *xp; - y = *yp; - sx = (flags & NW_BACK) ? -1 : 1; - if ((flags & NW_ENDOFWORD) && (flags & NW_MUSTMOVE)) - x += sx; - ml = WIN(y); - for (oq = -1; ; x += sx, oq = q) - { - if (x >= xx || x < 0) - q = 0; - else if (flags & NW_BIG) - q = ml->image[x] == ' '; - else - q = is_letter(ml->image[x]); - if (oq >= 0 && oq != q) - { - if (oq == 0 || !(flags & NW_ENDOFWORD)) - *xp = x; - else - *xp = x-sx; - *yp = y; - if ((!(flags & NW_ENDOFWORD) && q) || - ((flags & NW_ENDOFWORD) && oq)) - { - if (--num <= 0) - return; - } - } - if (x == xx) - { - x = -1; - if (++y >= yy) - return; - ml = WIN(y); - } - else if (x < 0) - { - x = xx; - if (--y < 0) - return; - ml = WIN(y); + int xx = fore->w_width, yy = fore->w_histheight + fore->w_height; + register int sx, oq, q, x, y; + struct mline *ml; + + x = *xp; + y = *yp; + sx = (flags & NW_BACK) ? -1 : 1; + if ((flags & NW_ENDOFWORD) && (flags & NW_MUSTMOVE)) + x += sx; + ml = WIN(y); + for (oq = -1;; x += sx, oq = q) { + if (x >= xx || x < 0) + q = 0; + else if (flags & NW_BIG) + q = ml->image[x] == ' '; + else + q = is_letter(ml->image[x]); + + if (oq >= 0 && oq != q) { + if (oq == 0 || !(flags & NW_ENDOFWORD)) + *xp = x; + else + *xp = x - sx; + *yp = y; + + if ((!(flags & NW_ENDOFWORD) && q) || ((flags & NW_ENDOFWORD) && oq)) { + if (--num <= 0) + return; + } + } + + if (x == xx) { + x = -1; + if (++y >= yy) + return; + ml = WIN(y); + } else if (x < 0) { + x = xx; + if (--y < 0) + return; + ml = WIN(y); + } } - } } - /* * y1, y2 are WIN coordinates * - * redisplay: 0 - just copy - * 1 - redisplay + copy - * 2 - count + copy, don't redisplay + * redisplay: 0 - just copy + * 1 - redisplay + copy + * 2 - count + copy, don't redisplay */ static int -rem(x1, y1, x2, y2, redisplay, pt, yend) -int x1, y1, x2, y2, redisplay, yend; -char *pt; +rem(int x1, int y1, int x2, int y2, int redisplay, char *pt, int yend) { - int i, j, from, to, ry, c; - int l = 0; - unsigned char *im; - struct mline *ml; + int i, j, from, to, ry, c; + int l = 0; + unsigned char *im; + struct mline *ml; #ifdef FONT - int cf, cfx, font; - unsigned char *fo, *fox; + int cf, cfx, font; + unsigned char *fo, *fox; #endif - markdata->second = 0; - if (y2 < y1 || ((y2 == y1) && (x2 < x1))) - { - i = y2; - y2 = y1; - y1 = i; - i = x2; - x2 = x1; - x1 = i; - } - ry = y1 - markdata->hist_offset; - - i = y1; - if (redisplay != 2 && pt == 0 && ry <0) - { - i -= ry; - ry = 0; - } - for (; i <= y2; i++, ry++) - { - if (redisplay != 2 && pt == 0 && ry > yend) - break; - ml = WIN(i); - from = (i == y1) ? x1 : 0; - if (from < markdata->left_mar) - from = markdata->left_mar; - for (to = fore->w_width, im = ml->image + to; to >= 0; to--) - if (*im-- != ' ') - break; - if (i == y2 && x2 < to) - to = x2; - if (to > markdata->right_mar) - to = markdata->right_mar; - if (redisplay == 1 && from <= to && ry >=0 && ry <= yend) - MarkRedisplayLine(ry, from, to, 0); - if (redisplay != 2 && pt == 0) /* don't count/copy */ - continue; - j = from; + markdata->second = 0; + if (y2 < y1 || ((y2 == y1) && (x2 < x1))) { + i = y2; + y2 = y1; + y1 = i; + i = x2; + x2 = x1; + x1 = i; + } + ry = y1 - markdata->hist_offset; + + i = y1; + if (redisplay != 2 && pt == 0 && ry < 0) { + i -= ry; + ry = 0; + } + for (; i <= y2; i++, ry++) { + if (redisplay != 2 && pt == 0 && ry > yend) + break; + ml = WIN(i); + from = (i == y1) ? x1 : 0; + + if (from < markdata->left_mar) + from = markdata->left_mar; + for (to = fore->w_width, im = ml->image + to; to >= 0; to--) + if (*im-- != ' ') + break; + if (i == y2 && x2 < to) + to = x2; + if (to > markdata->right_mar) + to = markdata->right_mar; + if (redisplay == 1 && from <= to && ry >= 0 && ry <= yend) + MarkRedisplayLine(ry, from, to, 0); + if (redisplay != 2 && pt == 0) /* don't count/copy */ + continue; + j = from; #ifdef DW_CHARS - if (dw_right(ml, j, fore->w_encoding)) - j--; + if (dw_right(ml, j, fore->w_encoding)) + j--; #endif - im = ml->image + j; + im = ml->image + j; #ifdef FONT - fo = ml->font + j; - fox = ml->fontx + j; - font = ASCII; + fo = ml->font + j; + fox = ml->fontx + j; + font = ASCII; #endif - for (; j <= to; j++) - { - c = (unsigned char)*im++; + for (; j <= to; j++) { + c = (unsigned char)*im++; #ifdef FONT - cf = (unsigned char)*fo++; - cfx = (unsigned char)*fox++; + cf = (unsigned char)*fo++; + cfx = (unsigned char)*fox++; # ifdef UTF8 - if (fore->w_encoding == UTF8) - { - c |= cf << 8 | cfx << 16; - if (c == UCS_HIDDEN) - continue; - c = ToUtf8_comb(pt, c); - l += c; - if (pt) - pt += c; - continue; - } + if (fore->w_encoding == UTF8) { + c |= cf << 8 | cfx << 16; + if (c == UCS_HIDDEN) + continue; + c = ToUtf8_comb(pt, c); + l += c; + if (pt) + pt += c; + continue; + } # endif # ifdef DW_CHARS - if (is_dw_font(cf)) - { - c = c << 8 | (unsigned char)*im++; - fo++; - j++; - } + if (is_dw_font(cf)) { + c = c << 8 | (unsigned char)*im++; + fo++; + j++; + } # endif - if (pastefont) - { - c = EncodeChar(pt, c | cf << 16, fore->w_encoding, &font); - l += c; - if (pt) - pt += c; - continue; - } + if (pastefont) { + c = EncodeChar(pt, c | cf << 16, fore->w_encoding, &font); + l += c; + if (pt) + pt += c; + continue; + } #endif /* FONT */ - if (pt) - *pt++ = c; - l++; - } + if (pt) + *pt++ = c; + l++; + } #ifdef FONT - if (pastefont && font != ASCII) - { - if (pt) - { - strcpy(pt, "\033(B"); - pt += 3; - } - l += 3; - } + if (pastefont && font != ASCII) { + if (pt) { + strcpy(pt, "\033(B"); + pt += 3; + } + l += 3; + } #endif - if (i != y2 && (to != fore->w_width - 1 || ml->image[to + 1] == ' ')) - { - /* - * this code defines, what glues lines together - */ - switch (markdata->nonl) - { - case 0: /* lines separated by newlines */ - if (pt) - *pt++ = '\r'; - l++; - if (join_with_cr) - { - if (pt) - *pt++ = '\n'; - l++; + if (i != y2 && (to != fore->w_width - 1 || ml->image[to + 1] == ' ')) { + /* + * this code defines, what glues lines together + */ + switch (markdata->nonl) { + case 0: /* lines separated by newlines */ + if (pt) + *pt++ = '\r'; + l++; + if (join_with_cr) { + if (pt) + *pt++ = '\n'; + l++; + } + break; + case 1: /* nothing to separate lines */ + break; + case 2: /* lines separated by blanks */ + if (pt) + *pt++ = ' '; + l++; + break; + case 3: /* seperate by comma, for csh junkies */ + if (pt) + *pt++ = ','; + l++; + break; + } } - break; - case 1: /* nothing to separate lines */ - break; - case 2: /* lines separated by blanks */ - if (pt) - *pt++ = ' '; - l++; - break; - case 3: /* seperate by comma, for csh junkies */ - if (pt) - *pt++ = ','; - l++; - break; - } } - } - return l; + return l; } /* Check if two chars are identical. All digits are treated @@ -427,67 +402,63 @@ char *pt; */ static int -eq(a, b) -int a, b; +eq(int a, int b) { - if (a == b) - return 1; - if (a == 0 || b == 0) - return 1; - if (a <= '9' && a >= '0' && b <= '9' && b >= '0') - return 1; - return 0; + if (a == b) + return 1; + if (a == 0 || b == 0) + return 1; + if (a <= '9' && a >= '0' && b <= '9' && b >= '0') + return 1; + return 0; } - /**********************************************************************/ int GetHistory() /* return value 1 if copybuffer changed */ { - int i = 0, q = 0, xx, yy, x, y; - unsigned char *linep; - struct mline *ml; - - ASSERT(display && fore); - x = fore->w_x; - if (x >= fore->w_width) - x = fore->w_width - 1; - y = fore->w_y + fore->w_histheight; - debug2("cursor is at x=%d, y=%d\n", x, y); - ml = WIN(y); - for (xx = x - 1, linep = ml->image + xx; xx >= 0; xx--) - if ((q = *linep--) != ' ' ) - break; - debug3("%c at (%d,%d)\n", q, xx, y); - for (yy = y - 1; yy >= 0; yy--) - { - ml = WIN(yy); - linep = ml->image; - if (xx < 0 || eq(linep[xx], q)) - { /* line is matching... */ - for (i = fore->w_width - 1, linep += i; i >= x; i--) - if (*linep-- != ' ') - break; - if (i >= x) - break; + int i = 0, q = 0, xx, yy, x, y; + unsigned char *linep; + struct mline *ml; + + ASSERT(display && fore); + x = fore->w_x; + if (x >= fore->w_width) + x = fore->w_width - 1; + y = fore->w_y + fore->w_histheight; + debug2("cursor is at x=%d, y=%d\n", x, y); + ml = WIN(y); + for (xx = x - 1, linep = ml->image + xx; xx >= 0; xx--) + if ((q = *linep--) != ' ') + break; + debug3("%c at (%d,%d)\n", q, xx, y); + for (yy = y - 1; yy >= 0; yy--) { + ml = WIN(yy); + linep = ml->image; + if (xx < 0 || eq(linep[xx], q)) { /* line is matching... */ + for (i = fore->w_width - 1, linep += i; i >= x; i--) + if (*linep-- != ' ') + break; + if (i >= x) + break; + } } - } - if (yy < 0) - return 0; - if (D_user->u_plop.buf) - UserFreeCopyBuffer(D_user); - if ((D_user->u_plop.buf = (char *)malloc((unsigned) (i - x + 2))) == NULL) - { - LMsg(0, "Not enough memory... Sorry."); - return 0; - } - bcopy((char *)linep - i + x + 1, D_user->u_plop.buf, i - x + 1); - D_user->u_plop.len = i - x + 1; + if (yy < 0) + return 0; + if (D_user->u_plop.buf) + UserFreeCopyBuffer(D_user); + if ((D_user->u_plop.buf = (char *)malloc((unsigned)(i - x + 2))) == + NULL) { + LMsg(0, "Not enough memory... Sorry."); + return 0; + } + bcopy((char *)linep - i + x + 1, D_user->u_plop.buf, i - x + 1); + D_user->u_plop.len = i - x + 1; #ifdef ENCODINGS - D_user->u_plop.enc = fore->w_encoding; + D_user->u_plop.enc = fore->w_encoding; #endif - return 1; + return 1; } /**********************************************************************/ @@ -496,98 +467,88 @@ GetHistory() /* return value 1 if copybuffer changed */ void MarkRoutine() { - int x, y; - - ASSERT(fore && display && D_user); - - debug2("MarkRoutine called: fore nr %d, display %s\n", - fore->w_number, D_usertty); - - if (InitOverlayPage(sizeof(*markdata), &MarkLf, 1)) - return; - flayer->l_encoding = fore->w_encoding; - flayer->l_mode = 1; - markdata = (struct markdata *)flayer->l_data; - markdata->md_user = D_user; /* XXX: Correct? */ - markdata->md_window = fore; - markdata->second = 0; - markdata->rep_cnt = 0; - markdata->append_mode = 0; - markdata->write_buffer = 0; - markdata->nonl = 0; - markdata->left_mar = 0; - markdata->right_mar = fore->w_width - 1; - markdata->hist_offset = fore->w_histheight; - x = fore->w_x; - y = D2W(fore->w_y); - if (x >= fore->w_width) - x = fore->w_width - 1; - - LGotoPos(flayer, x, W2D(y)); - LMsg(0, "Copy mode - Column %d Line %d(+%d) (%d,%d)", - x + 1, W2D(y + 1), fore->w_histheight, fore->w_width, fore->w_height); - markdata->cx = markdata->x1 = x; - markdata->cy = markdata->y1 = y; - flayer->l_x = x; - flayer->l_y = W2D(y); + int x, y; + + ASSERT(fore && display && D_user); + + debug2("MarkRoutine called: fore nr %d, display %s\n", fore->w_number, D_usertty); + + if (InitOverlayPage(sizeof(*markdata), &MarkLf, 1)) + return; + flayer->l_encoding = fore->w_encoding; + flayer->l_mode = 1; + markdata = (struct markdata *)flayer->l_data; + markdata->md_user = D_user; /* XXX: Correct? */ + markdata->md_window = fore; + markdata->second = 0; + markdata->rep_cnt = 0; + markdata->append_mode = 0; + markdata->write_buffer = 0; + markdata->nonl = 0; + markdata->left_mar = 0; + markdata->right_mar = fore->w_width - 1; + markdata->hist_offset = fore->w_histheight; + x = fore->w_x; + y = D2W(fore->w_y); + if (x >= fore->w_width) + x = fore->w_width - 1; + + LGotoPos(flayer, x, W2D(y)); + LMsg(0, "Copy mode - Column %d Line %d(+%d) (%d,%d)", x + 1, W2D(y + 1), fore->w_histheight, fore->w_width, fore->w_height); + markdata->cx = markdata->x1 = x; + markdata->cy = markdata->y1 = y; + flayer->l_x = x; + flayer->l_y = W2D(y); } static void -MarkProcess(inbufp,inlenp) -char **inbufp; -int *inlenp; +MarkProcess(char **inbufp, int *inlenp) { - char *inbuf, *pt; - int inlen; - int cx, cy, x2, y2, j, yend; - int newcopylen = 0, od; - int in_mark; - int rep_cnt; - struct acluser *md_user; + char *inbuf, *pt; + int inlen; + int cx, cy, x2, y2, j, yend; + int newcopylen = 0, od; + int in_mark; + int rep_cnt; + struct acluser *md_user; /* char *extrap = 0, extrabuf[100]; */ - markdata = (struct markdata *)flayer->l_data; - fore = markdata->md_window; - md_user = markdata->md_user; - if (inbufp == 0) - { - MarkAbort(); - return; - } - - LGotoPos(flayer, markdata->cx, W2D(markdata->cy)); - inbuf= *inbufp; - inlen= *inlenp; - pt = inbuf; - in_mark = 1; - while (in_mark && (inlen /* || extrap */)) - { - unsigned char ch = (unsigned char )*pt++; - inlen--; - if (flayer->l_mouseevent.start) - { - int r = LayProcessMouse(flayer, ch); - if (r == -1) - LayProcessMouseSwitch(flayer, 0); - else - { - if (r) - ch = 0222; - else - continue; - } + markdata = (struct markdata *)flayer->l_data; + fore = markdata->md_window; + md_user = markdata->md_user; + if (inbufp == 0) { + MarkAbort(); + return; } - od = mark_key_tab[(int)ch]; - rep_cnt = markdata->rep_cnt; - if (od >= '0' && od <= '9' && !markdata->f_cmd.flag) - { - if (rep_cnt < 1001 && (od != '0' || rep_cnt != 0)) - { - markdata->rep_cnt = 10 * rep_cnt + od - '0'; - continue; + + LGotoPos(flayer, markdata->cx, W2D(markdata->cy)); + inbuf = *inbufp; + inlen = *inlenp; + pt = inbuf; + in_mark = 1; + while (in_mark && (inlen /* || extrap */)) { + unsigned char ch = (unsigned char)*pt++; + inlen--; + if (flayer->l_mouseevent.start) { + int r = LayProcessMouse(flayer, ch); + if (r == -1) + LayProcessMouseSwitch(flayer, 0); + else { + if (r) + ch = 0222; + else + continue; + } + } + od = mark_key_tab[(int)ch]; + rep_cnt = markdata->rep_cnt; + if (od >= '0' && od <= '9' && !markdata->f_cmd.flag) { + if (rep_cnt < 1001 && (od != '0' || rep_cnt != 0)) { + markdata->rep_cnt = 10 * rep_cnt + od - '0'; + continue; /* * Now what is that 1001 here? Well, we have a screen with * 25 * 80 = 2000 characters. Movement is at most across the full @@ -598,32 +559,31 @@ int *inlenp; * words, as they should be more advanced. jw. * Oh, wrong. We still give even the experienced user a factor of ten. */ - } - } - cx = markdata->cx; - cy = markdata->cy; - - if (markdata -> f_cmd.flag) { - debug2("searching for %c:%d\n",od,rep_cnt); - markdata->f_cmd.flag = 0; - markdata->rep_cnt = 0; - - if (isgraph (od)) { - markdata->f_cmd.target = od; - rep_cnt = (rep_cnt) ? rep_cnt : 1; - nextchar(&cx, &cy, markdata->f_cmd.direction, od, rep_cnt ); - revto(cx, cy); - continue; - } - } + } + } + cx = markdata->cx; + cy = markdata->cy; + + if (markdata->f_cmd.flag) { + debug2("searching for %c:%d\n", od, rep_cnt); + markdata->f_cmd.flag = 0; + markdata->rep_cnt = 0; + + if (isgraph(od)) { + markdata->f_cmd.target = od; + rep_cnt = (rep_cnt) ? rep_cnt : 1; + nextchar(&cx, &cy, markdata->f_cmd.direction, od, rep_cnt); + revto(cx, cy); + continue; + } + } processchar: - switch (od) - { - case 'f': /* fall through */ - case 'F': /* fall through */ - case 't': /* fall through */ - case 'T': /* fall through */ + switch (od) { + case 'f': /* fall through */ + case 'F': /* fall through */ + case 't': /* fall through */ + case 'T': /* fall through */ /* * Set f_cmd to do a search on the next key stroke. * If we break, rep_cnt will be reset, so we @@ -632,905 +592,857 @@ processchar: * break here so later followon code will be * hit. */ - markdata->f_cmd.flag = 1; - markdata->f_cmd.direction = od; - debug("entering char search\n"); - continue; - case ';': - case ',': - if (!markdata->f_cmd.target) - break; - if (!rep_cnt) - rep_cnt = 1; - nextchar(&cx, &cy, - od == ';' ? markdata->f_cmd.direction : (markdata->f_cmd.direction ^ 0x20), - markdata->f_cmd.target, rep_cnt ); - revto(cx, cy); - break; - case 'o': - case 'x': - if (!markdata->second) - break; - markdata->cx = markdata->x1; - markdata->cy = markdata->y1; - markdata->x1 = cx; - markdata->y1 = cy; - revto(markdata->cx, markdata->cy); - break; - case '\014': /* CTRL-L Redisplay */ - Redisplay(0); - LGotoPos(flayer, cx, W2D(cy)); - break; - case 0202: /* M-C-b */ - case '\010': /* CTRL-H Backspace */ - case 'h': - if (rep_cnt == 0) - rep_cnt = 1; - revto(cx - rep_cnt, cy); - break; - case 0216: /* M-C-p */ - case '\016': /* CTRL-N */ - case 'j': - if (rep_cnt == 0) - rep_cnt = 1; - revto(cx, cy + rep_cnt); - break; - case '+': - if (rep_cnt == 0) - rep_cnt = 1; - j = cy + rep_cnt; - if (j > fore->w_histheight + fore->w_height - 1) - j = fore->w_histheight + fore->w_height - 1; - revto(linestart(j), j); - break; - case '-': - if (rep_cnt == 0) - rep_cnt = 1; - cy -= rep_cnt; - if (cy < 0) - cy = 0; - revto(linestart(cy), cy); - break; - case '^': - revto(linestart(cy), cy); - break; - case '\n': - revto(markdata->left_mar, cy + 1); - break; - case 0220: /* M-C-p */ - case '\020': /* CTRL-P */ - case 'k': - if (rep_cnt == 0) - rep_cnt = 1; - revto(cx, cy - rep_cnt); - break; - case 0206: /* M-C-f */ - case 'l': - if (rep_cnt == 0) - rep_cnt = 1; - revto(cx + rep_cnt, cy); - break; - case '\001': /* CTRL-A from tcsh/emacs */ - case '0': - revto(markdata->left_mar, cy); - break; - case '\004': /* CTRL-D down half screen */ - if (rep_cnt == 0) - rep_cnt = (fore->w_height + 1) >> 1; - revto_line(cx, cy + rep_cnt, W2D(cy)); - break; - case '$': - revto(lineend(cy), cy); - break; - case '\022': /* CTRL-R emacs style backwards search */ - ISearch(-1); - in_mark = 0; - break; - case '\023': /* CTRL-S emacs style search */ - ISearch(1); - in_mark = 0; - break; - case '\025': /* CTRL-U up half screen */ - if (rep_cnt == 0) - rep_cnt = (fore->w_height + 1) >> 1; - revto_line(cx, cy - rep_cnt, W2D(cy)); - break; - case '\007': /* CTRL-G show cursorpos */ - if (markdata->left_mar == 0 && markdata->right_mar == fore->w_width - 1) - LMsg(0, "Column %d Line %d(+%d)", cx+1, W2D(cy)+1, - markdata->hist_offset); - else - LMsg(0, "Column %d(%d..%d) Line %d(+%d)", cx+1, - markdata->left_mar+1, markdata->right_mar+1, W2D(cy)+1, markdata->hist_offset); - break; - case '\002': /* CTRL-B back one page */ - if (rep_cnt == 0) - rep_cnt = 1; - rep_cnt *= fore->w_height; - revto(cx, cy - rep_cnt); - break; - case '\006': /* CTRL-F forward one page */ - if (rep_cnt == 0) - rep_cnt = 1; - rep_cnt *= fore->w_height; - revto(cx, cy + rep_cnt); - break; - case '\005': /* CTRL-E scroll up */ - if (rep_cnt == 0) - rep_cnt = 1; - rep_cnt = MarkScrollUpDisplay(rep_cnt); - if (cy < D2W(0)) - revto(cx, D2W(0)); - else - LGotoPos(flayer, cx, W2D(cy)); - break; - case '\031': /* CTRL-Y scroll down */ - if (rep_cnt == 0) - rep_cnt = 1; - rep_cnt = MarkScrollDownDisplay(rep_cnt); - if (cy > D2W(fore->w_height-1)) - revto(cx, D2W(fore->w_height-1)); - else - LGotoPos(flayer, cx, W2D(cy)); - break; - case '@': + markdata->f_cmd.flag = 1; + markdata->f_cmd.direction = od; + debug("entering char search\n"); + continue; + case ';': + case ',': + if (!markdata->f_cmd.target) + break; + if (!rep_cnt) + rep_cnt = 1; + nextchar(&cx, + &cy, + od == ';' ? markdata->f_cmd.direction : (markdata->f_cmd.direction ^ 0x20), + markdata->f_cmd.target, + rep_cnt); + revto(cx, cy); + break; + case 'o': + case 'x': + if (!markdata->second) + break; + markdata->cx = markdata->x1; + markdata->cy = markdata->y1; + markdata->x1 = cx; + markdata->y1 = cy; + revto(markdata->cx, markdata->cy); + break; + case '\014': /* CTRL-L Redisplay */ + Redisplay(0); + LGotoPos(flayer, cx, W2D(cy)); + break; + case 0202: /* M-C-b */ + case '\010': /* CTRL-H Backspace */ + case 'h': + if (rep_cnt == 0) + rep_cnt = 1; + revto(cx - rep_cnt, cy); + break; + case 0216: /* M-C-p */ + case '\016': /* CTRL-N */ + case 'j': + if (rep_cnt == 0) + rep_cnt = 1; + revto(cx, cy + rep_cnt); + break; + case '+': + if (rep_cnt == 0) + rep_cnt = 1; + j = cy + rep_cnt; + if (j > fore->w_histheight + fore->w_height - 1) + j = fore->w_histheight + fore->w_height - 1; + revto(linestart(j), j); + break; + case '-': + if (rep_cnt == 0) + rep_cnt = 1; + cy -= rep_cnt; + if (cy < 0) + cy = 0; + revto(linestart(cy), cy); + break; + case '^': + revto(linestart(cy), cy); + break; + case '\n': + revto(markdata->left_mar, cy + 1); + break; + case 0220: /* M-C-p */ + case '\020': /* CTRL-P */ + case 'k': + if (rep_cnt == 0) + rep_cnt = 1; + revto(cx, cy - rep_cnt); + break; + case 0206: /* M-C-f */ + case 'l': + if (rep_cnt == 0) + rep_cnt = 1; + revto(cx + rep_cnt, cy); + break; + case '\001': /* CTRL-A from tcsh/emacs */ + case '0': + revto(markdata->left_mar, cy); + break; + case '\004': /* CTRL-D down half screen */ + if (rep_cnt == 0) + rep_cnt = (fore->w_height + 1) >> 1; + revto_line(cx, cy + rep_cnt, W2D(cy)); + break; + case '$': + revto(lineend(cy), cy); + break; + case '\022': /* CTRL-R emacs style backwards search */ + ISearch(-1); + in_mark = 0; + break; + case '\023': /* CTRL-S emacs style search */ + ISearch(1); + in_mark = 0; + break; + case '\025': /* CTRL-U up half screen */ + if (rep_cnt == 0) + rep_cnt = (fore->w_height + 1) >> 1; + revto_line(cx, cy - rep_cnt, W2D(cy)); + break; + case '\007': /* CTRL-G show cursorpos */ + if (markdata->left_mar == 0 && markdata->right_mar == fore->w_width - 1) + LMsg(0, "Column %d Line %d(+%d)", cx + 1, W2D(cy) + 1, markdata->hist_offset); + else + LMsg(0, "Column %d(%d..%d) Line %d(+%d)", + cx + 1, markdata->left_mar + 1, + markdata->right_mar + 1, W2D(cy) + 1, + markdata->hist_offset); + break; + case '\002': /* CTRL-B back one page */ + if (rep_cnt == 0) + rep_cnt = 1; + rep_cnt *= fore->w_height; + revto(cx, cy - rep_cnt); + break; + case '\006': /* CTRL-F forward one page */ + if (rep_cnt == 0) + rep_cnt = 1; + rep_cnt *= fore->w_height; + revto(cx, cy + rep_cnt); + break; + case '\005': /* CTRL-E scroll up */ + if (rep_cnt == 0) + rep_cnt = 1; + rep_cnt = MarkScrollUpDisplay(rep_cnt); + if (cy < D2W(0)) + revto(cx, D2W(0)); + else + LGotoPos(flayer, cx, W2D(cy)); + break; + case '\031': /* CTRL-Y scroll down */ + if (rep_cnt == 0) + rep_cnt = 1; + rep_cnt = MarkScrollDownDisplay(rep_cnt); + if (cy > D2W(fore->w_height - 1)) + revto(cx, D2W(fore->w_height - 1)); + else + LGotoPos(flayer, cx, W2D(cy)); + break; + case '@': /* it may be useful to have a key that does nothing */ - break; - case '%': + break; + case '%': /* rep_cnt is a percentage for the history buffer */ - if (rep_cnt < 0) - rep_cnt = 0; - if (rep_cnt > 100) - rep_cnt = 100; - revto_line(markdata->left_mar, - fore->w_histheight - fore->w_scrollback_height + - (int)(rep_cnt * (fore->w_scrollback_height + fore->w_height) / 100.0), - (fore->w_height - 1) / 2); - break; - case 0201: - case 'g': - rep_cnt = 1; + if (rep_cnt < 0) + rep_cnt = 0; + if (rep_cnt > 100) + rep_cnt = 100; + + revto_line(markdata->left_mar, + fore->w_histheight - fore->w_scrollback_height + + (int)(rep_cnt * (fore->w_scrollback_height + + fore->w_height) / 100.0), (fore->w_height - 1) / 2); + break; + case 0201: + case 'g': + rep_cnt = 1; /* FALLTHROUGH */ - case 0205: - case 'G': + case 0205: + case 'G': /* rep_cnt is here the WIN line number */ - if (rep_cnt == 0) - rep_cnt = fore->w_histheight + fore->w_height; - revto_line(markdata->left_mar, --rep_cnt, (fore->w_height - 1) / 2); - break; - case 'H': - revto(markdata->left_mar, D2W(0)); - break; - case 'M': - revto(markdata->left_mar, D2W((fore->w_height - 1) / 2)); - break; - case 'L': - revto(markdata->left_mar, D2W(fore->w_height - 1)); - break; - case '|': - revto(--rep_cnt, cy); - break; - case 'w': - if (rep_cnt == 0) - rep_cnt = 1; - nextword(&cx, &cy, NW_MUSTMOVE, rep_cnt); - revto(cx, cy); - break; - case 'e': - case 'E': - if (rep_cnt == 0) - rep_cnt = 1; - nextword(&cx, &cy, NW_ENDOFWORD|NW_MUSTMOVE | (od == 'E' ? NW_BIG : 0), rep_cnt); - revto(cx, cy); - break; - case 'b': - case 'B': - if (rep_cnt == 0) - rep_cnt = 1; - nextword(&cx, &cy, NW_BACK|NW_ENDOFWORD|NW_MUSTMOVE | (od == 'B' ? NW_BIG : 0), rep_cnt); - revto(cx, cy); - break; - case 'a': - markdata->append_mode = 1 - markdata->append_mode; - debug1("append mode %d--\n", markdata->append_mode); - LMsg(0, (markdata->append_mode) ? ":set append" : ":set noappend"); - break; - case 'v': - case 'V': + if (rep_cnt == 0) + rep_cnt = fore->w_histheight + fore->w_height; + revto_line(markdata->left_mar, --rep_cnt, (fore->w_height - 1) / 2); + break; + case 'H': + revto(markdata->left_mar, D2W(0)); + break; + case 'M': + revto(markdata->left_mar, D2W((fore->w_height - 1) / 2)); + break; + case 'L': + revto(markdata->left_mar, D2W(fore->w_height - 1)); + break; + case '|': + revto(--rep_cnt, cy); + break; + case 'w': + if (rep_cnt == 0) + rep_cnt = 1; + nextword(&cx, &cy, NW_MUSTMOVE, rep_cnt); + revto(cx, cy); + break; + case 'e': + case 'E': + if (rep_cnt == 0) + rep_cnt = 1; + nextword(&cx, &cy, NW_ENDOFWORD|NW_MUSTMOVE | (od == 'E' ? NW_BIG : 0), rep_cnt); + revto(cx, cy); + break; + case 'b': + case 'B': + if (rep_cnt == 0) + rep_cnt = 1; + nextword(&cx, &cy, NW_BACK|NW_ENDOFWORD|NW_MUSTMOVE | (od == 'B' ? NW_BIG : 0), rep_cnt); + revto(cx, cy); + break; + case 'a': + markdata->append_mode = 1 - markdata->append_mode; + debug1("append mode %d--\n", markdata->append_mode); + LMsg(0, (markdata->append_mode) ? ":set append" : ":set noappend"); + break; + case 'v': + case 'V': /* this sets start column to column 9 for VI :set nu users */ - if (markdata->left_mar == 8) - rep_cnt = 1; - else - rep_cnt = 9; + if (markdata->left_mar == 8) + rep_cnt = 1; + else + rep_cnt = 9; /* FALLTHROUGH */ - case 'c': - case 'C': + case 'c': + case 'C': /* set start column (c) and end column (C) */ - if (markdata->second) - { - rem(markdata->x1, markdata->y1, cx, cy, 1, (char *)0, fore->w_height-1); /* Hack */ - markdata->second = 1; /* rem turns off second */ - } - rep_cnt--; - if (rep_cnt < 0) - rep_cnt = cx; - if (od != 'C') - { - markdata->left_mar = rep_cnt; - if (markdata->left_mar > markdata->right_mar) - markdata->left_mar = markdata->right_mar; - } - else - { - markdata->right_mar = rep_cnt; - if (markdata->left_mar > markdata->right_mar) - markdata->right_mar = markdata->left_mar; - } - if (markdata->second) - { - markdata->cx = markdata->x1; markdata->cy = markdata->y1; - revto(cx, cy); - } - if (od == 'v' || od == 'V') - LMsg(0, (markdata->left_mar != 8) ? ":set nonu" : ":set nu"); - break; - case 'J': - /* how do you join lines in VI ? */ - markdata->nonl = (markdata->nonl + 1) % 4; - switch (markdata->nonl) - { - case 0: - if (join_with_cr) - LMsg(0, "Multiple lines (CR/LF)"); - else - LMsg(0, "Multiple lines (LF)"); - break; - case 1: - LMsg(0, "Lines joined"); - break; - case 2: - LMsg(0, "Lines joined with blanks"); - break; - case 3: - LMsg(0, "Lines joined with comma"); - break; - } - break; - case '/': - Search(1); - in_mark = 0; - break; - case '?': - Search(-1); - in_mark = 0; - break; - case 'n': - Search(0); - break; - case 'N': - markdata->isdir = -markdata->isdir; - Search(0); - markdata->isdir = -markdata->isdir; - break; - case 'y': - case 'Y': - if (markdata->second == 0) - { - revto(linestart(cy), cy); - markdata->second++; - cx = markdata->x1 = markdata->cx; - cy = markdata->y1 = markdata->cy; - } - if (--rep_cnt > 0) - revto(cx, cy + rep_cnt); - revto(lineend(markdata->cy), markdata->cy); - if (od == 'y') - break; + if (markdata->second) { + rem(markdata->x1, markdata->y1, cx, cy, 1, (char *)0, fore->w_height - 1); /* Hack */ + markdata->second = 1; /* rem turns off second */ + } + rep_cnt--; + if (rep_cnt < 0) + rep_cnt = cx; + if (od != 'C') { + markdata->left_mar = rep_cnt; + if (markdata->left_mar > markdata->right_mar) + markdata->left_mar = markdata->right_mar; + } else { + markdata->right_mar = rep_cnt; + if (markdata->left_mar > markdata->right_mar) + markdata->right_mar = markdata->left_mar; + } + if (markdata->second) { + markdata->cx = markdata->x1; + markdata->cy = markdata->y1; + revto(cx, cy); + } + if (od == 'v' || od == 'V') + LMsg(0, (markdata->left_mar != 8) ? ":set nonu" : ":set nu"); + break; + case 'J': + /* how do you join lines in VI ? */ + markdata->nonl = (markdata->nonl + 1) % 4; + switch (markdata->nonl) { + case 0: + if (join_with_cr) + LMsg(0, "Multiple lines (CR/LF)"); + else + LMsg(0, "Multiple lines (LF)"); + break; + case 1: + LMsg(0, "Lines joined"); + break; + case 2: + LMsg(0, "Lines joined with blanks"); + break; + case 3: + LMsg(0, "Lines joined with comma"); + break; + } + break; + case '/': + Search(1); + in_mark = 0; + break; + case '?': + Search(-1); + in_mark = 0; + break; + case 'n': + Search(0); + break; + case 'N': + markdata->isdir = -markdata->isdir; + Search(0); + markdata->isdir = -markdata->isdir; + break; + case 'y': + case 'Y': + if (markdata->second == 0) { + revto(linestart(cy), cy); + markdata->second++; + cx = markdata->x1 = markdata->cx; + cy = markdata->y1 = markdata->cy; + } + if (--rep_cnt > 0) + revto(cx, cy + rep_cnt); + revto(lineend(markdata->cy), markdata->cy); + if (od == 'y') + break; /* FALLTHROUGH */ - case 'W': - if (od == 'W') - { - if (rep_cnt == 0) - rep_cnt = 1; - if (!markdata->second) - { - nextword(&cx, &cy, NW_BACK|NW_ENDOFWORD, 1); - revto(cx, cy); - markdata->second++; - cx = markdata->x1 = markdata->cx; - cy = markdata->y1 = markdata->cy; - } - nextword(&cx, &cy, NW_ENDOFWORD, rep_cnt); - revto(cx, cy); - } - cx = markdata->cx; - cy = markdata->cy; + case 'W': + if (od == 'W') { + if (rep_cnt == 0) + rep_cnt = 1; + if (!markdata->second) { + nextword(&cx, &cy, NW_BACK|NW_ENDOFWORD, 1); + revto(cx, cy); + markdata->second++; + cx = markdata->x1 = markdata->cx; + cy = markdata->y1 = markdata->cy; + } + nextword(&cx, &cy, NW_ENDOFWORD, rep_cnt); + revto(cx, cy); + } + cx = markdata->cx; + cy = markdata->cy; /* FALLTHROUGH */ - case 'A': - if (od == 'A') - markdata->append_mode = 1; + case 'A': + if (od == 'A') + markdata->append_mode = 1; /* FALLTHROUGH */ - case '>': - if (od == '>') - markdata->write_buffer = 1; + case '>': + if (od == '>') + markdata->write_buffer = 1; /* FALLTHROUGH */ - case ' ': - case '\r': - if (!markdata->second) - { - markdata->second++; - markdata->x1 = cx; - markdata->y1 = cy; - revto(cx, cy); - LMsg(0, "First mark set - Column %d Line %d", cx+1, W2D(cy)+1); - break; - } - else - { - int append_mode = markdata->append_mode; - int write_buffer = markdata->write_buffer; - - x2 = cx; - y2 = cy; - newcopylen = rem(markdata->x1, markdata->y1, x2, y2, 2, (char *)0, 0); /* count */ - if (md_user->u_plop.buf && !append_mode) - UserFreeCopyBuffer(md_user); - yend = fore->w_height - 1; - if (fore->w_histheight - markdata->hist_offset < fore->w_height) - { - markdata->second = 0; - yend -= MarkScrollUpDisplay(fore->w_histheight - markdata->hist_offset); - } - if (newcopylen > 0) - { + case ' ': + case '\r': + if (!markdata->second) { + markdata->second++; + markdata->x1 = cx; + markdata->y1 = cy; + revto(cx, cy); + LMsg(0, "First mark set - Column %d Line %d", cx + 1, W2D(cy) + 1); + break; + } else { + int append_mode = markdata->append_mode; + int write_buffer = markdata->write_buffer; + + x2 = cx; + y2 = cy; + newcopylen = rem(markdata->x1, markdata->y1, x2, y2, 2, (char *)0, 0); /* count */ + if (md_user->u_plop.buf && !append_mode) + UserFreeCopyBuffer(md_user); + yend = fore->w_height - 1; + if (fore->w_histheight - markdata->hist_offset < fore->w_height) { + markdata->second = 0; + yend -= MarkScrollUpDisplay(fore->w_histheight - markdata->hist_offset); + } + if (newcopylen > 0) { /* the +3 below is for : cr + lf + \0 */ - if (md_user->u_plop.buf) - md_user->u_plop.buf = realloc(md_user->u_plop.buf, - (unsigned) (md_user->u_plop.len + newcopylen + 3)); - else - { - md_user->u_plop.len = 0; - md_user->u_plop.buf = malloc((unsigned) (newcopylen + 3)); - } - if (!md_user->u_plop.buf) - { - MarkAbort(); - in_mark = 0; - LMsg(0, "Not enough memory... Sorry."); - md_user->u_plop.len = 0; - md_user->u_plop.buf = 0; - break; - } - if (append_mode) - { - switch (markdata->nonl) - { + if (md_user->u_plop.buf) + md_user->u_plop.buf = realloc(md_user->u_plop.buf, (unsigned)(md_user->u_plop.len + newcopylen + 3)); + else { + md_user->u_plop.len = 0; + md_user->u_plop.buf = malloc((unsigned)(newcopylen + 3)); + } + if (!md_user->u_plop.buf) { + MarkAbort(); + in_mark = 0; + LMsg(0, "Not enough memory... Sorry."); + md_user->u_plop.len = 0; + md_user->u_plop.buf = 0; + break; + } + if (append_mode) { + switch (markdata->nonl) { /* * this code defines, what glues lines together */ - case 0: - if (join_with_cr) - { - md_user->u_plop.buf[md_user->u_plop.len] = '\r'; - md_user->u_plop.len++; - } - md_user->u_plop.buf[md_user->u_plop.len] = '\n'; - md_user->u_plop.len++; - break; - case 1: - break; - case 2: - md_user->u_plop.buf[md_user->u_plop.len] = ' '; - md_user->u_plop.len++; - break; - case 3: - md_user->u_plop.buf[md_user->u_plop.len] = ','; - md_user->u_plop.len++; - break; - } - } - md_user->u_plop.len += rem(markdata->x1, markdata->y1, x2, y2, - markdata->hist_offset == fore->w_histheight, - md_user->u_plop.buf + md_user->u_plop.len, yend); + case 0: + if (join_with_cr) { + md_user->u_plop.buf[md_user->u_plop.len] = '\r'; + md_user->u_plop.len++; + } + md_user->u_plop.buf[md_user->u_plop.len] = '\n'; + md_user->u_plop.len++; + break; + case 1: + break; + case 2: + md_user->u_plop.buf[md_user->u_plop.len] = ' '; + md_user->u_plop.len++; + break; + case 3: + md_user->u_plop.buf[md_user->u_plop.len] = ','; + md_user->u_plop.len++; + break; + } + } + md_user->u_plop.len += rem(markdata->x1, + markdata->y1, + x2, + y2, + markdata->hist_offset == fore->w_histheight, + md_user->u_plop.buf + md_user->u_plop.len, + yend); #ifdef ENCODINGS - md_user->u_plop.enc = fore->w_encoding; + md_user->u_plop.enc = fore->w_encoding; #endif - } - if (markdata->hist_offset != fore->w_histheight) - { - LAY_CALL_UP(LRefreshAll(flayer, 0)); - } - ExitOverlayPage(); - WindowChanged(fore, 'P'); - if (append_mode) - LMsg(0, "Appended %d characters to buffer", - newcopylen); - else - LMsg(0, "Copied %d characters into buffer", md_user->u_plop.len); - if (write_buffer) - WriteFile(md_user, (char *)0, DUMP_EXCHANGE); - in_mark = 0; - break; - } - - case 0222: - if (flayer->l_mouseevent.start) - { - int button = flayer->l_mouseevent.buffer[0]; - if (button == 'a') - { - /* Scroll down */ - od = 'j'; - } - else if (button == '`') - { - /* Scroll up */ - od = 'k'; - } - else if (button == ' ') - { - /* Left click */ - cx = flayer->l_mouseevent.buffer[1]; - cy = D2W(flayer->l_mouseevent.buffer[2]); - revto(cx, cy); - od = ' '; - } - else - od = 0; - LayProcessMouseSwitch(flayer, 0); - if (od) - goto processchar; - } - else - LayProcessMouseSwitch(flayer, 1); - break; + } + if (markdata->hist_offset != fore->w_histheight) { + LAY_CALL_UP(LRefreshAll(flayer, 0)); + } + ExitOverlayPage(); + WindowChanged(fore, 'P'); + + if (append_mode) + LMsg(0, "Appended %d characters to buffer", newcopylen); + else + LMsg(0, "Copied %d characters into buffer", md_user->u_plop.len); + + if (write_buffer) + WriteFile(md_user, (char *)0, DUMP_EXCHANGE); + in_mark = 0; + break; + } - default: - MarkAbort(); - LMsg(0, "Copy mode aborted"); - in_mark = 0; - break; + case 0222: + if (flayer->l_mouseevent.start) { + int button = flayer->l_mouseevent.buffer[0]; + if (button == 'a') { + /* Scroll down */ + od = 'j'; + } else if (button == '`') { + /* Scroll up */ + od = 'k'; + } else if (button == ' ') { + /* Left click */ + cx = flayer->l_mouseevent.buffer[1]; + cy = D2W(flayer->l_mouseevent.buffer[2]); + revto(cx, cy); + od = ' '; + } else + od = 0; + LayProcessMouseSwitch(flayer, 0); + if (od) + goto processchar; + } else + LayProcessMouseSwitch(flayer, 1); + break; + + default: + MarkAbort(); + LMsg(0, "Copy mode aborted"); + in_mark = 0; + break; + } + if (in_mark) /* markdata may be freed */ + markdata->rep_cnt = 0; + } + if (in_mark) { + flayer->l_x = markdata->cx; + flayer->l_y = W2D(markdata->cy); } - if (in_mark) /* markdata may be freed */ - markdata->rep_cnt = 0; - } - if (in_mark) - { - flayer->l_x = markdata->cx; - flayer->l_y = W2D(markdata->cy); - } - *inbufp = pt; - *inlenp = inlen; + *inbufp = pt; + *inlenp = inlen; } -void revto(tx, ty) -int tx, ty; +void +revto(int tx, int ty) { - revto_line(tx, ty, -1); + revto_line(tx, ty, -1); } /* tx, ty: WINDOW, line: DISPLAY */ -void revto_line(tx, ty, line) -int tx, ty, line; +void +revto_line(int tx, int ty, int line) { - int fx, fy; - int x, y, t, revst, reven, qq, ff, tt, st, en, ce = 0; - int ystart = 0, yend = fore->w_height-1; - int i, ry; - unsigned char *wi; - struct mline *ml; - struct mchar mc; - - if (tx < 0) - tx = 0; - else if (tx > fore->w_width - 1) - tx = fore->w_width -1; - if (ty < fore->w_histheight - fore->w_scrollback_height) - ty = fore->w_histheight - fore->w_scrollback_height; - else if (ty > fore->w_histheight + fore->w_height - 1) - ty = fore->w_histheight + fore->w_height - 1; - - fx = markdata->cx; fy = markdata->cy; + int fx, fy; + int x, y, t, revst, reven, qq, ff, tt, st, en, ce = 0; + int ystart = 0, yend = fore->w_height - 1; + int i, ry; + unsigned char *wi; + struct mline *ml; + struct mchar mc; + + if (tx < 0) + tx = 0; + else if (tx > fore->w_width - 1) + tx = fore->w_width - 1; + if (ty < fore->w_histheight - fore->w_scrollback_height) + ty = fore->w_histheight - fore->w_scrollback_height; + else if (ty > fore->w_histheight + fore->w_height - 1) + ty = fore->w_histheight + fore->w_height - 1; + + fx = markdata->cx; + fy = markdata->cy; #ifdef DW_CHARS - /* don't just move inside of a kanji, the user wants to see something */ - ml = WIN(ty); - if (ty == fy && fx + 1 == tx && dw_right(ml, tx, fore->w_encoding) && tx < D_width - 1) - tx++; - if (ty == fy && fx - 1 == tx && dw_right(ml, fx, fore->w_encoding) && tx) - tx--; + /* don't just move inside of a kanji, the user wants to see something */ + ml = WIN(ty); + if (ty == fy && fx + 1 == tx && dw_right(ml, tx, fore->w_encoding) && tx < D_width - 1) + tx++; + if (ty == fy && fx - 1 == tx && dw_right(ml, fx, fore->w_encoding) && tx) + tx--; #endif - markdata->cx = tx; markdata->cy = ty; + markdata->cx = tx; + markdata->cy = ty; /* * if we go to a position that is currently offscreen * then scroll the screen */ - i = 0; - if (line >= 0 && line < fore->w_height) - i = W2D(ty) - line; - else if (ty < markdata->hist_offset) - i = ty - markdata->hist_offset; - else if (ty > markdata->hist_offset + (fore->w_height - 1)) - i = ty - markdata->hist_offset - (fore->w_height - 1); - if (i > 0) - yend -= MarkScrollUpDisplay(i); - else if (i < 0) - ystart += MarkScrollDownDisplay(-i); - - if (markdata->second == 0) - { - flayer->l_x = tx; - flayer->l_y = W2D(ty); - LGotoPos(flayer, tx, W2D(ty)); - return; - } - - qq = markdata->x1 + markdata->y1 * fore->w_width; - ff = fx + fy * fore->w_width; /* "from" offset in WIN coords */ - tt = tx + ty * fore->w_width; /* "to" offset in WIN coords*/ - - if (ff > tt) - { - st = tt; en = ff; - x = tx; y = ty; - } - else - { - st = ff; en = tt; - x = fx; y = fy; - } - if (st > qq) - { - st++; - x++; - } - if (en < qq) - en--; - if (tt > qq) - { - revst = qq; reven = tt; - } - else - { - revst = tt; reven = qq; - } - ry = y - markdata->hist_offset; - if (ry < ystart) - { - y += (ystart - ry); - x = 0; - st = y * fore->w_width; - ry = ystart; - } - ml = WIN(y); - for (t = st; t <= en; t++, x++) - { - if (x >= fore->w_width) - { - x = 0; - y++, ry++; - ml = WIN(y); + i = 0; + + if (line >= 0 && line < fore->w_height) + i = W2D(ty) - line; + else if (ty < markdata->hist_offset) + i = ty - markdata->hist_offset; + else if (ty > markdata->hist_offset + (fore->w_height - 1)) + i = ty - markdata->hist_offset - (fore->w_height - 1); + + if (i > 0) + yend -= MarkScrollUpDisplay(i); + else if (i < 0) + ystart += MarkScrollDownDisplay(-i); + + if (markdata->second == 0) { + flayer->l_x = tx; + flayer->l_y = W2D(ty); + LGotoPos(flayer, tx, W2D(ty)); + return; + } + + qq = markdata->x1 + markdata->y1 * fore->w_width; + ff = fx + fy * fore->w_width; /* "from" offset in WIN coords */ + tt = tx + ty * fore->w_width; /* "to" offset in WIN coords*/ + + if (ff > tt) { + st = tt; + en = ff; + x = tx; + y = ty; + } else { + st = ff; + en = tt; + x = fx; + y = fy; + } + + if (st > qq) { + st++; + x++; } - if (ry > yend) - break; - if (t == st || x == 0) - { - wi = ml->image + fore->w_width; - for (ce = fore->w_width; ce >= 0; ce--, wi--) - if (*wi != ' ') - break; + + if (en < qq) + en--; + + if (tt > qq) { + revst = qq; + reven = tt; + } else { + revst = tt; + reven = qq; } - if (x <= ce && x >= markdata->left_mar && x <= markdata->right_mar) - { + ry = y - markdata->hist_offset; + + if (ry < ystart) { + y += (ystart - ry); + x = 0; + st = y * fore->w_width; + ry = ystart; + } + ml = WIN(y); + + for (t = st; t <= en; t++, x++) { + if (x >= fore->w_width) { + x = 0; + y++, ry++; + ml = WIN(y); + } + if (ry > yend) + break; + if (t == st || x == 0) { + wi = ml->image + fore->w_width; + for (ce = fore->w_width; ce >= 0; ce--, wi--) + if (*wi != ' ') + break; + } + + if (x <= ce && x >= markdata->left_mar && x <= markdata->right_mar) { #ifdef DW_CHARS - if (dw_right(ml, x, fore->w_encoding)) - { - if (t == revst) - revst--; - t--; - x--; - } + if (dw_right(ml, x, fore->w_encoding)) { + if (t == revst) + revst--; + t--; + x--; + } #endif - if (t >= revst && t <= reven) - { - mc = mchar_so; + if (t >= revst && t <= reven) { + mc = mchar_so; #ifdef FONT - if (pastefont) - { - mc.font = ml->font[x]; - mc.fontx = ml->fontx[x]; - } + if (pastefont) { + mc.font = ml->font[x]; + mc.fontx = ml->fontx[x]; + } #endif - mc.image = ml->image[x]; - } - else - copy_mline2mchar(&mc, ml, x); + mc.image = ml->image[x]; + } else + copy_mline2mchar(&mc, ml, x); #ifdef DW_CHARS - if (dw_left(ml, x, fore->w_encoding)) - { - mc.mbcs = ml->image[x + 1]; - LPutChar(flayer, &mc, x, W2D(y)); - t++; - } + if (dw_left(ml, x, fore->w_encoding)) { + mc.mbcs = ml->image[x + 1]; + LPutChar(flayer, &mc, x, W2D(y)); + t++; + } #endif - LPutChar(flayer, &mc, x, W2D(y)); + LPutChar(flayer, &mc, x, W2D(y)); #ifdef DW_CHARS - if (dw_left(ml, x, fore->w_encoding)) - x++; + if (dw_left(ml, x, fore->w_encoding)) + x++; #endif + } } - } - flayer->l_x = tx; - flayer->l_y = W2D(ty); - LGotoPos(flayer, tx, W2D(ty)); + flayer->l_x = tx; + flayer->l_y = W2D(ty); + LGotoPos(flayer, tx, W2D(ty)); } static void MarkAbort() { - int yend, redisp; - - debug("MarkAbort\n"); - markdata = (struct markdata *)flayer->l_data; - fore = markdata->md_window; - yend = fore->w_height - 1; - redisp = markdata->second; - if (fore->w_histheight - markdata->hist_offset < fore->w_height) - { - markdata->second = 0; - yend -= MarkScrollUpDisplay(fore->w_histheight - markdata->hist_offset); - } - if (markdata->hist_offset != fore->w_histheight) - { - LAY_CALL_UP(LRefreshAll(flayer, 0)); - } - else - { - rem(markdata->x1, markdata->y1, markdata->cx, markdata->cy, redisp, (char *)0, yend); - } - ExitOverlayPage(); - WindowChanged(fore, 'P'); + int yend, redisp; + + debug("MarkAbort\n"); + markdata = (struct markdata *)flayer->l_data; + fore = markdata->md_window; + yend = fore->w_height - 1; + redisp = markdata->second; + if (fore->w_histheight - markdata->hist_offset < fore->w_height) { + markdata->second = 0; + yend -= MarkScrollUpDisplay(fore->w_histheight - markdata->hist_offset); + } + if (markdata->hist_offset != fore->w_histheight) { + LAY_CALL_UP(LRefreshAll(flayer, 0)); + } else { + rem(markdata->x1, markdata->y1, markdata->cx, markdata->cy, redisp, (char *)0, yend); + } + ExitOverlayPage(); + WindowChanged(fore, 'P'); } - static void -MarkRedisplayLine(y, xs, xe, isblank) -int y; /* NOTE: y is in DISPLAY coords system! */ -int xs, xe; -int isblank; +MarkRedisplayLine(int y, int xs, int xe, int isblank) /* NOTE: y is in DISPLAY coords system! */ { - int wy, x, i, rm; - int sta, sto, cp; /* NOTE: these 3 are in WINDOW coords system */ - unsigned char *wi; - struct mline *ml; - struct mchar mchar_marked; - - if (y < 0) /* No special full page handling */ - return; - - markdata = (struct markdata *)flayer->l_data; - fore = markdata->md_window; - - mchar_marked = mchar_so; - - wy = D2W(y); - ml = WIN(wy); - - if (markdata->second == 0) - { - if (dw_right(ml, xs, fore->w_encoding) && xs > 0) - xs--; - if (dw_left(ml, xe, fore->w_encoding) && xe < fore->w_width - 1) - xe++; - if (xs == 0 && y > 0 && wy > 0 && WIN(wy - 1)->image[flayer->l_width] == 0) - LCDisplayLineWrap(flayer, ml, y, xs, xe, isblank); - else - LCDisplayLine(flayer, ml, y, xs, xe, isblank); - return; - } - - sta = markdata->y1 * fore->w_width + markdata->x1; - sto = markdata->cy * fore->w_width + markdata->cx; - if (sta > sto) - { - i=sta; sta=sto; sto=i; - } - cp = wy * fore->w_width + xs; - - rm = markdata->right_mar; - for (x = fore->w_width, wi = ml->image + fore->w_width; x >= 0; x--, wi--) - if (*wi != ' ') - break; - if (x < rm) - rm = x; - - for (x = xs; x <= xe; x++, cp++) - if (cp >= sta && x >= markdata->left_mar) - break; + int wy, x, i, rm; + int sta, sto, cp; /* NOTE: these 3 are in WINDOW coords system */ + unsigned char *wi; + struct mline *ml; + struct mchar mchar_marked; + + if (y < 0) /* No special full page handling */ + return; + + markdata = (struct markdata *)flayer->l_data; + fore = markdata->md_window; + + mchar_marked = mchar_so; + + wy = D2W(y); + ml = WIN(wy); + + if (markdata->second == 0) { + if (dw_right(ml, xs, fore->w_encoding) && xs > 0) + xs--; + if (dw_left(ml, xe, fore->w_encoding) && xe < fore->w_width - 1) + xe++; + if (xs == 0 && y > 0 && wy > 0 && WIN(wy - 1)->image[flayer->l_width] == 0) + LCDisplayLineWrap(flayer, ml, y, xs, xe, isblank); + else + LCDisplayLine(flayer, ml, y, xs, xe, isblank); + return; + } + + sta = markdata->y1 * fore->w_width + markdata->x1; + sto = markdata->cy * fore->w_width + markdata->cx; + if (sta > sto) { + i = sta; + sta = sto; + sto = i; + } + cp = wy * fore->w_width + xs; + + rm = markdata->right_mar; + for (x = fore->w_width, wi = ml->image + fore->w_width; x >= 0; x--, wi--) + if (*wi != ' ') + break; + if (x < rm) + rm = x; + + for (x = xs; x <= xe; x++, cp++) + if (cp >= sta && x >= markdata->left_mar) + break; #ifdef DW_CHARS - if (dw_right(ml, x, fore->w_encoding)) - x--; + if (dw_right(ml, x, fore->w_encoding)) + x--; #endif - if (x > xs) - LCDisplayLine(flayer, ml, y, xs, x - 1, isblank); - for (; x <= xe; x++, cp++) - { - if (cp > sto || x > rm) - break; + if (x > xs) + LCDisplayLine(flayer, ml, y, xs, x - 1, isblank); + for (; x <= xe; x++, cp++) { + if (cp > sto || x > rm) + break; #ifdef FONT - if (pastefont) - { - mchar_marked.font = ml->font[x]; - mchar_marked.fontx = ml->fontx[x]; - } + if (pastefont) { + mchar_marked.font = ml->font[x]; + mchar_marked.fontx = ml->fontx[x]; + } #endif - mchar_marked.image = ml->image[x]; + mchar_marked.image = ml->image[x]; #ifdef DW_CHARS - mchar_marked.mbcs = 0; - if (dw_left(ml, x, fore->w_encoding)) - { - mchar_marked.mbcs = ml->image[x + 1]; - cp++; - } + mchar_marked.mbcs = 0; + if (dw_left(ml, x, fore->w_encoding)) { + mchar_marked.mbcs = ml->image[x + 1]; + cp++; + } #endif - LPutChar(flayer, &mchar_marked, x, y); + LPutChar(flayer, &mchar_marked, x, y); #ifdef DW_CHARS - if (dw_left(ml, x, fore->w_encoding)) - x++; + if (dw_left(ml, x, fore->w_encoding)) + x++; #endif - } - if (x <= xe) - LCDisplayLine(flayer, ml, y, x, xe, isblank); + } + if (x <= xe) + LCDisplayLine(flayer, ml, y, x, xe, isblank); } - /* * This ugly routine is to speed up GotoPos() */ static int -MarkRewrite(ry, xs, xe, rend, doit) -int ry, xs, xe, doit; -struct mchar *rend; +MarkRewrite(int ry, int xs, int xe, struct mchar *rend, int doit) { - int dx, x, y, st, en, t, rm; - unsigned char *i; - struct mline *ml; - struct mchar mchar_marked; - - mchar_marked = mchar_so; - - debug3("MarkRewrite %d, %d-%d\n", ry, xs, xe); - markdata = (struct markdata *)flayer->l_data; - fore = markdata->md_window; - y = D2W(ry); - ml = WIN(y); + int dx, x, y, st, en, t, rm; + unsigned char *i; + struct mline *ml; + struct mchar mchar_marked; + + mchar_marked = mchar_so; + + debug3("MarkRewrite %d, %d-%d\n", ry, xs, xe); + markdata = (struct markdata *)flayer->l_data; + fore = markdata->md_window; + y = D2W(ry); + ml = WIN(y); #ifdef UTF8 - if (fore->w_encoding && fore->w_encoding != UTF8 && D_encoding == UTF8 && ContainsSpecialDeffont(ml, xs, xe, fore->w_encoding)) - return EXPENSIVE; + if (fore->w_encoding && fore->w_encoding != UTF8 && D_encoding == UTF8 && ContainsSpecialDeffont(ml, xs, xe, fore->w_encoding)) + return EXPENSIVE; #endif - dx = xe - xs + 1; - if (doit) - { - i = ml->image + xs; - while (dx--) - PUTCHAR(*i++); - return 0; - } - - if (markdata->second == 0) - st = en = -1; - else - { - st = markdata->y1 * fore->w_width + markdata->x1; - en = markdata->cy * fore->w_width + markdata->cx; - if (st > en) - { - t = st; st = en; en = t; - } - } - t = y * fore->w_width + xs; - for (rm = fore->w_width, i = ml->image + fore->w_width; rm >= 0; rm--) - if (*i-- != ' ') - break; - if (rm > markdata->right_mar) - rm = markdata->right_mar; - x = xs; - while (dx--) - { - if (t >= st && t <= en && x >= markdata->left_mar && x <= rm) - { + dx = xe - xs + 1; + if (doit) { + i = ml->image + xs; + while (dx--) + PUTCHAR(*i++); + return 0; + } + + if (markdata->second == 0) + st = en = -1; + else { + st = markdata->y1 * fore->w_width + markdata->x1; + en = markdata->cy * fore->w_width + markdata->cx; + if (st > en) { + t = st; + st = en; + en = t; + } + } + t = y * fore->w_width + xs; + for (rm = fore->w_width, i = ml->image + fore->w_width; rm >= 0; rm--) + if (*i-- != ' ') + break; + if (rm > markdata->right_mar) + rm = markdata->right_mar; + x = xs; + while (dx--) { + if (t >= st && t <= en && x >= markdata->left_mar && x <= rm) { #ifdef FONT - if (pastefont) - { - mchar_marked.font = ml->font[x]; - mchar_marked.fontx = ml->fontx[x]; - } + if (pastefont) { + mchar_marked.font = ml->font[x]; + mchar_marked.fontx = ml->fontx[x]; + } #endif - rend->image = mchar_marked.image; - if (!cmp_mchar(rend, &mchar_marked)) - return EXPENSIVE; - } - else - { - rend->image = ml->image[x]; - if (!cmp_mchar_mline(rend, ml, x)) - return EXPENSIVE; - } - x++; - } - return xe - xs + 1; + rend->image = mchar_marked.image; + if (!cmp_mchar(rend, &mchar_marked)) + return EXPENSIVE; + } else { + rend->image = ml->image[x]; + if (!cmp_mchar_mline(rend, ml, x)) + return EXPENSIVE; + } + x++; + } + return xe - xs + 1; } - /* * scroll the screen contents up/down. */ -static int MarkScrollUpDisplay(n) -int n; +static int +MarkScrollUpDisplay(int n) { - int i; - - debug1("MarkScrollUpDisplay(%d)\n", n); - if (n <= 0) - return 0; - if (n > fore->w_histheight - markdata->hist_offset) - n = fore->w_histheight - markdata->hist_offset; - markdata->hist_offset += n; - i = (n < flayer->l_height) ? n : (flayer->l_height); - LScrollV(flayer, i, 0, flayer->l_height - 1, 0); - while (i-- > 0) - MarkRedisplayLine(flayer->l_height - i - 1, 0, flayer->l_width - 1, 1); - return n; + int i; + + debug1("MarkScrollUpDisplay(%d)\n", n); + if (n <= 0) + return 0; + if (n > fore->w_histheight - markdata->hist_offset) + n = fore->w_histheight - markdata->hist_offset; + + markdata->hist_offset += n; + i = (n < flayer->l_height) ? n : (flayer->l_height); + LScrollV(flayer, i, 0, flayer->l_height - 1, 0); + while (i-- > 0) + MarkRedisplayLine(flayer->l_height - i - 1, 0, flayer->l_width - 1, 1); + return n; } static int -MarkScrollDownDisplay(n) -int n; +MarkScrollDownDisplay(int n) { - int i; - - debug1("MarkScrollDownDisplay(%d)\n", n); - if (n <= 0) - return 0; - if (n > markdata->hist_offset) - n = markdata->hist_offset; - markdata->hist_offset -= n; - i = (n < flayer->l_height) ? n : (flayer->l_height); - LScrollV(flayer, -i, 0, fore->w_height - 1, 0); - while (i-- > 0) - MarkRedisplayLine(i, 0, flayer->l_width - 1, 1); - return n; + int i; + + debug1("MarkScrollDownDisplay(%d)\n", n); + if (n <= 0) + return 0; + if (n > markdata->hist_offset) + n = markdata->hist_offset; + markdata->hist_offset -= n; + i = (n < flayer->l_height) ? n : (flayer->l_height); + LScrollV(flayer, -i, 0, fore->w_height - 1, 0); + while (i-- > 0) + MarkRedisplayLine(i, 0, flayer->l_width - 1, 1); + return n; } void -MakePaster(pa, buf, len, bufiscopy) -struct paster *pa; -char *buf; -int len; -int bufiscopy; +MakePaster(struct paster *pa, char *buf, int len, int bufiscopy) { - FreePaster(pa); - pa->pa_pasteptr = buf; - pa->pa_pastelen = len; - if (bufiscopy) - pa->pa_pastebuf = buf; - pa->pa_pastelayer = flayer; - DoProcess(Layer2Window(flayer), &pa->pa_pasteptr, &pa->pa_pastelen, pa); + FreePaster(pa); + pa->pa_pasteptr = buf; + pa->pa_pastelen = len; + if (bufiscopy) + pa->pa_pastebuf = buf; + pa->pa_pastelayer = flayer; + DoProcess(Layer2Window(flayer), &pa->pa_pasteptr, &pa->pa_pastelen, pa); } void -FreePaster(pa) -struct paster *pa; +FreePaster(struct paster *pa) { - if (pa->pa_pastebuf) - free(pa->pa_pastebuf); - pa->pa_pastebuf = 0; - pa->pa_pasteptr = 0; - pa->pa_pastelen = 0; - pa->pa_pastelayer = 0; - evdeq(&pa->pa_slowev); + if (pa->pa_pastebuf) + free(pa->pa_pastebuf); + pa->pa_pastebuf = 0; + pa->pa_pasteptr = 0; + pa->pa_pastelen = 0; + pa->pa_pastelayer = 0; + evdeq(&pa->pa_slowev); } #endif /* COPY_PASTE */ |