home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 215.lha / AmyLoad / amyload.c < prev    next >
C/C++ Source or Header  |  1996-02-14  |  2KB  |  99 lines

  1. #include    <intuition/intuition.h>
  2. #include    <devices/load.h>
  3. #include    "intuidef.h"
  4. #include    "execdef.h"
  5. #include    "windownode.h"
  6.  
  7. #include    <exec/proto.h>
  8. #include    <intuition/proto.h>
  9.  
  10. #include    "Cleanup.proto"
  11. #include    "Init.proto"
  12. #include    "NewData.proto"
  13. #include    "NewWindowSize.proto"
  14. #include    "RedrawWindow.proto"
  15. #include    "CloseLoadWindow.proto"
  16. #include    "FindWindowNode.proto"
  17. #include    "PrintRecordTypes.proto"
  18.  
  19. #define SIGQUIT 12
  20.  
  21. struct Library          *GfxBase;
  22. struct IntuitionBase      *IntuitionBase;
  23.  
  24. loadrequest *loadRequest;
  25. MsgPort     *loadPort;
  26. MsgPort     *windowPort;
  27.  
  28. MinList windowList;
  29.  
  30. void
  31. _main(argp)
  32.     char *argp;
  33. {
  34.     IntuiMessage *msg;
  35.     Window *message_window;
  36.     unsigned long message_class;
  37.     unsigned short message_code;
  38.     long    signals, window_signal_mask, load_signal_mask, combined_signal_mask;
  39.     long    quit_signal_mask;
  40.     long    errno;
  41.  
  42.     if (errno = Init(argp))
  43.     {
  44.     Cleanup();
  45.     exit(errno);
  46.     }
  47.     quit_signal_mask = 1 << SIGQUIT;
  48.     window_signal_mask = 1 << windowPort->mp_SigBit;
  49.     load_signal_mask = 1 << loadPort->mp_SigBit;
  50.     combined_signal_mask = quit_signal_mask | window_signal_mask | load_signal_mask;
  51.  
  52.     loadRequest->lr_node.io_Command = CMD_READ;
  53.     SendIO(&loadRequest->lr_node);
  54.     while(windowList.mlh_TailPred != (MinNode *)&windowList)
  55.     {
  56.     signals = Wait(combined_signal_mask);
  57.     if (signals & window_signal_mask)
  58.     {
  59.         while (msg = (struct IntuiMessage *)GetMsg(windowPort))
  60.         {
  61.         message_window = msg->IDCMPWindow;
  62.         message_class = msg->Class;
  63.         message_code = msg->Code;
  64.         ReplyMsg(msg);
  65.         switch(message_class)
  66.         {
  67.         case MOUSEBUTTONS:
  68.             if (msg->Code == MENUDOWN)
  69.             PrintRecordTypes(message_window);
  70.             break;
  71.         case CLOSEWINDOW:
  72.             CloseLoadWindow(FindWindowNode(message_window));
  73.             break;
  74.         case NEWSIZE:
  75.             if (!NewWindowSize(message_window))
  76.             goto bug_out;
  77.             break;
  78.         case REFRESHWINDOW:
  79.             BeginRefresh(message_window);
  80.             RedrawWindow(message_window);
  81.             EndRefresh(message_window, TRUE);
  82.             break;
  83.         }
  84.         }
  85.     }
  86.     if (signals & load_signal_mask)
  87.     {
  88.         (void)GetMsg(loadPort);
  89.         NewData(&loadRequest->lr_load);
  90.         SendIO(&loadRequest->lr_node);
  91.     }
  92.     if (signals & quit_signal_mask)
  93.         break;
  94.     }
  95. bug_out:
  96.     AbortIO(&loadRequest->lr_node);
  97.     Cleanup();
  98. }
  99.