/* The code in this module is almost straight from PowerWindows example which they say is in no way copyrighted and free to use. Incidentally it is a very good example of a clean event handler. /* /* ******************** Enthusiastic Product Endorsement *************** */ /* I think Power Windows is the greatest Amiga programming tool on the market. It makes it EASY to produce great-looking programs that make full use of the Intuition environment. */ /* INCLUDES ********************************************************** */ #include #include #include #include #include #include USHORT quit_flag = FALSE; /* This is for the event handler */ void quit(object) APTR object; { quit_flag = TRUE; } SHORT mousex, mousey; struct IntuitionBase *IntuitionBase; struct GfxBase *GfxBase; /* get the PowerWindows 2.0 code */ #include "PatEdit.h" struct Window *wG; /* we fetch the RastPort pointer from here */ struct RastPort *rpG; struct Process *OurTask; struct Window *old_pr_WindowPtr; static char def_name[50] = "Meps"; static char def_dir[50] = "df1:"; #ifdef NEWSCREENSTRUCTURE struct Screen *sC; struct ViewPort vP; #endif main() { UWORD code; ULONG class; APTR object; struct IntuiMessage *message; /* the message the IDCMP sends us */ IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 0L); if (IntuitionBase == NULL) { printf("intuition is not here. where are we?\n"); goto cleanup1; } GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0L); #ifdef NEWSCREENSTRUCTURE sC = OpenScreen(&NewScreenStructure); /* open screen if present */ NewWindowStructure1.Screen = sC; #ifdef PALETTE /* note *** the original PW example had a bug here, since it failed to coerce the PaletteColorCount variable to long (made a wierd bug) */ LoadRGB4(&sC->ViewPort ,&Palette,(long)PaletteColorCount); #endif #endif wG = OpenWindow(&NewWindowStructure1); /* open the window */ if ( wG == NULL ) { printf ("open window failed\n"); goto cleanup1; } rpG = wG->RPort; /* get a rastport pointer for the window */ #ifdef MenuList1 SetMenuStrip(wG,&MenuList1); /* attach any Menu */ #endif #ifdef IntuiTextList1 PrintIText(rpG,&IntuiTextList1,0L,0L); /* Print the text if there is any */ #endif #ifdef BorderList1 DrawBorder(rpG,&BorderList1,0L,0L); /* Draw the borders if there are any */ #endif #ifdef ImageList1 DrawImage(rpG,&ImageList1,0L,0L); /* Draw the images if there are any */ #endif init(); do { WaitPort(wG->UserPort); while( (message = (struct IntuiMessage *) GetMsg(wG->UserPort) ) != NULL) { code = message->Code; /* MENUNUM */ object = message->IAddress; /* Gadget */ class = message->Class; mousex=message->MouseX; mousey=message->MouseY; ReplyMsg(message); if ( class == CLOSEWINDOW ) (quit_flag = TRUE); #ifdef HANDLEEVENT if (( class == GADGETUP ) || /* Gagdets */ ( class == GADGETDOWN )) HandleEvent(object); #ifdef MenuList1 if ( class == MENUPICK ) /* MenuItems */ HandleEvent(ItemAddress(&MenuList1,(LONG)code)); #endif #endif if (class==REQCLEAR) SetSize(); } } while (quit_flag == FALSE); cleanup3: #ifdef MenuList1 ClearMenuStrip(wG); #endif cleanup2: if (old_pr_WindowPtr) OurTask->pr_WindowPtr = old_pr_WindowPtr; CloseWindow(wG); #ifdef NEWSCREENSTRUCTURE CloseScreen(sC); #endif cleanup1: if (GfxBase != NULL) CloseLibrary(GfxBase); if (IntuitionBase != NULL) CloseLibrary(IntuitionBase); return(0); }