--- ray/src/common/paths.h 2003/02/22 02:07:22 2.9
+++ ray/src/common/paths.h 2003/06/26 00:58:09 2.14
@@ -1,115 +1,101 @@
-/* RCSid: $Id: paths.h,v 2.9 2003/02/22 02:07:22 greg Exp $ */
+/* RCSid $Id: paths.h,v 2.14 2003/06/26 00:58:09 schorsch Exp $ */
/*
* Definitions for paths on different machines
*/
+#ifndef _RAD_PATHS_H_
+#define _RAD_PATHS_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
-/* ====================================================================
- * The Radiance Software License, Version 1.0
- *
- * Copyright (c) 1990 - 2002 The Regents of the University of California,
- * through Lawrence Berkeley National Laboratory. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes Radiance software
- * (http://radsite.lbl.gov/)
- * developed by the Lawrence Berkeley National Laboratory
- * (http://www.lbl.gov/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
- * and "The Regents of the University of California" must
- * not be used to endorse or promote products derived from this
- * software without prior written permission. For written
- * permission, please contact radiance@radsite.lbl.gov.
- *
- * 5. Products derived from this software may not be called "Radiance",
- * nor may "Radiance" appear in their name, without prior written
- * permission of Lawrence Berkeley National Laboratory.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of Lawrence Berkeley National Laboratory. For more
- * information on Lawrence Berkeley National Laboratory, please see
- * .
- */
+#include "copyright.h"
-#ifdef MSDOS
+#include
+#include
+#ifdef _WIN32
+ #include
+#else /* _WIN32 */
+ #include
+ #include
+#endif /* _WIN32 */
-#define DIRSEP '/'
-#define ISDIRSEP(c) ((c)=='/' || (c)=='\\')
-#define CASEDIRSEP case '/': case '\\'
-#define PATHSEP ';'
-#define MAXPATH 128
-#define TEMPLATE "rtXXXXXX"
-#define TEMPLEN 8
-#define ULIBVAR "RAYPATH"
-#ifndef DEFPATH
-#define DEFPATH ";c:/ray/lib"
-#endif
+#ifdef _WIN32
+
+ #define access _access
+ #define PATH_MAX _MAX_PATH
+ #define DIRSEP '/'
+ #define ISDIRSEP(c) ((c)=='/' || (c)=='\\')
+ #define ISABS(s) ((s)!=NULL \
+ && (s[0])!='\0' \
+ && ( ISDIRSEP(s[0]) \
+ || ( (s[1])!='\0' \
+ && (isupper(s[0])||islower(s[0])) \
+ && (s[1])==':')))
+ #define CASEDIRSEP case '/': case '\\'
+ #define PATHSEP ';'
+ #define CURDIR '.'
+ #define MAXPATH 512 /* XXX obsoleted by posix PATH_MAX */
+ #define DEFAULT_TEMPDIRS {"C:/TMP", "C:/TEMP", ".", NULL}
+ #define TEMPLATE "rtXXXXXX"
+ #define TEMPLEN 8
+ #define ULIBVAR "RAYPATH"
+ #ifndef DEFPATH
+ #define DEFPATH ";c:/ray/lib"
+ #endif
+ /* only does half the work for access() */
+ #ifndef F_OK
+ #define F_OK 00
+ #define X_OK 01
+ #define W_OK 02
+ #define R_OK 04
+ #endif
extern char *fixargv0();
#else
-#ifdef AMIGA
+ #ifndef PATH_MAX /* doesn't implement posix? */
+ #define PATH_MAX 512 /* quite conservative (I think...) */
+ #endif
-#define DIRSEP '/'
-#define PATHSEP ';'
-#define MAXPATH 128
-#define TEMPLATE "/tmp/rtXXXXXX"
-#define TEMPLEN 13
-#define ULIBVAR "RAYPATH"
-#ifndef DEFPATH
-#define DEFPATH ";/ray/lib"
-#endif
-#define fixargv0(a0) (a0)
+ #ifdef AMIGA
-#else
+ #define DIRSEP '/'
+ #define ISABS(s) ((s)!=NULL && (ISDIRSEP(s[0])))
+ #define PATHSEP ';'
+ #define CURDIR '.'
+ #define MAXPATH 128
+ #define DEFAULT_TEMPDIRS {"/var/tmp", "/usr/tmp", "/tmp", ".", NULL}
+ #define TEMPLATE "/tmp/rtXXXXXX"
+ #define TEMPLEN 13
+ #define ULIBVAR "RAYPATH"
+ #ifndef DEFPATH
+ #define DEFPATH ";/ray/lib"
+ #endif
+ #define fixargv0(a0) (a0)
-#define DIRSEP '/'
-#define PATHSEP ':'
-#define MAXPATH 256
-#define TEMPLATE "/usr/tmp/rtXXXXXX"
-#define TEMPLEN 17
-#define ULIBVAR "RAYPATH"
-#ifndef DEFPATH
-#define DEFPATH ":/usr/local/lib/ray"
-#endif
-#define fixargv0(a0) (a0)
+ #else
+ #define DIRSEP '/'
+ #define ISABS(s) ((s)!=NULL && (ISDIRSEP(s[0])))
+ #define PATHSEP ':'
+ #define CURDIR '.'
+ #define MAXPATH 256
+ #define DEFAULT_TEMPDIRS {"/var/tmp", "/usr/tmp", "/tmp", ".", NULL}
+ #define TEMPLATE "/usr/tmp/rtXXXXXX"
+ #define TEMPLEN 17
+ #define ULIBVAR "RAYPATH"
+ #ifndef DEFPATH
+ #define DEFPATH ":/usr/local/lib/ray"
+ #endif
+ #define fixargv0(a0) (a0)
+
+ #endif
#endif
-#endif
#ifndef ISDIRSEP
-#define ISDIRSEP(c) ((c)==DIRSEP)
+ #define ISDIRSEP(c) ((c)==DIRSEP)
#endif
#ifndef CASEDIRSEP
-#define CASEDIRSEP case DIRSEP
+ #define CASEDIRSEP case DIRSEP
#endif
extern char *mktemp(), *getenv();
@@ -120,3 +106,30 @@ extern char *getwd();
extern char *getcwd();
#define getwd(p) getcwd(p, sizeof(p))
#endif
+
+
+/* Find a writeable directory for temporary files */
+/* If s is NULL, we return a static string */
+extern char *temp_directory(char *s, size_t len);
+
+/* Compose a *currently* unique name within a temporary directory */
+/* If s is NULL, we return a static string */
+/* If templ is NULL, we take our default template */
+/* WARNING: On Windows, there's a maximum of 27 unique names within
+ one process for the same template. */
+extern char *temp_filename(char *s, size_t len, char *templ);
+
+/* Same as above, but also open the file and return the descriptor */
+/* This one is supposed to protect against race conditions on unix */
+/* WARNING: On Windows, there's no protection against race conditions */
+extern int temp_file(char *s, size_t len, char *templ);
+
+/* Concatenate two strings, leaving exactly one DIRSEP in between */
+extern char *append_filepath(char *s1, char *s2, size_t len);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _RAD_PATHS_H_ */
+