home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / spirit / tut / !Lesson2_C_Lesson2 < prev    next >
Encoding:
Text File  |  1993-06-18  |  6.3 KB  |  249 lines

  1. /*
  2.  *
  3.  *      Title     : Lesson 2
  4.  *      System    : New Risc-OS library. */
  5. #define Version     "1.0"
  6. /*      Copyright : (c) John Winters
  7.  *      Date      : 31st May, 1993
  8.  *      Author    : John H. Winters
  9.  *
  10.  *      Function  : Lesson 2 of the Spirit library tutorial.
  11.  *
  12.  *                  Note that this example uses literal strings within the
  13.  *                  code.  I wouldn't do this in a real application, but
  14.  *                  I think it makes the working clearer in this case.
  15.  *
  16.  *
  17.  *      Modification history.
  18.  *
  19.  *      Version   : 
  20.  *      Date      : 
  21.  *      Author    : 
  22.  *      Changes   : 
  23.  *
  24.  */
  25.  
  26. #include <stdlib.h>
  27. #include "winapp.h"
  28.  
  29. /*
  30.  *==========================================================================
  31.  *
  32.  *  Hash defines.
  33.  *
  34.  *==========================================================================
  35.  */
  36.  
  37. #define MENU_INFO   0   /* Menu entry for information */
  38. #define MENU_QUIT   1   /* Menu entry to quit */
  39. #define TFN_VERSION 4   /* Field number for version string */
  40.  
  41. /*
  42.  *==========================================================================
  43.  *
  44.  *  Local data.
  45.  *
  46.  *==========================================================================
  47.  */
  48.  
  49. /*
  50.  *  Handle on the dialogue box which we use to give process information.
  51.  */
  52. static t_dbox        InfoDbox ;
  53. /*
  54.  *  String to place in our information dialogue box.
  55.  */
  56. static char          VersionString [] = Version " (31st May, 1993)" ;
  57.  
  58. /*
  59.  *==========================================================================
  60.  *
  61.  *  Externally visible data.
  62.  *
  63.  *==========================================================================
  64.  */
  65.  
  66. /*
  67.  *  This data item gives the name of the directory to look in when loading
  68.  *  resources.  It will make the library code look for an environment
  69.  *  variable <Lesson2$Dir> which points to the correct directory.
  70.  */
  71. const char WA_resource_dir [] = "Lesson2" ;
  72. /*
  73.  *  This data item defines the task name.
  74.  */
  75. const char WA_task_name [] = "Lesson 2" ;
  76.  
  77. /*
  78.  *==========================================================================
  79.  *
  80.  *  Forward declarations.
  81.  *
  82.  *==========================================================================
  83.  */
  84.  
  85. static void MenuHandler (
  86.     void      *reference,
  87.     const int *hit) ;
  88.  
  89. /*
  90.  *==========================================================================
  91.  *
  92.  *  Externally visible routines.
  93.  *
  94.  *==========================================================================
  95.  */
  96.  
  97. unsigned int WA_BeginProcessing (void)
  98.  
  99. /*
  100.  *  Function :
  101.  *                  This routine is called after we have succesfully
  102.  *                  called WIMP_Initialise and are ready to go ahead.
  103.  *
  104.  *  Parameters :
  105.  *                  None.
  106.  *
  107.  *  Returns :
  108.  *                  TRUE if we are happy to go on, FALSE otherwise.
  109.  *
  110.  */
  111.  
  112. {
  113.     t_menu_block *MainMenu ;
  114.  
  115.     /*
  116.      *  Create a menu to attach to our icon.  The syntax for the menu
  117.      *  string is as for Acorn's product.
  118.      */
  119.     MainMenu = WA_BuildMenu (WA_resource_dir,
  120.                              ">Info, Quit") ;
  121.     if (MainMenu == NULL)
  122.     {
  123.         LOG_Error ("Failed to create a menu.\n") ;
  124.     }
  125.     else
  126.     {
  127.         /*
  128.          *  Now create a dialogue box from the template we loaded
  129.          *  earlier.  It's a non-persistent one (FALSE), and
  130.          *  doesn't require a handler or reference (NULL, NULL).
  131.          */
  132.         InfoDbox = WA_CreateDbox ("ProgInfo", FALSE, NULL, NULL) ;
  133.         if (InfoDbox == NULL)
  134.         {
  135.             LOG_Error ("Can't create information dbox.\n") ;
  136.         }
  137.         else
  138.         {
  139.             /*
  140.              *  Inject our current version number into the dialogue
  141.              *  box.
  142.              */
  143.             WA_SetDboxField (InfoDbox,
  144.                              TFN_VERSION,
  145.                              VersionString) ;
  146.             /*
  147.              *  Now pop our icon on the bar, and attach a menu to it.
  148.              *  If an error occurs it will be reported for us.
  149.              */
  150.             return ((WA_IconToBar ("!lesson2", TRUE)) &&
  151.                     (WA_AttachMenu (ICON_BAR,
  152.                                     MainMenu,
  153.                                     MenuHandler,
  154.                                     NULL))) ;
  155.         }
  156.     }
  157.     return (FALSE) ;
  158. }
  159.  
  160.  
  161. unsigned int WA_LoadResources (void)
  162.  
  163. /*
  164.  *  Function :
  165.  *                  This is our opportunity to load whatever resources
  166.  *                  we require before WIMP_Initialise is called.
  167.  *
  168.  *  Parameters :
  169.  *                  None.
  170.  *
  171.  *  Returns :
  172.  *                  TRUE if we are happy to go on, FALSE otherwise.
  173.  *
  174.  */
  175.  
  176. {
  177.     t_LOG_HandlerMask mask ;
  178.  
  179.     /*
  180.      *  Arrange for any messages to appear in a pop-up box.  A more
  181.      *  sophisticated application would probably arrange its own
  182.      *  message handling, but this easy method is provided for noddy
  183.      *  code.
  184.      */
  185.     mask.value             = 0 ;
  186.     mask.b.LHM_Debug       = TRUE ;
  187.     mask.b.LHM_Info        = TRUE ;
  188.     mask.b.LHM_Warning     = TRUE ;
  189.     mask.b.LHM_Error       = TRUE ;
  190.     mask.b.LHM_SevereError = TRUE ;
  191.     WA_SetPopupErrors (mask) ;
  192.     /*
  193.      *  Now we need a sprite to put on the icon bar, and a template
  194.      *  for our information box.  Note that we are here loading our sprite
  195.      *  from the !Sprites file in our application directory.  If we were
  196.      *  using more than one sprite, we would probably use a separate
  197.      *  sprite file.
  198.      */
  199.     return ((WA_LoadSprites ("!Sprites")) &&
  200.             (WA_LoadTemplate ("Templates", "ProgInfo"))) ;
  201. }
  202.  
  203. /*
  204.  *==========================================================================
  205.  *
  206.  *  Local routines.
  207.  *
  208.  *==========================================================================
  209.  */
  210.  
  211. static void MenuHandler (
  212.     void      *reference,
  213.     const int *hit)
  214.  
  215. /*
  216.  *  Function :
  217.  *                  Menu event handler.
  218.  *
  219.  *  Parameters :
  220.  *                  reference  Ignored.
  221.  *                  hit        Indication of the menu hit.
  222.  *
  223.  *  Returns :
  224.  *                  None.
  225.  *
  226.  */
  227.  
  228. {
  229.     reference = reference ;
  230.     /*
  231.      *  See which menu entry has been chosen.
  232.      */
  233.     switch (hit [0])
  234.     {
  235.         case MENU_INFO :
  236.             WA_DisplayDbox (InfoDbox) ;
  237.             break ;
  238.  
  239.         case MENU_QUIT :
  240.             /*
  241.              *  This call causes our application to exit in an
  242.              *  orderly manner.
  243.              */
  244.             WA_WindUp () ;
  245.             break ;
  246.  
  247.     }
  248. }
  249.