home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 2 / RISC_DISC_2.iso / pd_share / program / language / as / source / c / include < prev    next >
Encoding:
Text File  |  1994-09-27  |  1.7 KB  |  90 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.  
  12. #include "uname.h"
  13.  
  14. #ifndef UNIX
  15. extern char *strdup(char*);
  16. #endif
  17.  
  18.  
  19. extern int dde;
  20.  
  21. #define INCDIRMAX  10
  22.  
  23. static char *incdir[INCDIRMAX];
  24.  
  25. int initInclude(void)
  26. {
  27.   int i;
  28.  
  29.   for (i = 0; i < INCDIRMAX; i++)
  30.     incdir[i] = NULL;
  31.   return (0);
  32. }
  33.  
  34. int addInclude(const char *incpath)
  35. {
  36.   int i;
  37.   char *path = uname(incpath,dde);
  38.   for (i = 0; i < INCDIRMAX; i++)
  39.     if (incdir[i])
  40.       if (strcmp(incdir[i], path) == 0)
  41.         return (0);  /* already in list */
  42.   for (i = 0; i < INCDIRMAX; i++)
  43.     if (!incdir[i]) {
  44.       if ((incdir[i] = strdup(path))!=0) {
  45.         int len = strlen(incdir[i]);
  46.         if (*(incdir[i]+len) == DIR)
  47.           *(incdir[i]+len) = '\0';
  48.         return (0);
  49.       } else {
  50.         fprintf(stderr, "addInclude: strdup failed\n");
  51.         return (-1);
  52.       }
  53.     }
  54.   fprintf(stderr, "addInclude: maximum number of include paths exceeded (%d)\n", INCDIRMAX);
  55.   return (-1);
  56. }
  57.  
  58. FILE *getInclude(const char *filename,const char *mode)
  59. {
  60.   int i;
  61. #ifndef UNIX
  62.   FILE *fp;
  63. #endif
  64.   char incpath[MAXPATHLEN];
  65.   char *file = uname(filename,dde);
  66.  
  67. #ifdef UNIX
  68.   if (access(file, F_OK) == 0)
  69.     return (fopen(file, mode));
  70. #else
  71.   if ((fp = fopen(file, mode)) != 0)
  72.     return fp;
  73.   else
  74.     file +=2; /* Skip @. */
  75. #endif
  76.  
  77.   for (i = 0; i < INCDIRMAX; i++)
  78.     if (incdir[i]) {
  79.       sprintf(incpath, "%s%c%s", incdir[i],DIR,file);
  80. #ifdef UNIX
  81.       if (access(incpath, F_OK) == 0)
  82.         return (fopen(incpath, mode));
  83. #else
  84.       if ((fp = fopen(incpath, mode)) != 0)
  85.         return fp;
  86. #endif
  87.     }
  88.   return (NULL);
  89. }
  90.