#ifndef EXEC_TYPES_H
  #include <exec/types.h>
#endif
#ifndef INTUITION_INTUITION_H
  #include <intuition/intuition.h>
#endif

#define VBOB  -1
#define VLIN   0
#define END_1 -1
#define END_2 -2
#define LAB   -3
#define DBF   -4


struct NewVScreen
  {
   WORD LeftEdge,TopEdge,Width,Height;
   WORD Depth;
   BYTE DetailPen,BlockPen;
   WORD ViewModes;
   struct TextAttr *Font;
   char *DefaultTitle;
   WORD vw_Flags;
   WORD vw_LeftEdge,vw_TopEdge,vw_Width,vw_Height;
   WORD vw_Depth;
  };

struct Joy
  {
   WORD Mov_Z,Border_Front,Border_Back;
   WORD Rot_X,Rot_Y,Rot_Z;
  };

struct Object
  {
   WORD *Point_Data;
   WORD *Area_Data;
   WORD *Move_Table;
   WORD Flags;
   WORD Pos_X,Pos_Y,Pos_Z;
   WORD Rot_X,Rot_Y,Rot_Z;
  };

struct ViewStruct
  {
   struct Screen *VScreen;
   struct ViewPort *VViewPort;
   struct RastPort *VRastPort;
  };

struct BOB {
   WORD  Width, Height;
   char *Gfx_Data, *Msk_Data;
};

struct BOBList {
   WORD  Number;
   struct BOB BOBs[BOB_NUM];
};

struct VecBase {
   LONG pad;
};


/* #pragma-Befehl bereitet Aztec-C 3.6 und früher Schwierigkeiten!! */

#ifdef LATTICE
#pragma libcall VecBase SetVBI         1e 901
#pragma libcall VecBase InitVBOBs      24 a98004
#pragma libcall VecBase OpenVScreen    2a 901
#pragma libcall VecBase CloseVScreen   30 0
#pragma libcall VecBase UseJoy         36 9002
#pragma libcall VecBase DoAnim         3c 901
#pragma libcall VecBase RotateX        42 654321007
#pragma libcall VecBase RotateY        48 654321007
#pragma libcall VecBase RotateZ        4e 654321007
#pragma libcall VecBase FreeVBOBs       54 0
#pragma libcall VecBase AutoScaleOn    5a 001
#pragma libcall VecBase AutoScaleOff   60 0
#pragma libcall VecBase FreeJoy        66 0
#pragma libcall VecBase SetColors      6c 9802

#ifndef NO_PROTOS
long SetVBI (char *);
long InitVBOBs (long, char *, struct BOBList *, long *);
struct ViewStruct *OpenVScreen (struct NewVScreen *);
long CloseVScreen (void);
long UseJoy (long, struct Joy *);
long DoAnim (long *);
long RotateX (long, long, long, long, long, long, long);
long RotateY (long, long, long, long, long, long, long);
long RotateZ (long, long, long, long, long, long, long);
long FreeVBOBs (void);
long AutoScaleOn (long);
long AutoScaleOff (void);
long FreeJoy (void);
long SetColors (struct ViewStruct*, short *);
#endif
#endif

#ifdef AZTEC_C
#pragma amicall(VecBase, 0x1e, SetVBI(a1))
#pragma amicall(VecBase, 0x24, InitVBOBs(d0,a0,a1,a2))
#pragma amicall(VecBase, 0x2a, OpenVScreen(a1))
#pragma amicall(VecBase, 0x30, CloseVScreen())
#pragma amicall(VecBase, 0x36, UseJoy(d0,a1))
#pragma amicall(VecBase, 0x3c, DoAnim(a1))
#pragma amicall(VecBase, 0x42, RotateX(d0,d1,d2,d3,d4,d5,d6))
#pragma amicall(VecBase, 0x48, RotateY(d0,d1,d2,d3,d4,d5,d6))
#pragma amicall(VecBase, 0x4e, RotateZ(d0,d1,d2,d3,d4,d5,d6))
#pragma amicall(VecBase, 0x54, FreeVBOBs())
#pragma amicall(VecBase, 0x5a, AutoScaleOn(d0))
#pragma amicall(VecBase, 0x60, AutoScaleOff())
#pragma amicall(VecBase, 0x66, FreeJoy())
#pragma amicall(VecBase, 0x6c, SetColors(a0,a1))
#endif
