Annotation of 43BSD/contrib/rn/ngsrch.c, revision 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.