/*---------------------------------------------------------*
 | Author:  Maurizio Loreti, aka MLO or I3NOO.             |
 | Address: University of Padova - Department of Physics   |
 |          Via F. Marzolo, 8 - 35131 PADOVA - Italy       |
 | Phone:   (39)(49) 844-313         FAX: (39)(49) 844-245 |
 | E-Mail:  LORETI at IPDINFN (BITNET); or VAXFPD::LORETI  |
 |         (DECnet) - VAXFPD is node 38.257 i.e. 39169; or |
 |          LORETI@PADOVA.INFN.IT (INTERNET).              |
 | Home: Via G. Donizetti 6 - 35010 CADONEGHE (PD) - Italy |
 *---------------------------------------------------------*/

/*------------------------------------------------------------------*
 | Constants for Ask() and AskInt() windows: dimensions and gadgets |
 *------------------------------------------------------------------*/

/**
 | Special return values
**/

#define CANCEL          0
#define QUIT            -1
#define OK_FOLKS        -2

/**
 | Window constants
**/

#define AW_LEFT         0
#define AW_TOP          0
#define AW_HEIGHT       77
#define AW_WIDTH        300
#define AW_IDCMP        GADGETUP
#define AW_FLAGS1       WINDOWDEPTH | WINDOWDRAG
#define AW_FLAGS2       SMART_REFRESH | NOCAREREFRESH | ACTIVATE
#define AW_FLAGS        (AW_FLAGS1 | AW_FLAGS2)
#define AW_TLEN         32

/**
 | Gadget constants
**/

#define AW_YTITLE       17
#define AW_YCYCLE       42
#define AW_YCGAD        32
#define AW_XFORWARD     10
#define AW_XBACKWARD    266
#define AW_YNGAD        57
#define AW_XOK          27
#define AW_XQUIT        118
#define AW_XCAN         209
#define AW_WCGAD        24
#define AW_HCGAD        13
#define AW_WNGAD        64
#define AW_HNGAD        12
#define AW_NFLAGS       GADGHCOMP
#define AW_NACT         GADGIMMEDIATE | RELVERIFY
#define AW_CANCEL       1
#define AW_QUIT         2
#define AW_OK           3
#define AW_FORWARD      4
#define AW_BACKWARD     5
#define AW_INT          6

#define AW_XINT         110
#define AW_WCINT        80
#define AW_HCINT        12

#define AR_WIDTH        270
#define AR_HEIGHT       75

#define INTBUF_LEN      20
#define AR_TEXT_LEN     32

  static char intBuffer[INTBUF_LEN];
  static char intUndoBuffer[INTBUF_LEN];
  static char Limits[AR_TEXT_LEN];
  static char title[AW_TLEN] = "";

/**
 | Gadget and window global variables: TextAttr for Topaz-8
**/

  static struct TextAttr ta = {
    "topaz.font",
    TOPAZ_EIGHTY,
    FS_NORMAL,
    FPF_ROMFONT
  };

/**
 | Gadget and window global variables: images
**/

  static USHORT __chip backGdata[] = {
    0xFFFF, 0xFF00, 0x8000, 0x0100, 0x83FF, 0xC100,
    0x8600, 0x6100, 0x8C00, 0x3100, 0xBF00, 0x3100,
    0x9E00, 0x3100, 0x8C00, 0x3100, 0x8000, 0x3100,
    0x8600, 0x6100, 0x83FF, 0xC100, 0x8000, 0x0100,
    0xFFFF, 0xFF00
  };

  static USHORT __chip forwGdata[] = {
    0xFFFF, 0xFF00, 0x8000, 0x0100, 0x83FF, 0xC100,
    0x8600, 0x6100, 0x8C00, 0x3100, 0x8C00, 0xFD00,
    0x8C00, 0x7900, 0x8C00, 0x3100, 0x8C00, 0x0100,
    0x8600, 0x6100, 0x83FF, 0xC100, 0x8000, 0x0100,
    0xFFFF, 0xFF00
  };

  static struct Image backGimage = {
    0, 0, AW_WCGAD, AW_HCGAD, 1,
    (USHORT *) backGdata, 0x01, 0x00, NULL
  };

  static struct Image forwGimage = {
    0, 0, AW_WCGAD, AW_HCGAD, 1,
    (USHORT *) forwGdata, 0x01, 0x00, NULL
  };

/**
 | Gadget and window global variables: borders
**/

  static SHORT intData[] = {
    0, 0, AW_WCINT+4, 0, AW_WCINT+4, AW_HCINT+1,
    0, AW_HCINT+1, 0, 0
  };

  static struct Border intBorder = {
    -3, -3, RED_PEN, BLACK_PEN, JAM1, 5, intData, NULL
  };

  static SHORT NGbdata[] = {
    0, 0,
    AW_WNGAD-1, 0,
    AW_WNGAD-1, AW_HNGAD-1,
    0, AW_HNGAD-1,
    0, 0
  };

  static struct Border NGborder = {
    0, 0, RED_PEN, BLACK_PEN, JAM1, 5, NGbdata, NULL
  };

/**
 | Gadget and window global variables: texts
**/

  static struct IntuiText canText = {
    WHITE_PEN, BLACK_PEN, JAM2, 8, 2, &ta,
    (UBYTE *) "CANCEL", NULL
  };

  static struct IntuiText quitText = {
    WHITE_PEN, BLACK_PEN, JAM2, 8, 2, &ta,
    (UBYTE *) " QUIT ", NULL
  };

  static struct IntuiText okText = {
    WHITE_PEN, BLACK_PEN, JAM2, 8, 2, &ta,
    (UBYTE *) "  OK  ", NULL
  };

  static struct IntuiText arOkText = {
    BLUE_PEN, WHITE_PEN, JAM2, 8, 2, &ta,
    (UBYTE *) "  OK  ", NULL
  };

  static struct IntuiText art0[] = {
    { BLUE_PEN, WHITE_PEN, JAM2, 10, 5, &ta,
      (UBYTE *) "Out of range:", &art0[1]
    },
    { BLUE_PEN, WHITE_PEN, JAM2, 10, 15, &ta,
      (UBYTE *) Limits, NULL
    }
  };

/**
 | Gadget and window global variables: gadgets
**/

  static struct Gadget askGad[] = {
    { &askGad[1],
      AW_XCAN, AW_YNGAD, AW_WNGAD, AW_HNGAD,
      AW_NFLAGS, AW_NACT, BOOLGADGET, (APTR) &NGborder,
      NULL, &canText, 0, NULL, AW_CANCEL, NULL },
    { &askGad[2],
      AW_XQUIT, AW_YNGAD, AW_WNGAD, AW_HNGAD,
      AW_NFLAGS, AW_NACT, BOOLGADGET, (APTR) &NGborder,
      NULL, &quitText, 0, NULL, AW_QUIT, NULL },
    { NULL,
      AW_XOK, AW_YNGAD, AW_WNGAD, AW_HNGAD,
      AW_NFLAGS, AW_NACT, BOOLGADGET, (APTR) &NGborder,
      NULL, &okText, 0, NULL, AW_OK, NULL },
  };

  static struct StringInfo intInfo = {
    (UBYTE *) intBuffer, (UBYTE *) intUndoBuffer,
    0, INTBUF_LEN, 0, 0, 0, 0, 0, 0,
    NULL, 0, NULL
  };

  static struct Gadget intGadget = {
    askGad, AW_XINT, AW_YCGAD, AW_WCINT, AW_HCINT,
    GADGHCOMP,
    GADGIMMEDIATE | RELVERIFY | LONGINT | STRINGCENTER,
    STRGADGET,
    (APTR) &intBorder, NULL,
    NULL, 0, (APTR) &intInfo, AW_INT, NULL
  };

  static struct Gadget backGadget = {
    askGad, AW_XBACKWARD, AW_YCGAD, AW_WCGAD, AW_HCGAD,
    GADGHCOMP | GADGIMAGE,
    RELVERIFY,
    BOOLGADGET,
    (APTR) &backGimage, NULL,
    NULL, NULL, NULL, AW_BACKWARD, NULL
  };

  static struct Gadget forwGadget = {
    &backGadget, AW_XFORWARD, AW_YCGAD, AW_WCGAD, AW_HCGAD,
    GADGHCOMP | GADGIMAGE,
    RELVERIFY,
    BOOLGADGET,
    (APTR) &forwGimage, NULL,
    NULL, NULL, NULL, AW_FORWARD, NULL
  };

/**
 | Gadget and window global variables: windows
**/

  static struct NewWindow NWind = {
    AW_LEFT, AW_TOP, AW_WIDTH, AW_HEIGHT,
    BLUE_PEN, WHITE_PEN, AW_IDCMP, AW_FLAGS,
    NULL, NULL, (UBYTE *) title,
    NULL, NULL,
    AW_WIDTH, AW_HEIGHT, AW_WIDTH, AW_HEIGHT,
    WBENCHSCREEN
  };

  static int realWidth, realHeight;
