home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / prof_c / 14view / vf_srch.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-08-11  |  1.5 KB  |  77 lines

  1. /*
  2.  *    vf_srch -- search functions
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <local\std.h>
  9. #include "vf.h"
  10.  
  11. /*
  12.  *    search -- search for a literal string in the buffer
  13.  */
  14.  
  15. DNODE *
  16. search(buf, dir, str)
  17. DNODE *buf;
  18. DIRECTION dir;
  19. char *str;
  20. {
  21.     int n;
  22.     register DNODE *lp;
  23.     register char *cp;
  24.  
  25.     extern void showmsg(char *);
  26.  
  27.     /* try to find a match -- wraps around buffer boundaries */
  28.     n = strlen(str);
  29.     lp = (dir == FORWARD) ? buf->d_next : buf->d_prev;
  30.     while (lp != buf) {
  31.         if ((cp = lp->d_line) != NULL)    /* skip over header node */
  32.             while (*cp != '\n' && *cp != '\0') {
  33.                 if (strncmp(cp, str, n) == 0)
  34.                     return (lp);
  35.                 ++cp;
  36.             }
  37.         lp = (dir == FORWARD) ? lp->d_next : lp->d_prev;
  38.     }
  39.     showmsg("Not found");
  40.     return ((DNODE *)NULL);
  41. }
  42.  
  43.  
  44. /*
  45.  *    getsstr -- prompt the user for a search string
  46.  */
  47.  
  48. extern int Startscan, Endscan;
  49.  
  50. char *
  51. getsstr(str)
  52. char *str;
  53. {
  54.     char line[MAXSTR];
  55.     char *resp;
  56.  
  57.     extern int putstr(char *, int);
  58.     extern char *getstr(char *, int);
  59.     extern int put_ch(char, int);
  60.     extern void showmsg(char *);
  61.     extern void clrmsg();
  62.  
  63.     static char prompt[] = { "Search for: " };
  64.  
  65.     /* get search string */
  66.     showmsg(prompt);
  67.     setctype(Startscan, Endscan);        /* cursor on */
  68.     resp = getstr(line, MAXSTR - strlen(prompt));
  69.     setctype(MAXSCAN, MAXSCAN);        /* cursor off */
  70.     if (resp == NULL)
  71.         return (char *)NULL;
  72.     if (strlen(resp) == 0)
  73.         return (str);
  74.     showmsg(resp);
  75.     return (resp);
  76. }
  77.