|
|
1.1 ! root 1: #include <jerq.h> ! 2: #include <layer.h> ! 3: #include <queue.h> ! 4: #include <jerqproc.h> ! 5: #include "frame.h" ! 6: int inscomplete; ! 7: #define MAXEXTRA 1024 /* max # chars off end of screen */ ! 8: instext(t, s, sn) ! 9: register Frame *t; ! 10: register String *s; ! 11: register sn; /* char number at which to insert */ ! 12: { ! 13: register char *p, *q, *r; ! 14: register n, y1, y2; ! 15: Point sp; /* point on screen */ ! 16: sp=ptofchar(t, sn); ! 17: p=t->str.s+sn; ! 18: r=t->str.s+t->str.n; ! 19: for(n=0,q=p; q<r && *q!='\n'; q++) ! 20: n++; ! 21: /* n is #chars to next '\n' */ ! 22: frameop(t, opnull, sp, s->s, s->n); ! 23: frameop(t, opnull, endpoint, p, n); ! 24: y2=endpoint.y; /* where p[n] will end up */ ! 25: draw(t, sp, p, n); /* undraws, leaves endpoint */ ! 26: y1=endpoint.y; /* where p[n] is now */ ! 27: insstring(&t->str, sn, s); /* build new string */ ! 28: if(y1 != y2){ /* bitblt up a hole */ ! 29: y1+=newlnsz; /* BOTTOM of char */ ! 30: y2+=newlnsz; ! 31: Ubitblt(D, Rect(t->rect.origin.x, y1, ! 32: t->rect.corner.x, t->rect.corner.y-(y2-y1)), ! 33: D, Pt(t->rect.origin.x, y2), F_STORE); ! 34: clear(Rect(t->rect.origin.x, y1, t->rect.corner.x, y2), 1); ! 35: y1=(y1-t->rect.origin.y)/newlnsz-1; ! 36: y2=(y2-t->rect.origin.y)/newlnsz-1; ! 37: scrollcpl(t, t->nlines-1-(y2-y1), y1, y2-y1); ! 38: }else ! 39: y2=(y2-t->rect.origin.y)/newlnsz; ! 40: draw(t, sp, t->str.s+sn, n+s->n); /* redraw this line */ ! 41: inscomplete=complete; /* cough! */ ! 42: setcpl(t, (ptofchar(t, sn).y-t->rect.origin.y)/newlnsz, y2); ! 43: #ifdef garbage ! 44: n=charofpt(t, Pt(XMAX, YMAX)); /* Re-use of n */ ! 45: if(t->str.n-n > MAXEXTRA) ! 46: delstring(&t->str, n+MAXEXTRA/2, t->str.n); ! 47: #endif ! 48: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.