Check for presence of AppleShare FST and don't load if it is missing.

We also don't load if the Marinetti tool stub is missing (we can't easily check for the Marinetti init).
This commit is contained in:
Stephen Heumann 2017-04-09 22:06:13 -05:00
parent 3b2f1b6a25
commit 35bcc701d3

View File

@ -4,10 +4,15 @@
#include <locator.h> #include <locator.h>
#include <desk.h> #include <desk.h>
#include <orca.h> #include <orca.h>
#include <gsos.h>
#include "installcmds.h" #include "installcmds.h"
#include "aspinterface.h" #include "aspinterface.h"
#include "asmglue.h" #include "asmglue.h"
extern Word *unloadFlagPtr;
FSTInfoRecGS fstInfoRec;
void pollTask(void); void pollTask(void);
static struct RunQRec { static struct RunQRec {
@ -20,7 +25,29 @@ static struct RunQRec {
} runQRec; } runQRec;
void setUnloadFlag(void) {
if (*unloadFlagPtr == 0)
*unloadFlagPtr = 1;
}
int main(void) { int main(void) {
unsigned int i;
/*
* Check for presence of AppleShare FST. We error out and unload
* if it's not present. Our code doesn't directly depend on the
* AppleShare FST, but in practice it's not useful without it.
* This also ensures lower-level AppleTalk stuff is present.
*/
fstInfoRec.pCount = 2;
fstInfoRec.fileSysID = 0;
for (i = 1; fstInfoRec.fileSysID != appleShareFSID; i++) {
fstInfoRec.fstNum = i;
GetFSTInfoGS(&fstInfoRec);
if (toolerror() == paramRangeErr)
goto error;
}
LoadOneTool(54, 0x0300); /* load Marinetti 3.0+ */ LoadOneTool(54, 0x0300); /* load Marinetti 3.0+ */
if (toolerror()) if (toolerror())
goto error; goto error;
@ -44,8 +71,11 @@ int main(void) {
runQRec.jml = 0x5C; runQRec.jml = 0x5C;
runQRec.proc = pollTask; runQRec.proc = pollTask;
AddToRunQ((Pointer)&runQRec); AddToRunQ((Pointer)&runQRec);
return;
error: error:
setUnloadFlag();
return; return;
} }