/* The routines listed below are specific to an Amiga using the GWIN.library.
   See dox for further details.

   This header file is (C)1995 D.R. Commander and Titane-Mammoth Productions */

#include "gwin.user.h"

/*** CHECKS TO SEE IF A KEY IS WAITING IN THE INPUT STREAM (FOR ABORTING
     COMPUTER-PLAYED GAMES ***/
int 
checkinput (void)
{
  float x, y;
  struct uuevent uuev;
  ugrina (G, &x, &y, &uuev);
  return ((int) (toupper (uuev.key)) - 48);
}

/*** FETCH A MOUSE CLICK OR KEYPRESS ***/
int 
getinput (void)
{
  float x, y;
  struct uuevent uuev;
  ugrinc (G, &x, &y, &uuev);
  return ((int) (toupper (uuev.key)) - 48);
}

/*** CLEAR SCREEN ***/
void 
cls (void)
{
  upset (G, "ccol", 0.0);
  uerase (G);
}

/*** PROMPTS THE USER FOR INPUT ON ROW n (DISPLAYS REQUESTER) ***/
void 
prompt (int line, char prompt[], char response[], int length)
{
  float width = ((float) strlen (prompt) + 2.) * 1.25;
  char text[255];
  if (line % 26 > 21)
    line = 21;
  ugetstring (G, 50. - width / 2., 96.0 - (float) (line % 26 - 1) * 4.0, width, prompt, text);
  strncpy (response, text, length);
  response[length] = '\0';
}

/*** CHANGE THE CURRENT TEXT COLOUR ***/
void 
colour (int fg, int bg)
{
  upset (G, "colo", (float) fg);
  upset (G, "bcol", (float) bg);
}

/*** DISPLAY A LINE OF TEXT AT A SET CURSOR POSITION ***/
void 
display (int vpos, int hpos, char input[])
{
  float x = (float) ((hpos - 1) % 80) * 1.25 + .1, y = 96.0 - (float) ((vpos - 1) % 25) * 4.0;
  umove (G, x, y);
  uprnt1 (G, "text", input);
}

/*** DISPLAY AN INTEGER AT A SET CURSOR POSITION ***/
void 
displayint (int vpos, int hpos, int input)
{
  char temp[80];
  int len;
  float x = (float) ((hpos - 1) % 80) * 1.25 + .1, y = 96.0 - (float) ((vpos - 1) % 25) * 4.0;
  len = stci_d (temp, input);
  temp[len] = '\0';
  umove (G, x, y);
  uprnt1 (G, "text", temp);
}

/*** PAUSE FOR A MOUSE CLICK ***/
void 
pause (void)
{
  float x, y;
  void centre (int line, char text[]);
  void clear (int line);
  centre (25, "°±І BANG THE LEFT MOUSE BUTTON TO CONTINUE І±°");
  ugrin (G, &x, &y);
  clear (25);
}

/*** CLEAR ONE LINE OF THE DISPLAY ***/
void 
clear (int line)
{
  colour (0, 0);
  display (line, 1, "                                                                                ");
}

/*** CLEAR LINES m THROUGH n ***/
void 
clearlines (int m, int n)
{
  int i;
  colour (0, 0);
  for (i = m; i <= n; i++)
    {
      display (i, 1, "                                                                                ");
    }
}

/*** POP A YES/NO REQUESTER AND RETURN TRUE OR FALSE BASED ON THE ANSWER ***/
int 
ask (int line, char question[])
{
  float width = ((float) strlen (question) + 4.) * 1.25;
  return (uyorn (G, question, "Maybe so", "Guess not", width, 50.));
}

/*** SET UP A 640x200x16 SCREEN WITH THE PROPER IBM PALETTE AND FONT ***/
void 
setupamigascreen (void)
{
  USTART ("high1.backdrop", 0., 640., 0., 200.);
  usetrgb (G, 0., 0., 0., 0.);
  usetrgb (G, 1., 10., 0., 0.);
  usetrgb (G, 2., 0., 10., 0.);
  usetrgb (G, 3., 10., 6., 0.);
  usetrgb (G, 4., 0., 0., 10.);
  usetrgb (G, 5., 10., 0., 10.);
  usetrgb (G, 6., 0., 10., 10.);
  usetrgb (G, 7., 11., 11., 11.);
  usetrgb (G, 8., 6., 6., 6.);
  usetrgb (G, 9., 15., 0., 0.);
  usetrgb (G, 10., 0., 15., 0.);
  usetrgb (G, 11., 15., 15., 0.);
  usetrgb (G, 12., 0., 0., 15.);
  usetrgb (G, 13., 15., 0., 15.);
  usetrgb (G, 14., 0., 15., 15.);
  usetrgb (G, 15., 15., 15., 15.);
  ufont (G, "CleanIBM.font", 8.);
}

/*** DRAW THE EVEN MORE BOFFO INTRO PIC ***/
void 
drawpic (void)
{
  uset (G, "fill");
  upset (G, "colo", 7.);
  urect (G, .625978, 98.994974, 99.374026, 55.276383);
  upset (G, "colo", 15.);
  urect (G, 0., 100., 100., 99.497492);
  urect (G, 0., 98.994974, .469484, 54.271360);
  upset (G, "colo", 8.);
  urect (G, .625978, 54.773870, 100., 54.271360);
  urect (G, 99.530520, 100., 100., 55.276383);
  upset (G, "colo", 5.);
  urect (G, 1.564945, 86.432162, 17.370892, 65.326632);
  upset (G, "colo", 6.);
  urect (G, 21.283255, 86.432162, 37.089204, 65.326632);
  upset (G, "colo", 2.);
  urect (G, 41.001565, 86.432162, 56.807511, 65.326632);
  upset (G, "colo", 3.);
  urect (G, 60.719876, 86.432162, 76.525820, 65.326632);
  upset (G, "colo", 1.);
  urect (G, 80.438189, 86.432162, 96.244135, 65.326632);
  upset (G, "colo", 13.);
  urect (G, 4.068858, 89.447237, 19.561816, 68.844225);
  upset (G, "colo", 14.);
  urect (G, 23.787167, 89.447237, 39.280126, 68.844225);
  upset (G, "colo", 10.);
  urect (G, 43.505479, 89.447237, 58.998437, 68.844225);
  upset (G, "colo", 11.);
  urect (G, 63.223786, 89.447237, 78.716746, 68.844225);
  upset (G, "colo", 9.);
  urect (G, 82.942103, 89.447237, 98.435053, 68.844225);
  upset (G, "colo", 0.);
  urect (G, 7.981221, 87.939699, 13.302035, 86.934679);
  urect (G, 10.328638, 86.432162, 13.302035, 71.859301);
  urect (G, 7.981221, 71.356783, 15.649452, 70.351763);
  urect (G, 25.821597, 87.939699, 37.245698, 70.351763);
  urect (G, 45.383412, 87.939699, 56.964006, 70.351763);
  urect (G, 65.258219, 87.939699, 76.682322, 70.351763);
  urect (G, 84.976526, 87.939699, 96.400629, 70.351763);
  upset (G, "colo", 14.);
  urect (G, 28.951487, 86.432162, 34.115808, 71.859301);
  upset (G, "colo", 10.);
  urect (G, 48.669797, 86.432162, 53.834115, 71.859301);
  upset (G, "colo", 11.);
  urect (G, 68.388109, 86.432162, 73.552431, 71.859301);
  upset (G, "colo", 9.);
  urect (G, 88.106417, 86.432162, 93.270739, 71.859301);
  upset (G, "colo", 0.);
  upset (G, "bcol", 7.);
  centre (2, "°±І T E N   T H O U S A N D І±°");
  centre (11, "The semi-classic game of chance");
  upset (G, "colo", 5.);
  upset (G, "bcol", 0.);
  centre (13, "ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД");
  upset (G, "colo", 6.);
  centre (14, "Original programme by B.N. Randall");
  centre (15, "Copyright (C)1986 Champion Wolf Software");
  upset (G, "colo", 2.);
  centre (16, "ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД");
  upset (G, "colo", 10.);
  centre (17, "Amiga and MS-DOS ANSI C versions by D.R. Commander");
  upset (G, "colo", 7.);
  display (18, 24, "(E-Mail: ");
  upset (G, "colo", 15.);
  uprnt1 (G, "text", "drc76795@tree.egr.uh.edu");
  upset (G, "colo", 7.);
  uprnt1 (G, "text", ")");
  upset (G, "colo", 11.);
  centre (19, "(C)1995 Titane-Mammoth Productions");
  upset (G, "colo", 3.);
  centre (20, "GWIN system (C)1991 Howard C. Anderson");
  upset (G, "colo", 1.);
  centre (21, "ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД");
}

/*** CENTRE A STRING ON A SPECIFIED LINE ***/
void 
centre (int vpos, char input[])
{
  float x = 50. - (float) strlen (input) * 0.625, y = 96.0 - (float) ((vpos - 1) % 25) * 4.0;
  umove (G, x, y);
  uprnt1 (G, "text", input);
}