#include    <intuition/intuition.h>
#include    <devices/load.h>
#include    "execdef.h"
#include    "intuidef.h"
#include    "windownode.h"

#include    "Cleanup.proto"

#include    <exec/proto.h>

#include    "CloseLoadWindow.proto"

extern Library *GfxBase;
extern struct IntuitionBase *IntuitionBase;
extern MinList windowList;
extern MsgPort *windowPort;
extern MsgPort *loadPort;
extern loadrequest *loadRequest;

void
Cleanup()
{
    WindowNode *windownode, *oldwindownode;

    for (windownode = (WindowNode *)windowList.mlh_Head;
	 windownode->node.mln_Succ; )
    {
	oldwindownode = windownode;
	windownode = (WindowNode *)windownode->node.mln_Succ;
	CloseLoadWindow(oldwindownode);
    }
    if (loadRequest)
    {
	if (loadRequest->lr_node.io_Device)
	    CloseDevice((IORequest *)loadRequest);
	DeleteExtIO((IORequest *)loadRequest, sizeof(loadrequest));
    }
    if (loadPort)
	DeletePort(loadPort);
    if (windowPort)
	DeletePort(windowPort);
    if (IntuitionBase)
	CloseLibrary((Library *)IntuitionBase);
    if (GfxBase)
	CloseLibrary(GfxBase);
}
