Annotation of researchv10dc/630/src/nselect.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: frselect(f, pt)
                      8:        register Frame *f;
                      9:        Point pt;
                     10: {
                     11:        register fix, var, oldvar;
                     12:        if(f->s1 != f->s2){
                     13:                selectf(f, F_XOR);
                     14:                f->nullsel=0;   /* no double clicks this time */
                     15:        }
                     16:        fix=charofpt(f, pt);    /* fixed point */
                     17:        oldvar=fix;             /* moving point tracks mouse */
                     18:        var=fix;
                     19:        while(button1()){
                     20:                if(var!=oldvar){
                     21:                        f->s1=oldvar;
                     22:                        f->s2=var;
                     23:                        order(f);
                     24:                        selectf(f, F_XOR);
                     25:                        oldvar=var;
                     26:                }
                     27:                var=charofpt(f, mouse.xy);
                     28:        }
                     29:        f->s1=fix;
                     30:        f->s2=oldvar;
                     31:        order(f);
                     32:        if (f->nullsel && f->s2==f->s1 && f->lastch==f->s1){
                     33:                f->nullsel=0;
                     34:                matchit(f);
                     35:                selectf(f, F_XOR);
                     36:        }
                     37:        else {
                     38:                f->nullsel=f->s2==f->s1;
                     39:                f->lastch=f->s1;
                     40:        }
                     41: }
                     42: order(f)
                     43:        register Frame *f;
                     44: {
                     45:        register a;
                     46:        if(f->s1 > f->s2){
                     47:                a=f->s1;
                     48:                f->s1=f->s2;
                     49:                f->s2=a;
                     50:        }
                     51: }
                     52: static char ltbrack[]="([{<";
                     53: static char rtbrack[]=")]}>";
                     54: extern char *index();
                     55: matchit(f)
                     56:        register Frame *f;
                     57: {
                     58:        register i=-1,n=0;
                     59:        register c;
                     60:        register char *s = f->str.s;
                     61:        int ch,me;
                     62:        int N = f->str.n;
                     63:        if ((f->s1 != N)
                     64:                && (f->s1 == 0 || (me=s[f->s1-1]) == '\n'
                     65:                        || (i=index(ltbrack,me)-ltbrack)>=0)) {
                     66:                ch = (i < 0) ? '\n' : 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) || (i==N && me=='\n'))
                     73:                        f->s2=i;
                     74:        }
                     75:        else if ((f->s1 != 0)
                     76:                && (f->s1 >= N || (me=s[f->s1]) == '\n'
                     77:                        || (i=index(rtbrack, me=s[f->s2])-rtbrack)>=0)) {
                     78:                ch = (i < 0) ? '\n' : ltbrack[i];
                     79:                for (i = f->s1-1; i>0 && !((c=s[i])==ch && n==0); i--)
                     80:                        if (c==me)
                     81:                                n++;
                     82:                        else if (c==ch)
                     83:                                n--;
                     84:                if (c==ch && n==0)
                     85:                        f->s1=i+1;
                     86:                else if (i==0 && me=='\n')      /* ugh! */
                     87:                        f->s1=i;                /* end conditions! */
                     88:        }
                     89:        else {
                     90:                for (i=f->s1; i>0 && isalnum(s[i-1]); i--)
                     91:                        ;
                     92:                f->s1=i;
                     93:                for (i=f->s2; i<f->str.n && isalnum(s[i]); i++)
                     94:                        ;
                     95:                f->s2=i;
                     96:        }
                     97:        if (f->s2 < N && ((c=s[f->s2]) == ' ' || c == '\t' || c == '\n'))
                     98:                f->s2++;
                     99: }
                    100: 
                    101: isalnum(c)
                    102: register char c;
                    103: {
                    104:        return (c>='0' && c<='9') ||
                    105:                (c>='a' && c<='z') ||
                    106:                (c>='A' && c<='Z') ||
                    107:                c=='_';
                    108: }

unix.superglobalmegacorp.com

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