Annotation of 43BSD/contrib/rn/ngsrch.c, revision 1.1.1.1

1.1       root        1: /* $Header: ngsrch.c,v 4.3 85/05/01 11:44:51 lwall Exp $
                      2:  *
                      3:  * $Log:       ngsrch.c,v $
                      4:  * Revision 4.3  85/05/01  11:44:51  lwall
                      5:  * Baseline for release with 4.3bsd.
                      6:  * 
                      7:  */
                      8: 
                      9: #include "EXTERN.h"
                     10: #include "common.h"
                     11: #include "rcstuff.h"
                     12: #include "final.h"
                     13: #include "search.h"
                     14: #include "rn.h"
                     15: #include "util.h"
                     16: #include "term.h"
                     17: #include "rcln.h"
                     18: #include "INTERN.h"
                     19: #include "ngsrch.h"
                     20: 
                     21: #ifdef NGSORONLY
                     22:     COMPEX ngcompex;
                     23: #endif
                     24: 
                     25: void
                     26: ngsrch_init()
                     27: {
                     28: #ifdef ZEROGLOB
                     29:     init_compex(&ngcompex);
                     30: #endif /* ZEROGLOB */
                     31:     ;
                     32: }
                     33: 
                     34: #ifdef NGSEARCH
                     35: int
                     36: ng_search(patbuf,get_cmd)
                     37: char *patbuf;                          /* if patbuf != buf, get_cmd must */
                     38: int get_cmd;                           /*   be set to FALSE!!! */
                     39: {
                     40:     char *pattern;                     /* unparsed pattern */
                     41:     register char cmdchr = *patbuf;    /* what kind of search? */
                     42:     register char *s;
                     43:     bool backward = cmdchr == '?';     /* direction of search */
                     44: 
                     45:     int_count = 0;
                     46:     if (get_cmd && buf == patbuf)
                     47:        if (!finish_command(FALSE))             /* get rest of command */
                     48:            return NGS_ABORT;
                     49:     for (pattern = patbuf+1; *pattern == ' '; pattern++) ;
                     50:     if (*pattern) {
                     51:        ng_doread = FALSE;
                     52:     }
                     53:     s = rindex(pattern,cmdchr);
                     54:     if (s != Nullch && *(s-1) != '\\') {
                     55:        *s++ = '\0';
                     56:        if (index(s,'r') != Nullch)
                     57:            ng_doread = TRUE;
                     58:     }
                     59:     if ((s = ng_comp(&ngcompex,pattern,TRUE,TRUE)) != Nullch) {
                     60:                                        /* compile regular expression */
                     61:        printf("\n%s\n",s) FLUSH;
                     62:        return NGS_ABORT;
                     63:     }
                     64:     fputs("\nSearching...",stdout) FLUSH;      /* give them something to read */
                     65:     fflush(stdout);
                     66:     for (;;) {
                     67:        if (int_count) {
                     68:            int_count = 0;
                     69:            return NGS_INTR;
                     70:        }
                     71:        if (backward) {
                     72:            if (ng > 0)
                     73:                --ng;
                     74:            else
                     75:                ng = nextrcline;
                     76:        }
                     77:        else {
                     78:            if (ng >= nextrcline)
                     79:                ng = 0;
                     80:            else
                     81:                ++ng;
                     82:        }
                     83:        if (ng == current_ng)
                     84:            return NGS_NOTFOUND;
                     85:        if (ng == nextrcline || toread[ng] < TR_NONE || !ng_wanted())
                     86:            continue;
                     87:        if (toread[ng] == TR_NONE)
                     88:            set_toread(ng);
                     89:        
                     90:        if (toread[ng] > TR_NONE)
                     91:            return NGS_FOUND;
                     92:        else if (toread[ng] == TR_NONE)
                     93:            if (ng_doread)
                     94:                return NGS_FOUND;
                     95:            else
                     96:                printf("\n[0 unread in %s--skipping]",rcline[ng]) FLUSH;
                     97:     }
                     98: }
                     99: 
                    100: bool
                    101: ng_wanted()
                    102: {
                    103:     return execute(&ngcompex,rcline[ng]) != Nullch;
                    104: }
                    105: #endif
                    106: 
                    107: #ifdef NGSORONLY
                    108: char *
                    109: ng_comp(compex,pattern,RE,fold)
                    110: COMPEX *compex;
                    111: char *pattern;
                    112: bool RE;
                    113: bool fold;
                    114: {
                    115:     char ng_pattern[128];
                    116:     register char *s = pattern, *d = ng_pattern;
                    117: 
                    118:     if (!*s)
                    119:        return Nullch;                  /* reuse old pattern */
                    120:     for (; *s; s++) {
                    121:        if (*s == '.') {
                    122:            *d++ = '\\';
                    123:            *d++ = *s;
                    124:        }
                    125:        else if (*s == '?') {
                    126:            *d++ = '.';
                    127:        }
                    128:        else if (*s == '*') {
                    129:            *d++ = '.';
                    130:            *d++ = *s;
                    131:        }
                    132:        else if (strnEQ(s,"all",3)) {
                    133:            *d++ = '.';
                    134:            *d++ = '*';
                    135:            s += 2;
                    136:        }
                    137:        else
                    138:            *d++ = *s;
                    139:     }
                    140:     *d = '\0';
                    141:     return compile(compex,ng_pattern,RE,fold);
                    142: }
                    143: #endif
                    144: 

unix.superglobalmegacorp.com

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