@@ -48,6 +48,8 @@ typedef struct {
4848 return NULL; \
4949 }
5050
51+ static object * CdError ; /* exception cd.error */
52+
5153static object *
5254CD_allowremoval (self , args )
5355 cdplayerobject * self ;
@@ -104,7 +106,7 @@ CD_close(self, args)
104106 return NULL ;
105107
106108 if (!CDclose (self -> ob_cdplayer )) {
107- err_errno (IOError ); /* XXX - ??? */
109+ err_errno (CdError ); /* XXX - ??? */
108110 return NULL ;
109111 }
110112 self -> ob_cdplayer = NULL ;
@@ -128,9 +130,9 @@ CD_eject(self, args)
128130 if (!CDeject (self -> ob_cdplayer )) {
129131 if (CDgetstatus (self -> ob_cdplayer , & status ) &&
130132 status .state == CD_NODISC )
131- err_setstr (IOError , "no disc in player" );
133+ err_setstr (CdError , "no disc in player" );
132134 else
133- err_setstr (IOError , "eject failed" );
135+ err_setstr (CdError , "eject failed" );
134136 return NULL ;
135137 }
136138
@@ -151,7 +153,7 @@ CD_getstatus(self, args)
151153 return NULL ;
152154
153155 if (!CDgetstatus (self -> ob_cdplayer , & status )) {
154- err_errno (IOError ); /* XXX - ??? */
156+ err_errno (CdError ); /* XXX - ??? */
155157 return NULL ;
156158 }
157159
@@ -181,9 +183,9 @@ CD_gettrackinfo(self, args)
181183 if (!CDgettrackinfo (self -> ob_cdplayer , track , & info )) {
182184 if (CDgetstatus (self -> ob_cdplayer , & status ) &&
183185 status .state == CD_NODISC )
184- err_setstr (IOError , "no disc in player" );
186+ err_setstr (CdError , "no disc in player" );
185187 else
186- err_setstr (IOError , "gettrackinfo failed" );
188+ err_setstr (CdError , "gettrackinfo failed" );
187189 return NULL ;
188190 }
189191
@@ -225,9 +227,9 @@ CD_play(self, args)
225227 if (!CDplay (self -> ob_cdplayer , start , play )) {
226228 if (CDgetstatus (self -> ob_cdplayer , & status ) &&
227229 status .state == CD_NODISC )
228- err_setstr (IOError , "no disc in player" );
230+ err_setstr (CdError , "no disc in player" );
229231 else
230- err_setstr (IOError , "play failed" );
232+ err_setstr (CdError , "play failed" );
231233 return NULL ;
232234 }
233235
@@ -251,9 +253,9 @@ CD_playabs(self, args)
251253 if (!CDplayabs (self -> ob_cdplayer , min , sec , frame , play )) {
252254 if (CDgetstatus (self -> ob_cdplayer , & status ) &&
253255 status .state == CD_NODISC )
254- err_setstr (IOError , "no disc in player" );
256+ err_setstr (CdError , "no disc in player" );
255257 else
256- err_setstr (IOError , "playabs failed" );
258+ err_setstr (CdError , "playabs failed" );
257259 return NULL ;
258260 }
259261
@@ -277,9 +279,9 @@ CD_playtrack(self, args)
277279 if (!CDplaytrack (self -> ob_cdplayer , start , play )) {
278280 if (CDgetstatus (self -> ob_cdplayer , & status ) &&
279281 status .state == CD_NODISC )
280- err_setstr (IOError , "no disc in player" );
282+ err_setstr (CdError , "no disc in player" );
281283 else
282- err_setstr (IOError , "playtrack failed" );
284+ err_setstr (CdError , "playtrack failed" );
283285 return NULL ;
284286 }
285287
@@ -303,9 +305,9 @@ CD_playtrackabs(self, args)
303305 if (!CDplaytrackabs (self -> ob_cdplayer , track , min , sec , frame , play )) {
304306 if (CDgetstatus (self -> ob_cdplayer , & status ) &&
305307 status .state == CD_NODISC )
306- err_setstr (IOError , "no disc in player" );
308+ err_setstr (CdError , "no disc in player" );
307309 else
308- err_setstr (IOError , "playtrackabs failed" );
310+ err_setstr (CdError , "playtrackabs failed" );
309311 return NULL ;
310312 }
311313
@@ -333,7 +335,7 @@ CD_readda(self, args)
333335 n = CDreadda (self -> ob_cdplayer , (CDFRAME * ) getstringvalue (result ), numframes );
334336 if (n == -1 ) {
335337 DECREF (result );
336- err_errno (IOError );
338+ err_errno (CdError );
337339 return NULL ;
338340 }
339341 if (n < numframes )
@@ -358,7 +360,7 @@ CD_seek(self, args)
358360
359361 block = CDseek (self -> ob_cdplayer , min , sec , frame );
360362 if (block == -1 ) {
361- err_errno (IOError );
363+ err_errno (CdError );
362364 return NULL ;
363365 }
364366
@@ -380,7 +382,7 @@ CD_seektrack(self, args)
380382
381383 block = CDseektrack (self -> ob_cdplayer , track );
382384 if (block == -1 ) {
383- err_errno (IOError );
385+ err_errno (CdError );
384386 return NULL ;
385387 }
386388
@@ -402,9 +404,9 @@ CD_stop(self, args)
402404 if (!CDstop (self -> ob_cdplayer )) {
403405 if (CDgetstatus (self -> ob_cdplayer , & status ) &&
404406 status .state == CD_NODISC )
405- err_setstr (IOError , "no disc in player" );
407+ err_setstr (CdError , "no disc in player" );
406408 else
407- err_setstr (IOError , "stop failed" );
409+ err_setstr (CdError , "stop failed" );
408410 return NULL ;
409411 }
410412
@@ -427,9 +429,9 @@ CD_togglepause(self, args)
427429 if (!CDtogglepause (self -> ob_cdplayer )) {
428430 if (CDgetstatus (self -> ob_cdplayer , & status ) &&
429431 status .state == CD_NODISC )
430- err_setstr (IOError , "no disc in player" );
432+ err_setstr (CdError , "no disc in player" );
431433 else
432- err_setstr (IOError , "togglepause failed" );
434+ err_setstr (CdError , "togglepause failed" );
433435 return NULL ;
434436 }
435437
@@ -527,7 +529,7 @@ CD_open(self, args)
527529
528530 cdp = CDopen (dev , direction );
529531 if (cdp == NULL ) {
530- err_errno (IOError );
532+ err_errno (CdError );
531533 return NULL ;
532534 }
533535
@@ -655,7 +657,7 @@ CD_parseframe(self, args)
655657 return NULL ;
656658
657659 if (length % sizeof (CDFRAME ) != 0 ) {
658- err_setstr (RuntimeError , "bad length" );
660+ err_setstr (TypeError , "bad length" );
659661 return NULL ;
660662 }
661663
@@ -685,7 +687,7 @@ CD_removecallback(self, args)
685687 return NULL ;
686688
687689 if (type < 0 || type >= NCALLBACKS ) {
688- err_setstr (RuntimeError , "bad type" );
690+ err_setstr (TypeError , "bad type" );
689691 return NULL ;
690692 }
691693
@@ -732,7 +734,7 @@ CD_addcallback(self, args)
732734 return NULL ;
733735
734736 if (type < 0 || type >= NCALLBACKS ) {
735- err_setstr (RuntimeError , "bad type " );
737+ err_setstr (TypeError , "argument out of range " );
736738 return NULL ;
737739 }
738740
@@ -829,7 +831,7 @@ CD_createparser(self, args)
829831 return NULL ;
830832 cdp = CDcreateparser ();
831833 if (cdp == NULL ) {
832- err_setstr (IOError , "createparser failed" );
834+ err_setstr (CdError , "createparser failed" );
833835 return NULL ;
834836 }
835837
@@ -865,7 +867,7 @@ CD_timetoa(self, args)
865867 return NULL ;
866868
867869 if (length != sizeof (struct cdtimecode )) {
868- err_setstr (RuntimeError , "bad length" );
870+ err_setstr (TypeError , "bad length" );
869871 return NULL ;
870872 }
871873
@@ -885,5 +887,12 @@ static struct methodlist CD_methods[] = {
885887void
886888initcd ()
887889{
888- (void ) initmodule ("cd" , CD_methods );
890+ object * m , * d ;
891+
892+ m = initmodule ("cd" , CD_methods );
893+ d = getmoduledict (m );
894+
895+ CdError = newstringobject ("cd.error" );
896+ if (CdError == NULL || dictinsert (d , "error" , CdError ) != 0 )
897+ fatal ("can't define cd.error" );
889898}
0 commit comments