(*
 * -------------------------------------------------------------------------
 *
 *	:Program.	IntuitionTools.def
 *	:Contents.	Proceduren zum Initialisieren von Amiga-Strukturen,
 *	:Contents.	atomare Gadgetaktionen.
 *	:Author.	Reiner Nix
 *	:Address.	Geranienhof 2, 5000 Köln 71 Seeberg
 *	:Copyright.	Public Domain
 *	:Language.	Modula-2
 *	:Translator.	M2Amiga A-L V3.3d
 *	:History.	V1.0	26.9.'90
 *
 * -------------------------------------------------------------------------
 *)

DEFINITION MODULE IntuitionTools;

FROM	SYSTEM		IMPORT	ADDRESS, BITSET, LONGSET;
FROM	Exec		IMPORT	UByte;
FROM	KeyMap		IMPORT	KeyMapPtr;
FROM	InputEvent	IMPORT	QualifierSet;
FROM	Graphics	IMPORT	DrawModeSet, FontStyleSet, FontFlagSet,
				TextAttrPtr, BitMapPtr,
				TextAttr;
FROM	Intuition	IMPORT	ScreenFlagSet, WindowFlagSet,
				IDCMPFlagSet, MenuItemFlagSet,
				ActivationFlagSet, PropInfoFlagSet,
				GadgetFlags, GadgetFlagSet,
				GadgetPtr, ImagePtr, ScreenPtr, BorderPtr,
				IntuiTextPtr, MenuPtr, MenuItemPtr,
				WindowPtr,
				NewScreen, NewWindow, Border, IntuiText,
				Menu, MenuItem, Gadget, PropInfo, StringInfo,
				IntuiMessage;

CONST	XrelBreite	=gRelRight;		(* leichter zu  *)
	YrelHoehe	=gRelBottom;		(* merkende Namen *)
	relBreite	=gRelWidth;
	relHoehe	=gRelHeight;

TYPE	GraphMode	=(LoRes, LoResLace, HiRes, HiResLace, LoResHAM,
			  LoResEx);


PROCEDURE initNewScreen	(VAR newScreen			:NewScreen;
			     X,Y, Width,Height,
                             Depth			:INTEGER;
                	     DetailPen, BlockPen	:UByte;
                 	     Mode			:GraphMode;
                	     Type			:ScreenFlagSet;
                 	     Font			:TextAttrPtr;
                 	     DefaultTitle		:ADDRESS);

PROCEDURE initNewWindow	(VAR newWindow			:NewWindow;
			     X,Y, Width,Height		:INTEGER;
                             DetailPen, BlockPen	:UByte;
                             IDCMPFlags			:IDCMPFlagSet;
                             Flags			:WindowFlagSet;
                             FirstGadget		:GadgetPtr;
                             CheckMark			:ImagePtr;
                             Title			:ADDRESS;
                             Screen			:ScreenPtr;
                             BitMap			:BitMapPtr;
                             MinWidth,MinHeight,
                             MaxWidth,MaxHeight		:INTEGER;
                             Type			:ScreenFlagSet);

(*
 * --------------------------------------------------------------------------
 * openBitMap:	fordert eine BitMap mit den gewünschten Maßen an, die Werte
 *		werden überprüft. Die erstellte BitMap kann direkt in
 *		initNewWindow benutzt werden (mit WindowFlag superBitMap).
 * --------------------------------------------------------------------------
 *)

PROCEDURE openBitMap	(    Width, Height,
			     Depth		 	:INTEGER) :BitMapPtr;

PROCEDURE initBorder	(VAR border			:Border;
			     X,Y			:INTEGER;
                             Front,Back			:UByte;
                             Drawmodes			:DrawModeSet;
                             Count			:UByte;
                             XY				:ADDRESS;
                             NextBorder			:BorderPtr);

(*
 * --------------------------------------------------------------------------
 * makeBorder:	das Feld borderXY wird mit den Werten für eine rechteckige
 *		Box von (0,0)-(Width-1,Height-1) belegt.
 *
 * --------------------------------------------------------------------------
 *)

PROCEDURE makeBorder	(VAR borderXY			:ARRAY OF INTEGER;
			     Width,Height		:INTEGER);

PROCEDURE initIntuiText (VAR text			:IntuiText;
			     Front,Back			:UByte;
                             Drawmodes			:DrawModeSet;
                             X,Y			:INTEGER;
                             Font			:TextAttrPtr;
                             IText			:ADDRESS;
                             NextText			:IntuiTextPtr);

PROCEDURE initTextAttr	(VAR textAttr			:TextAttr;
			     Name			:ADDRESS;
                             YSize			:CARDINAL;
                             Style			:FontStyleSet;
                             Flags			:FontFlagSet);

PROCEDURE initMenu	(VAR menu			:Menu;
			     NextMenu			:MenuPtr;
                             X,Y, Width,Height		:INTEGER;
                             Flags			:BITSET;
                             Name			:ADDRESS;
                             FirstItem			:MenuItemPtr);

PROCEDURE initMenuItem	(VAR menuItem			:MenuItem;
			     NextItem			:MenuItemPtr;
                             X,Y, Width,Height		:INTEGER;
                             Flags			:MenuItemFlagSet;
                             MutualExclude		:LONGSET;
                             ItemFill,
                             SelectFill			:ADDRESS;
                             Command			:CHAR;
                             SubItem			:MenuItemPtr;
                             NextSelect			:CARDINAL);

PROCEDURE initGadget	(VAR gadget			:Gadget;
			     NextGadget			:GadgetPtr;
                             X,Y, Width,Height		:INTEGER;
                             Flags			:GadgetFlagSet;
                             Activation			:ActivationFlagSet;
                             GadgetType			:CARDINAL;
                             GadgetRender,
                             SelectRender		:ADDRESS;
                             GadgetText			:IntuiTextPtr;
                             MutualExclude		:LONGSET;
                             SpecialInfo		:ADDRESS;
                             GadgetID			:INTEGER;
                             UserData			:ADDRESS);

PROCEDURE initPropInfo	(VAR propInfo			:PropInfo;
			     Flags			:PropInfoFlagSet;
                             VertPot, HorizPot,
                             VertCount, HorizCount	:CARDINAL);

PROCEDURE initStringInfo (VAR stringInfo		:StringInfo;
			      Buffer, UndoBuffer	:ADDRESS;
                              BufferPos, MaxChars,
                              DispPos			:INTEGER;
                              AltKeyMap			:KeyMapPtr);

(*
 * ------------------------------------------------------------------------
 * Die folgenden Gadgetoperationen sind etwas schneller als die schon
 * vorgegebenen und arbeiten auch für eine Menge von Gadgets, was allerdings
 * wegen der maximalen Mengenordnung bei M2Amiga auf 32 beschränkt ist.
 * ------------------------------------------------------------------------
 *)

PROCEDURE refreshOneGadget ( Window			:WindowPtr;
			     Gadget			:GadgetPtr);

PROCEDURE refreshAllGadgets( Window			:WindowPtr);

PROCEDURE refreshSomeGadgets(Window			:WindowPtr;
			     Gadgets			:LONGSET);


PROCEDURE enableGadget	(    Window			:WindowPtr;
			     Gadget			:GadgetPtr);

PROCEDURE enableGadgets	(    Window			:WindowPtr;
			     Gadgets			:LONGSET);

PROCEDURE disableGadget (    Window			:WindowPtr;
			     Gadget			:GadgetPtr);

PROCEDURE disableGadgets(    Window			:WindowPtr;
			     Gadgets			:LONGSET);


PROCEDURE selectGadget	(    Window			:WindowPtr;
			     Gadget			:GadgetPtr);

PROCEDURE selectGadgets (    Window			:WindowPtr;
			     Gadgets			:LONGSET);

PROCEDURE deselectGadget (   Window			:WindowPtr;
			     Gadget			:GadgetPtr);

PROCEDURE deselectGadgets (  Window			:WindowPtr;
			     Gadgets			:LONGSET);


PROCEDURE enableMenus	(    Window			:WindowPtr;
			     Menus			:LONGSET);

PROCEDURE disableMenus	(    Window			:WindowPtr;
			     Menus			:LONGSET);

PROCEDURE enableItems	(    Window			:WindowPtr;
			     Menu			:CARDINAL;
			     Items			:LONGSET);

PROCEDURE disableItems	(    Window			:WindowPtr;
			     Menu			:CARDINAL;
			     Items			:LONGSET);

PROCEDURE MenuNum	(    Code			:CARDINAL) :CARDINAL;

PROCEDURE ItemNum	(    Code			:CARDINAL) :CARDINAL;


(*
 * --------------------------------------------------------------------------
 * RawToVanilla: übersetzt eine "Raw"-Zeichen-Nachricht in den
 * 		 entsprechenden "Vanilla"-String.
 * --------------------------------------------------------------------------
 *)

PROCEDURE RawToVanilla	(    Nachricht			:IntuiMessage;
			 VAR VanillaString		:ARRAY OF CHAR);


END IntuitionTools.
