//---------------------------------------------------------------------------- int main(int argc, char* argv[]) { if ( !open_libs() ) { IDOS->Printf("Can't open libraries.\n"); return -1; } ClassLibrary* requester = IIntuition->OpenClass("requester.class", 51, &RequesterClass); ClassLibrary* window = IIntuition->OpenClass("window.class", 51, &WindowClass); if ( requester == 0 || window == 0 ) { IDOS->Printf("Can't open classes.\n"); IIntuition->CloseClass(requester); IIntuition->CloseClass(window); close_libs(); return -1; } int rc = agg_main(argc, argv); IIntuition->CloseClass(window); IIntuition->CloseClass(requester); close_libs(); return rc; }
//---------------------------------------------------------------------------- bool open_libs() { DataTypesBase = IExec->OpenLibrary("datatypes.library", 51); GraphicsBase = IExec->OpenLibrary("graphics.library", 51); IntuitionBase = IExec->OpenLibrary("intuition.library", 51); KeymapBase = IExec->OpenLibrary("keymap.library", 51); P96Base = IExec->OpenLibrary("Picasso96API.library", 2); IDataTypes = reinterpret_cast<DataTypesIFace*>( IExec->GetInterface(DataTypesBase, "main", 1, 0)); IGraphics = reinterpret_cast<GraphicsIFace*>( IExec->GetInterface(GraphicsBase, "main", 1, 0)); IIntuition = reinterpret_cast<IntuitionIFace*>( IExec->GetInterface(IntuitionBase, "main", 1, 0)); IKeymap = reinterpret_cast<KeymapIFace*>( IExec->GetInterface(KeymapBase, "main", 1, 0)); IP96 = reinterpret_cast<P96IFace*>( IExec->GetInterface(P96Base, "main", 1, 0)); if ( IDataTypes == 0 || IGraphics == 0 || IIntuition == 0 || IKeymap == 0 || IP96 == 0 ) { close_libs(); return false; } else { return true; } }
int main(void) { struct TrackedResources *crs = NULL; struct TrackedResources *start_rs = NULL; BOOL quitme = FALSE; int numlines = 30; struct Task *this; ULONG portsig; struct MsgPort *port; this = FindTask(NULL); port = CreateMsgPort(); if (!port) return 2; port->mp_Node.ln_Name = "LeakWatch"; port->mp_Node.ln_Pri = 0; AddPort(port); portsig = 1L << port->mp_SigBit; open_libs(); FPuts(Output(), "LeakWatch running, CTRL-C to exit, CTRL-E to watch for leaks since beginning, CTRL-F to watch for leaks since last CTRL-F, CTRL-D for an usage snapshot\n"); crs = NewResourcesState(); if (NULL == crs) quitme = TRUE; else start_rs = CopyResourcesState(crs); while(!quitme) { ULONG signals; signals = Wait(portsig | SIGBREAKF_CTRL_F | SIGBREAKF_CTRL_E | SIGBREAKF_CTRL_D | SIGBREAKF_CTRL_C); if (signals & SIGBREAKF_CTRL_D) { struct TrackedResources *tr; tr = NewResourcesState(); if (NULL == tr) { quitme = TRUE; break; } DisplayResourcesState(tr, numlines); DeleteResourcesState(tr); } if (signals & SIGBREAKF_CTRL_E) { struct ResourceDiff *rd = NULL; DeleteResourcesState(crs); crs = NewResourcesState(); if (NULL == crs) { quitme = TRUE; break; } /* DisplayResourcesState(crs); */ /* only for debug */ rd = NewStateDiff(start_rs, crs); DisplayStateDiff(rd, numlines); DeleteStateDiff(rd); } if (signals & SIGBREAKF_CTRL_F) { struct TrackedResources *ors = crs; struct ResourceDiff *rd = NULL; crs = NewResourcesState(); if (NULL == crs) { quitme = TRUE; break; } rd = NewStateDiff(ors, crs); DisplayStateDiff(rd, numlines); DeleteStateDiff(rd); DeleteResourcesState(ors); } if (signals & SIGBREAKF_CTRL_C) { quitme = TRUE; } if (signals & portsig) { struct Message *msg; while((msg = (struct Message *)GetMsg(port))) { D(bug("Received watch message.\n")); ReplyMsg(msg); } } } /* while(!quitme) */ DeleteResourcesState(crs); DeleteResourcesState(start_rs); close_libs(); if (port) { RemPort(port); DeleteMsgPort(port); } return 0; }