8 _frptofcharptb(Frame *f, ulong p, Point pt, int bn)
15 for(b = &f->box[bn]; bn<f->nbox; bn++,b++){
16 _frcklinewrap(f, &pt, b);
19 for(s=b->ptr; p>0; s+=w, p--){
20 if((r = *s) < Runeself)
23 w = chartorune(&r, (char*)s);
24 pt.x += stringnwidth(f->font, (char*)s, 1);
25 if(r==0 || pt.x>f->r.max.x)
26 drawerror(f->display, "frptofchar");
31 _fradvance(f, &pt, b);
37 frptofchar(Frame *f, ulong p)
39 return _frptofcharptb(f, p, f->r.min, 0);
43 _frptofcharnb(Frame *f, ulong p, int nb) /* doesn't do final _fradvance to next line */
50 pt = _frptofcharptb(f, p, f->r.min, 0);
57 _frgrid(Frame *f, Point p)
60 p.y -= p.y%f->font->height;
68 frcharofpt(Frame *f, Point pt)
79 for(b=f->box,bn=0,p=0; bn<f->nbox && qt.y<pt.y; bn++,b++){
80 _frcklinewrap(f, &qt, b);
83 _fradvance(f, &qt, b);
86 for(; bn<f->nbox && qt.x<=pt.x; bn++,b++){
87 _frcklinewrap(f, &qt, b);
90 if(qt.x+b->wid > pt.x){
92 _fradvance(f, &qt, b);
96 if((r = *s) < Runeself)
99 w = chartorune(&r, (char*)s);
101 drawerror(f->display, "end of string in frcharofpt");
102 qt.x += stringnwidth(f->font, (char*)s, 1);
111 _fradvance(f, &qt, b);