// get message
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <exec/exec.h>
#include <dos/dos.h>

#include <clib/exec_protos.h>
#include <clib/dos_protos.h>

#ifdef LATTICE
int CXBRK(void) { return(0); }  /* Disable Lattice CTRL/C handling */
int chkabort(void) { return(0); }  /* really */
#endif

void main ( void )
{
  struct TestMsg
  {
    struct Message t_msg;
    LONG t_number;
  };

  struct MsgPort *MP1,*MP2;
  UBYTE *MP1_Name="receive1";
  UBYTE *MP2_Name="receive2";
  struct TestMsg *MyMsg;

  BOOL done=FALSE;
  LONG signals;



  puts(MP1_Name);

  if (!(MP1=CreateMsgPort()))
  {
    puts("Failed To Create Message Port 1");
  }
  else
  {
    MP1->mp_Node.ln_Name=MP1_Name;
    AddPort(MP1);

    if (!(MP2=CreateMsgPort()))
    {
      puts("Failed To Create Message Port 2");
    }
    else
    {
      MP2->mp_Node.ln_Name=MP2_Name;
      AddPort(MP2);

      do
      {
        signals=Wait(1L<<MP1->mp_SigBit | 1L<<MP2->mp_SigBit | SIGBREAKF_CTRL_C);

        if (signals & SIGBREAKF_CTRL_C)
        {
          puts("*** Break Pressed!");
          done=TRUE;
        }

        if (signals & 1L<<MP1->mp_SigBit)
        {
          while (MyMsg=(struct TestMsg*)GetMsg(MP1))
          {
            printf("Message Received from port 1!, number is %d\n",MyMsg->t_number);
            MyMsg->t_number=5;
            ReplyMsg((struct Message *)MyMsg);
          }
        }
        if (signals & 1L<<MP2->mp_SigBit)
        {
          while (MyMsg=(struct TestMsg*)GetMsg(MP2))
          {
            printf("Message Received from port 2!, number is %d\n",MyMsg->t_number);
            MyMsg->t_number=5;
            ReplyMsg((struct Message *)MyMsg);
          }
        }
      } while (!done);
      RemPort(MP2);
      DeleteMsgPort(MP2);
    }
    RemPort(MP1);
    DeleteMsgPort(MP1);
  }
}