home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / prog / source / cxercise.lha / SIMPLEW2.C < prev    next >
C/C++ Source or Header  |  1987-04-20  |  5KB  |  102 lines

  1. /***********************************************\
  2. *                                               *
  3. *  Sample Intuition Screen & Window program #2  *
  4. *                                               *
  5. *  Written for ATUG's 'C SIG' by Dave Brittain  *
  6. *                                               *
  7. \***********************************************/
  8.  
  9. #include <exec/types.h>
  10. #include <intuition/intuition.h>
  11.  
  12. struct IntuitionBase *IntuitionBase;
  13.  
  14. #define INTUITION_REV 0
  15.  
  16. struct IntuiText IntuiText =
  17. { 2, 0,              /* FrontPen, BackPen */
  18.   JAM1,              /* DrawMode, JAM1 = draw foreground but not background */
  19.   10, 20,            /* LeftEdge, TopEdge */
  20.   NULL,              /* TextAttr */
  21.   "Sample text for a simple window.", /* IText */
  22.   NULL,              /* NextText */
  23. };
  24.  
  25. /*****************************************************************************\
  26. *                                                                             *
  27. *  A  static initialization of a NewWindow data structure.  This is used  by  *
  28. *  Intuition to create a window structure, which is a dynamically allocated,  *
  29. *  and used structure.  The other way of initializing a structure,  would be  *
  30. *  to  write a list of simple assignment statements that assign a  value  to  *
  31. *  each  member of (field within) the structure.  I prefer  static  initial-  *
  32. *  ization whenever possible,  since it is much quicker to type in,  and  it  *
  33. *  doesn't generate any executable code.  See page 12 of the Intuition  Ref-  *
  34. *  erence  manual for the string of 18 assignment statements that  does  the  *
  35. *  same thing as the static initialization below.  See page B-12 & 13 of the  *
  36. *  Intuition manual for the definition of the NewWindow structure.            *
  37. *                                                                             *
  38. \*****************************************************************************/
  39.  
  40. struct NewWindow SampleWindow =
  41. { 20, 20, 300, 100, /* LeftEdge, TopEdge, Width, Height */
  42.    0, 1,            /* DetailPen, BlockPen */
  43.  CLOSEWINDOW,       /* IDCMPFlags - Tells Intuition what events we want to
  44.                        hear about. */
  45.  ( WINDOWCLOSE | SMART_REFRESH | ACTIVATE |
  46.    WINDOWDEPTH | WINDOWDRAG ), /* Flags */
  47.  NULL,              /* FirstGadget - points to YOUR gadget list. */
  48.  NULL,              /* CheckMark - points to YOUR checkmark image */
  49. "A Simple Window #2", /* Title-points to the text "A Simple Window #2", which is
  50.                        actually stored somewhere in an initialized data area */
  51.  NULL,              /* Screen */
  52.  NULL,              /* BitMap */
  53.  100, 25, 640, 200, /* MinWidth, MinHeight, MaxWidth, MaxHeight */
  54.  WBENCHSCREEN       /* Type */
  55. };
  56.  
  57. /* Temporary storage of IntuiMessages before they are replied to. */
  58. struct IntuiMessage MyIM; 
  59.  
  60. void main()  /* a void function has no return value. */
  61. {
  62.   struct Window       *Window;
  63.   struct IntuiMessage *IntuiMessage; /* The actual IntuiMessage. */
  64.  
  65.   /***********************************************************\
  66.   *  The following statements open the Intuition library for  *
  67.   *  programatic use.                                         *
  68.   \***********************************************************/
  69.  
  70.   if (((IntuitionBase = (struct IntuitionBase *)
  71.      OpenLibrary("intuition.library", INTUITION_REV)) != NULL)
  72.   && ((Window = (struct Window *)
  73.        OpenWindow(&SampleWindow)) != NULL))
  74.   { /* Intuition & our window are open, now write the pre-initialized text. */
  75.  
  76.     PrintIText(Window->RPort, &IntuiText, 0, 0);
  77.  
  78.     /* Now wait for Intuition to send us a CLOSEWINDOW message. */
  79.  
  80.     do
  81.     { WaitPort(Window->UserPort);
  82.       IntuiMessage = (struct IntuiMessage *) GetMsg(Window->UserPort);
  83.       MyIM = *IntuiMessage; /* Copy the message and reply right away */
  84.       ReplyMsg(IntuiMessage);
  85.  
  86.     /**********************************************************************\
  87.     *                                                                      *
  88.     * ALL messages should be processed here, using the copy of the message *
  89.     * that we placed into 'MyIM'.  This allows Intuition to deallocate the *
  90.     * memory it allocated for the message, while we figure out what to  do *
  91.     * with the message.  Since we are only going to get a CLOSEWINDOW mes- *
  92.     * sage and quit, this is a bit overly cautious.                        *
  93.     *                                                                      *
  94.     \**********************************************************************/
  95.  
  96.     } while (MyIM.Class != CLOSEWINDOW);
  97.       
  98.     if (Window != NULL)        CloseWindow(Window);
  99.     if (IntuitionBase != NULL) CloseLibrary(IntuitionBase);
  100.   };
  101. } /* End of program */
  102.