
#include <exec/memory.h>
#include <proto/games.h>
#include <proto/exec.h>

#define AMT_PLANES 1

struct GMSBase *GMSBase;
extern struct ExecBase *SysBase;

UWORD Palette[] = 
{
    0x0000,0x08ff
};

struct GameScreen GameScreen = {
    GSV1,
    0,0,0,          /* Screen_Mem1,2,3 */
    0,              /* ScreenLink */
    Palette,        /* Address of palette */
    0,              /* Address of rasterlist */
    2,              /* Amount of colours in palette */
    320,256,        /* Screen Width and Height */
    320/8,256,      /* Picture Width/8 and Height */
    AMT_PLANES,     /* Amount of Planes */
    0,0,            /* X/Y screen offset */
    0,0,            /* X/Y picture offset */
    0,              /* Special attributes */
    LORES|COL12BIT, /* Screen mode */
    INTERLEAVED,    /* Screen type */
    0               /* Reserved */
};

struct GameScreen *OurScreen = &GameScreen;

/*=========================================================================*/

void main(void)
{
  ULONG mousestat;
  int sx,sy,ex,ey;

  sx = 50;
  sy = 50;
  ex = 200;
  ey = 100;

  if (GMSBase = (struct GMSBase *) OpenLibrary("games.library",0))
  {
    SetUserPrefs(0);
    if (AllocBlitter() == NULL)
    {
      if (Add_Screen(OurScreen) == NULL)
      {
        Show_Screen(OurScreen);
        do
        {
          ClrScreen(OurScreen,BUFFER1);

          mousestat = Read_Mouse(JPORT1);
          if (mousestat & MB_LMB)
          {
            sx += (BYTE)(mousestat >> 8);
            sy += (BYTE)(mousestat);
          }
          else
          {
            ex += (BYTE)(mousestat >> 8);
            ey += (BYTE)(mousestat);
          }

          if (sx < 0) sx = 0;  /* keep start/end points on screen */
          if (sx >= 319) sx = 319;
          if (sy < 0) sy = 0;
          if (sy >= 255) sy = 255;
          if (ex < 0) ex = 0;
          if (ex >= 319) ex = 319;
          if (ey < 0) ey = 0;
          if (ey >= 255) ey = 255;

          Draw_Line(OurScreen,BUFFER1,sx,sy,ex,ey,1);

          Wait_OSVBL();

        } while (!(mousestat & MB_RMB));

        Delete_Screen(OurScreen);
      }
      FreeBlitter();
    }
    CloseLibrary((struct Library *)GMSBase);
  }
}

/*=========================================================================*/

