9 _frptofcharptb(Frame *f, ulong p, Point pt, int bn)
16 for(b = &f->box[bn]; bn<f->nbox; bn++,b++){
17 _frcklinewrap(f, &pt, b);
20 for(s=b->ptr; p>0; s+=w, p--){
21 if((r = *s) < Runeself)
24 w = chartorune(&r, (char*)s);
25 pt.x += stringnwidth(f->font, (char*)s, 1);
26 if(r==0 || pt.x>f->r.max.x)
27 drawerror(f->display, "frptofchar");
32 _fradvance(f, &pt, b);
38 frptofchar(Frame *f, ulong p)
40 return _frptofcharptb(f, p, f->r.min, 0);
44 _frptofcharnb(Frame *f, ulong p, int nb) /* doesn't do final _fradvance to next line */
51 pt = _frptofcharptb(f, p, f->r.min, 0);
58 _frgrid(Frame *f, Point p)
61 p.y -= p.y%f->font->height;
69 frcharofpt(Frame *f, Point pt)
80 for(b=f->box,bn=0,p=0; bn<f->nbox && qt.y<pt.y; bn++,b++){
81 _frcklinewrap(f, &qt, b);
84 _fradvance(f, &qt, b);
87 for(; bn<f->nbox && qt.x<=pt.x; bn++,b++){
88 _frcklinewrap(f, &qt, b);
91 if(qt.x+b->wid > pt.x){
93 _fradvance(f, &qt, b);
97 if((r = *s) < Runeself)
100 w = chartorune(&r, (char*)s);
102 drawerror(f->display, "end of string in frcharofpt");
103 qt.x += stringnwidth(f->font, (char*)s, 1);
112 _fradvance(f, &qt, b);