Annotation of researchv9/jtools/src/sam/moveto.c, revision 1.1.1.1

1.1       root        1: #include "sam.h"
                      2: 
                      3: moveto(f, r)
                      4:        register File *f;
                      5:        Range r;
                      6: {
                      7:        register Posn p1=r.p1, p2=r.p2;
                      8:        f->dot.r.p1=p1;
                      9:        f->dot.r.p2=p2;
                     10:        if(f->rasp){
                     11:                telldot(f);
                     12:                outTsl(Hmoveto, f->tag, f->dot.r.p1);
                     13:        }
                     14: }
                     15: telldot(f)
                     16:        register File *f;
                     17: {
                     18:        if(f->rasp==0)
                     19:                panic("telldot");
                     20:        if(f->dot.r.p1==f->tdot.p1 && f->dot.r.p2==f->tdot.p2)
                     21:                return;
                     22:        outTsll(Hsetdot, f->tag, f->dot.r.p1, f->dot.r.p2);
                     23:        f->tdot=f->dot.r;
                     24: }
                     25: tellpat()
                     26: {
                     27:        uchar buf[16];
                     28:        bcopy(lastpat.s, lastpat.s+15, buf, 1);
                     29:        buf[15]=0;
                     30:        outTS(Hsetpat, buf);
                     31:        patset=FALSE;
                     32: }
                     33: #define        CHARSHIFT       128
                     34: lookorigin(f, p0, ls)
                     35:        register File *f;
                     36:        register Posn p0, ls;
                     37: {
                     38:        register nl, nc, c;
                     39:        register Posn oldp0;
                     40:        if(p0>f->nbytes)
                     41:                p0=f->nbytes;
                     42:        oldp0=p0;
                     43:        Fgetcset(f, p0);
                     44:        for(nl=nc=c=0; c!=-1 && nl<ls && nc<ls*CHARSHIFT; nc++)
                     45:                if((c=Fbgetc(f))=='\n'){
                     46:                        nl++;
                     47:                        oldp0=p0-nc;
                     48:                }
                     49:        if(c==-1)
                     50:                p0=0;
                     51:        else if(nl==0){
                     52:                if(p0>=CHARSHIFT/2)
                     53:                        p0-=CHARSHIFT/2;
                     54:                else
                     55:                        p0=0;
                     56:        }else
                     57:                p0=oldp0;
                     58:        outTsl(Horigin, f->tag, p0);
                     59: }
                     60: char *left[]= {
                     61:        "{[(<",
                     62:        "\n",
                     63:        "'\"`",
                     64:        0
                     65: };
                     66: char *right[]= {
                     67:        "}])>",
                     68:        "\n",
                     69:        "'\"`",
                     70:        0
                     71: };
                     72: doubleclick(f, p1)
                     73:        register File *f;
                     74:        register Posn p1;
                     75: {
                     76:        register c, i;
                     77:        register char *r, *l;
                     78:        if(p1>f->nbytes)
                     79:                return;
                     80:        f->dot.r.p1=f->dot.r.p2=p1;
                     81:        for(i=0; left[i]; i++){
                     82:                l=left[i];
                     83:                r=right[i];
                     84:                /* try left match */
                     85:                if(p1==0){
                     86:                        Fgetcset(f, p1);
                     87:                        c='\n';
                     88:                }else{
                     89:                        Fgetcset(f, p1-1);
                     90:                        c=Fgetc(f);
                     91:                }
                     92:                if(strchr(l, c)){
                     93:                        if(clickmatch(f, c, r[strchr(l, c)-l], 1)){
                     94:                                f->dot.r.p1=p1;
                     95:                                f->dot.r.p2=f->getcp-(c!='\n');
                     96:                        }
                     97:                        return;
                     98:                }
                     99:                /* try right match */
                    100:                if(p1==f->nbytes){
                    101:                        Fbgetcset(f, p1);
                    102:                        c='\n';
                    103:                }else{
                    104:                        Fbgetcset(f, p1+1);
                    105:                        c=Fbgetc(f);
                    106:                }
                    107:                if(strchr(r, c)){
                    108:                        if(clickmatch(f, c, l[strchr(r, c)-r], -1)){
                    109:                                f->dot.r.p1=f->getcp;
                    110:                                if(c!='\n' || f->getcp!=0 ||
                    111:                                   (Fgetcset(f, (Posn)0),Fgetc(f))=='\n')
                    112:                                        f->dot.r.p1++;
                    113:                                f->dot.r.p2=p1+(p1<f->nbytes && c=='\n');
                    114:                        }
                    115:                        return;
                    116:                }
                    117:        }
                    118:        /* try filling out word to right */
                    119:        Fgetcset(f, p1);
                    120:        while(alnum(Fgetc(f)))
                    121:                f->dot.r.p2++;
                    122:        /* try filling out word to left */
                    123:        Fbgetcset(f, p1);
                    124:        while(alnum(Fbgetc(f)))
                    125:                f->dot.r.p1--;
                    126: }
                    127: alnum(c)
                    128:        register c;
                    129: {
                    130:        return ('0'<=c && c<='9') || (c=='_') ||
                    131:               ('a'<=c && c<='z') || ('A'<=c && c<='Z');
                    132: }
                    133: clickmatch(f, cl, cr, dir)
                    134:        register File *f;
                    135:        register cl, cr;
                    136:        int dir;
                    137: {
                    138:        register c;
                    139:        register nest=1;
                    140:        while((c=(dir>0? Fgetc(f) : Fbgetc(f)))>0)
                    141:                if(c==cr){
                    142:                        if(--nest==0)
                    143:                                return 1;
                    144:                }else if(c==cl)
                    145:                        nest++;
                    146:        return cl=='\n' && --nest==0;
                    147: }

unix.superglobalmegacorp.com

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