home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 4 / CDPD_IV.bin / networking / dnet / dnet2.3.2 / amiga / suplib / openlibs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-29  |  2.5 KB  |  104 lines

  1.  
  2. /*
  3.  *  OPENLIBS.C
  4.  *
  5.  */
  6.  
  7. #include <local/typedefs.h>
  8. #include <local/xmisc.h>
  9. #ifdef LATTICE
  10. #include <string.h>
  11. #endif
  12.  
  13. static long OpenMask = 0;
  14.  
  15. struct GfxBase *GfxBase         = NULL;
  16. struct IntuitionBase *IntuitionBase = NULL;
  17. struct Library *ExpansionBase        = NULL;
  18. struct Library *DiskfontBase        = NULL;
  19. struct Library *TranslatorBase        = NULL;
  20. struct Library *IconBase        = NULL;
  21. struct Library *MathBase        = NULL;
  22. struct Library *MathTransBase        = NULL;
  23. struct Library *MathIeeeDoubBasBase = NULL;
  24. struct Library *MathIeeeSingBasBase = NULL;
  25. struct LayersBase *LayersBase        = NULL;
  26. struct Library *ClistBase        = NULL;
  27. struct Library *PotgoBase        = NULL;
  28. struct Library *TimerBase        = NULL;
  29. struct Library *DResBase        = NULL;
  30. long xfiller15                = NULL;
  31.  
  32. struct OLI {
  33.     char *name;
  34.     long *var;
  35. };
  36.  
  37. struct OLI strvar[] = {
  38.   "graphics",           (long *)&GfxBase,
  39.   "intuition",          (long *)&IntuitionBase,
  40.   "expansion",          (long *)&ExpansionBase,
  41.   "diskfont",           (long *)&DiskfontBase,
  42.   "translator",         (long *)&TranslatorBase,
  43.   "icon",               (long *)&IconBase,
  44.   "mathffp",            (long *)&MathBase,
  45.   "mathtrans",          (long *)&MathTransBase,
  46.   "mathieeedoubbas",    (long *)&MathIeeeDoubBasBase,
  47.   "mathieeesingbas",    (long *)&MathIeeeSingBasBase,
  48.   "layers",             (long *)&LayersBase,
  49.   "clist",              (long *)&ClistBase,
  50.   "potgo",              (long *)&PotgoBase,
  51.   "timer",              (long *)&TimerBase,
  52.   "dres",               (long *)&DResBase,
  53.   "x15",                (long *)&xfiller15
  54. };
  55.  
  56. int
  57. openlibs(mask)
  58. uword mask;
  59. {
  60.     register struct OLI *sv;
  61.     register short i;
  62.     char buf[64];
  63.  
  64.     for (i = 0; i < sizeof(strvar)/sizeof(strvar[0]); ++i) {
  65.     sv = strvar + i;
  66.  
  67.     if (*sv->var == 0 && (mask & (1 << i))) {
  68.         strcpy(buf, sv->name);
  69.         strcat(buf, ".library");
  70.         if (*sv->var == 0 && (*sv->var = (long)OpenLibrary(buf, 0)) == 0) {
  71.         closelibs(mask);
  72.         return(0);
  73.         }
  74.         OpenMask |= 1 << i;
  75.     }
  76.     }
  77.     return(1);
  78. }
  79.  
  80. /*
  81.  * CLOSELIBS(mask)
  82.  *
  83.  *    Close the indicated libraries.    Does not close libraries which
  84.  *    have not been openned with OPENLIBS()
  85.  */
  86.  
  87. void
  88. closelibs(mask)
  89. uword mask;
  90. {
  91.     register struct OLI *sv;
  92.     register short i;
  93.  
  94.     for (i = 0; i < sizeof(strvar)/sizeof(strvar[0]); ++i) {
  95.     sv = strvar + i;
  96.     if ((mask & (1 << i)) && *sv->var && (OpenMask & (1 << i))) {
  97.         CloseLibrary((struct Library *)*sv->var);
  98.         *sv->var = 0L;
  99.         OpenMask &= ~(1 << i);
  100.     }
  101.     }
  102. }
  103.  
  104.