Admin Panel
#include <exec/exec.h>
#include <dos/dos.h>
#include <proto/exec.h>
#include <proto/dos.h>
static struct Resident *find_res(BPTR seg)
{
STRPTR addr = (STRPTR)(BADDR(seg)) - sizeof(ULONG);
ULONG size = *(ULONG *)addr;
STRPTR data = (STRPTR)(BADDR(seg)) + sizeof(BPTR);
ULONG i;
Printf("SEG:%08lx, ADDR:%08lx, SIZE:%08lx\n", seg, data, size);
for(i=0;i<size;i+=2) {
struct Resident *res = (struct Resident *)data;
if(res->rt_MatchWord == RTC_MATCHWORD && res->rt_MatchTag == res) {
return res;
}
data += 2;
}
return NULL;
}
int main(int argc, char *argv[])
{
BPTR seglist;
struct Resident *res;
int result = 0;
struct Library *lib;
if(argc != 2) {
Printf("Usage: %s <file>\n", argv[0]);
return 1;
}
seglist = LoadSeg(argv[1]);
if(seglist == 0) {
Printf("No seglist found: %s\n", argv[1]);
return 2;
}
/* find resident */
res = find_res(seglist);
if(res == 0) {
PutStr("no resident?\n");
result = 3;
}
else {
/* init resident */
lib = InitResident(res, seglist);
if(lib == NULL) {
PutStr("no lib?\n");
result = 4;
UnLoadSeg(seglist);
}
else {
/* remove lib again */
RemLibrary(lib);
}
}
return result;
}