/* <code/eventgen.h> -- Automatic event header
 *
 * $Id: //info.ravenbrook.com/project/mps/version/1.101/code/eventgen.h#1 $
 * Copyright (c) 2001 Ravenbrook Limited.  See end of file for license.
 *
 * DO NOT EDIT THIS FILE!
 * This file was generated by //info.ravenbrook.com/project/mps/master/code/eventgen.pl#6
 */

#ifdef EVENT

typedef struct {
  Word code;
  Word clock;
} Event0Struct;

#define EVENT_0_FIELD_PTR(event, i) \
  (NULL)

typedef struct {
  Word code;
  Word clock;
  Addr a0;
} EventAStruct;

#define EVENT_A_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->a.a0) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  Addr a0;
  Word w1;
} EventAWStruct;

#define EVENT_AW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->aw.a0) \
   : ((i) == 1) ? (void *)&((event)->aw.w1) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
} EventPStruct;

#define EVENT_P_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->p.p0) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Addr a1;
  Addr a2;
} EventPAAStruct;

#define EVENT_PAA_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->paa.p0) \
   : ((i) == 1) ? (void *)&((event)->paa.a1) \
   : ((i) == 2) ? (void *)&((event)->paa.a2) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Addr a1;
  Word w2;
} EventPAWStruct;

#define EVENT_PAW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->paw.p0) \
   : ((i) == 1) ? (void *)&((event)->paw.a1) \
   : ((i) == 2) ? (void *)&((event)->paw.w2) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Addr a1;
  Word w2;
  Addr a3;
} EventPAWAStruct;

#define EVENT_PAWA_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pawa.p0) \
   : ((i) == 1) ? (void *)&((event)->pawa.a1) \
   : ((i) == 2) ? (void *)&((event)->pawa.w2) \
   : ((i) == 3) ? (void *)&((event)->pawa.a3) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  double d1;
  double d2;
  Word w3;
  Word w4;
  Word w5;
} EventPDDWWWStruct;

#define EVENT_PDDWWW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pddwww.p0) \
   : ((i) == 1) ? (void *)&((event)->pddwww.d1) \
   : ((i) == 2) ? (void *)&((event)->pddwww.d2) \
   : ((i) == 3) ? (void *)&((event)->pddwww.w3) \
   : ((i) == 4) ? (void *)&((event)->pddwww.w4) \
   : ((i) == 5) ? (void *)&((event)->pddwww.w5) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
} EventPPStruct;

#define EVENT_PP_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pp.p0) \
   : ((i) == 1) ? (void *)&((event)->pp.p1) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  Addr a2;
  unsigned u3;
} EventPPAUStruct;

#define EVENT_PPAU_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->ppau.p0) \
   : ((i) == 1) ? (void *)&((event)->ppau.p1) \
   : ((i) == 2) ? (void *)&((event)->ppau.a2) \
   : ((i) == 3) ? (void *)&((event)->ppau.u3) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  Addr a2;
  Word w3;
  void * p4;
} EventPPAWPStruct;

#define EVENT_PPAWP_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->ppawp.p0) \
   : ((i) == 1) ? (void *)&((event)->ppawp.p1) \
   : ((i) == 2) ? (void *)&((event)->ppawp.a2) \
   : ((i) == 3) ? (void *)&((event)->ppawp.w3) \
   : ((i) == 4) ? (void *)&((event)->ppawp.p4) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  void * p2;
} EventPPPStruct;

#define EVENT_PPP_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->ppp.p0) \
   : ((i) == 1) ? (void *)&((event)->ppp.p1) \
   : ((i) == 2) ? (void *)&((event)->ppp.p2) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  void * p2;
  Addr a3;
} EventPPPAStruct;

#define EVENT_PPPA_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pppa.p0) \
   : ((i) == 1) ? (void *)&((event)->pppa.p1) \
   : ((i) == 2) ? (void *)&((event)->pppa.p2) \
   : ((i) == 3) ? (void *)&((event)->pppa.a3) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  void * p2;
  unsigned u3;
} EventPPPUStruct;

#define EVENT_PPPU_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pppu.p0) \
   : ((i) == 1) ? (void *)&((event)->pppu.p1) \
   : ((i) == 2) ? (void *)&((event)->pppu.p2) \
   : ((i) == 3) ? (void *)&((event)->pppu.u3) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  void * p2;
  unsigned u3;
  unsigned u4;
} EventPPPUUStruct;

#define EVENT_PPPUU_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pppuu.p0) \
   : ((i) == 1) ? (void *)&((event)->pppuu.p1) \
   : ((i) == 2) ? (void *)&((event)->pppuu.p2) \
   : ((i) == 3) ? (void *)&((event)->pppuu.u3) \
   : ((i) == 4) ? (void *)&((event)->pppuu.u4) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  unsigned u2;
} EventPPUStruct;

#define EVENT_PPU_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->ppu.p0) \
   : ((i) == 1) ? (void *)&((event)->ppu.p1) \
   : ((i) == 2) ? (void *)&((event)->ppu.u2) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  unsigned u2;
  unsigned u3;
} EventPPUUStruct;

#define EVENT_PPUU_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->ppuu.p0) \
   : ((i) == 1) ? (void *)&((event)->ppuu.p1) \
   : ((i) == 2) ? (void *)&((event)->ppuu.u2) \
   : ((i) == 3) ? (void *)&((event)->ppuu.u3) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  unsigned u2;
  Word w3;
  Word w4;
  Word w5;
} EventPPUWWWStruct;

#define EVENT_PPUWWW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->ppuwww.p0) \
   : ((i) == 1) ? (void *)&((event)->ppuwww.p1) \
   : ((i) == 2) ? (void *)&((event)->ppuwww.u2) \
   : ((i) == 3) ? (void *)&((event)->ppuwww.w3) \
   : ((i) == 4) ? (void *)&((event)->ppuwww.w4) \
   : ((i) == 5) ? (void *)&((event)->ppuwww.w5) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  Word w2;
  Word w3;
} EventPPWWStruct;

#define EVENT_PPWW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->ppww.p0) \
   : ((i) == 1) ? (void *)&((event)->ppww.p1) \
   : ((i) == 2) ? (void *)&((event)->ppww.w2) \
   : ((i) == 3) ? (void *)&((event)->ppww.w3) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  Word w2;
  Word w3;
  Word w4;
} EventPPWWWStruct;

#define EVENT_PPWWW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->ppwww.p0) \
   : ((i) == 1) ? (void *)&((event)->ppwww.p1) \
   : ((i) == 2) ? (void *)&((event)->ppwww.w2) \
   : ((i) == 3) ? (void *)&((event)->ppwww.w3) \
   : ((i) == 4) ? (void *)&((event)->ppwww.w4) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  void * p1;
  Word w2;
  Word w3;
  Word w4;
  unsigned u5;
  unsigned u6;
  unsigned u7;
} EventPPWWWUUUStruct;

#define EVENT_PPWWWUUU_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->ppwwwuuu.p0) \
   : ((i) == 1) ? (void *)&((event)->ppwwwuuu.p1) \
   : ((i) == 2) ? (void *)&((event)->ppwwwuuu.w2) \
   : ((i) == 3) ? (void *)&((event)->ppwwwuuu.w3) \
   : ((i) == 4) ? (void *)&((event)->ppwwwuuu.w4) \
   : ((i) == 5) ? (void *)&((event)->ppwwwuuu.u5) \
   : ((i) == 6) ? (void *)&((event)->ppwwwuuu.u6) \
   : ((i) == 7) ? (void *)&((event)->ppwwwuuu.u7) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  unsigned u1;
} EventPUStruct;

#define EVENT_PU_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pu.p0) \
   : ((i) == 1) ? (void *)&((event)->pu.u1) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Word w1;
} EventPWStruct;

#define EVENT_PW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pw.p0) \
   : ((i) == 1) ? (void *)&((event)->pw.w1) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Word w1;
  Addr a2;
} EventPWAStruct;

#define EVENT_PWA_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pwa.p0) \
   : ((i) == 1) ? (void *)&((event)->pwa.w1) \
   : ((i) == 2) ? (void *)&((event)->pwa.a2) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Word w1;
  Addr a2;
  Word w3;
} EventPWAWStruct;

#define EVENT_PWAW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pwaw.p0) \
   : ((i) == 1) ? (void *)&((event)->pwaw.w1) \
   : ((i) == 2) ? (void *)&((event)->pwaw.a2) \
   : ((i) == 3) ? (void *)&((event)->pwaw.w3) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Word w1;
  void * p2;
} EventPWPStruct;

#define EVENT_PWP_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pwp.p0) \
   : ((i) == 1) ? (void *)&((event)->pwp.w1) \
   : ((i) == 2) ? (void *)&((event)->pwp.p2) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Word w1;
  unsigned u2;
} EventPWUStruct;

#define EVENT_PWU_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pwu.p0) \
   : ((i) == 1) ? (void *)&((event)->pwu.w1) \
   : ((i) == 2) ? (void *)&((event)->pwu.u2) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Word w1;
  Word w2;
} EventPWWStruct;

#define EVENT_PWW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pww.p0) \
   : ((i) == 1) ? (void *)&((event)->pww.w1) \
   : ((i) == 2) ? (void *)&((event)->pww.w2) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Word w1;
  Word w2;
  Word w3;
  Word w4;
  double d5;
  double d6;
} EventPWWWWDDStruct;

#define EVENT_PWWWWDD_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pwwwwdd.p0) \
   : ((i) == 1) ? (void *)&((event)->pwwwwdd.w1) \
   : ((i) == 2) ? (void *)&((event)->pwwwwdd.w2) \
   : ((i) == 3) ? (void *)&((event)->pwwwwdd.w3) \
   : ((i) == 4) ? (void *)&((event)->pwwwwdd.w4) \
   : ((i) == 5) ? (void *)&((event)->pwwwwdd.d5) \
   : ((i) == 6) ? (void *)&((event)->pwwwwdd.d6) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Word w1;
  Word w2;
  Word w3;
  Word w4;
  Word w5;
} EventPWWWWWStruct;

#define EVENT_PWWWWW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pwwwww.p0) \
   : ((i) == 1) ? (void *)&((event)->pwwwww.w1) \
   : ((i) == 2) ? (void *)&((event)->pwwwww.w2) \
   : ((i) == 3) ? (void *)&((event)->pwwwww.w3) \
   : ((i) == 4) ? (void *)&((event)->pwwwww.w4) \
   : ((i) == 5) ? (void *)&((event)->pwwwww.w5) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Word w1;
  Word w2;
  Word w3;
  Word w4;
  Word w5;
  Word w6;
  Word w7;
  Word w8;
  Word w9;
} EventPWWWWWWWWWStruct;

#define EVENT_PWWWWWWWWW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pwwwwwwwww.p0) \
   : ((i) == 1) ? (void *)&((event)->pwwwwwwwww.w1) \
   : ((i) == 2) ? (void *)&((event)->pwwwwwwwww.w2) \
   : ((i) == 3) ? (void *)&((event)->pwwwwwwwww.w3) \
   : ((i) == 4) ? (void *)&((event)->pwwwwwwwww.w4) \
   : ((i) == 5) ? (void *)&((event)->pwwwwwwwww.w5) \
   : ((i) == 6) ? (void *)&((event)->pwwwwwwwww.w6) \
   : ((i) == 7) ? (void *)&((event)->pwwwwwwwww.w7) \
   : ((i) == 8) ? (void *)&((event)->pwwwwwwwww.w8) \
   : ((i) == 9) ? (void *)&((event)->pwwwwwwwww.w9) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  void * p0;
  Word w1;
  Word w2;
  Word w3;
  Word w4;
  Word w5;
  Word w6;
  Word w7;
  Word w8;
  Word w9;
  Word w10;
  Word w11;
  Word w12;
} EventPWWWWWWWWWWWWStruct;

#define EVENT_PWWWWWWWWWWWW_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->pwwwwwwwwwwww.p0) \
   : ((i) == 1) ? (void *)&((event)->pwwwwwwwwwwww.w1) \
   : ((i) == 2) ? (void *)&((event)->pwwwwwwwwwwww.w2) \
   : ((i) == 3) ? (void *)&((event)->pwwwwwwwwwwww.w3) \
   : ((i) == 4) ? (void *)&((event)->pwwwwwwwwwwww.w4) \
   : ((i) == 5) ? (void *)&((event)->pwwwwwwwwwwww.w5) \
   : ((i) == 6) ? (void *)&((event)->pwwwwwwwwwwww.w6) \
   : ((i) == 7) ? (void *)&((event)->pwwwwwwwwwwww.w7) \
   : ((i) == 8) ? (void *)&((event)->pwwwwwwwwwwww.w8) \
   : ((i) == 9) ? (void *)&((event)->pwwwwwwwwwwww.w9) \
   : ((i) == 10) ? (void *)&((event)->pwwwwwwwwwwww.w10) \
   : ((i) == 11) ? (void *)&((event)->pwwwwwwwwwwww.w11) \
   : ((i) == 12) ? (void *)&((event)->pwwwwwwwwwwww.w12) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  unsigned u0;
  unsigned u1;
  void * p2;
  Addr a3;
} EventUUPAStruct;

#define EVENT_UUPA_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->uupa.u0) \
   : ((i) == 1) ? (void *)&((event)->uupa.u1) \
   : ((i) == 2) ? (void *)&((event)->uupa.p2) \
   : ((i) == 3) ? (void *)&((event)->uupa.a3) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  unsigned u0;
  unsigned u1;
  void * p2;
  void * p3;
} EventUUPPStruct;

#define EVENT_UUPP_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->uupp.u0) \
   : ((i) == 1) ? (void *)&((event)->uupp.u1) \
   : ((i) == 2) ? (void *)&((event)->uupp.p2) \
   : ((i) == 3) ? (void *)&((event)->uupp.p3) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  unsigned u0;
  unsigned u1;
  void * p2;
  void * p3;
  void * p4;
} EventUUPPPStruct;

#define EVENT_UUPPP_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->uuppp.u0) \
   : ((i) == 1) ? (void *)&((event)->uuppp.u1) \
   : ((i) == 2) ? (void *)&((event)->uuppp.p2) \
   : ((i) == 3) ? (void *)&((event)->uuppp.p3) \
   : ((i) == 4) ? (void *)&((event)->uuppp.p4) \
   : NULL)

typedef struct {
  Word code;
  Word clock;
  Word w0;
  EventStringStruct s1;
} EventWSStruct;

#define EVENT_WS_FIELD_PTR(event, i) \
  (((i) == 0) ? (void *)&((event)->ws.w0) \
   : ((i) == 1) ? (void *)&((event)->ws.s1) \
   : NULL)


typedef union {
  Event0Struct any;
  EventAStruct a;
  EventAWStruct aw;
  EventPStruct p;
  EventPAAStruct paa;
  EventPAWStruct paw;
  EventPAWAStruct pawa;
  EventPDDWWWStruct pddwww;
  EventPPStruct pp;
  EventPPAUStruct ppau;
  EventPPAWPStruct ppawp;
  EventPPPStruct ppp;
  EventPPPAStruct pppa;
  EventPPPUStruct pppu;
  EventPPPUUStruct pppuu;
  EventPPUStruct ppu;
  EventPPUUStruct ppuu;
  EventPPUWWWStruct ppuwww;
  EventPPWWStruct ppww;
  EventPPWWWStruct ppwww;
  EventPPWWWUUUStruct ppwwwuuu;
  EventPUStruct pu;
  EventPWStruct pw;
  EventPWAStruct pwa;
  EventPWAWStruct pwaw;
  EventPWPStruct pwp;
  EventPWUStruct pwu;
  EventPWWStruct pww;
  EventPWWWWDDStruct pwwwwdd;
  EventPWWWWWStruct pwwwww;
  EventPWWWWWWWWWStruct pwwwwwwwww;
  EventPWWWWWWWWWWWWStruct pwwwwwwwwwwww;
  EventUUPAStruct uupa;
  EventUUPPStruct uupp;
  EventUUPPPStruct uuppp;
  EventWSStruct ws;
} EventUnion;


#define EVENT_0(type) \
  EVENT_BEGIN(type) \
  EVENT_END(type, 0, sizeof(Event0Struct))

#define EVENT_A(type, _a0) \
  EVENT_BEGIN(type) \
    EventMould.a.a0 = (_a0); \
  EVENT_END(type, A, sizeof(EventAStruct))

#define EVENT_AW(type, _a0, _w1) \
  EVENT_BEGIN(type) \
    EventMould.aw.a0 = (_a0); \
    EventMould.aw.w1 = (_w1); \
  EVENT_END(type, AW, sizeof(EventAWStruct))

#define EVENT_P(type, _p0) \
  EVENT_BEGIN(type) \
    EventMould.p.p0 = (_p0); \
  EVENT_END(type, P, sizeof(EventPStruct))

#define EVENT_PAA(type, _p0, _a1, _a2) \
  EVENT_BEGIN(type) \
    EventMould.paa.p0 = (_p0); \
    EventMould.paa.a1 = (_a1); \
    EventMould.paa.a2 = (_a2); \
  EVENT_END(type, PAA, sizeof(EventPAAStruct))

#define EVENT_PAW(type, _p0, _a1, _w2) \
  EVENT_BEGIN(type) \
    EventMould.paw.p0 = (_p0); \
    EventMould.paw.a1 = (_a1); \
    EventMould.paw.w2 = (_w2); \
  EVENT_END(type, PAW, sizeof(EventPAWStruct))

#define EVENT_PAWA(type, _p0, _a1, _w2, _a3) \
  EVENT_BEGIN(type) \
    EventMould.pawa.p0 = (_p0); \
    EventMould.pawa.a1 = (_a1); \
    EventMould.pawa.w2 = (_w2); \
    EventMould.pawa.a3 = (_a3); \
  EVENT_END(type, PAWA, sizeof(EventPAWAStruct))

#define EVENT_PDDWWW(type, _p0, _d1, _d2, _w3, _w4, _w5) \
  EVENT_BEGIN(type) \
    EventMould.pddwww.p0 = (_p0); \
    EventMould.pddwww.d1 = (_d1); \
    EventMould.pddwww.d2 = (_d2); \
    EventMould.pddwww.w3 = (_w3); \
    EventMould.pddwww.w4 = (_w4); \
    EventMould.pddwww.w5 = (_w5); \
  EVENT_END(type, PDDWWW, sizeof(EventPDDWWWStruct))

#define EVENT_PP(type, _p0, _p1) \
  EVENT_BEGIN(type) \
    EventMould.pp.p0 = (_p0); \
    EventMould.pp.p1 = (_p1); \
  EVENT_END(type, PP, sizeof(EventPPStruct))

#define EVENT_PPAU(type, _p0, _p1, _a2, _u3) \
  EVENT_BEGIN(type) \
    EventMould.ppau.p0 = (_p0); \
    EventMould.ppau.p1 = (_p1); \
    EventMould.ppau.a2 = (_a2); \
    EventMould.ppau.u3 = (_u3); \
  EVENT_END(type, PPAU, sizeof(EventPPAUStruct))

#define EVENT_PPAWP(type, _p0, _p1, _a2, _w3, _p4) \
  EVENT_BEGIN(type) \
    EventMould.ppawp.p0 = (_p0); \
    EventMould.ppawp.p1 = (_p1); \
    EventMould.ppawp.a2 = (_a2); \
    EventMould.ppawp.w3 = (_w3); \
    EventMould.ppawp.p4 = (_p4); \
  EVENT_END(type, PPAWP, sizeof(EventPPAWPStruct))

#define EVENT_PPP(type, _p0, _p1, _p2) \
  EVENT_BEGIN(type) \
    EventMould.ppp.p0 = (_p0); \
    EventMould.ppp.p1 = (_p1); \
    EventMould.ppp.p2 = (_p2); \
  EVENT_END(type, PPP, sizeof(EventPPPStruct))

#define EVENT_PPPA(type, _p0, _p1, _p2, _a3) \
  EVENT_BEGIN(type) \
    EventMould.pppa.p0 = (_p0); \
    EventMould.pppa.p1 = (_p1); \
    EventMould.pppa.p2 = (_p2); \
    EventMould.pppa.a3 = (_a3); \
  EVENT_END(type, PPPA, sizeof(EventPPPAStruct))

#define EVENT_PPPU(type, _p0, _p1, _p2, _u3) \
  EVENT_BEGIN(type) \
    EventMould.pppu.p0 = (_p0); \
    EventMould.pppu.p1 = (_p1); \
    EventMould.pppu.p2 = (_p2); \
    EventMould.pppu.u3 = (_u3); \
  EVENT_END(type, PPPU, sizeof(EventPPPUStruct))

#define EVENT_PPPUU(type, _p0, _p1, _p2, _u3, _u4) \
  EVENT_BEGIN(type) \
    EventMould.pppuu.p0 = (_p0); \
    EventMould.pppuu.p1 = (_p1); \
    EventMould.pppuu.p2 = (_p2); \
    EventMould.pppuu.u3 = (_u3); \
    EventMould.pppuu.u4 = (_u4); \
  EVENT_END(type, PPPUU, sizeof(EventPPPUUStruct))

#define EVENT_PPU(type, _p0, _p1, _u2) \
  EVENT_BEGIN(type) \
    EventMould.ppu.p0 = (_p0); \
    EventMould.ppu.p1 = (_p1); \
    EventMould.ppu.u2 = (_u2); \
  EVENT_END(type, PPU, sizeof(EventPPUStruct))

#define EVENT_PPUU(type, _p0, _p1, _u2, _u3) \
  EVENT_BEGIN(type) \
    EventMould.ppuu.p0 = (_p0); \
    EventMould.ppuu.p1 = (_p1); \
    EventMould.ppuu.u2 = (_u2); \
    EventMould.ppuu.u3 = (_u3); \
  EVENT_END(type, PPUU, sizeof(EventPPUUStruct))

#define EVENT_PPUWWW(type, _p0, _p1, _u2, _w3, _w4, _w5) \
  EVENT_BEGIN(type) \
    EventMould.ppuwww.p0 = (_p0); \
    EventMould.ppuwww.p1 = (_p1); \
    EventMould.ppuwww.u2 = (_u2); \
    EventMould.ppuwww.w3 = (_w3); \
    EventMould.ppuwww.w4 = (_w4); \
    EventMould.ppuwww.w5 = (_w5); \
  EVENT_END(type, PPUWWW, sizeof(EventPPUWWWStruct))

#define EVENT_PPWW(type, _p0, _p1, _w2, _w3) \
  EVENT_BEGIN(type) \
    EventMould.ppww.p0 = (_p0); \
    EventMould.ppww.p1 = (_p1); \
    EventMould.ppww.w2 = (_w2); \
    EventMould.ppww.w3 = (_w3); \
  EVENT_END(type, PPWW, sizeof(EventPPWWStruct))

#define EVENT_PPWWW(type, _p0, _p1, _w2, _w3, _w4) \
  EVENT_BEGIN(type) \
    EventMould.ppwww.p0 = (_p0); \
    EventMould.ppwww.p1 = (_p1); \
    EventMould.ppwww.w2 = (_w2); \
    EventMould.ppwww.w3 = (_w3); \
    EventMould.ppwww.w4 = (_w4); \
  EVENT_END(type, PPWWW, sizeof(EventPPWWWStruct))

#define EVENT_PPWWWUUU(type, _p0, _p1, _w2, _w3, _w4, _u5, _u6, _u7) \
  EVENT_BEGIN(type) \
    EventMould.ppwwwuuu.p0 = (_p0); \
    EventMould.ppwwwuuu.p1 = (_p1); \
    EventMould.ppwwwuuu.w2 = (_w2); \
    EventMould.ppwwwuuu.w3 = (_w3); \
    EventMould.ppwwwuuu.w4 = (_w4); \
    EventMould.ppwwwuuu.u5 = (_u5); \
    EventMould.ppwwwuuu.u6 = (_u6); \
    EventMould.ppwwwuuu.u7 = (_u7); \
  EVENT_END(type, PPWWWUUU, sizeof(EventPPWWWUUUStruct))

#define EVENT_PU(type, _p0, _u1) \
  EVENT_BEGIN(type) \
    EventMould.pu.p0 = (_p0); \
    EventMould.pu.u1 = (_u1); \
  EVENT_END(type, PU, sizeof(EventPUStruct))

#define EVENT_PW(type, _p0, _w1) \
  EVENT_BEGIN(type) \
    EventMould.pw.p0 = (_p0); \
    EventMould.pw.w1 = (_w1); \
  EVENT_END(type, PW, sizeof(EventPWStruct))

#define EVENT_PWA(type, _p0, _w1, _a2) \
  EVENT_BEGIN(type) \
    EventMould.pwa.p0 = (_p0); \
    EventMould.pwa.w1 = (_w1); \
    EventMould.pwa.a2 = (_a2); \
  EVENT_END(type, PWA, sizeof(EventPWAStruct))

#define EVENT_PWAW(type, _p0, _w1, _a2, _w3) \
  EVENT_BEGIN(type) \
    EventMould.pwaw.p0 = (_p0); \
    EventMould.pwaw.w1 = (_w1); \
    EventMould.pwaw.a2 = (_a2); \
    EventMould.pwaw.w3 = (_w3); \
  EVENT_END(type, PWAW, sizeof(EventPWAWStruct))

#define EVENT_PWP(type, _p0, _w1, _p2) \
  EVENT_BEGIN(type) \
    EventMould.pwp.p0 = (_p0); \
    EventMould.pwp.w1 = (_w1); \
    EventMould.pwp.p2 = (_p2); \
  EVENT_END(type, PWP, sizeof(EventPWPStruct))

#define EVENT_PWU(type, _p0, _w1, _u2) \
  EVENT_BEGIN(type) \
    EventMould.pwu.p0 = (_p0); \
    EventMould.pwu.w1 = (_w1); \
    EventMould.pwu.u2 = (_u2); \
  EVENT_END(type, PWU, sizeof(EventPWUStruct))

#define EVENT_PWW(type, _p0, _w1, _w2) \
  EVENT_BEGIN(type) \
    EventMould.pww.p0 = (_p0); \
    EventMould.pww.w1 = (_w1); \
    EventMould.pww.w2 = (_w2); \
  EVENT_END(type, PWW, sizeof(EventPWWStruct))

#define EVENT_PWWWWDD(type, _p0, _w1, _w2, _w3, _w4, _d5, _d6) \
  EVENT_BEGIN(type) \
    EventMould.pwwwwdd.p0 = (_p0); \
    EventMould.pwwwwdd.w1 = (_w1); \
    EventMould.pwwwwdd.w2 = (_w2); \
    EventMould.pwwwwdd.w3 = (_w3); \
    EventMould.pwwwwdd.w4 = (_w4); \
    EventMould.pwwwwdd.d5 = (_d5); \
    EventMould.pwwwwdd.d6 = (_d6); \
  EVENT_END(type, PWWWWDD, sizeof(EventPWWWWDDStruct))

#define EVENT_PWWWWW(type, _p0, _w1, _w2, _w3, _w4, _w5) \
  EVENT_BEGIN(type) \
    EventMould.pwwwww.p0 = (_p0); \
    EventMould.pwwwww.w1 = (_w1); \
    EventMould.pwwwww.w2 = (_w2); \
    EventMould.pwwwww.w3 = (_w3); \
    EventMould.pwwwww.w4 = (_w4); \
    EventMould.pwwwww.w5 = (_w5); \
  EVENT_END(type, PWWWWW, sizeof(EventPWWWWWStruct))

#define EVENT_PWWWWWWWWW(type, _p0, _w1, _w2, _w3, _w4, _w5, _w6, _w7, _w8, _w9) \
  EVENT_BEGIN(type) \
    EventMould.pwwwwwwwww.p0 = (_p0); \
    EventMould.pwwwwwwwww.w1 = (_w1); \
    EventMould.pwwwwwwwww.w2 = (_w2); \
    EventMould.pwwwwwwwww.w3 = (_w3); \
    EventMould.pwwwwwwwww.w4 = (_w4); \
    EventMould.pwwwwwwwww.w5 = (_w5); \
    EventMould.pwwwwwwwww.w6 = (_w6); \
    EventMould.pwwwwwwwww.w7 = (_w7); \
    EventMould.pwwwwwwwww.w8 = (_w8); \
    EventMould.pwwwwwwwww.w9 = (_w9); \
  EVENT_END(type, PWWWWWWWWW, sizeof(EventPWWWWWWWWWStruct))

#define EVENT_PWWWWWWWWWWWW(type, _p0, _w1, _w2, _w3, _w4, _w5, _w6, _w7, _w8, _w9, _w10, _w11, _w12) \
  EVENT_BEGIN(type) \
    EventMould.pwwwwwwwwwwww.p0 = (_p0); \
    EventMould.pwwwwwwwwwwww.w1 = (_w1); \
    EventMould.pwwwwwwwwwwww.w2 = (_w2); \
    EventMould.pwwwwwwwwwwww.w3 = (_w3); \
    EventMould.pwwwwwwwwwwww.w4 = (_w4); \
    EventMould.pwwwwwwwwwwww.w5 = (_w5); \
    EventMould.pwwwwwwwwwwww.w6 = (_w6); \
    EventMould.pwwwwwwwwwwww.w7 = (_w7); \
    EventMould.pwwwwwwwwwwww.w8 = (_w8); \
    EventMould.pwwwwwwwwwwww.w9 = (_w9); \
    EventMould.pwwwwwwwwwwww.w10 = (_w10); \
    EventMould.pwwwwwwwwwwww.w11 = (_w11); \
    EventMould.pwwwwwwwwwwww.w12 = (_w12); \
  EVENT_END(type, PWWWWWWWWWWWW, sizeof(EventPWWWWWWWWWWWWStruct))

#define EVENT_UUPA(type, _u0, _u1, _p2, _a3) \
  EVENT_BEGIN(type) \
    EventMould.uupa.u0 = (_u0); \
    EventMould.uupa.u1 = (_u1); \
    EventMould.uupa.p2 = (_p2); \
    EventMould.uupa.a3 = (_a3); \
  EVENT_END(type, UUPA, sizeof(EventUUPAStruct))

#define EVENT_UUPP(type, _u0, _u1, _p2, _p3) \
  EVENT_BEGIN(type) \
    EventMould.uupp.u0 = (_u0); \
    EventMould.uupp.u1 = (_u1); \
    EventMould.uupp.p2 = (_p2); \
    EventMould.uupp.p3 = (_p3); \
  EVENT_END(type, UUPP, sizeof(EventUUPPStruct))

#define EVENT_UUPPP(type, _u0, _u1, _p2, _p3, _p4) \
  EVENT_BEGIN(type) \
    EventMould.uuppp.u0 = (_u0); \
    EventMould.uuppp.u1 = (_u1); \
    EventMould.uuppp.p2 = (_p2); \
    EventMould.uuppp.p3 = (_p3); \
    EventMould.uuppp.p4 = (_p4); \
  EVENT_END(type, UUPPP, sizeof(EventUUPPPStruct))

#define EVENT_WS(type, _w0, _l1, _s1) \
  EVENT_BEGIN(type) \
    size_t _string_len; \
    EventMould.ws.w0 = (_w0); \
    _string_len = (_l1); \
    AVER(_string_len < EventStringLengthMAX); \
    EventMould.ws.s1.len = (EventStringLen)_string_len; \
    mps_lib_memcpy(EventMould.ws.s1.str, _s1, _string_len); \
  EVENT_END(type, WS, offsetof(EventWSStruct, s1.str) + _string_len)

#define EventFormat0 0
#define EventFormatA 1
#define EventFormatAW 2
#define EventFormatP 3
#define EventFormatPAA 4
#define EventFormatPAW 5
#define EventFormatPAWA 6
#define EventFormatPDDWWW 7
#define EventFormatPP 8
#define EventFormatPPAU 9
#define EventFormatPPAWP 10
#define EventFormatPPP 11
#define EventFormatPPPA 12
#define EventFormatPPPU 13
#define EventFormatPPPUU 14
#define EventFormatPPU 15
#define EventFormatPPUU 16
#define EventFormatPPUWWW 17
#define EventFormatPPWW 18
#define EventFormatPPWWW 19
#define EventFormatPPWWWUUU 20
#define EventFormatPU 21
#define EventFormatPW 22
#define EventFormatPWA 23
#define EventFormatPWAW 24
#define EventFormatPWP 25
#define EventFormatPWU 26
#define EventFormatPWW 27
#define EventFormatPWWWWDD 28
#define EventFormatPWWWWW 29
#define EventFormatPWWWWWWWWW 30
#define EventFormatPWWWWWWWWWWWW 31
#define EventFormatUUPA 32
#define EventFormatUUPP 33
#define EventFormatUUPPP 34
#define EventFormatWS 35

#else /* EVENT not */

#define EVENT_0(type) NOOP
#define EVENT_A(type, p0) NOOP
#define EVENT_AW(type, p0, p1) NOOP
#define EVENT_P(type, p0) NOOP
#define EVENT_PAA(type, p0, p1, p2) NOOP
#define EVENT_PAW(type, p0, p1, p2) NOOP
#define EVENT_PAWA(type, p0, p1, p2, p3) NOOP
#define EVENT_PDDWWW(type, p0, p1, p2, p3, p4, p5) NOOP
#define EVENT_PP(type, p0, p1) NOOP
#define EVENT_PPAU(type, p0, p1, p2, p3) NOOP
#define EVENT_PPAWP(type, p0, p1, p2, p3, p4) NOOP
#define EVENT_PPP(type, p0, p1, p2) NOOP
#define EVENT_PPPA(type, p0, p1, p2, p3) NOOP
#define EVENT_PPPU(type, p0, p1, p2, p3) NOOP
#define EVENT_PPPUU(type, p0, p1, p2, p3, p4) NOOP
#define EVENT_PPU(type, p0, p1, p2) NOOP
#define EVENT_PPUU(type, p0, p1, p2, p3) NOOP
#define EVENT_PPUWWW(type, p0, p1, p2, p3, p4, p5) NOOP
#define EVENT_PPWW(type, p0, p1, p2, p3) NOOP
#define EVENT_PPWWW(type, p0, p1, p2, p3, p4) NOOP
#define EVENT_PPWWWUUU(type, p0, p1, p2, p3, p4, p5, p6, p7) NOOP
#define EVENT_PU(type, p0, p1) NOOP
#define EVENT_PW(type, p0, p1) NOOP
#define EVENT_PWA(type, p0, p1, p2) NOOP
#define EVENT_PWAW(type, p0, p1, p2, p3) NOOP
#define EVENT_PWP(type, p0, p1, p2) NOOP
#define EVENT_PWU(type, p0, p1, p2) NOOP
#define EVENT_PWW(type, p0, p1, p2) NOOP
#define EVENT_PWWWWDD(type, p0, p1, p2, p3, p4, p5, p6) NOOP
#define EVENT_PWWWWW(type, p0, p1, p2, p3, p4, p5) NOOP
#define EVENT_PWWWWWWWWW(type, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) NOOP
#define EVENT_PWWWWWWWWWWWW(type, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) NOOP
#define EVENT_UUPA(type, p0, p1, p2, p3) NOOP
#define EVENT_UUPP(type, p0, p1, p2, p3) NOOP
#define EVENT_UUPPP(type, p0, p1, p2, p3, p4) NOOP
#define EVENT_WS(type, p0, p1, l1) NOOP

#endif /* EVENT */


/* C. COPYRIGHT AND LICENSE
 *
 * Copyright (C) 2001-2002 Ravenbrook Limited <http://www.ravenbrook.com/>.
 * All rights reserved.  This is an open source license.  Contact
 * Ravenbrook for commercial licensing options.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 * 
 * 1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 
 * 2. Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * 
 * 3. Redistributions in any form must be accompanied by information on how
 * to obtain complete source code for this software and any accompanying
 * software that uses this software.  The source code must either be
 * included in the distribution or be available for no more than the cost
 * of distribution plus a nominal fee, and must be freely redistributable
 * under reasonable conditions.  For an executable file, complete source
 * code means the source code for all modules it contains. It does not
 * include source code for modules or files that typically accompany the
 * major components of the operating system on which the executable file
 * runs.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 * PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
