|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.