home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 1 / ARM_CLUB_CD.iso / contents / apps / program / a / as1_23 / source / c / include < prev    next >
Encoding:
Text File  |  1993-12-28  |  1.8 KB  |  95 lines

  1. /*
  2.  * include.c
  3.  *
  4.  * (c) Andy Duplain, August 1992.
  5.  * Converted to RISC/OS by Niklas Röjemo
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #ifdef UNIX
  12. #include <sys/param.h>    /* for MAXPATHLEN */
  13. #include <unistd.h>    /* for access() stuff */
  14. #define uname(a,b) (a)
  15. #define DIR '/'
  16. #else
  17. #include "uname.h"
  18. #define MAXPATHLEN 1024
  19. char *strdup(char*);
  20. #define DIR '.'
  21. #endif
  22.  
  23.  
  24. extern int dde;
  25.  
  26. #define INCDIRMAX  10
  27.  
  28. static char *incdir[INCDIRMAX];
  29.  
  30. int initInclude(void)
  31. {
  32.   int i;
  33.  
  34.   for (i = 0; i < INCDIRMAX; i++)
  35.     incdir[i] = NULL;
  36.   return (0);
  37. }
  38.  
  39. int addInclude(const char *incpath)
  40. {
  41.   int i;
  42.   char *path = uname(incpath,dde);
  43.   for (i = 0; i < INCDIRMAX; i++)
  44.     if (incdir[i])
  45.       if (strcmp(incdir[i], path) == 0)
  46.         return (0);  /* already in list */
  47.   for (i = 0; i < INCDIRMAX; i++)
  48.     if (!incdir[i]) {
  49.       if ((incdir[i] = strdup(path))!=0) {
  50.         int len = strlen(incdir[i]);
  51.         if (*(incdir[i]+len) == DIR)
  52.           *(incdir[i]+len) = '\0';
  53.         return (0);
  54.       } else {
  55.         fprintf(stderr, "addInclude: strdup failed\n");
  56.         return (-1);
  57.       }
  58.     }
  59.   fprintf(stderr, "addInclude: maximum number of include paths exceeded (%d)\n", INCDIRMAX);
  60.   return (-1);
  61. }
  62.  
  63. FILE *getInclude(const char *filename,const char *mode)
  64. {
  65.   int i;
  66. #ifndef UNIX
  67.   FILE *fp;
  68. #endif
  69.   char incpath[MAXPATHLEN];
  70.   char *file = uname(filename,dde);
  71.  
  72. #ifdef UNIX
  73.   if (access(file, F_OK) == 0)
  74.     return (fopen(file, mode));
  75. #else
  76.   if ((fp = fopen(file, mode)) != 0)
  77.     return fp;
  78.   else
  79.     file +=2; /* Skip @. */
  80. #endif
  81.  
  82.   for (i = 0; i < INCDIRMAX; i++)
  83.     if (incdir[i]) {
  84.       sprintf(incpath, "%s%c%s", incdir[i],DIR,file);
  85. #ifdef UNIX
  86.       if (access(incpath, F_OK) == 0)
  87.         return (fopen(incpath, mode));
  88. #else
  89.       if ((fp = fopen(incpath, mode)) != 0)
  90.         return fp;
  91. #endif
  92.     }
  93.   return (NULL);
  94. }
  95.