--- /dev/null
+/*
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
+ * Reserved. This file contains Original Code and/or Modifications of
+ * Original Code as defined in and that are subject to the Apple Public
+ * Source License Version 1.0 (the 'License'). You may not use this file
+ * except in compliance with the License. Please obtain a copy of the
+ * License at http://www.apple.com/publicsource and read it before using
+ * this file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
+ * License for the specific language governing rights and limitations
+ * under the License."
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/* openp, fopenp -- search pathlist and open file
+ *
+ * Usage:
+ * i = openp (path,file,complete,flags,mode)
+ * f = fopenp (path,file,complete,type)
+ * int i,flags,mode;
+ * FILE *f;
+ * char *path,*file,*complete,*type;
+ *
+ * Openp searches for "file" in the pathlist "path";
+ * when the file is found and can be opened by open()
+ * with the specified "flags" and "mode", then the full filename
+ * is copied into "complete" and openp returns the file
+ * descriptor. If no such file is found, openp returns -1.
+ * Fopenp performs the same function, using fopen() instead
+ * of open() and type instead of flags/mode; it returns 0 if no
+ * file is found.
+ *
+ * HISTORY
+ * 30-Apr-85 Steven Shafer (sas) at Carnegie-Mellon University
+ * Adapted for 4.2 BSD UNIX. Added new parameter to openp.c;
+ * changed names of flags, mode, and type parameters to reflect
+ * current manual entries for open and fopen.
+ *
+ * 20-Nov-79 Steven Shafer (sas) at Carnegie-Mellon University
+ * Created for VAX.
+ *
+ */
+
+#include <stdio.h>
+#include <fcntl.h> /* open */
+#include "config.h"
+
+
+int openp(const char *fpath, char *file, char *complete, int flags, int mode);
+
+static int flgs,mod,value;
+static const char *ftyp;
+static FILE *fvalue;
+
+static int
+func(char *fnam)
+{
+ value = open (fnam,flgs,mod);
+ return (value < 0);
+}
+
+static int
+ffunc(char *fnam)
+{
+ fvalue = fopen (fnam,ftyp);
+ return (fvalue == 0);
+}
+
+int
+openp(const char *fpath, char *file, char *complete, int flags, int mode)
+{
+ flgs = flags;
+ mod = mode;
+ if (searchp(fpath,file,complete,func) < 0) return (-1);
+ return (value);
+}
+
+FILE *
+fopenp(const char *fpath, char *file, char *complete, const char *ftype)
+{
+ ftyp = ftype;
+ if (searchp(fpath,file,complete,ffunc) < 0) return (0);
+ return (fvalue);
+}