Annotation of researchv9/jerq/src/sam/term/ptofchar.c, revision 1.1.1.1

1.1       root        1: #include "frame.h"
                      2: 
                      3: Point
                      4: ptofcharptb(f, p, pt, bn)
                      5:        register Frame *f;
                      6:        Posn p;
                      7:        Point pt;
                      8:        register bn;
                      9: {
                     10:        register uchar *s;
                     11:        register Box *b;
                     12:        register l;
                     13:        for(b=&f->box[bn]; bn<f->nbox; bn++,b++){
                     14:                cklinewrap(f, &pt, b);
                     15:                if(p<(l=LEN(b))){
                     16:                        if(b->len>0)
                     17:                                for(s=b->ptr; p>0; s++, p--){
                     18:                                        pt.x+=f->font->info[*s].width;
                     19:                                        if(*s==0 || pt.x>f->r.corner.x)
                     20:                                                panic("ptofchar");
                     21:                                }
                     22:                        break;
                     23:                }
                     24:                p-=l;
                     25:                advance(f, &pt, b);
                     26:        }
                     27:        return pt;
                     28: }
                     29: Point
                     30: ptofchar(f, p)
                     31:        Frame *f;
                     32:        Posn p;
                     33: {
                     34:        return ptofcharptb(f, p, Pt(f->left, f->r.origin.y), 0);
                     35: }
                     36: Point
                     37: ptofcharnb(f, p, nb)   /* doesn't do final advance to next line */
                     38:        Frame *f;
                     39:        Posn p;
                     40: {
                     41:        Point pt;
                     42:        int nbox;
                     43:        nbox=f->nbox;
                     44:        f->nbox=nb;
                     45:        pt=ptofcharptb(f, p, Pt(f->left, f->r.origin.y), 0);
                     46:        f->nbox=nbox;
                     47:        return pt;
                     48: }
                     49: Point
                     50: grid(f, p)
                     51:        register Frame *f;
                     52:        Point p;
                     53: {
                     54:        p.y-=f->r.origin.y;
                     55:        p.y-=p.y%f->font->height;
                     56:        p.y+=f->r.origin.y;
                     57:        if(p.x>f->r.corner.x)
                     58:                p.x=f->r.corner.x;
                     59:        return p;
                     60: }
                     61: Posn
                     62: charofpt(f, pt)
                     63:        register Frame *f;
                     64:        Point pt;
                     65: {
                     66:        Point qt;
                     67:        register bn;
                     68:        register uchar *s;
                     69:        register Box *b;
                     70:        Posn p;
                     71:        pt=grid(f, pt);
                     72:        qt.x=f->left, qt.y=f->r.origin.y;
                     73:        for(b=f->box,bn=0,p=0; bn<f->nbox && qt.y<pt.y; bn++,b++){
                     74:                cklinewrap(f, &qt, b);
                     75:                if(qt.y>=pt.y)
                     76:                        break;
                     77:                advance(f, &qt, b);
                     78:                p+=LEN(b);
                     79:        }
                     80:        for(; bn<f->nbox && qt.x<=pt.x; bn++,b++){
                     81:                cklinewrap(f, &qt, b);
                     82:                if(qt.y>pt.y)
                     83:                        break;
                     84:                if(qt.x+b->wid>pt.x){
                     85:                        if(b->len<0)
                     86:                                advance(f, &qt, b);
                     87:                        else for(s=b->ptr; (qt.x+=f->font->info[*s++].width)<=pt.x; p++)
                     88:                                if(*s==0)
                     89:                                        panic("end of string in charofpt");
                     90:                }else{
                     91:                        p+=abs(b->len);
                     92:                        advance(f, &qt, b);
                     93:                }
                     94:        }
                     95:        return p;
                     96: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.