Ejemplo n.º 1
0
/*************
 * DESCRIPTION:   send a message to a subtask and wait for reply
 * INPUT:         st       subtask structure
 *                command
 *                params
 * OUTPUT:        result returned from subtask
 *************/
LONG SendSubTaskMsgPPC(struct SubTask *st, WORD command, APTR params)
{
	st->st_Message.stm_Message.mn_ReplyPort = (struct MsgPort*)st->st_Reply;
	st->st_Message.stm_Message.mn_Length    = sizeof(struct SubTaskMsg);
	st->st_Message.stm_Command              = command;
	st->st_Message.stm_Parameter            = params;
	st->st_Message.stm_Result               = 0;

	PutMsgPPC(st->st_Port, (struct Message *)&st->st_Message);
	WaitPortPPC(st->st_Reply);
	GetMsgPPC(st->st_Reply);

	return(st->st_Message.stm_Result);
}
Ejemplo n.º 2
0
ULONG amigaGetTriggerSigs(void)
{
   ULONG trigs = 0, sigr;

   sigr = SetSignal(0L,0L);

   if ( sigr & SIGBREAKF_CTRL_C ) trigs |= DNETC_MSG_SHUTDOWN;

   #ifndef NO_GUI
   if ( DnetcBase && ModeReqIsSet(-1) ) trigs |= dnetcguiHandleMsgs(sigr);
   #endif

   #ifndef __OS3PPC__
   /*
   ** 68K / OS4 / MorphOS
   */
   if ( TriggerPort && sigr & 1L << TriggerPort->mp_SigBit ) {
      struct TriggerMessage *msg;
      while ((msg = (struct TriggerMessage *)GetMsg(TriggerPort))) {
         trigs |= msg->tm_TriggerType;
         ReplyMsg((struct Message *)msg);
      }
   }
   #elif !defined(__POWERUP__)
   /*
   ** WarpOS
   */
   if ( TriggerPort && sigr & 1L << TriggerPort->mp_Port.mp_SigBit ) {
      struct TriggerMessage *msg;
      while ((msg = (struct TriggerMessage *)GetMsgPPC(TriggerPort))) {
         trigs |= msg->tm_TriggerType;
         ReplyMsgPPC((struct Message *)msg);
      }
   }
   #else
   /*
   ** PowerUp
   */
   {
      void *msg;
      while ((msg = PPCGetMessage(TriggerPort))) {
         trigs |= PPCGetMessageAttr(msg,PPCMSGTAG_MSGID);
         PPCReplyMessage(msg);
      }
   }
   #endif

   return(trigs);
}
Ejemplo n.º 3
0
int amigaPutTriggerSigs(ULONG trigs)
{
   int done = -1;

   #ifndef __OS3PPC__
   /*
   ** 68K / OS4 / MorphOS
   */
   struct TriggerMessage msg;
   if ((msg.tm_ExecMsg.mn_ReplyPort = CreateMsgPort())) {
      struct MsgPort *port;
      msg.tm_TriggerType = trigs;
      msg.tm_ExecMsg.mn_Node.ln_Type = NT_MESSAGE;
      msg.tm_ExecMsg.mn_Length = sizeof(struct TriggerMessage);

      Forbid();
      if ((port = FindPort("dnetc")) && port != TriggerPort) {
         PutMsg(port,(struct Message *)&msg);
      }
      Permit();
      if (port && port != TriggerPort) {
         WaitPort(msg.tm_ExecMsg.mn_ReplyPort);
         GetMsg(msg.tm_ExecMsg.mn_ReplyPort);
         done = 1;
      }
      else {
         done = 0;
      }
      DeleteMsgPort(msg.tm_ExecMsg.mn_ReplyPort);
   }
   #elif !defined(__POWERUP__)
   /*
   ** WarpOS
   */
   struct TriggerMessage msg;
   struct MsgPortPPC *replyport;
   if ((replyport = CreateMsgPortPPC())) {
      msg.tm_ExecMsg.mn_ReplyPort = (struct MsgPort *)replyport;
      msg.tm_ExecMsg.mn_Node.ln_Type = NT_MESSAGE;
      msg.tm_ExecMsg.mn_Length = sizeof(struct TriggerMessage);
      msg.tm_TriggerType = trigs;

      struct MsgPortPPC *port;
      if ((port = FindPortPPC("dnetc")) && port != TriggerPort) {
         PutMsgPPC(port,(struct Message *)&msg);
         WaitPortPPC(replyport);
         GetMsgPPC(replyport);
         done = 1;
      }
      else {
         done = 0;
      }
      DeleteMsgPortPPC(replyport);
   }
   #else
   /*
   ** PowerUp
   */
   struct TagItem tags[2] = { {PPCPORTTAG_NAME, (ULONG)"dnetc"}, {TAG_END,0} };
   void *msg, *replyport, *port;
   if ((replyport = PPCCreatePort(NULL))) {
      if ((msg = PPCCreateMessage(replyport,0))) {
         done = 0;
         if ((port = PPCObtainPort(tags))) {
            if (port != TriggerPort) {
               if (PPCSendMessage(port,msg,NULL,0,trigs)) {
                  PPCWaitPort(replyport);
                  PPCGetMessage(replyport);
                  done = 1;
               }
            }
            PPCReleasePort(port);
         }
         PPCDeleteMessage(msg);
      }
      PPCDeletePort(replyport);
   }
   #endif

   return(done);
}