Annotation of researchv9/jtools/src/sux/select.c, revision 1.1.1.1

1.1       root        1: #include <jerq.h>
                      2: #include "frame.h"
                      3: 
                      4: extern doubleclickOK;
                      5: 
                      6: frselect(f, pt)
                      7:        register Frame *f;
                      8:        Point pt;
                      9: {
                     10:        register fix, var, oldvar;
                     11:        if(f->s1 != f->s2){
                     12:                selectf(f, F_XOR);
                     13:                f->nullsel=0;   /* no double clicks this time */
                     14:        }
                     15:        fix=charofpt(f, pt);    /* fixed point */
                     16:        oldvar=fix;             /* moving point tracks mouse */
                     17:        var=fix;
                     18:        for( ; button1(); jnap(2)){
                     19:                if(var!=oldvar){
                     20:                        f->s1=oldvar;
                     21:                        f->s2=var;
                     22:                        order(f);
                     23:                        selectf(f, F_XOR);
                     24:                        oldvar=var;
                     25:                }
                     26:                var=charofpt(f, mouse.xy);
                     27:        }
                     28:        f->s1=fix;
                     29:        f->s2=oldvar;
                     30:        order(f);
                     31:        if(doubleclickOK && f->nullsel && f->s2==f->s1 && f->lastch==f->s1){
                     32:                f->nullsel=0;
                     33:                matchit(f);
                     34:                selectf(f, F_XOR);
                     35:                doubleclickOK=0;
                     36:        }else{
                     37:                doubleclickOK=f->nullsel=f->s2==f->s1;
                     38:                f->lastch=f->s1;
                     39:        }
                     40: }
                     41: order(f)
                     42:        register Frame *f;
                     43: {
                     44:        register a;
                     45:        if(f->s1 > f->s2){
                     46:                a=f->s1;
                     47:                f->s1=f->s2;
                     48:                f->s2=a;
                     49:        }
                     50: }
                     51: static char ltbrack[]="([{<";          /* sorry, only one match per char */
                     52: static char rtbrack[]=")]}>";
                     53: static char same[]="\n'`\"";           /* match in either direction */
                     54: extern char *index();
                     55: matchit(f)
                     56:        register Frame *f;
                     57: {
                     58:        register i,n=0;
                     59:        register c;
                     60:        register char *s = f->str.s;
                     61:        int ch,me,N = f->str.n;
                     62:        if (f->s1>0 && (i=index(ltbrack, me=s[f->s1-1])-ltbrack)>=0) {
                     63:                ch = rtbrack[i];
                     64:                for (i = f->s1; i<N && !((c=s[i])==ch && n==0); i++)
                     65:                        if (c==me)
                     66:                                n++;
                     67:                        else if (c==ch)
                     68:                                n--;
                     69:                if (c==ch && n==0)
                     70:                        f->s2=i;
                     71:        }
                     72:        else if (f->s2<N && (i=index(rtbrack, me=s[f->s2])-rtbrack)>=0) {
                     73:                ch = ltbrack[i];
                     74:                for (i = f->s2-1; i>=0 && !((c=s[i])==ch && n==0); i--)
                     75:                        if (c==me)
                     76:                                n++;
                     77:                        else if (c==ch)
                     78:                                n--;
                     79:                if (c==ch && n==0)
                     80:                        f->s1=i+1;
                     81:        }
                     82:        else if ((f->s1==0 && (me='\n')) || (i=index(same, me=s[f->s1-1])-same)>=0) {
                     83:                for (i = f->s1; i<N && (c=s[i])!=me; i++)
                     84:                        ;
                     85:                if (c==me || (me=='\n' && i==N))
                     86:                        f->s2=i;
                     87:        }
                     88:        else if ((f->s2==N && (me='\n')) || (i=index(same, me=s[f->s2])-same)>=0) {
                     89:                for (i = f->s2-1; i>0 && (c=s[i])!=me; i--)
                     90:                        ;
                     91:                if (c==me)
                     92:                        f->s1=i+1;
                     93:                else if (me=='\n' && i==0)
                     94:                        f->s1=0;
                     95:        }
                     96:        else {
                     97:                for (i=f->s1; i>0 && isalnum(s[i-1]); i--)
                     98:                        ;
                     99:                f->s1=i;
                    100:                for (i=f->s2; i<N && isalnum(s[i]); i++)
                    101:                        ;
                    102:                f->s2=i;
                    103:        }
                    104: }
                    105: 
                    106: isalnum(c)
                    107: register char c;
                    108: {
                    109:        return (c>='0' && c<='9') ||
                    110:                (c>='a' && c<='z') ||
                    111:                (c>='A' && c<='Z') ||
                    112:                c=='_';
                    113: }

unix.superglobalmegacorp.com

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