|
|
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.