Annotation of researchv9/jtools/src/sux/frameop.c, revision 1.1

1.1     ! root        1: #include <jerq.h>
        !             2: #include "frame.h"
        !             3: 
        !             4: Point endpoint;
        !             5: nexttab(t, x)
        !             6:        Frame *t;
        !             7: {
        !             8:        int eightspaces=cwidth(c)<<3;
        !             9:        register xx=x-t->rect.origin.x;
        !            10:        return(xx-(xx%eightspaces)+eightspaces+t->rect.origin.x);
        !            11: }
        !            12: void opshow();
        !            13: int complete;
        !            14: frameop(t, op, pt, cp, n)
        !            15:        register Frame *t;
        !            16:        register void (*op)();
        !            17:        Point pt;
        !            18:        register unsigned char *cp;
        !            19:        register n;
        !            20: {
        !            21:        register i, j;
        !            22:        Point startpt;
        !            23:        register unsigned char *startcp;
        !            24:        complete=0;
        !            25:        endpoint=pt;
        !            26:        i=0;    /* Not in for(;;) because of \t's */
        !            27:     Top_of_loop:
        !            28:        endpoint=pt;
        !            29:        for(j=0,startpt=pt,startcp=cp; ; i++,j++,cp++){
        !            30:     Continue:
        !            31:                if(i>=n)
        !            32:                        break;
        !            33:                if(*cp=='\n'){
        !            34:                        i++, j++, cp++;
        !            35:            Emit_newline:
        !            36:                        pt.x=t->rect.corner.x;
        !            37:                        endpoint=pt;
        !            38:                        /* must do this even if j==0 */
        !            39:                        (*op)(t, startpt, pt, startcp, j);
        !            40:                        j=0;
        !            41:                        startpt.x=t->rect.origin.x;
        !            42:                        startpt.y+=newlnsz;
        !            43:                        if(startpt.y >= t->rect.corner.y)       /* off screen */
        !            44:                                return;
        !            45:                        pt=startpt;
        !            46:                        startcp=cp;
        !            47:                        goto Continue;
        !            48:                }else if(*cp == '\t'){
        !            49:                        if(j > 0){
        !            50:                                /* Emit what's saved up */
        !            51:                                (*op)(t, startpt, pt, startcp, j);
        !            52:                                goto Top_of_loop;
        !            53:                        }
        !            54:                        if((pt.x=nexttab(t, pt.x)) > t->rect.corner.x)
        !            55:                                goto Emit_newline;
        !            56:                        (*op)(t, startpt, pt, cp++, 1);
        !            57:                        i++;
        !            58:                        goto Top_of_loop;
        !            59:                }else if(*cp!='\r' && *cp<=fontnchars(&defont))
        !            60:                        if((pt.x+=cwidth(*cp)) > t->rect.corner.x)
        !            61:                                goto Emit_newline;
        !            62:        }
        !            63:        if(startpt.y < t->rect.corner.y){
        !            64:                endpoint=pt;
        !            65:                (*op)(t, startpt, pt, startcp, j);
        !            66:                complete=1;
        !            67:        }
        !            68: }
        !            69: char genbuf[100];
        !            70: void
        !            71: opdraw(t, p, q, cp, n)
        !            72:        Frame *t;
        !            73:        Point p, q;
        !            74:        register unsigned char *cp;
        !            75:        register n;
        !            76: {
        !            77:        register char *gp=genbuf;
        !            78:        while(n--){
        !            79:                if(*cp!='\n' && *cp!='\t' && *cp!='\r')
        !            80:                        *gp++= *cp;
        !            81:                cp++;
        !            82:        }
        !            83:        *gp=0;
        !            84:        p.x++;
        !            85:        string(&defont, genbuf, D, p, F_XOR);
        !            86: }
        !            87: draw(t, p, s, n)
        !            88:        Frame *t;
        !            89:        Point p;
        !            90:        char *s;
        !            91:        int n;
        !            92: {
        !            93:        frameop(t, opdraw, p, s, n);
        !            94: }
        !            95: 
        !            96: int    F_rectf;
        !            97: /*ARGSUSED*/
        !            98: void
        !            99: oprectf(t, p, q, str, n)
        !           100:        register Frame *t;
        !           101:        Point p, q;
        !           102:        char *str;
        !           103:        short n;
        !           104: {
        !           105:        rectf(D, Rpt(p, Pt(q.x, q.y+newlnsz)), F_rectf);
        !           106: }
        !           107: 
        !           108: /*ARGSUSED*/
        !           109: void
        !           110: opclear(t, p, q, str, n)
        !           111:        register Frame *t;
        !           112:        Point p, q;
        !           113:        char *str;
        !           114:        short n;
        !           115: {
        !           116:        clear(Rpt(p, Pt(q.x, q.y+newlnsz)), 1);
        !           117: }
        !           118: 
        !           119: selectf(t, f)
        !           120:        register Frame *t;
        !           121: {
        !           122:        F_rectf=f;
        !           123:        frameop(t, oprectf, ptofchar(t, t->s1), t->str.s+t->s1, t->s2-t->s1);
        !           124: }
        !           125: void
        !           126: opnull()
        !           127: {}
        !           128: rXOR(r)        /* a space-saving routine */
        !           129:        Rectangle r;
        !           130: {
        !           131:        rectf(D, r, F_XOR);
        !           132: }
        !           133: Rectf(r, f)
        !           134:        Rectangle r;
        !           135:        Code f;
        !           136: {
        !           137:        rectf(D, r, f);
        !           138: }

unix.superglobalmegacorp.com

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