rubysdl 1.3.1 → 2.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.
Files changed (88) hide show
  1. data/MANIFEST +22 -2
  2. data/NEWS.en +80 -0
  3. data/NEWS.ja +83 -0
  4. data/README.en +2 -1
  5. data/README.ja +2 -2
  6. data/doc-en/Makefile +18 -0
  7. data/doc-en/cdrom.rsd +417 -0
  8. data/doc-en/collision.rsd +174 -0
  9. data/doc-en/event.rsd +1476 -0
  10. data/doc-en/font.rsd +811 -0
  11. data/doc-en/general.rsd +43 -0
  12. data/doc-en/init.rsd +168 -0
  13. data/doc-en/joystick.rsd +401 -0
  14. data/doc-en/mixer.rsd +869 -0
  15. data/doc-en/mpeg.rsd +585 -0
  16. data/doc-en/opengl.rsd +155 -0
  17. data/doc-en/sdlskk.rsd +472 -0
  18. data/doc-en/time.rsd +46 -0
  19. data/doc-en/video.rsd +2806 -0
  20. data/doc-en/wm.rsd +112 -0
  21. data/doc/Makefile +1 -1
  22. data/doc/cdrom.rsd +3 -3
  23. data/doc/event.rsd +178 -179
  24. data/doc/general.rsd +10 -0
  25. data/doc/init.rsd +2 -2
  26. data/doc/joystick.rsd +29 -5
  27. data/doc/mixer.rsd +20 -0
  28. data/doc/rsd.rb +42 -9
  29. data/doc/sdlskk.rsd +7 -7
  30. data/doc/video.rsd +461 -168
  31. data/doc/wm.rsd +2 -2
  32. data/extconf.rb +1 -8
  33. data/lib/rubysdl_aliases.rb +52 -190
  34. data/lib/rubysdl_compatible_ver1.rb +243 -0
  35. data/lib/sdl.rb +58 -92
  36. data/rubysdl.h +59 -68
  37. data/rubysdl_cdrom.c +125 -102
  38. data/{rubysdl_doc.en.rd → rubysdl_doc_old.en.rd} +3 -2
  39. data/rubysdl_event.c +318 -255
  40. data/rubysdl_event_key.c +299 -287
  41. data/rubysdl_image.c +37 -13
  42. data/rubysdl_joystick.c +180 -67
  43. data/rubysdl_kanji.c +61 -75
  44. data/rubysdl_main.c +65 -138
  45. data/rubysdl_mixer.c +339 -214
  46. data/rubysdl_mouse.c +50 -43
  47. data/rubysdl_opengl.c +31 -28
  48. data/rubysdl_pixel.c +17 -28
  49. data/rubysdl_ref.en.html +5658 -0
  50. data/rubysdl_ref.en.rd +6337 -0
  51. data/rubysdl_ref.html +2253 -1964
  52. data/rubysdl_ref.rd +823 -469
  53. data/rubysdl_rwops.c +9 -6
  54. data/rubysdl_sdlskk.c +137 -165
  55. data/rubysdl_sge_video.c +355 -469
  56. data/rubysdl_smpeg.c +189 -190
  57. data/rubysdl_time.c +1 -1
  58. data/rubysdl_ttf.c +147 -215
  59. data/rubysdl_video.c +486 -405
  60. data/rubysdl_wm.c +30 -30
  61. data/sample/aadraw.rb +9 -9
  62. data/sample/alpha.rb +12 -13
  63. data/sample/alphadraw.rb +10 -10
  64. data/sample/bfont.rb +4 -4
  65. data/sample/cdrom.rb +11 -4
  66. data/sample/collision.rb +20 -20
  67. data/sample/cursor.rb +5 -5
  68. data/sample/ellipses.rb +20 -16
  69. data/sample/event2.rb +11 -9
  70. data/sample/font.rb +4 -4
  71. data/sample/fpstimer.rb +3 -3
  72. data/sample/icon.bmp.gz +0 -0
  73. data/sample/icon.png +0 -0
  74. data/sample/joy2.rb +14 -14
  75. data/sample/kanji.rb +7 -7
  76. data/sample/load_from_io.rb +44 -0
  77. data/sample/movesp.rb +13 -12
  78. data/sample/playmod.rb +2 -3
  79. data/sample/plaympeg.rb +8 -8
  80. data/sample/playwave.rb +5 -6
  81. data/sample/sdlskk.rb +11 -11
  82. data/sample/sgetest.rb +14 -12
  83. data/sample/stetris.rb +12 -13
  84. data/sample/testgl.rb +13 -14
  85. data/sample/testsprite.rb +12 -11
  86. data/sample/transformblit.rb +23 -22
  87. metadata +62 -35
  88. data/rubysdl_event2.c +0 -417
data/lib/sdl.rb CHANGED
@@ -17,62 +17,32 @@
17
17
  require 'sdl.so'
18
18
  require 'forwardable'
19
19
 
20
- if !defined?(block_given?) then
21
- alias block_given? iterator?
22
- end
23
-
24
20
  module SDL
25
-
26
- VERSION = "1.3.1"
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
21
+ VERSION = "2.0 alpha1"
39
22
 
40
23
  class Surface
41
24
  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
25
+ SDL::Surface.blit(surface,0,0,surface.w,surface.h,self,x,y)
53
26
  end
54
27
 
55
28
  def copyRect(x,y,w,h)
29
+ format = self.format
56
30
  flagbase=SDL::SWSURFACE|SDL::HWSURFACE|SDL::SRCCOLORKEY|SDL::SRCALPHA
57
31
  alpha_flag = self.flags & (SDL::SRCCOLORKEY|SDL::RLEACCEL)
58
- self.setAlpha(0,self.alpha)
32
+ self.setAlpha(0,format.alpha)
59
33
  begin
60
34
  new_surface=Surface.new(flagbase&self.flags,w,h,self)
61
35
  ensure
62
- self.setAlpha(alpha_flag,self.alpha)
36
+ self.setAlpha(alpha_flag,format.alpha)
63
37
  end
64
38
  SDL.blitSurface(self,x,y,w,h,new_surface,0,0)
65
39
  new_surface.setColorKey(self.flags & (SDL::SRCCOLORKEY|SDL::RLEACCEL),
66
- self.colorkey )
40
+ format.colorkey )
67
41
  new_surface.setAlpha(self.flags & (SDL::SRCALPHA|SDL::RLEACCEL),
68
- self.alpha )
42
+ format.alpha )
69
43
  return new_surface
70
44
  end
71
45
 
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
46
  def self.new(*args)
77
47
  case args.size
78
48
  when 4
@@ -83,12 +53,10 @@ module SDL
83
53
  raise ArgumentError,"must be SDL::Surface.new(flags,w,h,surface) or SDL::Surface.new(flags,w,h,depth,Rmask,Gmask,Bmask,Amask)"
84
54
  end
85
55
  end
86
- end
87
56
 
88
- class Screen
89
- def self.open(*args); SDL.setVideoMode(*args) end
57
+
90
58
  end
91
-
59
+
92
60
  def color2int(color,format)
93
61
  case color
94
62
  when Integer
@@ -120,14 +88,14 @@ module SDL
120
88
  i=-1
121
89
  for y in 0..(bitmap.h-1)
122
90
  for x in 0..(bitmap.w-1)
123
- if x%8 != 0 then
91
+ if x%8 == 0 then
92
+ i+=1
93
+ data[i]=mask[i]=0
94
+ else
124
95
  data[i] <<= 1
125
96
  mask[i] <<= 1
126
- else
127
- i+=1
128
- data[i]=mask[i]=0
129
97
  end
130
-
98
+
131
99
  case bitmap.getPixel(x,y)
132
100
  when white
133
101
  mask[i] |= 0x01
@@ -139,7 +107,6 @@ module SDL
139
107
  when inverted
140
108
  data[i] |= 0x01
141
109
  end
142
-
143
110
  end
144
111
  end
145
112
 
@@ -148,6 +115,26 @@ module SDL
148
115
 
149
116
  end # of module Mouse
150
117
 
118
+ if defined?(CollisionMap)
119
+ def Surface.transformBlit(src, dst, angle, xscale, yscale,
120
+ px, py, qx, qy, flags)
121
+ transformed = src.transformSurface(src.colorkey, angle,
122
+ xscale, yscale, flags)
123
+ transformed.setColorKey(src.flags & (SDL::SRCCOLORKEY|SDL::RLEACCEL),
124
+ src.colorkey )
125
+ transformed.setAlpha(src.flags & (SDL::SRCALPHA|SDL::RLEACCEL),
126
+ src.alpha )
127
+ rad = Math::PI*angle / 180.0
128
+ x = px - src.w/2.0 ; y = py - src.h/2.0
129
+ x *= xscale ; y *= yscale
130
+ dst_x = x*Math.cos(rad)-y*Math.sin(rad)
131
+ dst_y = x*Math.sin(rad)+y*Math.cos(rad)
132
+ dst_x += transformed.w / 2
133
+ dst_y += transformed.h / 2
134
+ Surface.blit(transformed, 0, 0, 0, 0, dst, qx-dst_x, qy-dst_y)
135
+ end
136
+ end
137
+
151
138
  class CD
152
139
  def in_drive?
153
140
  status > 0
@@ -156,49 +143,6 @@ module SDL
156
143
 
157
144
  module_function
158
145
 
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
146
  Rect = Struct.new( :x, :y, :w, :h )
203
147
 
204
148
  def convertRect(rect)
@@ -211,7 +155,8 @@ module SDL
211
155
  return rect
212
156
  end
213
157
  end
214
-
158
+
159
+ # FIX:
215
160
  def blitSurface2(src,srcRect,dst,dstRect)
216
161
  srcR = convertRect(srcRect)
217
162
  dstR = convertRect(dstRect)
@@ -246,7 +191,27 @@ module SDL
246
191
  end
247
192
  end
248
193
  end
249
-
194
+ if defined?(TTF)
195
+ class TTF
196
+ def drawSolidUTF8(dst, text, x, y, r, g, b)
197
+ image = renderSolidUTF8(text, r, g, b)
198
+ dst.put(image, x, y)
199
+ image.destroy
200
+ end
201
+
202
+ def drawBlendedUTF8(dst, text, x, y, r, g, b)
203
+ image = renderBlendedUTF8(text, r, g, b)
204
+ dst.put(image, x, y)
205
+ image.destroy
206
+ end
207
+
208
+ def drawShadedUTF8(dst, text, fg_r, fg_g, fg_b, bg_r, bg_g, bg_b)
209
+ image = renderSolidUTF8(text, fg_r, fg_g, fg_b, bg_r, bg_g, bg_b)
210
+ dst.put(image, x, y)
211
+ image.destroy
212
+ end
213
+ end
214
+ end
250
215
  end
251
216
 
252
217
  if defined?(GL) then
@@ -269,3 +234,4 @@ if defined?(GL) then
269
234
  end
270
235
 
271
236
  require 'rubysdl_aliases.rb'
237
+ require 'rubysdl_compatible_ver1.rb'
data/rubysdl.h CHANGED
@@ -21,69 +21,23 @@
21
21
  #include <SDL.h>
22
22
  #include <ruby.h>
23
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
24
 
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
25
+ /* Macros */
26
+ #define GLOBAL_DEFINE_GET_STRUCT(struct_name, fun, klass, klassstr) \
27
+ struct_name* fun(VALUE obj) \
28
+ { \
29
+ struct_name* st; \
30
+ \
31
+ if(!rb_obj_is_kind_of(obj, klass)){ \
32
+ rb_raise(rb_eTypeError, "wrong argument type %s (expected " klassstr ")", \
33
+ rb_obj_classname(obj)); \
34
+ } \
35
+ Data_Get_Struct(obj, struct_name, st); \
36
+ return st; \
37
+ }
86
38
 
39
+ #define DEFINE_GET_STRUCT(struct_name, fun, klass, klassstr) \
40
+ static GLOBAL_DEFINE_GET_STRUCT(struct_name, fun, klass, klassstr)
87
41
  #define SetRect(Rect,X,Y,W,H) \
88
42
  do{ \
89
43
  Rect.x=NUM2INT(X); \
@@ -92,18 +46,55 @@ do{ \
92
46
  Rect.h=NUM2INT(H); \
93
47
  }while(0) \
94
48
 
95
- #define BOOL(x) (x)?Qtrue:Qfalse
49
+ #define INT2BOOL(x) ((x)?Qtrue:Qfalse)
96
50
 
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
-
51
+ /* Global variables */
52
+ #define eSDLError rubysdl_eSDLError
53
+ #ifdef DEF_GLOBAL
54
+ VALUE eSDLError;
55
+ #else
56
+ extern VALUE eSDLError;
102
57
  #endif
103
58
 
59
+ /* Global functions */
60
+ #define VALUE2COLOR rubysdl_VALUE2COLOR
104
61
  Uint32 VALUE2COLOR(VALUE color,SDL_PixelFormat *format);
62
+
105
63
  void rubysdl_putPixel(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color);
106
64
  Uint32 rubysdl_getPixel(SDL_Surface *surface, Sint16 x, Sint16 y);
107
- void sdl_freeSurface(SDL_Surface* surface);
108
65
  int rubysdl_is_quit(void);
66
+
109
67
  SDL_RWops* rubysdl_RWops_from_ruby_obj(VALUE obj);
68
+
69
+ #define Surface_create rubysdl_Surface_create
70
+ VALUE Surface_create(SDL_Surface* surface);
71
+
72
+ #define Get_SDL_Surface rubysdl_Get_SDL_Surface
73
+ SDL_Surface* Get_SDL_Surface(VALUE obj);
74
+
75
+ #ifdef HAVE_SDLSKK
76
+ #include <SDL_ttf.h>
77
+ #define Get_TTF_Font rubysdl_Get_TTF_Font
78
+ TTF_Font* Get_TTF_Font(VALUE obj);
79
+ #endif
80
+
81
+ /* declaration of initialize functions */
82
+ VALUE rubysdl_init_video(VALUE mSDL);
83
+ void rubysdl_init_sge(VALUE mSDL, VALUE cSurface);
84
+ void rubysdl_init_GL(VALUE mSDL);
85
+ void rubysdl_init_image(VALUE mSDL, VALUE cSurface);
86
+ void rubysdl_init_Event(VALUE mSDL);
87
+ void rubysdl_init_Key(VALUE mSDL);
88
+ void rubysdl_init_Mouse(VALUE mSDL);
89
+ void rubysdl_init_Joystick(VALUE mSDL);
90
+ void rubysdl_init_CD(VALUE mSDL);
91
+ void rubysdl_init_time(VALUE mSDL);
92
+ void rubysdl_init_WM(VALUE mSDL);
93
+ void rubysdl_init_Kanji(VALUE mSDL);
94
+ void rubysdl_init_TTF(VALUE mSDL);
95
+ void rubysdl_quit_TTF(void);
96
+ void rubysdl_init_Mixer(VALUE mSDL);
97
+ void rubysdl_quit_Mixer(void);
98
+ void rubysdl_init_MPEG(VALUE mSDL);
99
+ void rubysdl_init_SKK(VALUE mSDL);
100
+
data/rubysdl_cdrom.c CHANGED
@@ -19,158 +19,181 @@
19
19
  */
20
20
  #include "rubysdl.h"
21
21
 
22
- static VALUE sdl_cd_numDrive(VALUE class)
22
+ static VALUE cCD;
23
+
24
+ typedef struct{
25
+ SDL_CD* cd;
26
+ } CD;
27
+
28
+ DEFINE_GET_STRUCT(CD, GetCD, cCD, "SDL::CD");
29
+
30
+ static SDL_CD* Get_SDL_CD(VALUE obj)
31
+ {
32
+ CD* cd = GetCD(obj);
33
+ if(cd->cd == NULL)
34
+ rb_raise(rb_eRuntimeError, "CD is closed");
35
+ return cd->cd;
36
+ }
37
+
38
+ static void CD_free(CD* cd)
23
39
  {
40
+ if( !rubysdl_is_quit() && cd->cd )
41
+ SDL_CDClose(cd->cd);
42
+ free(cd);
43
+ }
44
+
45
+ static VALUE CD_s_alloc(VALUE klass)
46
+ {
47
+ CD* cd = ALLOC(CD);
48
+ cd->cd = NULL;
49
+ return Data_Wrap_Struct(cCD, 0, CD_free, cd);
50
+ }
51
+
52
+ static VALUE CD_initialize(VALUE self, VALUE drive)
53
+ {
54
+ CD* cd = GetCD(self);
55
+ rb_secure(4);
56
+
57
+ cd->cd = SDL_CDOpen(NUM2INT(drive));
58
+ if(cd->cd == NULL)
59
+ rb_raise(eSDLError, "Couldn't open drive %d: %s",
60
+ NUM2INT(drive), SDL_GetError());
61
+ return Qnil;
62
+ }
63
+
64
+ static VALUE CD_s_numDrive(VALUE klass)
65
+ {
66
+ rb_secure(4);
24
67
  return INT2FIX(SDL_CDNumDrives());
25
68
  }
26
- static VALUE sdl_cd_name(VALUE class,VALUE drive)
69
+ static VALUE CD_s_name(VALUE klass, VALUE drive)
27
70
  {
71
+ rb_secure(4);
28
72
  return rb_str_new2(SDL_CDName(NUM2INT(drive)));
29
73
  }
30
- static VALUE sdl_cd_open(VALUE class,VALUE drive)
74
+ static VALUE CD_s_open(VALUE klass, VALUE drive)
31
75
  {
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);
76
+ VALUE newobj = CD_s_alloc(klass);
77
+ CD_initialize(newobj, drive);
78
+ return newobj;
38
79
  }
39
- static VALUE sdl_cd_status(VALUE obj)
80
+ static VALUE CD_status(VALUE self)
40
81
  {
41
- SDL_CD *cd;
42
- Data_Get_Struct(obj,SDL_CD,cd);
43
- return INT2FIX(SDL_CDStatus(cd));
82
+ rb_secure(4);
83
+ return INT2FIX(SDL_CDStatus(Get_SDL_CD(self)));
44
84
  }
45
- static VALUE sdl_cd_play(VALUE obj,VALUE start,VALUE length)
85
+ static VALUE CD_play(VALUE self, VALUE start, VALUE length)
46
86
  {
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() );
87
+ rb_secure(4);
88
+ if( SDL_CDPlay(Get_SDL_CD(self), NUM2INT(start), NUM2INT(length))==-1 )
89
+ rb_raise(eSDLError, "Couldn't play cd :%s", SDL_GetError() );
51
90
  return Qnil;
52
91
  }
53
- static VALUE sdl_cd_playTracks(VALUE obj,VALUE start_track,VALUE start_frame,
54
- VALUE ntracks,VALUE nframes)
92
+ static VALUE CD_playTracks(VALUE self, VALUE start_track, VALUE start_frame,
93
+ VALUE ntracks, VALUE nframes)
55
94
  {
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() );
95
+ rb_secure(4);
96
+ if( SDL_CDPlayTracks(Get_SDL_CD(self), NUM2INT(start_track),
97
+ NUM2INT(start_frame), NUM2INT(ntracks),
98
+ NUM2INT(nframes))==-1 )
99
+ rb_raise(eSDLError, "Couldn't play cd :%s", SDL_GetError() );
61
100
  return Qnil;
62
101
  }
63
- static VALUE sdl_cd_pause(VALUE obj)
102
+ static VALUE CD_pause(VALUE self)
64
103
  {
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());
104
+ rb_secure(4);
105
+ if( SDL_CDPause(Get_SDL_CD(self))==-1 )
106
+ rb_raise(eSDLError, "cd pause failed :%s", SDL_GetError());
69
107
  return Qnil;
70
108
  }
71
- static VALUE sdl_cd_resume(VALUE obj)
109
+ static VALUE CD_resume(VALUE self)
72
110
  {
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());
111
+ rb_secure(4);
112
+ if( SDL_CDResume(Get_SDL_CD(self))==-1 )
113
+ rb_raise(eSDLError, "cd resume failed :%s", SDL_GetError());
77
114
  return Qnil;
78
115
  }
79
- static VALUE sdl_cd_stop(VALUE obj)
116
+ static VALUE CD_stop(VALUE self)
80
117
  {
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());
118
+ rb_secure(4);
119
+ if( SDL_CDStop(Get_SDL_CD(self))==-1 )
120
+ rb_raise(eSDLError, "cd pause failed :%s", SDL_GetError());
85
121
  return Qnil;
86
122
  }
87
- static VALUE sdl_cd_eject(VALUE obj)
123
+ static VALUE CD_eject(VALUE self)
88
124
  {
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());
125
+ rb_secure(4);
126
+ if( SDL_CDEject(Get_SDL_CD(self))==-1 )
127
+ rb_raise(eSDLError, "cd eject failed :%s", SDL_GetError());
93
128
  return Qnil;
94
129
  }
95
130
 
96
- static VALUE sdl_cd_numTracks(VALUE obj)
131
+ static VALUE CD_numTracks(VALUE self)
97
132
  {
98
- SDL_CD *cd;
99
- Data_Get_Struct(obj,SDL_CD,cd);
100
- return INT2NUM(cd->numtracks);
133
+ return INT2NUM(Get_SDL_CD(self)->numtracks);
101
134
  }
102
- static VALUE sdl_cd_currentTrack(VALUE obj)
135
+ static VALUE CD_currentTrack(VALUE self)
103
136
  {
104
- SDL_CD *cd;
105
- Data_Get_Struct(obj,SDL_CD,cd);
106
- return INT2NUM(cd->cur_track);
137
+ return INT2NUM(Get_SDL_CD(self)->cur_track);
107
138
  }
108
- static VALUE sdl_cd_currentFrame(VALUE obj)
139
+ static VALUE CD_currentFrame(VALUE self)
109
140
  {
110
- SDL_CD *cd;
111
- Data_Get_Struct(obj,SDL_CD,cd);
112
- return INT2NUM(cd->cur_frame);
141
+ return INT2NUM(Get_SDL_CD(self)->cur_frame);
113
142
  }
114
- static VALUE sdl_cd_trackType(VALUE obj,VALUE track)
143
+ static VALUE CD_trackType(VALUE self, VALUE track)
115
144
  {
116
- SDL_CD *cd;
117
- int index=NUM2INT(track);
118
- Data_Get_Struct(obj,SDL_CD,cd);
119
- return INT2FIX(cd->track[index].type);
145
+ return INT2FIX(Get_SDL_CD(self)->track[NUM2INT(track)].type);
120
146
  }
121
- static VALUE sdl_cd_trackLength(VALUE obj,VALUE track)
147
+ static VALUE CD_trackLength(VALUE self, VALUE track)
122
148
  {
123
- SDL_CD *cd;
124
- int index=NUM2INT(track);
125
- Data_Get_Struct(obj,SDL_CD,cd);
126
- return INT2FIX(cd->track[index].length);
149
+ return INT2FIX(Get_SDL_CD(self)->track[NUM2INT(track)].length);
127
150
  }
128
151
 
129
- static VALUE sdl_cd_framesToMSF(VALUE class, VALUE frames)
152
+ static VALUE CD_s_framesToMSF(VALUE klass, VALUE frames)
130
153
  {
131
154
  int m, s, f;
132
155
  FRAMES_TO_MSF(NUM2INT(frames), &m, &s, &f);
133
156
  return rb_ary_new3(3, INT2FIX(m), INT2FIX(s), INT2FIX(f));
134
157
  }
135
- static VALUE sdl_cd_MSFToFrames(VALUE class, VALUE m, VALUE s, VALUE f)
158
+ static VALUE CD_s_MSFToFrames(VALUE klass, VALUE m, VALUE s, VALUE f)
136
159
  {
137
160
  return INT2FIX(MSF_TO_FRAMES(NUM2INT(m),NUM2INT(s),NUM2INT(f)));
138
161
  }
139
162
 
140
- static void defineConstForCDROM()
163
+ void rubysdl_init_CD(VALUE mSDL)
141
164
  {
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));
165
+ cCD = rb_define_class_under(mSDL, "CD", rb_cObject);
166
+
167
+ rb_define_alloc_func(cCD, CD_s_alloc);
168
+ rb_define_private_method(cCD, "initialize", CD_initialize, 1);
169
+
170
+ rb_define_singleton_method(cCD, "numDrive", CD_s_numDrive, 0);
171
+ rb_define_singleton_method(cCD, "indexName", CD_s_name, 1);
172
+ rb_define_singleton_method(cCD, "open", CD_s_open, 1);
173
+ rb_define_singleton_method(cCD, "framesToMSF", CD_s_framesToMSF,1);
174
+ rb_define_singleton_method(cCD,"MSFToFrames",CD_s_MSFToFrames,3);
175
+ rb_define_method(cCD, "status", CD_status, 0);
176
+ rb_define_method(cCD, "play", CD_play, 2);
177
+ rb_define_method(cCD, "playTracks", CD_playTracks, 4);
178
+ rb_define_method(cCD, "pause", CD_pause, 0);
179
+ rb_define_method(cCD, "resume", CD_resume, 0);
180
+ rb_define_method(cCD, "stop", CD_stop, 0);
181
+ rb_define_method(cCD, "eject", CD_eject, 0);
182
+
183
+ rb_define_method(cCD, "numTracks", CD_numTracks, 0);
184
+ rb_define_method(cCD, "currentTrack", CD_currentTrack, 0);
185
+ rb_define_method(cCD, "currentFrame", CD_currentFrame, 0);
186
+ rb_define_method(cCD, "trackType", CD_trackType, 1);
187
+ rb_define_method(cCD, "trackLength", CD_trackLength, 1);
188
+
147
189
 
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);
190
+ rb_define_const(cCD, "TRAYEMPTY", INT2NUM(CD_TRAYEMPTY));
191
+ rb_define_const(cCD, "STOPPED", INT2NUM(CD_STOPPED));
192
+ rb_define_const(cCD, "PLAYING", INT2NUM(CD_PLAYING));
193
+ rb_define_const(cCD, "PAUSED", INT2NUM(CD_PAUSED));
194
+ rb_define_const(cCD, "ERROR", INT2NUM(CD_ERROR));
174
195
 
175
- defineConstForCDROM();
196
+ rb_define_const(cCD, "AUDIO_TRACK", UINT2NUM(SDL_AUDIO_TRACK));
197
+ rb_define_const(cCD, "DATA_TRACK", UINT2NUM(SDL_DATA_TRACK));
198
+ rb_define_const(cCD, "FPS", UINT2NUM(CD_FPS));
176
199
  }