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

/*	Knob Flags */

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

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

/*	Flags for DragInfo */

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

struct DragInfo {
    struct Gadget *Gadget;	/* Gadget being dragged. */
    SHORT LeftEdge, TopEdge, RightEdge, BottomEdge;  /* Bounding box. */
    USHORT 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 {
    USHORT LeftEdge, TopEdge, Width, Height;
    USHORT ItemHeight;
    USHORT ScrollID, ListID, ClickUpID, ClickDownID;
    USHORT BorderPen, FillPen;
    struct ListItem *TopItem, *TopDisplayItem, *ActiveItem;
    struct Window *Window;
    struct Gadget *ScrollGadget, *ListGadget, *ClickUpGadget, *ClickDownGadget;
    void (*DrawRoutine) ();
    USHORT OldL, OldT, OldW, OldH;
};

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

long Itoa();
long Atoi();
void RefreshGadget();
struct Knob *GetKnob();
struct Gadget *GetGadget();
struct StringInfo *GetStringInfo();
void SetStringInfo();
long GetStringInfoNumber();
void SetStringInfoNumber();
struct PropInfo *GetPropInfo();
void SetPropInfo();
struct IntuiMessage *GetSelectIntuiMessage();
struct IntuiMessage *GetIntuiMessage();
void ClearIntuiMessages();
struct Menu *GetMenu();
struct MenuItem *GetMenuItem();
void CheckMenuItem();
void EnableMenuItem();
void EnableMenu();
void EnableGadget();
void SelectGadget();
struct NewWindow *DupeNewWindow();
void DeleteNewWindow();
struct Knob *DupeKnobList();
void DeleteknobList();
struct Menu *DupeMenu();
void DeleteMenu();
void SendCloseWindow();
struct Knob *KnobGadgets();
void DrawArrow();
void DrawKnobs();
long List_Len();
long List_Position();
struct ListItem *List_Pred();
struct ListItem *List_Index();
struct ListItem *List_Cat();
struct ListItem *List_Insert();
struct ListItem *List_Remove();
void SetScrollBar();
void DrawList();
void ScrollList();
struct ListItem *SizeList();
struct ListItem *InitListInfo();
void RemoveListInfo();
struct ListItem *GetListItem();
void ClickList();
void InsertListItem();
struct ListItem *RemoveListItem();
long PopUpMenu();
void DragGadget();
void FileName();
void EditColors();
struct Window *FlashyOpenWindow();
void FlashyCloseWindow();
struct Window *WhichWindow();
struct ListInfo *DupeListInfo();
void DeleteListInfo();
