past the end of the line so that scrolling if turned on will not scroll
automatically unless another character is requested to be added.
SCCS-vsn: lib/libcurses/addbytes.c 5.10
-static char sccsid[] = "@(#)addbytes.c 5.9 (Berkeley) %G%";
+static char sccsid[] = "@(#)addbytes.c 5.10 (Berkeley) %G%";
#endif /* not lint */
#include <curses.h>
#endif /* not lint */
#include <curses.h>
-#ifdef DEBUG
- __TRACE("ADDBYTES: 1: y = %d, x = %d, firstch = %d, lastch = %d\n",
- y, x, win->lines[y]->firstch, win->lines[y]->lastch);
-#endif
if (win->flags & __WSTANDOUT)
c |= __STANDOUT;
#ifdef DEBUG
__TRACE("ADDBYTES(%0.2o, %d, %d)\n", win, y, x);
#endif
if (win->flags & __WSTANDOUT)
c |= __STANDOUT;
#ifdef DEBUG
__TRACE("ADDBYTES(%0.2o, %d, %d)\n", win, y, x);
#endif
+ lp = win->lines[y];
+ if (lp->flags & __ISPASTEOL) {
+ lp->flags &= ~__ISPASTEOL;
+newline: if (y == win->maxy - 1) {
+ if (win->flags & __SCROLLOK) {
+ x = 0;
+ SYNCH_OUT;
+ scroll(win);
+ SYNCH_IN;
+ lp = win->lines[y];
+ }
+ } else {
+ y++;
+ lp = win->lines[y];
+ x = 0;
+ }
+ }
+
+
+#ifdef DEBUG
+ __TRACE("ADDBYTES: 1: y = %d, x = %d, firstch = %d, lastch = %d\n",
+ y, x, win->lines[y]->firstch, win->lines[y]->lastch);
+#endif
if (lp->line[x] != c) {
newx = x + win->ch_off;
if (!(lp->flags & __ISDIRTY)) {
if (lp->line[x] != c) {
newx = x + win->ch_off;
if (!(lp->flags & __ISDIRTY)) {
#endif
}
lp->line[x] = c;
#endif
}
lp->line[x] = c;
- if (++x >= win->maxx) {
- x = 0;
-newline: if (++y >= win->maxy)
- if (win->flags & __SCROLLOK) {
- SYNCH_OUT;
- scroll(win);
- SYNCH_IN;
- --y;
- } else
- return (ERR);
- }
+ if (x == win->maxx - 1)
+ lp->flags |= __ISPASTEOL;
+ else
+ x++;
#ifdef DEBUG
__TRACE("ADDBYTES: 2: y = %d, x = %d, firstch = %d, lastch = %d\n",
y, x, win->lines[y]->firstch, win->lines[y]->lastch);
#ifdef DEBUG
__TRACE("ADDBYTES: 2: y = %d, x = %d, firstch = %d, lastch = %d\n",
y, x, win->lines[y]->firstch, win->lines[y]->lastch);
SYNCH_OUT;
return (OK);
}
SYNCH_OUT;
return (OK);
}