rubysdl 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +505 -0
- data/MANIFEST +81 -0
- data/NEWS.en +144 -0
- data/NEWS.ja +151 -0
- data/README.en +117 -0
- data/README.ja +166 -0
- data/SDL_kanji.c +403 -0
- data/SDL_kanji.h +48 -0
- data/depend +18 -0
- data/doc/Makefile +18 -0
- data/doc/cdrom.rsd +431 -0
- data/doc/collision.rsd +162 -0
- data/doc/event.rsd +1487 -0
- data/doc/font.rsd +839 -0
- data/doc/general.rsd +49 -0
- data/doc/init.rsd +175 -0
- data/doc/joystick.rsd +387 -0
- data/doc/mixer.rsd +837 -0
- data/doc/mpeg.rsd +595 -0
- data/doc/rsd.rb +125 -0
- data/doc/sdlskk.rsd +496 -0
- data/doc/time.rsd +45 -0
- data/doc/video.rsd +2499 -0
- data/doc/wm.rsd +113 -0
- data/extconf.rb +92 -0
- data/lib/rubysdl_aliases.rb +431 -0
- data/lib/sdl.rb +271 -0
- data/rubysdl.h +109 -0
- data/rubysdl_cdrom.c +176 -0
- data/rubysdl_const_list.txt +280 -0
- data/rubysdl_doc.en.rd +2180 -0
- data/rubysdl_doc_old.rd +2402 -0
- data/rubysdl_event.c +346 -0
- data/rubysdl_event2.c +417 -0
- data/rubysdl_event_key.c +356 -0
- data/rubysdl_image.c +53 -0
- data/rubysdl_joystick.c +156 -0
- data/rubysdl_kanji.c +135 -0
- data/rubysdl_main.c +202 -0
- data/rubysdl_mixer.c +422 -0
- data/rubysdl_mouse.c +96 -0
- data/rubysdl_opengl.c +63 -0
- data/rubysdl_pixel.c +133 -0
- data/rubysdl_ref.html +5550 -0
- data/rubysdl_ref.rd +6163 -0
- data/rubysdl_rwops.c +90 -0
- data/rubysdl_sdlskk.c +312 -0
- data/rubysdl_sge_video.c +622 -0
- data/rubysdl_smpeg.c +341 -0
- data/rubysdl_time.c +36 -0
- data/rubysdl_ttf.c +324 -0
- data/rubysdl_video.c +749 -0
- data/rubysdl_wm.c +71 -0
- data/sample/aadraw.rb +24 -0
- data/sample/alpha.rb +27 -0
- data/sample/alphadraw.rb +25 -0
- data/sample/bfont.rb +24 -0
- data/sample/cdrom.rb +17 -0
- data/sample/collision.rb +97 -0
- data/sample/cursor.bmp +0 -0
- data/sample/cursor.rb +22 -0
- data/sample/ellipses.rb +35 -0
- data/sample/event2.rb +32 -0
- data/sample/font.bmp +0 -0
- data/sample/font.rb +25 -0
- data/sample/fpstimer.rb +175 -0
- data/sample/icon.bmp +0 -0
- data/sample/joy2.rb +81 -0
- data/sample/kanji.rb +36 -0
- data/sample/movesp.rb +93 -0
- data/sample/playmod.rb +14 -0
- data/sample/plaympeg.rb +48 -0
- data/sample/playwave.rb +16 -0
- data/sample/randrect.rb +40 -0
- data/sample/sample.ttf +0 -0
- data/sample/sdlskk.rb +70 -0
- data/sample/sgetest.rb +31 -0
- data/sample/stetris.rb +275 -0
- data/sample/testgl.rb +166 -0
- data/sample/testsprite.rb +68 -0
- data/sample/transformblit.rb +41 -0
- metadata +121 -0
data/lib/sdl.rb
ADDED
@@ -0,0 +1,271 @@
|
|
1
|
+
#
|
2
|
+
# Ruby/SDL Ruby extension library for SDL
|
3
|
+
# Copyright (C) 2001-2007 Ohbayashi Ippei
|
4
|
+
#
|
5
|
+
# This library is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the GNU Lesser General Public
|
7
|
+
# License as published by the Free Software Foundation; either
|
8
|
+
# version 2.1 of the License, or (at your option) any later version.
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
16
|
+
#
|
17
|
+
require 'sdl.so'
|
18
|
+
require 'forwardable'
|
19
|
+
|
20
|
+
if !defined?(block_given?) then
|
21
|
+
alias block_given? iterator?
|
22
|
+
end
|
23
|
+
|
24
|
+
module SDL
|
25
|
+
|
26
|
+
VERSION = "1.3.0"
|
27
|
+
|
28
|
+
class PixelFormat
|
29
|
+
|
30
|
+
extend Forwardable
|
31
|
+
|
32
|
+
def initialize(surface)
|
33
|
+
@surface = surface
|
34
|
+
end
|
35
|
+
|
36
|
+
def_delegators( :@surface, :mapRGB, :mapRGBA, :getRGB, :getRGBA, :bpp,
|
37
|
+
:colorkey, :alpha )
|
38
|
+
end
|
39
|
+
|
40
|
+
class Surface
|
41
|
+
def put(surface,x,y)
|
42
|
+
SDL::blitSurface(surface,0,0,surface.w,surface.h,self,x,y)
|
43
|
+
end
|
44
|
+
|
45
|
+
def format
|
46
|
+
return PixelFormat.new(self)
|
47
|
+
end
|
48
|
+
|
49
|
+
if method_defined?(:rotateScaledSurface) then
|
50
|
+
def rotateSurface(angle,bgcolor)
|
51
|
+
rotateScaledSurface(angle,1.0,bgcolor)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def copyRect(x,y,w,h)
|
56
|
+
flagbase=SDL::SWSURFACE|SDL::HWSURFACE|SDL::SRCCOLORKEY|SDL::SRCALPHA
|
57
|
+
alpha_flag = self.flags & (SDL::SRCCOLORKEY|SDL::RLEACCEL)
|
58
|
+
self.setAlpha(0,self.alpha)
|
59
|
+
begin
|
60
|
+
new_surface=Surface.new(flagbase&self.flags,w,h,self)
|
61
|
+
ensure
|
62
|
+
self.setAlpha(alpha_flag,self.alpha)
|
63
|
+
end
|
64
|
+
SDL.blitSurface(self,x,y,w,h,new_surface,0,0)
|
65
|
+
new_surface.setColorKey(self.flags & (SDL::SRCCOLORKEY|SDL::RLEACCEL),
|
66
|
+
self.colorkey )
|
67
|
+
new_surface.setAlpha(self.flags & (SDL::SRCALPHA|SDL::RLEACCEL),
|
68
|
+
self.alpha )
|
69
|
+
return new_surface
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.blit(src, srcX, srcY, srcW, srcH, dst, dstX, dstY)
|
73
|
+
SDL.blitSurface(src, srcX, srcY, srcW, srcH, dst, dstX, dstY)
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.new(*args)
|
77
|
+
case args.size
|
78
|
+
when 4
|
79
|
+
create(*args)
|
80
|
+
when 8
|
81
|
+
createWithFormat(*args)
|
82
|
+
else
|
83
|
+
raise ArgumentError,"must be SDL::Surface.new(flags,w,h,surface) or SDL::Surface.new(flags,w,h,depth,Rmask,Gmask,Bmask,Amask)"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class Screen
|
89
|
+
def self.open(*args); SDL.setVideoMode(*args) end
|
90
|
+
end
|
91
|
+
|
92
|
+
def color2int(color,format)
|
93
|
+
case color
|
94
|
+
when Integer
|
95
|
+
return color
|
96
|
+
when Array
|
97
|
+
return format.mapRGB(*color)
|
98
|
+
else
|
99
|
+
raise Error,'first argument must be Integer or Array'
|
100
|
+
end
|
101
|
+
end
|
102
|
+
module_function :color2int
|
103
|
+
|
104
|
+
module Mouse
|
105
|
+
module_function
|
106
|
+
|
107
|
+
def setCursor(bitmap,white,black,transparent,inverted,hot_x=0,hot_y=0)
|
108
|
+
if bitmap.w % 8 != 0 then
|
109
|
+
raise SDL::Error,"width of cursor must be muliple of 8"
|
110
|
+
end
|
111
|
+
|
112
|
+
white=SDL.color2int(white,bitmap.format)
|
113
|
+
black=SDL.color2int(black,bitmap.format)
|
114
|
+
transparent=SDL.color2int(transparent,bitmap.format)
|
115
|
+
inverted=SDL.color2int(inverted,bitmap.format)
|
116
|
+
|
117
|
+
data=[]
|
118
|
+
mask=[]
|
119
|
+
|
120
|
+
i=-1
|
121
|
+
for y in 0..(bitmap.h-1)
|
122
|
+
for x in 0..(bitmap.w-1)
|
123
|
+
if x%8 != 0 then
|
124
|
+
data[i] <<= 1
|
125
|
+
mask[i] <<= 1
|
126
|
+
else
|
127
|
+
i+=1
|
128
|
+
data[i]=mask[i]=0
|
129
|
+
end
|
130
|
+
|
131
|
+
case bitmap.getPixel(x,y)
|
132
|
+
when white
|
133
|
+
mask[i] |= 0x01
|
134
|
+
when black
|
135
|
+
data[i] |= 0x01
|
136
|
+
mask[i] |= 0x01
|
137
|
+
when transparent
|
138
|
+
# do nothing
|
139
|
+
when inverted
|
140
|
+
data[i] |= 0x01
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
setCursor_imp data.pack('C*'),mask.pack('C*'),bitmap.w,bitmap.h,hot_x,hot_y
|
147
|
+
end
|
148
|
+
|
149
|
+
end # of module Mouse
|
150
|
+
|
151
|
+
class CD
|
152
|
+
def in_drive?
|
153
|
+
status > 0
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
module_function
|
158
|
+
|
159
|
+
if defined?(rotateXYScaled) then
|
160
|
+
def rotateScaled(src,dst,x,y,angle,scale)
|
161
|
+
rotateXYScaled(src,dst,x,y,angle,scale,scale)
|
162
|
+
end
|
163
|
+
def rotate(src,dst,x,y,angle)
|
164
|
+
rotateXYScaled(src,dst,x,y,angle,1,1)
|
165
|
+
end
|
166
|
+
|
167
|
+
def rotateBlit(src,dst,x,y,angle)
|
168
|
+
rotateScaledBlit(src,dst,x,y,angle,1)
|
169
|
+
end
|
170
|
+
|
171
|
+
def autoLock?
|
172
|
+
autoLock
|
173
|
+
end
|
174
|
+
|
175
|
+
def autoLockON
|
176
|
+
self.autoLock = true
|
177
|
+
end
|
178
|
+
def autoLockOFF
|
179
|
+
self.autoLock =false
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
if defined?(transform) then
|
184
|
+
def transformBlit(src,dst,angle,xscale,yscale,px,py,qx,qy,flags)
|
185
|
+
transformed = src.transformSurface( src.colorkey, angle,
|
186
|
+
xscale, yscale, flags )
|
187
|
+
transformed.setColorKey( src.flags & (SDL::SRCCOLORKEY|SDL::RLEACCEL),
|
188
|
+
src.colorkey )
|
189
|
+
transformed.setAlpha( src.flags & (SDL::SRCALPHA|SDL::RLEACCEL),
|
190
|
+
src.alpha )
|
191
|
+
rad = Math::PI*angle/180.0
|
192
|
+
x = px - src.w/2.0 ; y = py - src.h/2.0
|
193
|
+
x *= xscale ; y *= yscale
|
194
|
+
dst_x = x*Math.cos(rad)-y*Math.sin(rad)
|
195
|
+
dst_y = x*Math.sin(rad)+y*Math.cos(rad)
|
196
|
+
dst_x += transformed.w/2
|
197
|
+
dst_y += transformed.h/2
|
198
|
+
blitSurface( transformed, 0, 0, 0, 0, dst, qx-dst_x, qy-dst_y )
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
Rect = Struct.new( :x, :y, :w, :h )
|
203
|
+
|
204
|
+
def convertRect(rect)
|
205
|
+
case rect
|
206
|
+
when NilClass
|
207
|
+
return Rect.new( 0, 0, 0, 0 )
|
208
|
+
when Array
|
209
|
+
return Rect.new( rect[0], rect[1], rect[2], rect[3] )
|
210
|
+
else
|
211
|
+
return rect
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
def blitSurface2(src,srcRect,dst,dstRect)
|
216
|
+
srcR = convertRect(srcRect)
|
217
|
+
dstR = convertRect(dstRect)
|
218
|
+
blitSurface( src, srcR.x, srcR.y, srcR.w, srcR.h , dst, dstR.x, dstR.y )
|
219
|
+
end
|
220
|
+
|
221
|
+
if defined?(Mixer)
|
222
|
+
class << Mixer
|
223
|
+
alias open_imp open
|
224
|
+
private :open_imp
|
225
|
+
def open(frequency=Mixer::DEFAULT_FREQUENCY,format=Mixer::DEFAULT_FORMAT,
|
226
|
+
cannels=Mixer::DEFAULT_CHANNELS,chunksize=4096)
|
227
|
+
open_imp(frequency,format,cannels,chunksize)
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
if defined?(MPEG)
|
233
|
+
class MPEG
|
234
|
+
alias info_imp info
|
235
|
+
private :info_imp
|
236
|
+
def info(*arg)
|
237
|
+
case arg.size
|
238
|
+
when 0
|
239
|
+
result = SDL::MPEG::Info.new
|
240
|
+
info_imp(result)
|
241
|
+
result
|
242
|
+
when 1
|
243
|
+
info_imp(arg[0])
|
244
|
+
arg[0]
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
end
|
251
|
+
|
252
|
+
if defined?(GL) then
|
253
|
+
class << GL
|
254
|
+
alias Begin_imp Begin
|
255
|
+
private :Begin_imp
|
256
|
+
def Begin(mode)
|
257
|
+
if block_given? then
|
258
|
+
begin
|
259
|
+
Begin_imp(mode)
|
260
|
+
yield
|
261
|
+
ensure
|
262
|
+
End()
|
263
|
+
end
|
264
|
+
else
|
265
|
+
Begin_imp(mode)
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
require 'rubysdl_aliases.rb'
|
data/rubysdl.h
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
/*
|
2
|
+
Ruby/SDL Ruby extension library for SDL
|
3
|
+
|
4
|
+
Copyright (C) 2001-2007 Ohbayashi Ippei
|
5
|
+
|
6
|
+
This library is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU Lesser General Public
|
8
|
+
License as published by the Free Software Foundation; either
|
9
|
+
version 2.1 of the License, or (at your option) any later version.
|
10
|
+
|
11
|
+
This library is distributed in the hope that it will be useful,
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
Lesser General Public License for more details.
|
15
|
+
|
16
|
+
You should have received a copy of the GNU Lesser General Public
|
17
|
+
License along with this library; if not, write to the Free Software
|
18
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
*/
|
20
|
+
|
21
|
+
#include <SDL.h>
|
22
|
+
#include <ruby.h>
|
23
|
+
#include <stdio.h>
|
24
|
+
#ifndef UINT2NUM
|
25
|
+
#define UINT2NUM(v) INT2NUM(v)
|
26
|
+
#endif
|
27
|
+
|
28
|
+
#ifdef DEF_GLOBAL
|
29
|
+
#define GLOBAL
|
30
|
+
#else
|
31
|
+
#define GLOBAL extern
|
32
|
+
#endif
|
33
|
+
|
34
|
+
#ifdef StringValuePtr
|
35
|
+
#define GETCSTR(v) StringValuePtr(v)
|
36
|
+
#else
|
37
|
+
#define GETCSTR(v) STR2CSTR(v)
|
38
|
+
#endif
|
39
|
+
|
40
|
+
GLOBAL VALUE mSDL;
|
41
|
+
GLOBAL VALUE eSDLError;
|
42
|
+
GLOBAL VALUE cVideoInfo;
|
43
|
+
GLOBAL VALUE cSurface;
|
44
|
+
GLOBAL VALUE cScreen;
|
45
|
+
GLOBAL VALUE cEvent;
|
46
|
+
GLOBAL VALUE mKey;
|
47
|
+
GLOBAL VALUE mMixer;
|
48
|
+
GLOBAL VALUE cWave;
|
49
|
+
GLOBAL VALUE cMusic;
|
50
|
+
GLOBAL VALUE mWM;
|
51
|
+
GLOBAL VALUE mMouse;
|
52
|
+
GLOBAL VALUE cTTF;
|
53
|
+
GLOBAL VALUE cJoystick;
|
54
|
+
GLOBAL VALUE cCD;
|
55
|
+
GLOBAL VALUE cMPEG;
|
56
|
+
GLOBAL VALUE cMPEGInfo;
|
57
|
+
GLOBAL VALUE mSDLSKK;
|
58
|
+
GLOBAL VALUE cContext;
|
59
|
+
GLOBAL VALUE cDictionary;
|
60
|
+
GLOBAL VALUE cRomKanaRuleTable;
|
61
|
+
GLOBAL VALUE cKeybind;
|
62
|
+
|
63
|
+
#ifdef HAVE_SGE
|
64
|
+
GLOBAL VALUE cCollisionMap;
|
65
|
+
GLOBAL VALUE cBMFont;
|
66
|
+
#endif /* ifdef HAVE_SGE */
|
67
|
+
|
68
|
+
#ifdef DEF_EVENT2
|
69
|
+
GLOBAL VALUE cEvent2;
|
70
|
+
GLOBAL VALUE cActiveEvent;
|
71
|
+
GLOBAL VALUE cKeyDownEvent;
|
72
|
+
GLOBAL VALUE cKeyUpEvent;
|
73
|
+
GLOBAL VALUE cMouseMotionEvent;
|
74
|
+
GLOBAL VALUE cMouseButtonDownEvent;
|
75
|
+
GLOBAL VALUE cMouseButtonUpEvent;
|
76
|
+
GLOBAL VALUE cJoyAxisEvent;
|
77
|
+
GLOBAL VALUE cJoyBallEvent;
|
78
|
+
GLOBAL VALUE cJoyHatEvent;
|
79
|
+
GLOBAL VALUE cJoyButtonUpEvent;
|
80
|
+
GLOBAL VALUE cJoyButtonDownEvent;
|
81
|
+
GLOBAL VALUE cQuitEvent;
|
82
|
+
GLOBAL VALUE cSysWMEvent;
|
83
|
+
GLOBAL VALUE cVideoResizeEvent;
|
84
|
+
GLOBAL VALUE cVideoExposeEvent;
|
85
|
+
#endif
|
86
|
+
|
87
|
+
#define SetRect(Rect,X,Y,W,H) \
|
88
|
+
do{ \
|
89
|
+
Rect.x=NUM2INT(X); \
|
90
|
+
Rect.y=NUM2INT(Y); \
|
91
|
+
Rect.w=NUM2INT(W); \
|
92
|
+
Rect.h=NUM2INT(H); \
|
93
|
+
}while(0) \
|
94
|
+
|
95
|
+
#define BOOL(x) (x)?Qtrue:Qfalse
|
96
|
+
|
97
|
+
#ifndef SDL_VERSION_ATLEAST
|
98
|
+
#define SDL_COMPILEDVERSION SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL)
|
99
|
+
|
100
|
+
#define SDL_VERSION_ATLEAST(X, Y, Z) (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z))
|
101
|
+
|
102
|
+
#endif
|
103
|
+
|
104
|
+
Uint32 VALUE2COLOR(VALUE color,SDL_PixelFormat *format);
|
105
|
+
void rubysdl_putPixel(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color);
|
106
|
+
Uint32 rubysdl_getPixel(SDL_Surface *surface, Sint16 x, Sint16 y);
|
107
|
+
void sdl_freeSurface(SDL_Surface* surface);
|
108
|
+
int rubysdl_is_quit(void);
|
109
|
+
SDL_RWops* rubysdl_RWops_from_ruby_obj(VALUE obj);
|
data/rubysdl_cdrom.c
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
/*
|
2
|
+
Ruby/SDL Ruby extension library for SDL
|
3
|
+
|
4
|
+
Copyright (C) 2001-2007 Ohbayashi Ippei
|
5
|
+
|
6
|
+
This library is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU Lesser General Public
|
8
|
+
License as published by the Free Software Foundation; either
|
9
|
+
version 2.1 of the License, or (at your option) any later version.
|
10
|
+
|
11
|
+
This library is distributed in the hope that it will be useful,
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
Lesser General Public License for more details.
|
15
|
+
|
16
|
+
You should have received a copy of the GNU Lesser General Public
|
17
|
+
License along with this library; if not, write to the Free Software
|
18
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
*/
|
20
|
+
#include "rubysdl.h"
|
21
|
+
|
22
|
+
static VALUE sdl_cd_numDrive(VALUE class)
|
23
|
+
{
|
24
|
+
return INT2FIX(SDL_CDNumDrives());
|
25
|
+
}
|
26
|
+
static VALUE sdl_cd_name(VALUE class,VALUE drive)
|
27
|
+
{
|
28
|
+
return rb_str_new2(SDL_CDName(NUM2INT(drive)));
|
29
|
+
}
|
30
|
+
static VALUE sdl_cd_open(VALUE class,VALUE drive)
|
31
|
+
{
|
32
|
+
SDL_CD *cd;
|
33
|
+
cd=SDL_CDOpen(NUM2INT(drive));
|
34
|
+
if(cd==NULL)
|
35
|
+
rb_raise(eSDLError,"Couldn't open drive %d: %s",
|
36
|
+
NUM2INT(drive),SDL_GetError());
|
37
|
+
return Data_Wrap_Struct(class,0,SDL_CDClose,cd);
|
38
|
+
}
|
39
|
+
static VALUE sdl_cd_status(VALUE obj)
|
40
|
+
{
|
41
|
+
SDL_CD *cd;
|
42
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
43
|
+
return INT2FIX(SDL_CDStatus(cd));
|
44
|
+
}
|
45
|
+
static VALUE sdl_cd_play(VALUE obj,VALUE start,VALUE length)
|
46
|
+
{
|
47
|
+
SDL_CD *cd;
|
48
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
49
|
+
if( SDL_CDPlay(cd,NUM2INT(start),NUM2INT(length))==-1 )
|
50
|
+
rb_raise(eSDLError,"Couldn't play cd :%s",SDL_GetError() );
|
51
|
+
return Qnil;
|
52
|
+
}
|
53
|
+
static VALUE sdl_cd_playTracks(VALUE obj,VALUE start_track,VALUE start_frame,
|
54
|
+
VALUE ntracks,VALUE nframes)
|
55
|
+
{
|
56
|
+
SDL_CD *cd;
|
57
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
58
|
+
if( SDL_CDPlayTracks(cd,NUM2INT(start_track),NUM2INT(start_frame),
|
59
|
+
NUM2INT(ntracks),NUM2INT(nframes))==-1 )
|
60
|
+
rb_raise(eSDLError,"Couldn't play cd :%s",SDL_GetError() );
|
61
|
+
return Qnil;
|
62
|
+
}
|
63
|
+
static VALUE sdl_cd_pause(VALUE obj)
|
64
|
+
{
|
65
|
+
SDL_CD *cd;
|
66
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
67
|
+
if( SDL_CDPause(cd)==-1 )
|
68
|
+
rb_raise(eSDLError,"cd pause failed :%s",SDL_GetError());
|
69
|
+
return Qnil;
|
70
|
+
}
|
71
|
+
static VALUE sdl_cd_resume(VALUE obj)
|
72
|
+
{
|
73
|
+
SDL_CD *cd;
|
74
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
75
|
+
if( SDL_CDResume(cd)==-1 )
|
76
|
+
rb_raise(eSDLError,"cd resume failed :%s",SDL_GetError());
|
77
|
+
return Qnil;
|
78
|
+
}
|
79
|
+
static VALUE sdl_cd_stop(VALUE obj)
|
80
|
+
{
|
81
|
+
SDL_CD *cd;
|
82
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
83
|
+
if( SDL_CDStop(cd)==-1 )
|
84
|
+
rb_raise(eSDLError,"cd pause failed :%s",SDL_GetError());
|
85
|
+
return Qnil;
|
86
|
+
}
|
87
|
+
static VALUE sdl_cd_eject(VALUE obj)
|
88
|
+
{
|
89
|
+
SDL_CD *cd;
|
90
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
91
|
+
if( SDL_CDEject(cd)==-1 )
|
92
|
+
rb_raise(eSDLError,"cd eject failed :%s",SDL_GetError());
|
93
|
+
return Qnil;
|
94
|
+
}
|
95
|
+
|
96
|
+
static VALUE sdl_cd_numTracks(VALUE obj)
|
97
|
+
{
|
98
|
+
SDL_CD *cd;
|
99
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
100
|
+
return INT2NUM(cd->numtracks);
|
101
|
+
}
|
102
|
+
static VALUE sdl_cd_currentTrack(VALUE obj)
|
103
|
+
{
|
104
|
+
SDL_CD *cd;
|
105
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
106
|
+
return INT2NUM(cd->cur_track);
|
107
|
+
}
|
108
|
+
static VALUE sdl_cd_currentFrame(VALUE obj)
|
109
|
+
{
|
110
|
+
SDL_CD *cd;
|
111
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
112
|
+
return INT2NUM(cd->cur_frame);
|
113
|
+
}
|
114
|
+
static VALUE sdl_cd_trackType(VALUE obj,VALUE track)
|
115
|
+
{
|
116
|
+
SDL_CD *cd;
|
117
|
+
int index=NUM2INT(track);
|
118
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
119
|
+
return INT2FIX(cd->track[index].type);
|
120
|
+
}
|
121
|
+
static VALUE sdl_cd_trackLength(VALUE obj,VALUE track)
|
122
|
+
{
|
123
|
+
SDL_CD *cd;
|
124
|
+
int index=NUM2INT(track);
|
125
|
+
Data_Get_Struct(obj,SDL_CD,cd);
|
126
|
+
return INT2FIX(cd->track[index].length);
|
127
|
+
}
|
128
|
+
|
129
|
+
static VALUE sdl_cd_framesToMSF(VALUE class, VALUE frames)
|
130
|
+
{
|
131
|
+
int m, s, f;
|
132
|
+
FRAMES_TO_MSF(NUM2INT(frames), &m, &s, &f);
|
133
|
+
return rb_ary_new3(3, INT2FIX(m), INT2FIX(s), INT2FIX(f));
|
134
|
+
}
|
135
|
+
static VALUE sdl_cd_MSFToFrames(VALUE class, VALUE m, VALUE s, VALUE f)
|
136
|
+
{
|
137
|
+
return INT2FIX(MSF_TO_FRAMES(NUM2INT(m),NUM2INT(s),NUM2INT(f)));
|
138
|
+
}
|
139
|
+
|
140
|
+
static void defineConstForCDROM()
|
141
|
+
{
|
142
|
+
rb_define_const(cCD,"TRAYEMPTY",INT2NUM(CD_TRAYEMPTY));
|
143
|
+
rb_define_const(cCD,"STOPPED",INT2NUM(CD_STOPPED));
|
144
|
+
rb_define_const(cCD,"PLAYING",INT2NUM(CD_PLAYING));
|
145
|
+
rb_define_const(cCD,"PAUSED",INT2NUM(CD_PAUSED));
|
146
|
+
rb_define_const(cCD,"ERROR",INT2NUM(CD_ERROR));
|
147
|
+
|
148
|
+
rb_define_const(cCD,"AUDIO_TRACK",UINT2NUM(SDL_AUDIO_TRACK));
|
149
|
+
rb_define_const(cCD,"DATA_TRACK",UINT2NUM(SDL_DATA_TRACK));
|
150
|
+
|
151
|
+
rb_define_const(cCD,"FPS", UINT2NUM(CD_FPS));
|
152
|
+
}
|
153
|
+
void init_cdrom()
|
154
|
+
{
|
155
|
+
cCD=rb_define_class_under(mSDL,"CD",rb_cObject);
|
156
|
+
rb_define_singleton_method(cCD,"numDrive",sdl_cd_numDrive,0);
|
157
|
+
rb_define_singleton_method(cCD,"indexName",sdl_cd_name,1);
|
158
|
+
rb_define_singleton_method(cCD,"open",sdl_cd_open,1);
|
159
|
+
rb_define_singleton_method(cCD,"framesToMSF",sdl_cd_framesToMSF,1);
|
160
|
+
rb_define_singleton_method(cCD,"MSFToFrames",sdl_cd_MSFToFrames,3);
|
161
|
+
rb_define_method(cCD,"status",sdl_cd_status,0);
|
162
|
+
rb_define_method(cCD,"play",sdl_cd_play,2);
|
163
|
+
rb_define_method(cCD,"playTracks",sdl_cd_playTracks,4);
|
164
|
+
rb_define_method(cCD,"pause",sdl_cd_pause,0);
|
165
|
+
rb_define_method(cCD,"resume",sdl_cd_resume,0);
|
166
|
+
rb_define_method(cCD,"stop",sdl_cd_stop,0);
|
167
|
+
rb_define_method(cCD,"eject",sdl_cd_eject,0);
|
168
|
+
|
169
|
+
rb_define_method(cCD,"numTracks",sdl_cd_numTracks,0);
|
170
|
+
rb_define_method(cCD,"currentTrack",sdl_cd_currentTrack,0);
|
171
|
+
rb_define_method(cCD,"currentFrame",sdl_cd_currentFrame,0);
|
172
|
+
rb_define_method(cCD,"trackType",sdl_cd_trackType,1);
|
173
|
+
rb_define_method(cCD,"trackLength",sdl_cd_trackLength,1);
|
174
|
+
|
175
|
+
defineConstForCDROM();
|
176
|
+
}
|