
-- ----------------------------------------------------------------- --
--                                                                   --
-- This is free software; you can redistribute it and/or             --
-- modify it under the terms of the GNU General Public               --
-- License as published by the Free Software Foundation; either      --
-- version 2 of the License, or (at your option) any later version.  --
--                                                                   --
-- This software is distributed in the hope that it will be useful,  --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of    --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU --
-- General Public License for more details.                          --
--                                                                   --
-- You should have received a copy of the GNU General Public         --
-- License along with this library; if not, write to the             --
-- Free Software Foundation, Inc., 59 Temple Place - Suite 330,      --
-- Boston, MA 02111-1307, USA.                                       --
--                                                                   --
-- ----------------------------------------------------------------- --

-- ----------------------------------------------------------------- --
-- This is a translation, to the Ada programming language, of the    --
-- original C test files written by Sam Lantinga - www.libsdl.org    --
-- translation made by Antonio F. Vargas - www.adapower.net/~avargas --
-- ----------------------------------------------------------------- --

with Interfaces.C.Strings;
with Ada.Text_IO; use Ada.Text_IO;
with GNAT.OS_Lib;
with SDL.Types; use SDL.Types;
with SDL.Video;
with SDL.Error; use SDL.Error;

procedure Testvidinfo is
   
   package C  renames Interfaces.C;
   use type C.int;
   package CS renames Interfaces.C.Strings;
   package Uint32_IO is new Ada.Text_IO.Modular_IO (Uint32);
   use Uint32_IO;
   package V  renames SDL.Video;
   use type V.Palette_ptr;
   use type V.Rect_ptr;
   use type V.Rect_ptr_ptr;
   use V.Rect_ptr_PtrOps;
   
   package Er renames SDL.Error;

   info : V.VideoInfo_ConstPtr;

   modes : V.Rect_ptr_ptr;
   
begin
      
   if SDL.Init (SDL.INIT_VIDEO) < 0 then
      Put_Line ("Couldn't initialize SDL: " & Er.Get_Error);
      GNAT.OS_Lib.OS_Exit (1);
   end if;

   info := V.GetVideoInfo;

   Put_Line ("Current display: " &
             Uint8'Image (info.vfmt.BitsPerPixel) &
             " bits-per-pixel");

   if info.vfmt.palette = null then
      Put      ("               Red Mask   = ");
      Put      (info.vfmt.Rmask, Width => 12, Base => 16);
      New_Line;
      Put      ("               Green Mask = ");
      Put      (info.vfmt.Gmask, Width => 12, Base => 16);
      New_Line;
      Put      ("               Blue Mask  = ");
      Put      (info.vfmt.Bmask, Width => 12, Base => 16);
      New_Line;
   end if;
   
   --  Print available fullscreen video images
   
   --  This is C style unsafe programming
   --  it must change in the future.
   modes := V.ListModes (null, V.FULLSCREEN);
   if 0 = V.RectPP_To_Int (modes) then
      Put_Line ("No available fullscreen video modes");
   elsif -1 = V.RectPP_To_Int (modes) then
      Put_Line ("No special fullscreen video modes");
   else
      Put_Line ("Fullscreen video modes");
      declare
         tmp_mode : V.Rect_ptr_PtrOps.Pointer;
      begin
         tmp_mode := Pointer (modes);
         --  for i in 1 .. 3 loop
         while tmp_mode.all /= null loop
            Put_Line ("         " &
                      Uint16'Image (tmp_mode.all.w) &
                      " x" & Uint16'Image (tmp_mode.all.h));
            tmp_mode := tmp_mode + 1;
         end loop;
      end;
   end if;

   if info.wm_available /= 0 then
      Put_Line ("A window manager is available");
   end if;

   if info.hw_available /= 0 then
      Put_Line ("Hardware surfaces are available (" &
                Uint32'Image (info.video_mem) &
                "K video memory)");
   end if;

   if info.blit_hw /= 0 then
      Put_Line ("Copy blits between hardware surfaces are acelerated");
   end if;

   if info.blit_hw_CC /= 0 then
      Put_Line ("Colorkey blits between hardware surfaces are acelerated");
   end if;

   if info.blit_hw_A /= 0 then
      Put_Line ("Alpha blits between hardware surfaces are acelerated");
   end if;

   if info.blit_sw /= 0 then
      Put_Line ("Copy blits from software surfaces to hardware surfaces are acelerated");
   end if;

   if info.blit_sw_CC /= 0 then
      Put_Line ("Colorkey blits from software surfaces to " &
                "hardware surfaces are acelerated");
   end if;

   if info.blit_sw_A /= 0 then
      Put_Line ("Alpha blits from software surfaces to hardware surfaces are acelerated");
   end if;

   if info.blit_fill /= 0 then
      Put_Line ("Color fills on hardware surfaces are accelerated");
   end if;
      

   SDL.SDL_Quit;

end Testvidinfo;
