#ifndef  INOVATOOLS1_H
#define  INOVATOOLS1_H

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

/*      INOVATOOLS 1 header file.
        (c) 1987 Todor Fay
*/

/*      Knob Flags */

#define KNOB_FILL       1       /* When drawing, fill knob. */
#define KNOB_DRAW       2       /* Draw this knob. */
#define KNOB_RANGED     4       /* This knob is not full circle. */
#define KNOB_COMPLEMENT 8       /* Draw the arrow in COMPLEMENT mode. */
#define KNOB_CALCVALUE  16      /* Calculate a value from the Angle, Range, 
                                   StartAngle, and StopAngle. */
#define KNOB_MARKENDS   32      /* Mark begin and end of sweep. */
#define KNOB_MARKED     64      /* Mark all step increments in knob. */

struct Knob {
    struct Knob *NextKnob;      /* Pointer to next knob in list. */
    unsigned short XCenter, YCenter;    /* Center of Knob. */
    unsigned short Flags;               /* KNOB_FILL, KNOB_DRAW, etc. */
    unsigned short Value;               /* Calculated value. */
    unsigned short Range;               /* Range for calculated value. */
    unsigned short Angle;               /* Current angle (0 - 65534) */
    unsigned short Offset;              /* Initial Offset Angle. */
    unsigned short Steps;               /* Number of steps to increment. */
    unsigned short ArrowRadius;         /* Arrow's radius. */
    unsigned short KnobRadius;          /* Knobs's radius. */
    unsigned short StartAngle;          /* Starting point in knob swwep. */
    unsigned short StopAngle;           /* Finishing point. */
    unsigned short FillColor;           /* Color to Fill the knob. */
    unsigned short BorderColor;         /* Color for edge of knob. */
    unsigned short ArrowColor;          /* Color for arrow. */
    unsigned short KnobID;              /* User id. */
    unsigned short AX, AY, OX, OY, OS;  /* Leave these alone. */
    void (*UpdateRoutine) ();   /* User supplied routine. */
    LONG UserData;              /* User supplied data. */
};

/*      Flags for DragInfo */

#define DRAG_INWINDOW   1       /* Only draw in Window's RastPort */
#define DRAG_OUTLINE    2       /* Pen 0 is transparent. */
#define DRAG_MOVEGADGET 4       /* Leave gadget at new position. */

struct DragInfo {
    struct Gadget *Gadget;      /* Gadget being dragged. */
    SHORT LeftEdge, TopEdge, RightEdge, BottomEdge;  /* Bounding box. */
    unsigned short Flags;               /* DRAG_INWINDOW, etc... */
    SHORT XPos, YPos;           /* Current Position in window. */
    void (*UpdateRoutine) ();   /* User supplied routine. */
    LONG DD;                    /* Leave this alone. */
};

struct ListItem {
    struct ListItem *Next;
};

struct ListInfo {
    unsigned short LeftEdge, TopEdge, Width, Height;
    unsigned short ItemHeight;
    unsigned short ScrollID, ListID, ClickUpID, ClickDownID;
    unsigned short BorderPen, FillPen;
    struct ListItem *TopItem, *TopDisplayItem, *ActiveItem;
    struct Window *Window;
    struct Gadget *ScrollGadget, *ListGadget, *ClickUpGadget, *ClickDownGadget;
    void (*DrawRoutine) ();
    unsigned short OldL, OldT, OldW, OldH;
};

#define FILES_DELETE    1
#define FILES_OPEN      2
#define FILES_SAVE      4
#define FILES_TEST      8

#endif
