Annotation of researchv10dc/630/src/select.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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