home *** CD-ROM | disk | FTP | other *** search
- /* This example shows a simple Intuition program that works with
- * Release 2 (V36) and later versions of the Amiga operating system.
- */
-
- /* easyintuition37.c -- Simple Intuition program for V37 */
- /* (Release 2) and later versions of the operating system. */
- /* Compiled with Lattice C v5.04: lc -L easyintuition37.c */
-
- #include <exec/types.h> /* The Amiga data types file. */
- #include <intuition/intuition.h> /* Intuition data strucutres, etc. */
- #include <graphics/displayinfo.h> /* Release 2 Amiga display mode ID's */
- #include <libraries/dos.h> /* Official return codes defined here */
-
- #include <clib/exec_protos.h> /* Exec function prototypes */
- #include <clib/intuition_protos.h> /* Intuition function prototypes */
-
- /* Force use of new variable names to help prevent errors */
- #define INTUI_V36_NAMES_ONLY
-
- #ifdef LATTICE /* Disable Ctrl-C handling in SAS/C */
- int CXBRK(void) {return(0);}
- void chkabort(void) {return;}
- #endif
-
- /* Use lowest non-obsolete version that supplies the functions needed. */
- #define INTUITION_REV 37
-
- /* Declare the prototypes of our own functions. Prototypes for system */
- /* functions are declared in the header files in the clib directory. */
- VOID cleanExit( struct Screen *, struct Window *, LONG );
- BOOL handleIDCMP( struct Window *);
-
- struct Library *IntuitionBase = NULL;
-
- /* Position and sizes for our window */
- #define WIN_LEFTEDGE 20
- #define WIN_TOPEDGE 20
- #define WIN_WIDTH 400
- #define WIN_MINWIDTH 80
- #define WIN_HEIGHT 150
- #define WIN_MINHEIGHT 20
-
-
- VOID main(int argc, char *argv[])
- {
- /* Declare variables here */
- ULONG signalmask, winsignal, signals;
- BOOL done = FALSE;
- UWORD pens[]={~0};
-
- struct Screen *screen1 = NULL;
- struct Window *window1 = NULL;
-
- /* Open the Intuition Library */
- IntuitionBase = OpenLibrary( "intuition.library",INTUITION_REV );
- if (IntuitionBase == NULL)
- cleanExit(screen1, window1, RETURN_WARN);
-
- /* Open any other required libraries and make */
- /* any assignments that were postponed above */
-
- /* Open the screen */
- screen1 = OpenScreenTags(NULL,
- SA_Pens, (ULONG)pens,
- SA_DisplayID, HIRES_KEY,
- SA_Depth, 2,
- SA_Title, (ULONG)"Our Screen",
- TAG_DONE);
-
- if (screen1 == NULL)
- cleanExit(screen1, window1, RETURN_WARN);
-
- /* ... and open the window */
- window1 = OpenWindowTags(NULL,
- /* Specify window dimensions and limits */
- WA_Left, WIN_LEFTEDGE,
- WA_Top, WIN_TOPEDGE,
- WA_Width, WIN_WIDTH,
- WA_Height, WIN_HEIGHT,
- WA_MinWidth, WIN_MINWIDTH,
- WA_MinHeight, WIN_MINHEIGHT,
- WA_MaxWidth, ~0,
- WA_MaxHeight, ~0,
- /* Specify the system gadgets we want */
- WA_CloseGadget, TRUE,
- WA_SizeGadget, TRUE,
- WA_DepthGadget, TRUE,
- WA_DragBar, TRUE,
- /* Specify other attributes */
- WA_Activate, TRUE,
- WA_NoCareRefresh,TRUE,
-
- /* Specify the events we want to know about */
- WA_IDCMP, IDCMP_CLOSEWINDOW,
-
- /* Attach the window to the open screen ...*/
- WA_CustomScreen, screen1,
- WA_Title, "EasyWindow",
- WA_ScreenTitle, "Our Screen - EasyWindow is Active",
- TAG_DONE);
- if (window1 == NULL)
- cleanExit(screen1, window1, RETURN_WARN);
-
- /* Set up the signals for the events we want to hear about ... */
- winsignal = 1L << window1->UserPort->mp_SigBit; /* window IDCMP */
- signalmask = winsignal; /* we are only waiting on IDCMP events */
-
- /* Here's the main input event loop where we wait for events. */
- /* We have asked Intuition to send us CLOSEWINDOW IDCMP events */
- /* Exec will wake us if any event we are waiting for occurs. */
- while( !done )
- {
- signals = Wait(signalmask);
-
- /* An event occurred - now act on the signal(s) we received.*/
- /* We were only waiting on one signal (winsignal) in our */
- /* signalmask, so we actually know we received winsignal. */
- if(signals & winsignal)
- done = handleIDCMP(window1); /* done if close gadget */
- }
- cleanExit(screen1, window1, RETURN_OK); /* Exit the program */
- }
-
- BOOL handleIDCMP( struct Window *win )
- {
- BOOL done = FALSE;
- struct IntuiMessage *message = NULL;
- ULONG class;
-
- /* Examine pending messages */
- while( message = (struct IntuiMessage *)GetMsg(win->UserPort) )
- {
- class = message->Class; /* get all data we need from message */
-
- /* When we're through with a message, reply */
- ReplyMsg( (struct Message *)message);
-
- /* See what events occurred */
- switch( class )
- {
- case IDCMP_CLOSEWINDOW:
- done = TRUE;
- break;
- default:
- break;
- }
- }
- return(done);
- }
-
- VOID cleanExit( struct Screen *scrn, struct Window *wind, LONG returnValue )
- {
- /* Close things in the reverse order of opening */
- if (wind) CloseWindow( wind ); /* Close window if opened */
- if (scrn) CloseScreen( scrn ); /* Close screen if opened */
-
- /* Close the library, and then exit */
- if (IntuitionBase) CloseLibrary( IntuitionBase );
- exit(returnValue);
- }
-