home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume17 / freeze / part02 / default.c < prev    next >
C/C++ Source or Header  |  1991-03-25  |  1KB  |  57 lines

  1. #include <stdio.h>
  2.  
  3. #define OK      0
  4. #define FAIL    NULL
  5. #define NOFILE  ((FILE *) 0)
  6. #define MAXLINE 128
  7.  
  8. extern int      errno;
  9. char            *strchr();
  10. static FILE     *defd = NOFILE;  /* defaults file stream */
  11.  
  12. int     defopen(fname)          /* open | reopen | close defaults file */
  13.     char    *fname;
  14. {
  15.     register FILE   *fd;
  16.  
  17.     if (!fname) {
  18.         if (defd)
  19.             fclose(defd);
  20.         defd = NOFILE;
  21.         return OK;
  22.     }
  23.  
  24.     if (!(fd = fopen(fname, "r")))
  25.         return errno;                   /* problems opening file */
  26.  
  27.     defd = fd;
  28.     return OK;
  29. }
  30.  
  31. static char     defline[MAXLINE + 1];
  32.  
  33. char    *defread(pattern)
  34.     register char   *pattern;
  35. {
  36.     register        sz_patt;
  37.     register char   *cp;
  38.  
  39.     if (!defd)
  40.         return FAIL;            /* defaults file not opened */
  41.  
  42.     rewind(defd);
  43.     sz_patt = strlen(pattern);
  44.  
  45.     while (fgets(defline, MAXLINE, defd)) {
  46.         if (!(cp = strchr(defline, '\n')))
  47.             return FAIL;     /* line too long  */
  48.         if (cp - defline < sz_patt)
  49.             continue;       /* line too short */
  50.         *cp = '\0';
  51.         if (!strncmp(pattern, defline, sz_patt))
  52.             return defline + sz_patt;       /* match found */
  53.     }
  54.  
  55.     return FAIL;                    /* no matching lines */
  56. }
  57.