Cleaned pod from SDL.pm
[sdlgit/SDL_perl.git] / lib / SDL.pm
1 #!/usr/bin/env perl
2 #
3 # SDL.pm
4 #
5 # Copyright (C) 2005 David J. Goehrig <dgoehrig@cpan.org>
6 # Copyright (C) 2009 Kartik Thakore   <kthakore@cpan.org>
7 # ------------------------------------------------------------------------------
8 #
9 # This library is free software; you can redistribute it and/or
10 # modify it under the terms of the GNU Lesser General Public
11 # License as published by the Free Software Foundation; either
12 # version 2.1 of the License, or (at your option) any later version.
13
14 # This library is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 # Lesser General Public License for more details.
18
19 # You should have received a copy of the GNU Lesser General Public
20 # License along with this library; if not, write to the Free Software
21 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
22 #
23 # ------------------------------------------------------------------------------
24 #
25 # Please feel free to send questions, suggestions or improvements to:
26 #
27 #       Kartik Thakore
28 #       kthakore@cpan.org
29 #
30
31 package SDL;
32
33 use strict;
34 use warnings;
35 use Carp;
36
37 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
38
39 require Exporter;
40 require DynaLoader;
41
42 use SDL_perl;
43 use SDL::Constants;
44
45 BEGIN {
46         @ISA = qw(Exporter DynaLoader);
47         @EXPORT = qw( in verify &NULL );
48 };
49
50 # Give our caller SDL::Constant's stuff as well as ours.
51 sub import {
52   my $self = shift;
53
54   $self->export_to_level(1, @_);
55   SDL::Constants->export_to_level(1);
56 }
57 $VERSION = '2.3';
58
59 print "$VERSION" if (defined($ARGV[0]) && ($ARGV[0] eq '--SDLperl'));
60
61 $SDL::DEBUG=0;
62
63 sub NULL {
64         return 0;
65 }
66
67 sub in {
68         my ($k,@t) = @_;
69         return 0 unless defined $k;
70         my $r = ((scalar grep { defined $_ && $_ eq $k } @t) <=> 0);
71         return 0 if $r eq '';
72         return $r;
73
74
75
76 sub verify (\%@) {
77         my ($options,@valid_options) = @_;
78         for (keys %$options) {
79                 croak "Invalid option $_\n" unless in ($_, @valid_options);
80         }
81 }
82
83
84 1;
85 __END__
86
87 =head1 NAME
88
89 SDL_perl - Simple DirectMedia Layer for Perl
90
91 =head1 SYNOPSIS
92
93   use SDL;
94
95 =head1 DESCRIPTION
96
97 SDL_perl is a package of perl modules that provides both functional and object orient
98 interfaces to the Simple DirectMedia Layer for Perl 5.  This package does take some
99 liberties with the SDL API, and attempts to adhere to the spirit of both the SDL
100 and Perl.  This document describes the low-level functional SDL_perl API.  For the
101 object oriented programming interface please see the documentation provided on a
102 per class basis.
103
104 =head1 The SDL Perl 2009 Development Team
105
106 =head2 Documentation
107
108         Nick: magnet
109
110 =head2 Perl Development
111
112         Nick: Garu
113         Name: Breno G. de Oliveira
114         
115         Nick: Dngor
116         Name: Rocco Caputo
117
118         Nick: nferraz
119         Name: Nelson Ferraz
120
121         Nick: acme
122         Name: Leon Brocard
123         
124         Nick: FROGGS
125         Name: Tobias Leich
126
127 =head2 Maintainance 
128         
129         Nick: kthakore
130         Name: Kartik Thakore
131
132 =head1 MacOSX Experimental Usage
133
134 Please get libsdl packages from Fink
135         
136         perl Build.PL
137         perl Build test
138         perl Build bundle
139         perl Build install
140
141 =head2 Running SDL Perl Scripts in MacOSX
142
143 First set the PERL5LIB environment variable to the dependencies of your script
144         
145         %export PERL5LIB=$PERL5LIB:./lib
146
147 Use the SDLPerl executable made in the bundle and call your scripts
148
149         %SDLPerl.app/Contents/MacOS/SDLPerl yourScript.pl
150
151 =head1 Functions exported by SDL.pm
152
153 =head2 init(flags) 
154
155 As with the C language API, SDL_perl initializes the SDL environment through
156 the C<SDL::init> subroutine.  This routine takes a mode flag constructed through
157 the bitwise OR product of the following constants:
158
159 =over 4
160
161 =item *
162 INIT_AUDIO
163
164 =item *
165 INIT_VIDEO
166
167 =item *
168 INIT_CDROM
169
170 =item *
171 INIT_EVERYTHING
172
173 =item *
174 INIT_NOPARACHUTE
175
176 =item *
177 INIT_JOYSTICK
178
179 =item *
180 INIT_TIMER
181
182 =back
183
184 C<SDL::Init> returns 0 on success, or -1 on error.
185
186 =head2 init_subsystem(flags)
187
188 After SDL has been initialized with SDL::init you may initialize uninitialized subsystems with SDL::init_subsystem.
189 The flags parameter is the same as that used in SDL::init. 
190
191 SDL::init_subsystem returns 0 on success, or -1 on error.
192
193 =head2 quit_subsystem(flags)
194
195 SDL::quit_subsystem allows you to shut down a subsystem that has been previously initialized by SDL::init or SDL::init_subsystem.
196 The flags tells SDL::quit_subSystem which subsystems to shut down, it uses the same values that are passed to SDL::init. 
197
198 SDL::quit_subsystem doesn't returns any value.
199
200 =head2 quit
201
202 Shuts down all SDL subsystems, unloads the dynamically linked library and frees the allocated resources. This should always be called before you exit.
203
204 SDL::quit doesn't returns any value.
205
206 =head2 was_init(flags)
207
208 SDL::was_init allows you to see which SDL subsytems have been initialized.
209 flags is a bitwise OR'd combination of the subsystems you wish to check (see SDL::init for a list of subsystem flags). 
210 If 'flags' is 0 or SDL_INIT_EVERYTHING, it returns a mask of all initialized subsystems (this does not include SDL_INIT_EVENTTHREAD or SDL_INIT_NOPARACHUTE).
211
212
213 =head2 get_error()
214
215 The last error message set by the SDL library can be retrieved using the subroutine
216 C<SDL::get_error>, which returns a scalar containing the text of the message if any.
217
218 =head2 set_error(error)  *need to be coded
219
220 SDL::get_error sets the SDL error to a printf style formatted string. 
221 it doesn't returns any values.
222
223 =head2 error(code) * need to be coded
224
225 Sets the SDL error message to one of several predefined strings specified by code. 
226
227 code can be :
228
229 =over 4
230
231                 SDL_errorcode   The corresponding error string
232
233                 SDL_ENOMEM      Out of memory
234                 SDL_EFREAD      Error reading from datastream
235                 SDL_EFWRITE     Error writing to datastream
236                 SDL_EFSEEK      Error seeking in datastream
237                 SDL_UNSUPPORTED Unknown SDL error
238                 SDL_LASTERROR   Unknown SDL error
239                 any other value Unknown SDL error
240
241
242                 Note 1: SDL_LASTERROR marks the highest numbered predefined error.
243                 Note 2: SDL also defines SDL_OutOfMemory() and SDL_Unsupported() for internal use
244                 which are equivalent to SDL_Error(SDL_ENOMEM) and SDL_Error(SDL_UNSUPPORTED) respectively. 
245
246 =back
247
248 SDL::Error doesn't returns any value.
249
250
251 =head2 clear_error() * need to be coded
252
253 SDL::clear_error deletes all information about the last internal SDL error. Useful if the error has been handled by the program.
254 it doesn't returns any value.
255
256 =head2 loadobject()
257
258 Need to be coded.
259
260 =head2 loadfunction()
261
262 Need to be coded.
263
264 =head2 unload_object()
265
266 Need to be coded.
267
268 =head2 VERSION()
269
270 Need to be coded. 
271
272 =head2 version()
273
274 Need to be coded.
275
276 =head2 linked_version
277
278 Need to be coded.
279
280 =head2 get_error()
281
282 The last error message set by the SDL library can be retrieved using the subroutine
283 C<SDL::get_error>, which returns a scalar containing the text of the message if any.
284
285 =head2 delay(ms)
286
287 This subroutine allows an application to delay further operations for atleast a
288 number of milliseconds provided as the argument.  The actual delay may be longer
289 than the specified depending on the underlying OS.
290
291
292