home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
595.lha
/
MountStuff
/
MoreDos.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-10-17
|
2KB
|
94 lines
/*************************************************************/
/* NeonSoft (C) 06-04-'88 */
/* moredos.c */
/*************************************************************/
#include <exec/types.h>
#include <libraries/dosextens.h>
#include "hh:moredos.h"
#include <ctype.h>
static BOOL
devcmp(nstr,bstr)
TEXT *nstr;
BPTR *bstr;
{
TEXT *bptr = BADDR(bstr);
UCOUNT blen = *(TEXT *)bptr, nlen = 0;
bptr++;
while (nlen<blen && ((isalpha(*nstr))?(_toupper(*nstr)):(*nstr))==*bptr) {
nstr++; bptr++; nlen++;
}
return(((!*nstr) || (*nstr==':' && !nstr[1])) && nlen==blen);
}
BPTR
FindDevice(Entry,Name)
BPTR Entry;
TEXT (*Name)[];
{
BOOL found = FALSE;
struct DeviceList *dl = BADDR(Entry);
Forbid();
while (dl && !found) {
if (devcmp(Name,dl->dl_Name)) {
found = TRUE;
} else {
dl = BADDR((dl->dl_Next));
}
}
Permit();
return((found)?(NADDR(dl)):(NULL));
}
BPTR
RemoveDevice(Entry,Device)
BPTR *Entry;
BPTR Device;
{
BOOL found = FALSE;
struct DeviceList *dl = BADDR(Device);
struct DeviceList *pl = BADDR((*Entry));
Forbid();
if (pl==dl) {
*Entry = dl->dl_Next;
found = TRUE;
} else {
while (pl->dl_Next && !found) {
if (pl->dl_Next==Device) {
pl->dl_Next = dl->dl_Next;
found = TRUE;
} else {
pl = BADDR((pl->dl_Next));
}
}
}
if (found) {
dl->dl_Next = NULL;
}
Permit();
return((found)?(Device):(NULL));
}
VOID
InsertDevice(Entry,Device)
BPTR *Entry;
BPTR Device;
{
struct DeviceList *dl = BADDR(Device);
Forbid();
if (dl) {
dl->dl_Next = *Entry;
*Entry = Device;
}
Permit();
}