package Claw.Low_Level.Resources is
    --
    -- CLAW - Class Library for Ada and Windows.
    --
    -- This is the place where various commonly used low-level routines
    -- are collected.
    --
    -- This child package deals with resource-related windows routines:
    --
    --		Icons, Cursors, Strings, Dialogs, etc.
    --
    -- It is a child of a private package, so it cannot be withed by user
    -- code.

    --
    -- Copyright 1996, 1997  R.R. Software, Inc.
    -- P.O. Box 1512, Madison WI  53701
    -- All rights reserved.
    --

    use Claw.Win32;

    -- Basic resource routines:

    function Load_Icon(Instance:        HInstance;
                       Icon_Name:       Lpcstr) return HIcon;
    pragma Import (StdCall, Load_Icon, "LoadIconA");

    function Load_Std_Icon(Instance:    HInstance;
                           Icon:        DWord) return HIcon;
    pragma Import (StdCall, Load_Std_Icon, "LoadIconA");

    function Load_Cursor(Instance:       HInstance;
                         Cursor_Name:    Lpcstr) return Hcursor;
    pragma Import (StdCall, Load_Cursor, "LoadCursorA");

    function Load_Cursor_from_File (File_Name:    Lpcstr) return Hcursor;
    pragma Import (StdCall, Load_Cursor_from_File, "LoadCursorFromFileA");

    function Load_Std_Cursor(Instance:   HInstance;
                             Cursor:     DWord) return Hcursor;
    pragma Import (StdCall, Load_Std_Cursor, "LoadCursorA");


    -- Cursor routines:

    function Get_Cursor_Pos (Point : access Claw.Point_Type) return Bool;
    pragma Import (StdCall, Get_Cursor_Pos, "GetCursorPos");

    function Set_Cursor_Pos (X : in Claw.Int; Y : in Claw.Int) return Bool;
    pragma Import (StdCall, Set_Cursor_Pos, "SetCursorPos");

    function Get_Cursor return Hcursor;
    pragma Import (StdCall, Get_Cursor, "GetCursor");

    function Set_Cursor (New_Cursor : in Hcursor) return Hcursor;
    pragma Import (StdCall, Set_Cursor, "SetCursor");

    function Copy_Cursor (Cursor : in Hcursor) return Hcursor;
    pragma Import (StdCall, Copy_Cursor, "CopyCursor");

    function Create_Cursor (Instance:  in HInstance;
			    X_Hotspot: in Claw.Int;
			    Y_Hotspot: in Claw.Int;
			    Width:     in Claw.Int;
			    Height:    in Claw.Int;
			    And_Mask:  in Pixel_Byte_Ptr_Type;
			    Xor_Mask:  in Pixel_Byte_Ptr_Type) return HCursor;
    pragma Import (StdCall, Create_Cursor, "CreateCursor");

    function Destroy_Cursor (Cursor : in Hcursor) return Bool;
    pragma Import (StdCall, Destroy_Cursor, "DestroyCursor");

    function Show_Cursor (Show : in Bool) return Int;
    pragma Import (StdCall, Show_Cursor, "ShowCursor");

    function Clip_Cursor (Rect : access Claw.Rectangle_Type) return Bool;
    pragma Import (StdCall, Clip_Cursor, "ClipCursor");

    function Cancel_Clip_Cursor (Not_Used : in DWord := 0) return Bool;
    pragma Import (StdCall, Cancel_Clip_Cursor, "ClipCursor");

    function Get_Clip_Cursor (Rect : access Claw.Rectangle_Type) return Bool;
    pragma Import (StdCall, Get_Clip_Cursor, "GetClipCursor");

    function Load_Cursor_Image1 (Instance: in HInstance;
			         Name:	   in LpCStr;
			         UType:	   in UInt := 2; -- Cursor.
			         Width:	   in Int;
			         Height:   in Int;
			         Flags:	   in UInt) return HCursor;
    pragma Import (StdCall, Load_Cursor_Image1, "LoadImageA");
	-- Many functions are available only on Windows 4.x and later.

    function Load_Cursor_Image2 (Instance: in HInstance;
			         Code:	   in UInt;	-- OCR_xxx value.
			         UType:	   in UInt := 2; -- Cursor.
			         Height:   in Int;
			         Width:	   in Int;
			         Flags:	   in UInt) return HCursor;
    pragma Import (StdCall, Load_Cursor_Image2, "LoadImageA");
	-- Many functions are available only on Windows 4.x and later.

    function Load_Cursor_Image (Instance: in HInstance;
			        Name:	  in LpCStr;
			        UType:	  in UInt := 2; -- Cursor.
			        Width:	  in Int;
			        Height:	  in Int;
			        Flags:	  in UInt) return HCursor renames Load_Cursor_Image1;
    function Load_Cursor_Image (Instance: in HInstance;
			        Code:	  in UInt;
			        UType:	  in UInt := 2; -- Cursor.
			        Width:	  in Int;
			        Height:	  in Int;
			        Flags:	  in UInt) return HCursor renames Load_Cursor_Image2;


    -- Dialog Window related specifications

    function Def_Dialog_Proc(Wnd     :        Hwnd;
                             Msg     :        UInt;
                             W_Param :        WParam;
                             L_Param :        LParam) return LResult;
    pragma Import (StdCall, Def_Dialog_Proc, "DefDlgProcA");

    function Dialog_Box (HInst        :  HInstance;
                         Template     :  access Interfaces.C.Char;
                         Wnd          :  Hwnd;
                         DialogProc   :  Dialog_Func_Type;
                         L_Param      :  LParam) return Int;
    pragma Import (StdCall, Dialog_Box, "DialogBoxParamA");

    function Dialog_Box_Indirect (HInst        :  HInstance;
	                          Template     :  HGlobal;
	                          Wnd          :  Hwnd;
	                          DialogProc   :  Dialog_Func_Type;
	                          L_Param      :  LParam) return Int;
    pragma Import (StdCall, Dialog_Box_Indirect, "DialogBoxIndirectParamA");

    function End_Dialog (hDlg         : HWnd;
	                 ReturnResult : Int ) return Bool;
    pragma Import (StdCall, End_Dialog, "EndDialog");

    function Get_Dialog_Base_Units return Long;
    pragma Import (StdCall, Get_Dialog_Base_Units, "GetDialogBaseUnits");

    function Map_Dialog_Rect (Dlg     :        Hwnd;
                              Rect    : access Rectangle_Type) return Bool;
    pragma Import (StdCall, Map_Dialog_Rect, "MapDialogRect");

    function Get_Dialog_Item (Dialog : Claw.Win32.HWnd;
			      Id     : Identifier_Type) return Claw.Win32.HWnd;
    pragma Import (StdCall, Get_Dialog_Item, "GetDlgItem");


    function Check_Dlg_Button(Dlg     :        Hwnd;
                              D_Button:        Int;
                              Check   :        UInt) return Bool;
    pragma Import (StdCall, Check_Dlg_Button, "CheckDlgButton");

    function Check_Radio_Button (Dlg     :        Hwnd;
                                 First_Button,
                                 Last_Button,
                                 Check_Button:    Int) return Bool;
    pragma Import (StdCall, Check_Radio_Button, "CheckRadioButton");

    function Is_Dlg_Button_Checked (Dlg     :        Hwnd;
                                    Id_Button:       Int) return UInt;
    pragma Import (StdCall, Is_Dlg_Button_Checked, "IsDlgButtonChecked");

    -- Scroll bar routines:

    type Scroll_Info is record
	Size : UInt := 7*4;
	Mask : UInt;
	Min  : Int;
	Max  : Int;
	Page : UInt;
	Pos  : Int;
	TrackPos : Int;
    end record;

    function Enable_Scroll_Bar (Wnd : HWnd;
				SBFlags : UInt;
				Which_Arrows : UInt) return Bool;
    pragma Import (StdCall, Enable_Scroll_Bar, "EnableScrollBar");

    function Get_Scroll_Pos (Wnd : HWnd;
			     Bar : UInt) return Int;
    pragma Import (StdCall, Get_Scroll_Pos, "GetScrollPos");

    function Get_Scroll_Range (Wnd : HWnd;
			       Bar : UInt;
			       Min : access Int;
			       Max : access Int) return Bool;
    pragma Import (StdCall, Get_Scroll_Range, "GetScrollRange");

    function Get_Scroll_Info (Wnd : HWnd;
			      Bar : UInt;
			      Info : access Scroll_Info) return Bool;
    pragma Import (StdCall, Get_Scroll_Info, "GetScrollInfo");

    function Set_Scroll_Pos (Wnd : HWnd;
			     Bar : UInt;
			     Pos : Int;
			     Redraw : Bool) return Int;
    pragma Import (StdCall, Set_Scroll_Pos, "SetScrollPos");

    function Set_Scroll_Range (Wnd : HWnd;
			       Bar : UInt;
			       Min : Int;
			       Max : Int;
			       Redraw : Bool) return Bool;
    pragma Import (StdCall, Set_Scroll_Range, "SetScrollRange");

    function Set_Scroll_Info (Wnd : HWnd;
			      Bar : UInt;
			      Info : access Scroll_Info;
			      Redraw : Bool) return Int;
    pragma Import (StdCall, Set_Scroll_Info, "SetScrollInfo");

    function Show_Scroll_Bar (Wnd : HWnd;
			      Bar : UInt;
			      Show : Bool) return Bool;
    pragma Import (StdCall, Show_Scroll_Bar, "ShowScrollBar");


end Claw.Low_Level.Resources;