#ifndef DOS_DOSTAGS_H
#include <dos/dostags.h>
#endif

#include <proto/asl.h>

#include "MyLib.h"

#include "StaticSaveds.h"

/************************************************************************/

STATIC_SAVEDS(void,AslCode)

{
  struct MsgPort *MsgPort;
  struct AsyncAslMessage *Message;

  MsgPort=&((struct Process *)FindTask(NULL))->pr_MsgPort;
  WaitPort(MsgPort);
  Message=(struct AsyncAslMessage *)GetMsg(MsgPort);
  Message->Result=AslRequest(Message->Requester,Message->TagList);
  Message->Error=IoErr();
  Forbid();
  ReplyMsg(&Message->Message);
}

/****** MyLib.lib/AsyncAslRequest ****************************************
*
*    NAME
*	AsyncAslRequest -- create an asynchronous ASL requester
*
*    SYNOPSIS
*	AsyncAslRequest(Message)
*
*	void AsyncAslRequest(struct AsyncAslMessage *);
*
*    FUNCTION
*
*    INPUTS
*
*    RESULT
*
*************************************************************************/

void AsyncAslRequest(struct AsyncAslMessage *Message)

{
  static struct TagItem TagList[]=
    {
      {NP_Entry, (ULONG)AslCode},
      {NP_Name, (ULONG)"Asynchronous ASL requester"},
      {NP_CopyVars, FALSE},
      {TAG_DONE}
    };

  struct Process *AslProcess;

  if ((AslProcess=CreateNewProc(TagList))!=NULL)
    {
      PutMsg(&AslProcess->pr_MsgPort,&Message->Message);
    }
  else
    {
      Message->Result=FALSE;
      Message->Error=IoErr();
      ReplyMsg(&Message->Message);
    }
}
