-- ----------------------------------------------------------------- --
-- AdaSDL --
-- Binding to Simple Direct Media Layer --
-- Copyright (C) 2001 A.M.F.Vargas --
-- Antonio M. F. Vargas --
-- Ponta Delgada - Azores - Portugal --
-- http://www.adapower.net/~avargas --
-- E-mail: avargas@adapower.net --
-- ----------------------------------------------------------------- --
-- --
-- This library 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 library 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. --
-- --
-- As a special exception, if other files instantiate generics from --
-- this unit, or you link this unit with other files to produce an --
-- executable, this unit does not by itself cause the resulting --
-- executable to be covered by the GNU General Public License. This --
-- exception does not however invalidate any other reasons why the --
-- executable file might be covered by the GNU Public License. --
-- ----------------------------------------------------------------- --
-- **************************************************************** --
-- This is an Ada binding to SDL ( Simple DirectMedia Layer from --
-- Sam Lantinga - www.libsld.org ) --
-- **************************************************************** --
-- In order to help the Ada programmer, the comments in this file --
-- are, in great extent, a direct copy of the original text in the --
-- SDL header files. --
-- **************************************************************** --
with System;
with Interfaces.C;
with Interfaces.C.Strings;
with Interfaces.C_Streams;
with SDL.Types; use SDL.Types;
-- This is a set of routines from SDL lib that doesn't
-- have a dependency from the SDL Ada package.
package SDL.RWops is
package C renames Interfaces.C;
package C_Streams renames Interfaces.C_Streams;
package CS renames Interfaces.C.Strings;
type void_ptr is new System.Address;
type FILE_ptr is new C_Streams.FILEs;
type RWops;
type RWops_ptr is access all RWops;
-- Seek to 'offset' relative to whence, one of stdio's
-- whence values: SEEK_SET, SEEK_CUR, SEEK_END
-- returns the finnal offset in the data source.
type Seek_Type is access function (
context : RWops_ptr;
offset : C.int;
whence : C.int) return C.int;
pragma Convention (C, Seek_Type);
-- Read up to 'num' objects each of size 'objsize' from
-- the data source to the ares pointed by 'ptr'.
-- Returns number of objects read, or -1 if the read failed.
type Read_Type is access function (
context : RWops_ptr;
ptr : void_ptr;
size : C.int;
maxnum : C.int) return C.int;
pragma Convention (C, Read_Type);
-- Write exactly 'num' objects each of size 'objsize' from
-- the area pointed by 'ptr' to data source.
-- Returns 'num', or -1 if the write failed.
type Write_Type is access function (
context : RWops_ptr;
ptr : void_ptr;
size : C.int;
num : C.int) return C.int;
pragma Convention (C, Write_Type);
-- Close and free an allocated SDL_FSops structure.
type Close_Type is access function (
context : RWops_ptr) return C.int;
pragma Convention (C, Close_Type);
type Stdio_Type is
record
autoclose : C.int;
fp : FILE_ptr;
end record;
pragma Convention (C, Stdio_Type);
type Uint8_ptr is access all Uint8;
type Mem_Type is
record
base,
here,
stop : Uint8_ptr;
end record;
pragma Convention (C, Mem_Type);
type Unknown_Type is
record
data1 : void_ptr;
end record;
pragma Convention (C, Unknown_Type);
type Hidden_Select_Type is (Is_Stdio, Is_Mem, Is_Unknown);
type Hidden_Union_Type (Hidden_Select : Hidden_Select_Type := Is_Stdio) is
record
case Hidden_Select is
when Is_Stdio => stdio : Stdio_Type;
when Is_Mem => mem : Mem_Type;
when Is_Unknown => unknown : Unknown_Type;
end case;
end record;
pragma Convention (C, Hidden_Union_Type);
pragma Unchecked_Union (Hidden_Union_Type);
-- This is the read/write operation structure -- very basic */
type RWops is
record
seek : Seek_Type;
read : Read_Type;
write : Read_Type;
close : Close_Type;
type_union : Uint32;
hidden : Hidden_Union_Type;
end record;
function RWFromFile (
file : CS.chars_ptr;
mode : CS.chars_ptr)
return RWops_ptr;
pragma Import (C, RWFromFile, "SDL_RWFromFile");
function RW_From_File (
file : String;
mode : String)
return RWops_ptr;
pragma Inline (RW_From_File);
function RWFromFP (
file : FILE_ptr;
autoclose : C.int)
return RWops_ptr;
pragma Import (C, RWFromFP, "SDL_RWFromFP");
function RWFromMem (
mem : void_ptr;
size : C.int)
return RWops_ptr;
pragma Import (C, RWFromMem, "SDL_RWFromMem");
function AllocRW return RWops_ptr;
pragma Import (C, AllocRW, "SDL_AllocRW");
procedure FreeRW (
area : RWops_ptr);
pragma Import (C, FreeRW, "SDL_FreeRW");
function RWSeek (
ctx : RWops_ptr;
offset : C.int;
whence : C.int)
return C.int;
pragma Inline (RWSeek);
function RWtell (
ctx : RWops_ptr)
return C.int;
pragma Inline (RWtell);
function RWread (
ctx : RWops_ptr;
ptr : void_ptr;
size : C.int;
n : C.int)
return C.int;
pragma Inline (RWread);
function RWwrite (
ctx : RWops_ptr;
ptr : void_ptr;
size : C.int;
n : C.int)
return C.int;
pragma Inline (RWwrite);
function RWclose (
ctx : RWops_ptr)
return C.int;
pragma Inline (RWclose);
end SDL.RWops;
syntax highlighted by Code2HTML, v. 0.9.1