home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / assembler / as / src / c / include < prev    next >
Encoding:
Text File  |  1992-09-08  |  1.8 KB  |  93 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)
  64. {
  65.   int i;
  66.   FILE *fp;
  67.   char incpath[MAXPATHLEN];
  68.   char *file = uname(filename,dde);
  69.  
  70. #ifdef UNIX
  71.   if (access(file, F_OK) == 0)
  72.     return (fopen(file, "r"));
  73. #else
  74.   if ((fp = fopen(file, "r")) != 0)
  75.     return fp;
  76.   else
  77.     file +=2; /* Skip @. */
  78. #endif
  79.  
  80.   for (i = 0; i < INCDIRMAX; i++)
  81.     if (incdir[i]) {
  82.       sprintf(incpath, "%s%c%s", incdir[i],DIR,file);
  83. #ifdef UNIX
  84.       if (access(incpath, F_OK) == 0)
  85.         return (fopen(incpath, "r"));
  86. #else
  87.       if ((fp = fopen(incpath, "r")) != 0)
  88.         return fp;
  89. #endif
  90.     }
  91.   return (NULL);
  92. }
  93.