Mercurial > cpython-lru_cache-weakref
annotate Modules/cdmodule.c @ 4566:6403c94de50d legacy-trunk
Added safeguard against failure in __del__.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Wed, 27 Nov 1996 19:39:58 +0000 |
| parents | 65d2d8e67da3 |
| children | d36250aefb82 |
| rev | line source |
|---|---|
| 820 | 1 /********************************************************** |
|
2061
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
1746
diff
changeset
|
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, |
|
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
1746
diff
changeset
|
3 The Netherlands. |
| 820 | 4 |
| 5 All Rights Reserved | |
| 6 | |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
7 Permission to use, copy, modify, and distribute this software and its |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
8 documentation for any purpose and without fee is hereby granted, |
| 820 | 9 provided that the above copyright notice appear in all copies and that |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
10 both that copyright notice and this permission notice appear in |
| 820 | 11 supporting documentation, and that the names of Stichting Mathematisch |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
12 Centrum or CWI or Corporation for National Research Initiatives or |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
13 CNRI not be used in advertising or publicity pertaining to |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
14 distribution of the software without specific, written prior |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
15 permission. |
| 820 | 16 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
17 While CWI is the initial source for this software, a modified version |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
18 is made available by the Corporation for National Research Initiatives |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
19 (CNRI) at the Internet address ftp://ftp.python.org. |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
20 |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2603
diff
changeset
|
28 PERFORMANCE OF THIS SOFTWARE. |
| 820 | 29 |
| 30 ******************************************************************/ | |
| 31 | |
| 32 /* CD module -- interface to Mark Callow's and Roger Chickering's */ | |
| 33 /* CD Audio Library (CD). */ | |
| 34 | |
| 35 #include <sys/types.h> | |
| 36 #include <cdaudio.h> | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
37 /* #include <sigfpe.h> */ |
| 820 | 38 #include "allobjects.h" |
| 39 #include "import.h" | |
| 40 #include "modsupport.h" | |
| 41 #include "ceval.h" | |
| 42 | |
| 43 #define NCALLBACKS 8 | |
| 44 | |
| 45 typedef struct { | |
| 46 OB_HEAD | |
| 47 CDPLAYER *ob_cdplayer; | |
| 48 } cdplayerobject; | |
| 49 | |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
50 static object *CdError; /* exception cd.error */ |
|
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
51 |
| 820 | 52 static object * |
| 53 CD_allowremoval(self, args) | |
| 54 cdplayerobject *self; | |
| 55 object *args; | |
| 56 { | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
57 if (!newgetargs(args, "")) |
| 820 | 58 return NULL; |
| 59 | |
| 60 CDallowremoval(self->ob_cdplayer); | |
| 61 | |
| 62 INCREF(None); | |
| 63 return None; | |
| 64 } | |
| 65 | |
| 66 static object * | |
| 67 CD_preventremoval(self, args) | |
| 68 cdplayerobject *self; | |
| 69 object *args; | |
| 70 { | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
71 if (!newgetargs(args, "")) |
| 820 | 72 return NULL; |
| 73 | |
| 74 CDpreventremoval(self->ob_cdplayer); | |
| 75 | |
| 76 INCREF(None); | |
| 77 return None; | |
| 78 } | |
| 79 | |
| 80 static object * | |
| 81 CD_bestreadsize(self, args) | |
| 82 cdplayerobject *self; | |
| 83 object *args; | |
| 84 { | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
85 if (!newgetargs(args, "")) |
| 820 | 86 return NULL; |
| 87 | |
| 88 return newintobject((long) CDbestreadsize(self->ob_cdplayer)); | |
| 89 } | |
| 90 | |
| 91 static object * | |
| 92 CD_close(self, args) | |
| 93 cdplayerobject *self; | |
| 94 object *args; | |
| 95 { | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
96 if (!newgetargs(args, "")) |
| 820 | 97 return NULL; |
| 98 | |
| 99 if (!CDclose(self->ob_cdplayer)) { | |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
100 err_errno(CdError); /* XXX - ??? */ |
| 820 | 101 return NULL; |
| 102 } | |
| 103 self->ob_cdplayer = NULL; | |
| 104 | |
| 105 INCREF(None); | |
| 106 return None; | |
| 107 } | |
| 108 | |
| 109 static object * | |
| 110 CD_eject(self, args) | |
| 111 cdplayerobject *self; | |
| 112 object *args; | |
| 113 { | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
114 CDSTATUS status; |
|
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
115 |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
116 if (!newgetargs(args, "")) |
| 820 | 117 return NULL; |
| 118 | |
| 119 if (!CDeject(self->ob_cdplayer)) { | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
120 if (CDgetstatus(self->ob_cdplayer, &status) && |
|
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
121 status.state == CD_NODISC) |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
122 err_setstr(CdError, "no disc in player"); |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
123 else |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
124 err_setstr(CdError, "eject failed"); |
| 820 | 125 return NULL; |
| 126 } | |
| 127 | |
| 128 INCREF(None); | |
| 129 return None; | |
| 130 } | |
| 131 | |
| 132 static object * | |
| 133 CD_getstatus(self, args) | |
| 134 cdplayerobject *self; | |
| 135 object *args; | |
| 136 { | |
| 137 CDSTATUS status; | |
| 138 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
139 if (!newgetargs(args, "")) |
| 820 | 140 return NULL; |
| 141 | |
| 142 if (!CDgetstatus(self->ob_cdplayer, &status)) { | |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
143 err_errno(CdError); /* XXX - ??? */ |
| 820 | 144 return NULL; |
| 145 } | |
| 146 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
147 return mkvalue("(ii(iii)(iii)(iii)iiii)", status.state, |
|
830
ea5072de7427
Return more structured data in some cases
Guido van Rossum <guido@python.org>
parents:
820
diff
changeset
|
148 status.track, status.min, status.sec, status.frame, |
|
ea5072de7427
Return more structured data in some cases
Guido van Rossum <guido@python.org>
parents:
820
diff
changeset
|
149 status.abs_min, status.abs_sec, status.abs_frame, |
|
ea5072de7427
Return more structured data in some cases
Guido van Rossum <guido@python.org>
parents:
820
diff
changeset
|
150 status.total_min, status.total_sec, status.total_frame, |
|
ea5072de7427
Return more structured data in some cases
Guido van Rossum <guido@python.org>
parents:
820
diff
changeset
|
151 status.first, status.last, status.scsi_audio, |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
152 status.cur_block); |
| 820 | 153 } |
| 154 | |
| 155 static object * | |
| 156 CD_gettrackinfo(self, args) | |
| 157 cdplayerobject *self; | |
| 158 object *args; | |
| 159 { | |
| 160 int track; | |
| 161 CDTRACKINFO info; | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
162 CDSTATUS status; |
| 820 | 163 |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
164 if (!newgetargs(args, "i", &track)) |
| 820 | 165 return NULL; |
| 166 | |
| 167 if (!CDgettrackinfo(self->ob_cdplayer, track, &info)) { | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
168 if (CDgetstatus(self->ob_cdplayer, &status) && |
|
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
169 status.state == CD_NODISC) |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
170 err_setstr(CdError, "no disc in player"); |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
171 else |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
172 err_setstr(CdError, "gettrackinfo failed"); |
| 820 | 173 return NULL; |
| 174 } | |
| 175 | |
|
830
ea5072de7427
Return more structured data in some cases
Guido van Rossum <guido@python.org>
parents:
820
diff
changeset
|
176 return mkvalue("((iii)(iii))", |
| 820 | 177 info.start_min, info.start_sec, info.start_frame, |
| 178 info.total_min, info.total_sec, info.total_frame); | |
| 179 } | |
| 180 | |
| 181 static object * | |
| 182 CD_msftoblock(self, args) | |
| 183 cdplayerobject *self; | |
| 184 object *args; | |
| 185 { | |
| 186 int min, sec, frame; | |
| 187 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
188 if (!newgetargs(args, "iii", &min, &sec, &frame)) |
| 820 | 189 return NULL; |
| 190 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
191 return newintobject((long) CDmsftoblock(self->ob_cdplayer, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
192 min, sec, frame)); |
| 820 | 193 } |
| 194 | |
| 195 static object * | |
| 196 CD_play(self, args) | |
| 197 cdplayerobject *self; | |
| 198 object *args; | |
| 199 { | |
| 200 int start, play; | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
201 CDSTATUS status; |
| 820 | 202 |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
203 if (!newgetargs(args, "ii", &start, &play)) |
| 820 | 204 return NULL; |
| 205 | |
| 206 if (!CDplay(self->ob_cdplayer, start, play)) { | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
207 if (CDgetstatus(self->ob_cdplayer, &status) && |
|
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
208 status.state == CD_NODISC) |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
209 err_setstr(CdError, "no disc in player"); |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
210 else |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
211 err_setstr(CdError, "play failed"); |
| 820 | 212 return NULL; |
| 213 } | |
| 214 | |
| 215 INCREF(None); | |
| 216 return None; | |
| 217 } | |
| 218 | |
| 219 static object * | |
| 220 CD_playabs(self, args) | |
| 221 cdplayerobject *self; | |
| 222 object *args; | |
| 223 { | |
| 224 int min, sec, frame, play; | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
225 CDSTATUS status; |
| 820 | 226 |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
227 if (!newgetargs(args, "iiii", &min, &sec, &frame, &play)) |
| 820 | 228 return NULL; |
| 229 | |
| 230 if (!CDplayabs(self->ob_cdplayer, min, sec, frame, play)) { | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
231 if (CDgetstatus(self->ob_cdplayer, &status) && |
|
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
232 status.state == CD_NODISC) |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
233 err_setstr(CdError, "no disc in player"); |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
234 else |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
235 err_setstr(CdError, "playabs failed"); |
| 820 | 236 return NULL; |
| 237 } | |
| 238 | |
| 239 INCREF(None); | |
| 240 return None; | |
| 241 } | |
| 242 | |
| 243 static object * | |
| 244 CD_playtrack(self, args) | |
| 245 cdplayerobject *self; | |
| 246 object *args; | |
| 247 { | |
| 248 int start, play; | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
249 CDSTATUS status; |
| 820 | 250 |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
251 if (!newgetargs(args, "ii", &start, &play)) |
| 820 | 252 return NULL; |
| 253 | |
| 254 if (!CDplaytrack(self->ob_cdplayer, start, play)) { | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
255 if (CDgetstatus(self->ob_cdplayer, &status) && |
|
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
256 status.state == CD_NODISC) |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
257 err_setstr(CdError, "no disc in player"); |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
258 else |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
259 err_setstr(CdError, "playtrack failed"); |
| 820 | 260 return NULL; |
| 261 } | |
| 262 | |
| 263 INCREF(None); | |
| 264 return None; | |
| 265 } | |
| 266 | |
| 267 static object * | |
| 268 CD_playtrackabs(self, args) | |
| 269 cdplayerobject *self; | |
| 270 object *args; | |
| 271 { | |
| 272 int track, min, sec, frame, play; | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
273 CDSTATUS status; |
| 820 | 274 |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
275 if (!newgetargs(args, "iiiii", &track, &min, &sec, &frame, &play)) |
| 820 | 276 return NULL; |
| 277 | |
| 278 if (!CDplaytrackabs(self->ob_cdplayer, track, min, sec, frame, play)) { | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
279 if (CDgetstatus(self->ob_cdplayer, &status) && |
|
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
280 status.state == CD_NODISC) |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
281 err_setstr(CdError, "no disc in player"); |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
282 else |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
283 err_setstr(CdError, "playtrackabs failed"); |
| 820 | 284 return NULL; |
| 285 } | |
| 286 | |
| 287 INCREF(None); | |
| 288 return None; | |
| 289 } | |
| 290 | |
| 291 static object * | |
| 292 CD_readda(self, args) | |
| 293 cdplayerobject *self; | |
| 294 object *args; | |
| 295 { | |
| 296 int numframes, n; | |
| 297 object *result; | |
| 298 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
299 if (!newgetargs(args, "i", &numframes)) |
| 820 | 300 return NULL; |
| 301 | |
| 302 result = newsizedstringobject(NULL, numframes * sizeof(CDFRAME)); | |
| 303 if (result == NULL) | |
| 304 return NULL; | |
| 305 | |
| 306 n = CDreadda(self->ob_cdplayer, (CDFRAME *) getstringvalue(result), numframes); | |
| 307 if (n == -1) { | |
| 308 DECREF(result); | |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
309 err_errno(CdError); |
| 820 | 310 return NULL; |
| 311 } | |
| 312 if (n < numframes) | |
| 313 if (resizestring(&result, n * sizeof(CDFRAME))) | |
| 314 return NULL; | |
| 315 | |
| 316 return result; | |
| 317 } | |
| 318 | |
| 319 static object * | |
| 320 CD_seek(self, args) | |
| 321 cdplayerobject *self; | |
| 322 object *args; | |
| 323 { | |
| 324 int min, sec, frame; | |
| 325 long block; | |
| 326 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
327 if (!newgetargs(args, "iii", &min, &sec, &frame)) |
| 820 | 328 return NULL; |
| 329 | |
| 330 block = CDseek(self->ob_cdplayer, min, sec, frame); | |
| 331 if (block == -1) { | |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
332 err_errno(CdError); |
| 820 | 333 return NULL; |
| 334 } | |
| 335 | |
| 336 return newintobject(block); | |
| 337 } | |
| 338 | |
| 339 static object * | |
| 340 CD_seektrack(self, args) | |
| 341 cdplayerobject *self; | |
| 342 object *args; | |
| 343 { | |
| 344 int track; | |
| 345 long block; | |
| 346 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
347 if (!newgetargs(args, "i", &track)) |
| 820 | 348 return NULL; |
| 349 | |
| 350 block = CDseektrack(self->ob_cdplayer, track); | |
| 351 if (block == -1) { | |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
352 err_errno(CdError); |
| 820 | 353 return NULL; |
| 354 } | |
| 355 | |
| 356 return newintobject(block); | |
| 357 } | |
| 358 | |
| 359 static object * | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
360 CD_seekblock(self, args) |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
361 cdplayerobject *self; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
362 object *args; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
363 { |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
364 unsigned long block; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
365 |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
366 if (!newgetargs(args, "l", &block)) |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
367 return NULL; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
368 |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
369 block = CDseekblock(self->ob_cdplayer, block); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
370 if (block == (unsigned long) -1) { |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
371 err_errno(CdError); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
372 return NULL; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
373 } |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
374 |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
375 return newintobject(block); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
376 } |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
377 |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
378 static object * |
| 820 | 379 CD_stop(self, args) |
| 380 cdplayerobject *self; | |
| 381 object *args; | |
| 382 { | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
383 CDSTATUS status; |
|
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
384 |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
385 if (!newgetargs(args, "")) |
| 820 | 386 return NULL; |
| 387 | |
| 388 if (!CDstop(self->ob_cdplayer)) { | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
389 if (CDgetstatus(self->ob_cdplayer, &status) && |
|
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
390 status.state == CD_NODISC) |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
391 err_setstr(CdError, "no disc in player"); |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
392 else |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
393 err_setstr(CdError, "stop failed"); |
| 820 | 394 return NULL; |
| 395 } | |
| 396 | |
| 397 INCREF(None); | |
| 398 return None; | |
| 399 } | |
| 400 | |
| 401 static object * | |
| 402 CD_togglepause(self, args) | |
| 403 cdplayerobject *self; | |
| 404 object *args; | |
| 405 { | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
406 CDSTATUS status; |
|
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
407 |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
408 if (!newgetargs(args, "")) |
| 820 | 409 return NULL; |
| 410 | |
| 411 if (!CDtogglepause(self->ob_cdplayer)) { | |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
412 if (CDgetstatus(self->ob_cdplayer, &status) && |
|
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
413 status.state == CD_NODISC) |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
414 err_setstr(CdError, "no disc in player"); |
|
849
fe6a5f2640a2
Wanneer er geen disk in de speler zit falen sommige routines. De
Guido van Rossum <guido@python.org>
parents:
848
diff
changeset
|
415 else |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
416 err_setstr(CdError, "togglepause failed"); |
| 820 | 417 return NULL; |
| 418 } | |
| 419 | |
| 420 INCREF(None); | |
| 421 return None; | |
| 422 } | |
| 423 | |
| 424 static struct methodlist cdplayer_methods[] = { | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
425 {"allowremoval", (method)CD_allowremoval, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
426 {"bestreadsize", (method)CD_bestreadsize, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
427 {"close", (method)CD_close, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
428 {"eject", (method)CD_eject, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
429 {"getstatus", (method)CD_getstatus, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
430 {"gettrackinfo", (method)CD_gettrackinfo, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
431 {"msftoblock", (method)CD_msftoblock, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
432 {"play", (method)CD_play, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
433 {"playabs", (method)CD_playabs, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
434 {"playtrack", (method)CD_playtrack, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
435 {"playtrackabs", (method)CD_playtrackabs, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
436 {"preventremoval", (method)CD_preventremoval, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
437 {"readda", (method)CD_readda, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
438 {"seek", (method)CD_seek, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
439 {"seekblock", (method)CD_seekblock, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
440 {"seektrack", (method)CD_seektrack, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
441 {"stop", (method)CD_stop, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
442 {"togglepause", (method)CD_togglepause, 1}, |
| 820 | 443 {NULL, NULL} /* sentinel */ |
| 444 }; | |
| 445 | |
| 446 static void | |
| 447 cdplayer_dealloc(self) | |
| 448 cdplayerobject *self; | |
| 449 { | |
| 450 if (self->ob_cdplayer != NULL) | |
| 451 CDclose(self->ob_cdplayer); | |
| 452 DEL(self); | |
| 453 } | |
| 454 | |
| 455 static object * | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
456 cdplayer_getattr(self, name) |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
457 cdplayerobject *self; |
| 820 | 458 char *name; |
| 459 { | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
460 if (self->ob_cdplayer == NULL) { |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
461 err_setstr(RuntimeError, "no player active"); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
462 return NULL; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
463 } |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
464 return findmethod(cdplayer_methods, (object *)self, name); |
| 820 | 465 } |
| 466 | |
| 467 typeobject CdPlayertype = { | |
| 468 OB_HEAD_INIT(&Typetype) | |
| 469 0, /*ob_size*/ | |
| 470 "cdplayer", /*tp_name*/ | |
| 471 sizeof(cdplayerobject), /*tp_size*/ | |
| 472 0, /*tp_itemsize*/ | |
| 473 /* methods */ | |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
474 (destructor)cdplayer_dealloc, /*tp_dealloc*/ |
| 820 | 475 0, /*tp_print*/ |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
476 (getattrfunc)cdplayer_getattr, /*tp_getattr*/ |
| 820 | 477 0, /*tp_setattr*/ |
| 478 0, /*tp_compare*/ | |
| 479 0, /*tp_repr*/ | |
| 480 }; | |
| 481 | |
| 482 static object * | |
| 483 newcdplayerobject(cdp) | |
| 484 CDPLAYER *cdp; | |
| 485 { | |
| 486 cdplayerobject *p; | |
| 487 | |
| 488 p = NEWOBJ(cdplayerobject, &CdPlayertype); | |
| 489 if (p == NULL) | |
| 490 return NULL; | |
| 491 p->ob_cdplayer = cdp; | |
| 492 return (object *) p; | |
| 493 } | |
| 494 | |
| 495 static object * | |
| 496 CD_open(self, args) | |
| 497 object *self, *args; | |
| 498 { | |
| 499 char *dev, *direction; | |
| 500 CDPLAYER *cdp; | |
| 501 | |
| 502 /* | |
| 503 * Variable number of args. | |
| 504 * First defaults to "None", second defaults to "r". | |
| 505 */ | |
| 506 dev = NULL; | |
| 507 direction = "r"; | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
508 if (!newgetargs(args, "|zs", &dev, &direction)) |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
509 return NULL; |
| 820 | 510 |
| 511 cdp = CDopen(dev, direction); | |
| 512 if (cdp == NULL) { | |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
513 err_errno(CdError); |
| 820 | 514 return NULL; |
| 515 } | |
| 516 | |
| 517 return newcdplayerobject(cdp); | |
| 518 } | |
| 519 | |
| 520 typedef struct { | |
| 521 OB_HEAD | |
| 522 CDPARSER *ob_cdparser; | |
| 523 struct { | |
| 524 object *ob_cdcallback; | |
| 525 object *ob_cdcallbackarg; | |
| 526 } ob_cdcallbacks[NCALLBACKS]; | |
| 527 } cdparserobject; | |
| 528 | |
| 529 static void | |
| 530 CD_callback(arg, type, data) | |
| 531 void *arg; | |
| 532 CDDATATYPES type; | |
| 533 void *data; | |
| 534 { | |
| 535 object *result, *args, *v; | |
| 536 char *p; | |
| 537 int i; | |
| 538 cdparserobject *self; | |
| 539 | |
| 540 self = (cdparserobject *) arg; | |
| 541 args = newtupleobject(3); | |
| 542 if (args == NULL) | |
| 543 return; | |
| 544 INCREF(self->ob_cdcallbacks[type].ob_cdcallbackarg); | |
| 545 settupleitem(args, 0, self->ob_cdcallbacks[type].ob_cdcallbackarg); | |
| 546 settupleitem(args, 1, newintobject((long) type)); | |
| 547 switch (type) { | |
| 548 case cd_audio: | |
| 549 v = newsizedstringobject(data, CDDA_DATASIZE); | |
| 550 break; | |
| 551 case cd_pnum: | |
| 552 case cd_index: | |
| 553 v = newintobject(((CDPROGNUM *) data)->value); | |
| 554 break; | |
| 555 case cd_ptime: | |
| 556 case cd_atime: | |
|
830
ea5072de7427
Return more structured data in some cases
Guido van Rossum <guido@python.org>
parents:
820
diff
changeset
|
557 #define ptr ((struct cdtimecode *) data) |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
558 v = mkvalue("(iii)", |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
559 ptr->mhi * 10 + ptr->mlo, |
|
830
ea5072de7427
Return more structured data in some cases
Guido van Rossum <guido@python.org>
parents:
820
diff
changeset
|
560 ptr->shi * 10 + ptr->slo, |
|
ea5072de7427
Return more structured data in some cases
Guido van Rossum <guido@python.org>
parents:
820
diff
changeset
|
561 ptr->fhi * 10 + ptr->flo); |
|
ea5072de7427
Return more structured data in some cases
Guido van Rossum <guido@python.org>
parents:
820
diff
changeset
|
562 #undef ptr |
| 820 | 563 break; |
| 564 case cd_catalog: | |
| 565 v = newsizedstringobject(NULL, 13); | |
| 566 p = getstringvalue(v); | |
| 567 for (i = 0; i < 13; i++) | |
| 568 *p++ = ((char *) data)[i] + '0'; | |
| 569 break; | |
| 570 case cd_ident: | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
571 #define ptr ((struct cdident *) data) |
| 820 | 572 v = newsizedstringobject(NULL, 12); |
| 573 p = getstringvalue(v); | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
574 CDsbtoa(p, ptr->country, 2); |
| 820 | 575 p += 2; |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
576 CDsbtoa(p, ptr->owner, 3); |
| 820 | 577 p += 3; |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
578 *p++ = ptr->year[0] + '0'; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
579 *p++ = ptr->year[1] + '0'; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
580 *p++ = ptr->serial[0] + '0'; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
581 *p++ = ptr->serial[1] + '0'; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
582 *p++ = ptr->serial[2] + '0'; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
583 *p++ = ptr->serial[3] + '0'; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
584 *p++ = ptr->serial[4] + '0'; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
585 #undef ptr |
| 820 | 586 break; |
| 587 case cd_control: | |
| 588 v = newintobject((long) *((unchar *) data)); | |
| 589 break; | |
| 590 } | |
| 591 settupleitem(args, 2, v); | |
| 592 if (err_occurred()) { | |
| 593 DECREF(args); | |
| 594 return; | |
| 595 } | |
| 596 | |
| 597 result = call_object(self->ob_cdcallbacks[type].ob_cdcallback, args); | |
| 598 DECREF(args); | |
| 599 XDECREF(result); | |
| 600 } | |
| 601 | |
| 602 static object * | |
| 603 CD_deleteparser(self, args) | |
| 604 cdparserobject *self; | |
| 605 object *args; | |
| 606 { | |
| 607 int i; | |
| 608 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
609 if (!newgetargs(args, "")) |
| 820 | 610 return NULL; |
| 611 | |
| 612 CDdeleteparser(self->ob_cdparser); | |
| 613 self->ob_cdparser = NULL; | |
| 614 | |
| 615 /* no sense in keeping the callbacks, so remove them */ | |
| 616 for (i = 0; i < NCALLBACKS; i++) { | |
| 617 XDECREF(self->ob_cdcallbacks[i].ob_cdcallback); | |
| 618 self->ob_cdcallbacks[i].ob_cdcallback = NULL; | |
| 619 XDECREF(self->ob_cdcallbacks[i].ob_cdcallbackarg); | |
| 620 self->ob_cdcallbacks[i].ob_cdcallbackarg = NULL; | |
| 621 } | |
| 622 | |
| 623 INCREF(None); | |
| 624 return None; | |
| 625 } | |
| 626 | |
| 627 static object * | |
| 628 CD_parseframe(self, args) | |
| 629 cdparserobject *self; | |
| 630 object *args; | |
| 631 { | |
| 632 char *cdfp; | |
| 633 int length; | |
| 634 CDFRAME *p; | |
| 635 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
636 if (!newgetargs(args, "s#", &cdfp, &length)) |
| 820 | 637 return NULL; |
| 638 | |
| 639 if (length % sizeof(CDFRAME) != 0) { | |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
640 err_setstr(TypeError, "bad length"); |
| 820 | 641 return NULL; |
| 642 } | |
| 643 | |
| 644 p = (CDFRAME *) cdfp; | |
| 645 while (length > 0) { | |
| 646 CDparseframe(self->ob_cdparser, p); | |
| 647 length -= sizeof(CDFRAME); | |
| 648 p++; | |
| 649 if (err_occurred()) | |
| 650 return NULL; | |
| 651 } | |
| 652 | |
| 653 INCREF(None); | |
| 654 return None; | |
| 655 } | |
| 656 | |
| 657 static object * | |
| 658 CD_removecallback(self, args) | |
| 659 cdparserobject *self; | |
| 660 object *args; | |
| 661 { | |
| 662 int type; | |
| 663 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
664 if (!newgetargs(args, "i", &type)) |
| 820 | 665 return NULL; |
| 666 | |
|
921
8078834996ec
cdmodule.c: 2 minor changes by Sjoerd.
Guido van Rossum <guido@python.org>
parents:
849
diff
changeset
|
667 if (type < 0 || type >= NCALLBACKS) { |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
668 err_setstr(TypeError, "bad type"); |
|
921
8078834996ec
cdmodule.c: 2 minor changes by Sjoerd.
Guido van Rossum <guido@python.org>
parents:
849
diff
changeset
|
669 return NULL; |
|
8078834996ec
cdmodule.c: 2 minor changes by Sjoerd.
Guido van Rossum <guido@python.org>
parents:
849
diff
changeset
|
670 } |
|
8078834996ec
cdmodule.c: 2 minor changes by Sjoerd.
Guido van Rossum <guido@python.org>
parents:
849
diff
changeset
|
671 |
| 820 | 672 CDremovecallback(self->ob_cdparser, (CDDATATYPES) type); |
| 673 | |
| 674 XDECREF(self->ob_cdcallbacks[type].ob_cdcallback); | |
| 675 self->ob_cdcallbacks[type].ob_cdcallback = NULL; | |
| 676 | |
| 677 XDECREF(self->ob_cdcallbacks[type].ob_cdcallbackarg); | |
| 678 self->ob_cdcallbacks[type].ob_cdcallbackarg = NULL; | |
| 679 | |
| 680 INCREF(None); | |
| 681 return None; | |
| 682 } | |
| 683 | |
| 684 static object * | |
| 685 CD_resetparser(self, args) | |
| 686 cdparserobject *self; | |
| 687 object *args; | |
| 688 { | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
689 if (!newgetargs(args, "")) |
| 820 | 690 return NULL; |
| 691 | |
| 692 CDresetparser(self->ob_cdparser); | |
| 693 | |
| 694 INCREF(None); | |
| 695 return None; | |
| 696 } | |
| 697 | |
| 698 static object * | |
|
921
8078834996ec
cdmodule.c: 2 minor changes by Sjoerd.
Guido van Rossum <guido@python.org>
parents:
849
diff
changeset
|
699 CD_addcallback(self, args) |
| 820 | 700 cdparserobject *self; |
| 701 object *args; | |
| 702 { | |
| 703 int type; | |
|
1313
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
704 object *func, *funcarg; |
| 820 | 705 |
| 706 /* XXX - more work here */ | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
707 if (!newgetargs(args, "iOO", &type, &func, &funcarg)) |
| 820 | 708 return NULL; |
| 709 | |
| 710 if (type < 0 || type >= NCALLBACKS) { | |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
711 err_setstr(TypeError, "argument out of range"); |
| 820 | 712 return NULL; |
| 713 } | |
| 714 | |
|
1071
2291da05f178
Changed an ifdef from IRIX_405 to CDsetcallback.
Sjoerd Mullender <sjoerd@acm.org>
parents:
1063
diff
changeset
|
715 #ifdef CDsetcallback |
|
921
8078834996ec
cdmodule.c: 2 minor changes by Sjoerd.
Guido van Rossum <guido@python.org>
parents:
849
diff
changeset
|
716 CDaddcallback(self->ob_cdparser, (CDDATATYPES) type, CD_callback, (void *) self); |
|
8078834996ec
cdmodule.c: 2 minor changes by Sjoerd.
Guido van Rossum <guido@python.org>
parents:
849
diff
changeset
|
717 #else |
| 820 | 718 CDsetcallback(self->ob_cdparser, (CDDATATYPES) type, CD_callback, (void *) self); |
|
921
8078834996ec
cdmodule.c: 2 minor changes by Sjoerd.
Guido van Rossum <guido@python.org>
parents:
849
diff
changeset
|
719 #endif |
| 820 | 720 XDECREF(self->ob_cdcallbacks[type].ob_cdcallback); |
|
1313
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
721 INCREF(func); |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
722 self->ob_cdcallbacks[type].ob_cdcallback = func; |
| 820 | 723 XDECREF(self->ob_cdcallbacks[type].ob_cdcallbackarg); |
|
1313
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
724 INCREF(funcarg); |
|
6ee380349c84
* Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents:
1257
diff
changeset
|
725 self->ob_cdcallbacks[type].ob_cdcallbackarg = funcarg; |
| 820 | 726 |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
727 /* |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
728 if (type == cd_audio) { |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
729 sigfpe_[_UNDERFL].repls = _ZERO; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
730 handle_sigfpes(_ON, _EN_UNDERFL, NULL, _ABORT_ON_ERROR, NULL); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
731 } |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
732 */ |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
733 |
| 820 | 734 INCREF(None); |
| 735 return None; | |
| 736 } | |
| 737 | |
| 738 static struct methodlist cdparser_methods[] = { | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
739 {"addcallback", (method)CD_addcallback, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
740 {"deleteparser", (method)CD_deleteparser, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
741 {"parseframe", (method)CD_parseframe, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
742 {"removecallback", (method)CD_removecallback, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
743 {"resetparser", (method)CD_resetparser, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
744 {"setcallback", (method)CD_addcallback, 1}, /* backward compatibility */ |
| 820 | 745 {NULL, NULL} /* sentinel */ |
| 746 }; | |
| 747 | |
| 748 static void | |
| 749 cdparser_dealloc(self) | |
| 750 cdparserobject *self; | |
| 751 { | |
| 752 int i; | |
| 753 | |
| 754 for (i = 0; i < NCALLBACKS; i++) { | |
| 755 XDECREF(self->ob_cdcallbacks[i].ob_cdcallback); | |
| 756 self->ob_cdcallbacks[i].ob_cdcallback = NULL; | |
| 757 XDECREF(self->ob_cdcallbacks[i].ob_cdcallbackarg); | |
| 758 self->ob_cdcallbacks[i].ob_cdcallbackarg = NULL; | |
| 759 } | |
| 760 CDdeleteparser(self->ob_cdparser); | |
| 761 DEL(self); | |
| 762 } | |
| 763 | |
| 764 static object * | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
765 cdparser_getattr(self, name) |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
766 cdparserobject *self; |
| 820 | 767 char *name; |
| 768 { | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
769 if (self->ob_cdparser == NULL) { |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
770 err_setstr(RuntimeError, "no parser active"); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
771 return NULL; |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
772 } |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
773 |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
774 return findmethod(cdparser_methods, (object *)self, name); |
| 820 | 775 } |
| 776 | |
| 777 typeobject CdParsertype = { | |
| 778 OB_HEAD_INIT(&Typetype) | |
| 779 0, /*ob_size*/ | |
| 780 "cdparser", /*tp_name*/ | |
| 781 sizeof(cdparserobject), /*tp_size*/ | |
| 782 0, /*tp_itemsize*/ | |
| 783 /* methods */ | |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
784 (destructor)cdparser_dealloc, /*tp_dealloc*/ |
| 820 | 785 0, /*tp_print*/ |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1313
diff
changeset
|
786 (getattrfunc)cdparser_getattr, /*tp_getattr*/ |
| 820 | 787 0, /*tp_setattr*/ |
| 788 0, /*tp_compare*/ | |
| 789 0, /*tp_repr*/ | |
| 790 }; | |
| 791 | |
| 792 static object * | |
| 793 newcdparserobject(cdp) | |
| 794 CDPARSER *cdp; | |
| 795 { | |
| 796 cdparserobject *p; | |
| 797 int i; | |
| 798 | |
| 799 p = NEWOBJ(cdparserobject, &CdParsertype); | |
| 800 if (p == NULL) | |
| 801 return NULL; | |
| 802 p->ob_cdparser = cdp; | |
| 803 for (i = 0; i < NCALLBACKS; i++) { | |
| 804 p->ob_cdcallbacks[i].ob_cdcallback = NULL; | |
| 805 p->ob_cdcallbacks[i].ob_cdcallbackarg = NULL; | |
| 806 } | |
| 807 return (object *) p; | |
| 808 } | |
| 809 | |
| 810 static object * | |
| 811 CD_createparser(self, args) | |
| 812 object *self, *args; | |
| 813 { | |
| 814 CDPARSER *cdp; | |
| 815 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
816 if (!newgetargs(args, "")) |
| 820 | 817 return NULL; |
| 818 cdp = CDcreateparser(); | |
| 819 if (cdp == NULL) { | |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
820 err_setstr(CdError, "createparser failed"); |
| 820 | 821 return NULL; |
| 822 } | |
| 823 | |
| 824 return newcdparserobject(cdp); | |
| 825 } | |
| 826 | |
| 827 static object * | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
828 CD_msftoframe(self, args) |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
829 object *self, *args; |
| 820 | 830 { |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
831 int min, sec, frame; |
| 820 | 832 |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
833 if (!newgetargs(args, "iii", &min, &sec, &frame)) |
| 820 | 834 return NULL; |
| 835 | |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
836 return newintobject((long) CDmsftoframe(min, sec, frame)); |
| 820 | 837 } |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
838 |
| 820 | 839 static struct methodlist CD_methods[] = { |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
840 {"open", (method)CD_open, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
841 {"createparser", (method)CD_createparser, 1}, |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
842 {"msftoframe", (method)CD_msftoframe, 1}, |
| 820 | 843 {NULL, NULL} /* Sentinel */ |
| 844 }; | |
| 845 | |
| 846 void | |
| 847 initcd() | |
| 848 { | |
|
1063
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
849 object *m, *d; |
|
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
850 |
|
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
851 m = initmodule("cd", CD_methods); |
|
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
852 d = getmoduledict(m); |
|
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
853 |
|
aaa3bccb143a
Defined exception cd.error which is used for errors other than
Sjoerd Mullender <sjoerd@acm.org>
parents:
926
diff
changeset
|
854 CdError = newstringobject("cd.error"); |
|
2603
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
855 dictinsert(d, "error", CdError); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
856 |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
857 /* Identifiers for the different types of callbacks from the parser */ |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
858 dictinsert(d, "audio", newintobject((long) cd_audio)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
859 dictinsert(d, "pnum", newintobject((long) cd_pnum)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
860 dictinsert(d, "index", newintobject((long) cd_index)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
861 dictinsert(d, "ptime", newintobject((long) cd_ptime)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
862 dictinsert(d, "atime", newintobject((long) cd_atime)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
863 dictinsert(d, "catalog", newintobject((long) cd_catalog)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
864 dictinsert(d, "ident", newintobject((long) cd_ident)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
865 dictinsert(d, "control", newintobject((long) cd_control)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
866 |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
867 /* Block size information for digital audio data */ |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
868 dictinsert(d, "DATASIZE", newintobject((long) CDDA_DATASIZE)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
869 dictinsert(d, "BLOCKSIZE", newintobject((long) CDDA_BLOCKSIZE)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
870 |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
871 /* Possible states for the cd player */ |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
872 dictinsert(d, "ERROR", newintobject((long) CD_ERROR)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
873 dictinsert(d, "NODISC", newintobject((long) CD_NODISC)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
874 dictinsert(d, "READY", newintobject((long) CD_READY)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
875 dictinsert(d, "PLAYING", newintobject((long) CD_PLAYING)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
876 dictinsert(d, "PAUSED", newintobject((long) CD_PAUSED)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
877 dictinsert(d, "STILL", newintobject((long) CD_STILL)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
878 #ifdef CD_CDROM /* only newer versions of the library */ |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
879 dictinsert(d, "CDROM", newintobject((long) CD_CDROM)); |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
880 #endif |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
881 |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
882 if (err_occurred()) |
|
4084ecf276cf
Use newgetargs instead of getargs.
Sjoerd Mullender <sjoerd@acm.org>
parents:
2061
diff
changeset
|
883 fatal("can't initialize module cd"); |
| 820 | 884 } |
