#include  <thread.h>
#include  <synch.h>

#include  "mbox.h"

int  msg_init(mbox_t *MailBox)
{
     sema_init(&(MailBox->NotFull), 1, USYNC_THREAD, (void *) NULL);
     sema_init(&(MailBox->NotEmpty), 0, USYNC_THREAD, (void *) NULL);
     MailBox->Data = 0;
     return (0);
}

int  msg_send(mbox_t *MailBox, int *Value)
{
     sema_wait(&(MailBox->NotFull));
     MailBox->Data = *Value;
     sema_post(&(MailBox->NotEmpty));
     return  (*Value);
}

int  msg_receive(mbox_t *MailBox, int *Value)
{
     sema_wait(&(MailBox->NotEmpty));
     *Value = MailBox->Data;
     sema_post(&(MailBox->NotFull));
     return (*Value);
}