@@ -81,47 +81,6 @@ CD_preventremoval(self, args)
8181 return None ;
8282}
8383
84- static object *
85- CD_getvolume (self , args )
86- cdplayerobject * self ;
87- object * args ;
88- {
89- CDVOLUME vol ;
90- int retval ;
91-
92- CheckPlayer (self );
93-
94- if (!getnoarg (args ))
95- return NULL ;
96-
97- #if 0
98- if (!CDgetvolume (self -> ob_cdplayer , & vol )) {
99- err_setstr (RuntimeError , "getvolume failed" );
100- return NULL ;
101- }
102- #endif
103- retval = CDgetvolume (self -> ob_cdplayer , & vol );
104- return mkvalue ("(iiiii)" , retval ,
105- vol .chan0 , vol .chan1 , vol .chan2 , vol .chan3 );
106- }
107-
108- static object *
109- CD_setvolume (self , args )
110- cdplayerobject * self ;
111- object * args ;
112- {
113- CDVOLUME vol ;
114- int retval ;
115-
116- CheckPlayer (self );
117-
118- if (!getargs (args , "(bbbb)" , & vol .chan0 , & vol .chan1 ,
119- & vol .chan2 , & vol .chan3 ))
120- return NULL ;
121-
122- return newintobject (CDsetvolume (self -> ob_cdplayer , & vol ));
123- }
124-
12584static object *
12685CD_bestreadsize (self , args )
12786 cdplayerobject * self ;
@@ -146,7 +105,7 @@ CD_close(self, args)
146105 return NULL ;
147106
148107 if (!CDclose (self -> ob_cdplayer )) {
149- err_errno (RuntimeError ); /* XXX - ??? */
108+ err_errno (IOError ); /* XXX - ??? */
150109 return NULL ;
151110 }
152111 self -> ob_cdplayer = NULL ;
@@ -160,13 +119,19 @@ CD_eject(self, args)
160119 cdplayerobject * self ;
161120 object * args ;
162121{
122+ CDSTATUS status ;
123+
163124 CheckPlayer (self );
164125
165126 if (!getnoarg (args ))
166127 return NULL ;
167128
168129 if (!CDeject (self -> ob_cdplayer )) {
169- err_setstr (RuntimeError , "eject failed" );
130+ if (CDgetstatus (self -> ob_cdplayer , & status ) &&
131+ status .state == CD_NODISC )
132+ err_setstr (IOError , "no disc in player" );
133+ else
134+ err_setstr (IOError , "eject failed" );
170135 return NULL ;
171136 }
172137
@@ -187,7 +152,7 @@ CD_getstatus(self, args)
187152 return NULL ;
188153
189154 if (!CDgetstatus (self -> ob_cdplayer , & status )) {
190- err_errno (RuntimeError ); /* XXX - ??? */
155+ err_errno (IOError ); /* XXX - ??? */
191156 return NULL ;
192157 }
193158
@@ -207,14 +172,19 @@ CD_gettrackinfo(self, args)
207172{
208173 int track ;
209174 CDTRACKINFO info ;
175+ CDSTATUS status ;
210176
211177 CheckPlayer (self );
212178
213179 if (!getargs (args , "i" , & track ))
214180 return NULL ;
215181
216182 if (!CDgettrackinfo (self -> ob_cdplayer , track , & info )) {
217- err_setstr (RuntimeError , "gettrackinfo failed" );
183+ if (CDgetstatus (self -> ob_cdplayer , & status ) &&
184+ status .state == CD_NODISC )
185+ err_setstr (IOError , "no disc in player" );
186+ else
187+ err_setstr (IOError , "gettrackinfo failed" );
218188 return NULL ;
219189 }
220190
@@ -246,14 +216,19 @@ CD_play(self, args)
246216 object * args ;
247217{
248218 int start , play ;
219+ CDSTATUS status ;
249220
250221 CheckPlayer (self );
251222
252223 if (!getargs (args , "(ii)" , & start , & play ))
253224 return NULL ;
254225
255226 if (!CDplay (self -> ob_cdplayer , start , play )) {
256- err_setstr (RuntimeError , "play failed" );
227+ if (CDgetstatus (self -> ob_cdplayer , & status ) &&
228+ status .state == CD_NODISC )
229+ err_setstr (IOError , "no disc in player" );
230+ else
231+ err_setstr (IOError , "play failed" );
257232 return NULL ;
258233 }
259234
@@ -267,14 +242,19 @@ CD_playabs(self, args)
267242 object * args ;
268243{
269244 int min , sec , frame , play ;
245+ CDSTATUS status ;
270246
271247 CheckPlayer (self );
272248
273249 if (!getargs (args , "(iiii)" , & min , & sec , & frame , & play ))
274250 return NULL ;
275251
276252 if (!CDplayabs (self -> ob_cdplayer , min , sec , frame , play )) {
277- err_setstr (RuntimeError , "playabs failed" );
253+ if (CDgetstatus (self -> ob_cdplayer , & status ) &&
254+ status .state == CD_NODISC )
255+ err_setstr (IOError , "no disc in player" );
256+ else
257+ err_setstr (IOError , "playabs failed" );
278258 return NULL ;
279259 }
280260
@@ -288,14 +268,19 @@ CD_playtrack(self, args)
288268 object * args ;
289269{
290270 int start , play ;
271+ CDSTATUS status ;
291272
292273 CheckPlayer (self );
293274
294275 if (!getargs (args , "(ii)" , & start , & play ))
295276 return NULL ;
296277
297278 if (!CDplaytrack (self -> ob_cdplayer , start , play )) {
298- err_setstr (RuntimeError , "playtrack failed" );
279+ if (CDgetstatus (self -> ob_cdplayer , & status ) &&
280+ status .state == CD_NODISC )
281+ err_setstr (IOError , "no disc in player" );
282+ else
283+ err_setstr (IOError , "playtrack failed" );
299284 return NULL ;
300285 }
301286
@@ -309,14 +294,19 @@ CD_playtrackabs(self, args)
309294 object * args ;
310295{
311296 int track , min , sec , frame , play ;
297+ CDSTATUS status ;
312298
313299 CheckPlayer (self );
314300
315301 if (!getargs (args , "(iiiii)" , & track , & min , & sec , & frame , & play ))
316302 return NULL ;
317303
318304 if (!CDplaytrackabs (self -> ob_cdplayer , track , min , sec , frame , play )) {
319- err_setstr (RuntimeError , "playtrackabs failed" );
305+ if (CDgetstatus (self -> ob_cdplayer , & status ) &&
306+ status .state == CD_NODISC )
307+ err_setstr (IOError , "no disc in player" );
308+ else
309+ err_setstr (IOError , "playtrackabs failed" );
320310 return NULL ;
321311 }
322312
@@ -344,7 +334,7 @@ CD_readda(self, args)
344334 n = CDreadda (self -> ob_cdplayer , (CDFRAME * ) getstringvalue (result ), numframes );
345335 if (n == -1 ) {
346336 DECREF (result );
347- err_errno (RuntimeError ); /* XXX - ??? (seems to work) */
337+ err_errno (IOError ); /* XXX - ??? (seems to work) */
348338 return NULL ;
349339 }
350340 if (n < numframes )
@@ -369,7 +359,7 @@ CD_seek(self, args)
369359
370360 block = CDseek (self -> ob_cdplayer , min , sec , frame );
371361 if (block == -1 ) {
372- err_errno (RuntimeError );
362+ err_errno (IOError );
373363 return NULL ;
374364 }
375365
@@ -391,7 +381,7 @@ CD_seektrack(self, args)
391381
392382 block = CDseektrack (self -> ob_cdplayer , track );
393383 if (block == -1 ) {
394- err_errno (RuntimeError );
384+ err_errno (IOError );
395385 return NULL ;
396386 }
397387
@@ -403,13 +393,19 @@ CD_stop(self, args)
403393 cdplayerobject * self ;
404394 object * args ;
405395{
396+ CDSTATUS status ;
397+
406398 CheckPlayer (self );
407399
408400 if (!getnoarg (args ))
409401 return NULL ;
410402
411403 if (!CDstop (self -> ob_cdplayer )) {
412- err_setstr (RuntimeError , "stop failed" );
404+ if (CDgetstatus (self -> ob_cdplayer , & status ) &&
405+ status .state == CD_NODISC )
406+ err_setstr (IOError , "no disc in player" );
407+ else
408+ err_setstr (IOError , "stop failed" );
413409 return NULL ;
414410 }
415411
@@ -422,13 +418,19 @@ CD_togglepause(self, args)
422418 cdplayerobject * self ;
423419 object * args ;
424420{
421+ CDSTATUS status ;
422+
425423 CheckPlayer (self );
426424
427425 if (!getnoarg (args ))
428426 return NULL ;
429427
430428 if (!CDtogglepause (self -> ob_cdplayer )) {
431- err_setstr (RuntimeError , "togglepause failed" );
429+ if (CDgetstatus (self -> ob_cdplayer , & status ) &&
430+ status .state == CD_NODISC )
431+ err_setstr (IOError , "no disc in player" );
432+ else
433+ err_setstr (IOError , "togglepause failed" );
432434 return NULL ;
433435 }
434436
@@ -443,7 +445,6 @@ static struct methodlist cdplayer_methods[] = {
443445 {"eject" , CD_eject },
444446 {"getstatus" , CD_getstatus },
445447 {"gettrackinfo" , CD_gettrackinfo },
446- {"getvolume" , CD_getvolume },
447448 {"msftoblock" , CD_msftoblock },
448449 {"play" , CD_play },
449450 {"playabs" , CD_playabs },
@@ -453,7 +454,6 @@ static struct methodlist cdplayer_methods[] = {
453454 {"readda" , CD_readda },
454455 {"seek" , CD_seek },
455456 {"seektrack" , CD_seektrack },
456- {"setvolume" , CD_setvolume },
457457 {"stop" , CD_stop },
458458 {"togglepause" , CD_togglepause },
459459 {NULL , NULL } /* sentinel */
@@ -528,7 +528,7 @@ CD_open(self, args)
528528
529529 cdp = CDopen (dev , direction );
530530 if (cdp == NULL ) {
531- err_errno (RuntimeError );
531+ err_errno (IOError );
532532 return NULL ;
533533 }
534534
@@ -820,7 +820,7 @@ CD_createparser(self, args)
820820 return NULL ;
821821 cdp = CDcreateparser ();
822822 if (cdp == NULL ) {
823- err_setstr (RuntimeError , "createparser failed" );
823+ err_setstr (IOError , "createparser failed" );
824824 return NULL ;
825825 }
826826
0 commit comments