home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD1.img
/
d1xx
/
d169
/
src
/
suplib
/
openlibs.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-11-22
|
2KB
|
93 lines
#include <local/xmisc.h>
static long OpenMask = 0;
long GfxBase;
long IntuitionBase;
long ExpansionBase;
long DiskfontBase;
long TranslatorBase;
long IconBase;
long MathBase;
long MathTransBase;
long MathIeeeDoubBasBase;
long MathIeeeSingBasBase;
long LayersBase;
long ClistBase;
long PotgoBase;
long TimerBase;
long DResBase;
long xfiller15;
struct OLI {
char *name;
long *var;
};
struct OLI strvar[] = {
"graphics", &GfxBase,
"intuition", &IntuitionBase,
"expansion", &ExpansionBase,
"diskfont", &DiskfontBase,
"translator", &TranslatorBase,
"icon", &IconBase,
"mathffp", &MathBase,
"mathtrans", &MathTransBase,
"mathieeedoubbas", &MathIeeeDoubBasBase,
"mathieeesingbas", &MathIeeeSingBasBase,
"layers", &LayersBase,
"clist", &ClistBase,
"potgo", &PotgoBase,
"timer", &TimerBase,
"dres", &DResBase,
"x15", &xfiller15
};
openlibs(mask)
unsigned short mask;
{
register struct OLI *sv;
register short i;
char buf[64];
for (i = 0; i < sizeof(strvar)/sizeof(strvar[0]); ++i) {
sv = strvar + i;
if (mask & (1 << i)) {
strcpy(buf, sv->name);
strcat(buf, ".library");
if (*sv->var == 0 && (*sv->var = OpenLibrary(buf, 0L)) == 0) {
closelibs(mask);
return(0);
}
OpenMask |= 1 << i;
}
}
return(1);
}
/*
* CLOSELIBS(mask)
*
* Close the indicated libraries. Does not close libraries which
* have not been openned with OPENLIBS()
*/
closelibs(mask)
unsigned short mask;
{
register struct OLI *sv;
register short i;
for (i = 0; i < sizeof(strvar)/sizeof(strvar[0]); ++i) {
sv = strvar + i;
if ((mask & (1 << i)) && *sv->var && (OpenMask & (1 << i))) {
CloseLibrary(*sv->var);
*sv->var = 0L;
OpenMask &= ~(1 << i);
}
}
}