type
    Window_t = struct {
	*Window_t w_NextWindow;
	
	uint w_LeftEdge, w_TopEdge;
	uint w_Width, w_Height;
	
	int w_MouseY, w_MouseX;
	
	uint w_MinWidth, w_MinHeight;
	uint w_MaxWidth, w_MaxHeight;
	
	ulong w_Flags;
	
	*Menu_t w_MenuStrip;
	
	*char w_Title;
	
	*Requester_t w_FirstRequest;
	*Requester_t w_DMRequest;
	uint w_ReqCount;
	
	*Screen_t w_WScreen;
	*RastPort_t w_RPort;
	
	ushort w_BorderLeft, w_BorderTop, w_BorderRight, w_BorderBottom;
	*RastPort_t w_BorderRPort;
	
	*Gadget_t w_FirstGadget;
	
	*Window_t w_Parent, w_Descendant;
	
	*uint w_Pointer;
	ushort w_PtrHeight, w_PtrWidth;
	short w_XOffset, w_YOffset;
	
	ulong w_IDCMPFlags;
	*MsgPort_t w_UserPort, w_WindowPort;
	*IntuiMessage_t w_MessageKey;
	
	ushort w_DetailPen, w_BlockPen;
	
	*Image_t w_CheckMark;
	
	*char w_ScreenTitle;
	
	int w_GZZMouseX, w_GZZMouseY;
	uint w_GZZWidth, w_GZZHeight;
	
	*byte w_ExtData;
	
	*byte w_UserData;
	
	*Layer_t w_WLayer;
	
	*TextFont_t w_IFont;
    };

ulong
    WINDOWSIZING    = 0x00000001,
    WINDOWDRAG	    = 0x00000002,
    WINDOWDEPTH     = 0x00000004,
    WINDOWCLOSE     = 0x00000008,

    SIZEBRIGHT	    = 0x00000010,
    SIZEBBOTTOM     = 0x00000020,

    REFRESHBITS     = 0x000000C0,
    SMART_REFRESH   = 0x00000000,
    SIMPLE_REFRESH  = 0x00000040,
    SUPER_BITMAP    = 0x00000080,
    OTHER_REFRESH   = 0x000000C0,

    BACKDROP	    = 0x00000100,

    REPORTMOUSE     = 0x00000200,

    GIMMEZEROZERO   = 0x00000400,

    BORDERLESS	    = 0x00000800,

    ACTIVATE	    = 0x00001000,

    WINDOWACTIVE    = 0x00002000,
    INREQUEST	    = 0x00004000,
    MENUSTATE	    = 0x00008000,

    RMBTRAP	    = 0x00010000,
    NOCAREREFRESH   = 0x00020000,

    WINDOWREFRESH   = 0x01000000,
    WBENCHWINDOW    = 0x02000000,
    WINDOWTICKED    = 0x04000000,

    SUPER_UNUSED    = 0xF8FC0000;

type
    NewWindow_t = struct {
	uint nw_LeftEdge, nw_TopEdge;
	uint nw_Width, nw_Height;
	
	ushort nw_DetailPen, nw_BlockPen;
	
	ulong nw_IDCMPFlags;
	
	ulong nw_Flags;
	
	*Gadget_t nw_FirstGadget;
	
	*Image_t nw_CheckMark;
	
	*char nw_Title;
	
	*Screen_t nw_Screen;
	
	*BitMap_t nw_BitMap;
	
	uint nw_MinWidth, nw_MinHeight;
	uint nw_MaxWidth, nw_MaxHeight;
	
	uint nw_Type;
    };

uint
    FREESIZE = 0xffff;

ushort
    FREEPEN = 0xff;

extern
    ActivateWindow(*Window_t w)void,
    BeginRefresh(*Window_t w)void,
    ClearPointer(*Window_t w)void,
    CloseWindow(*Window_t w)void,
    EndRefresh(*Window_t w; ulong complete)void,
    ModifyIDCMP(*Window_t w; ulong IDCMPFlags)void,
    MoveWindow(*Window_t w; long deltaX, deltaY)void,
    OpenWindow(*NewWindow_t nw)*Window_t,
    RefreshWindowFrame(*Window_t w)void,
    ReportMouse(ulong value; *Window_t w)void,
    SetPointer(*Window_t w; *uint pointer;
	       ulong height, width; long XOffset, YOffset)void,
    SetWindowTitles(*Window_t w; *char windowTitle, screenTitle)void,
    SizeWindow(*Window_t w; long deltaX, deltaY)void,
    ViewPortAddress(*Window_t w)*ViewPort_t,
    WindowLimits(*Window_t w; ulong minWidth,minHeight,maxWidth,maxHeight)bool,
    WindowToBack(*Window_t w)void,
    WindowToFront(*Window_t w)void;
