|
|
1.1 ! root 1: #include <jerq.h> ! 2: #include <layer.h> ! 3: #include <queue.h> ! 4: #include <jerqproc.h> ! 5: #include "frame.h" ! 6: ! 7: #define INFINITY 32767 ! 8: ! 9: deltext(t, s1, s2) ! 10: register Frame *t; ! 11: { ! 12: register char *p, *q, *r; ! 13: register n, y1, y2; ! 14: Point pt; ! 15: frameop(t, opclear, ptofchar(t, s1), t->str.s+s1, s2-s1); ! 16: p=t->str.s+s2; ! 17: r=t->str.s+t->str.n; ! 18: for(n=0,q=p; q<r && *q!='\n'; q++) ! 19: n++; ! 20: /* Found the '\n' at the end of this line; clear out */ ! 21: frameop(t, opclear, ptofchar(t, s2), p, n); ! 22: y1=endpoint.y; /* current y position of '\n' at p[n] */ ! 23: /* Draw rest of line at new place */ ! 24: pt=ptofchar(t, s1); ! 25: draw(t, pt, p, n); ! 26: y2=endpoint.y; ! 27: if(y1 != y2){ /* More housekeeping */ ! 28: /* NOTE: y1 > y2 */ ! 29: y1+=newlnsz; ! 30: y2+=newlnsz; ! 31: /* Scroll up */ ! 32: Ubitblt(D, Rect(t->rect.origin.x, y1, ! 33: t->rect.corner.x, t->rect.corner.y), ! 34: D, Pt(t->rect.origin.x, y2), F_STORE); ! 35: /* Clear the rest */ ! 36: clear(Rpt(Pt(t->rect.origin.x, t->rect.corner.y-(y1-y2)), ! 37: t->rect.corner), 1); ! 38: y1-=newlnsz; ! 39: y2-=newlnsz; ! 40: } ! 41: y1=lineno(t, y1); ! 42: y2=lineno(t, y2); ! 43: delstring(&t->str, s1, s2); ! 44: if(y1 == y2) ! 45: setcpl(t, lineno(t, pt.y), y1); ! 46: else ! 47: setcpl(t, 0, t->nlines-1); /* SLOW, correct */ ! 48: if(y1 != y2){ ! 49: n=charofpt(t, Pt(0, (t->nlines-(y1-y2)) ! 50: *newlnsz+t->rect.origin.y)); /* Re-use of n */ ! 51: /* n is last visible char */ ! 52: draw(t, ptofchar(t, n), t->str.s+n, t->str.n-n); ! 53: if(complete) ! 54: return TRUE; ! 55: } ! 56: return FALSE; ! 57: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.