home *** CD-ROM | disk | FTP | other *** search
- /*
- * include.c
- *
- * (c) Andy Duplain, August 1992.
- * Converted to RISC/OS by Niklas Röjemo
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #ifdef UNIX
- #include <sys/param.h> /* for MAXPATHLEN */
- #include <unistd.h> /* for access() stuff */
- #define uname(a,b) (a)
- #define DIR '/'
- #else
- #include "uname.h"
- #define MAXPATHLEN 1024
- char *strdup(char*);
- #define DIR '.'
- #endif
-
-
- extern int dde;
-
- #define INCDIRMAX 10
-
- static char *incdir[INCDIRMAX];
-
- int initInclude(void)
- {
- int i;
-
- for (i = 0; i < INCDIRMAX; i++)
- incdir[i] = NULL;
- return (0);
- }
-
- int addInclude(const char *incpath)
- {
- int i;
- char *path = uname(incpath,dde);
- for (i = 0; i < INCDIRMAX; i++)
- if (incdir[i])
- if (strcmp(incdir[i], path) == 0)
- return (0); /* already in list */
- for (i = 0; i < INCDIRMAX; i++)
- if (!incdir[i]) {
- if ((incdir[i] = strdup(path))!=0) {
- int len = strlen(incdir[i]);
- if (*(incdir[i]+len) == DIR)
- *(incdir[i]+len) = '\0';
- return (0);
- } else {
- fprintf(stderr, "addInclude: strdup failed\n");
- return (-1);
- }
- }
- fprintf(stderr, "addInclude: maximum number of include paths exceeded (%d)\n", INCDIRMAX);
- return (-1);
- }
-
- FILE *getInclude(const char *filename)
- {
- int i;
- FILE *fp;
- char incpath[MAXPATHLEN];
- char *file = uname(filename,dde);
-
- #ifdef UNIX
- if (access(file, F_OK) == 0)
- return (fopen(file, "r"));
- #else
- if ((fp = fopen(file, "r")) != 0)
- return fp;
- else
- file +=2; /* Skip @. */
- #endif
-
- for (i = 0; i < INCDIRMAX; i++)
- if (incdir[i]) {
- sprintf(incpath, "%s%c%s", incdir[i],DIR,file);
- #ifdef UNIX
- if (access(incpath, F_OK) == 0)
- return (fopen(incpath, "r"));
- #else
- if ((fp = fopen(incpath, "r")) != 0)
- return fp;
- #endif
- }
- return (NULL);
- }
-