/* User main program */

#include "module.h"

#include "kernel.h"
#include "swis.h"

#include <stdio.h>
#include <stdlib.h>

void *User_ws;

_kernel_oserror *User_Vector(_kernel_swi_regs *regs)
{
   return NULL;
}

extern void Entry_Vector(void);
extern void *GetVecAddress(void);

static void User__finalise(void)
{
   _kernel_swi_regs regs;

   regs.r[0] = 0;      /* user vector */
   regs.r[1] = (int) Entry_Vector;
   regs.r[2] = (int) User_ws;
   (void) _kernel_swi(OS_Release, &regs, &regs);
}

_kernel_oserror *User_initialise(char *cmd, int pod, void *ws)
{
   _kernel_swi_regs regs;
   _kernel_oserror *err;

   (void) cmd;
   (void) pod;

   User_ws = ws;

   regs.r[0] = 0;      /* user vector */
   regs.r[1] = (int) Entry_Vector;
   regs.r[2] = (int) User_ws;
   if (err = _kernel_swi(OS_Claim, &regs, &regs), err)
      return err;

   atexit(User__finalise);
   return NULL;
}
