#include "kernel.h"
#include "def.h"
#include "defstruc.h"
#include "syslogif.h"

OSERROR *socketwatch_register(SOCKET socket, int **count, int **reason, int **masterCount)
{
  _kernel_swi_regs r;
  _kernel_oserror *error;

  r.r[0] = socket;
  error = _kernel_swi(0x71A80,&r,&r);

  if (error != NULL)
    return (OSERROR *) error;

  *count = (int *) r.r[0];
  *reason = (int *) r.r[1];
  *masterCount = (int *) r.r[2];
  xsyslogf(SYSLOG_FILE,LOG_DEBUG_LOW,"socketwatch_register: mastercount = %X\n",*masterCount);

  return NO_OSERROR;
}

OSERROR *socketwatch_deregister(SOCKET socket)
{
  _kernel_swi_regs r;
  _kernel_oserror *error;

  r.r[0] = socket;
  error = _kernel_swi(0x71A81,&r,&r);

  if (error != NULL)
    return (OSERROR *) error;

  return NO_OSERROR;
}

OSERROR *socketwatch_modifycount(SOCKET socket, int count, int *oldCount, int *reason)
{
  _kernel_swi_regs r;
  _kernel_oserror *error;

  r.r[0] = socket;
  r.r[1] = count;
  error = _kernel_swi(0x71A82,&r,&r);

  if (error != NULL)
    return (OSERROR *) error;

  *oldCount = r.r[1];
  *reason = r.r[2];

  return NO_OSERROR;
}

