home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / rn_4_3_blars.lzh / ngsrch.c < prev    next >
C/C++ Source or Header  |  1990-08-22  |  3KB  |  145 lines

  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.  
  145.