home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 8 / CDASC08.ISO / NEWS / RADIANCE / SRC / COMMON / FROPEN.C < prev    next >
C/C++ Source or Header  |  1993-10-07  |  1KB  |  53 lines

  1. /* Copyright (c) 1992 Regents of the University of California */
  2.  
  3. #ifndef lint
  4. static char SCCSid[] = "@(#)fropen.c 2.5 9/8/92 LBL";
  5. #endif
  6.  
  7. /*
  8.  * Find and open a Radiance library file.
  9.  */
  10.  
  11. #include <stdio.h>
  12.  
  13. #include "paths.h"
  14.  
  15. char  *libpath = NULL;          /* library search path */
  16.  
  17.  
  18. FILE *
  19. fropen(fname)                   /* find file and open for reading */
  20. register char  *fname;
  21. {
  22.     extern char  *strcpy(), *getenv();
  23.     FILE  *fp;
  24.     char  pname[MAXPATH];
  25.     register char  *sp, *cp;
  26.  
  27.     if (fname == NULL)
  28.         return(NULL);
  29.  
  30.     if (ISDIRSEP(fname[0]) || fname[0] == '.')      /* absolute path */
  31.         return(fopen(fname, "r"));
  32.         
  33.     if (libpath == NULL) {                  /* get search path */
  34.         libpath = getenv(ULIBVAR);
  35.         if (libpath == NULL)
  36.             libpath = DEFPATH;
  37.     }
  38.                         /* check search path */
  39.     sp = libpath;
  40.     do {
  41.         cp = pname;
  42.         while (*sp && (*cp = *sp++) != PATHSEP)
  43.             cp++;
  44.         if (cp > pname && !ISDIRSEP(cp[-1]))
  45.             *cp++ = DIRSEP;
  46.         strcpy(cp, fname);
  47.         if ((fp = fopen(pname, "r")) != NULL)
  48.             return(fp);                     /* got it! */
  49.     } while (*sp);
  50.                     /* not found */
  51.     return(NULL);
  52. }
  53.