ยปCore Development>Code coverage>Lib/plat-irix6/readcd.py

Python code coverage for Lib/plat-irix6/readcd.py

#countcontent
1n/a# Class interface to the CD module.
2n/afrom warnings import warnpy3k
3n/awarnpy3k("the readcd module has been removed in Python 3.0", stacklevel=2)
4n/adel warnpy3k
5n/a
6n/aimport cd, CD
7n/a
8n/aclass Error(Exception):
9n/a pass
10n/aclass _Stop(Exception):
11n/a pass
12n/a
13n/adef _doatime(self, cb_type, data):
14n/a if ((data[0] * 60) + data[1]) * 75 + data[2] > self.end:
15n/a## print 'done with list entry', repr(self.listindex)
16n/a raise _Stop
17n/a func, arg = self.callbacks[cb_type]
18n/a if func:
19n/a func(arg, cb_type, data)
20n/a
21n/adef _dopnum(self, cb_type, data):
22n/a if data > self.end:
23n/a## print 'done with list entry', repr(self.listindex)
24n/a raise _Stop
25n/a func, arg = self.callbacks[cb_type]
26n/a if func:
27n/a func(arg, cb_type, data)
28n/a
29n/aclass Readcd:
30n/a def __init__(self, *arg):
31n/a if len(arg) == 0:
32n/a self.player = cd.open()
33n/a elif len(arg) == 1:
34n/a self.player = cd.open(arg[0])
35n/a elif len(arg) == 2:
36n/a self.player = cd.open(arg[0], arg[1])
37n/a else:
38n/a raise Error, 'bad __init__ call'
39n/a self.list = []
40n/a self.callbacks = [(None, None)] * 8
41n/a self.parser = cd.createparser()
42n/a self.playing = 0
43n/a self.end = 0
44n/a self.status = None
45n/a self.trackinfo = None
46n/a
47n/a def eject(self):
48n/a self.player.eject()
49n/a self.list = []
50n/a self.end = 0
51n/a self.listindex = 0
52n/a self.status = None
53n/a self.trackinfo = None
54n/a if self.playing:
55n/a## print 'stop playing from eject'
56n/a raise _Stop
57n/a
58n/a def pmsf2msf(self, track, min, sec, frame):
59n/a if not self.status:
60n/a self.cachestatus()
61n/a if track < self.status[5] or track > self.status[6]:
62n/a raise Error, 'track number out of range'
63n/a if not self.trackinfo:
64n/a self.cacheinfo()
65n/a start, total = self.trackinfo[track]
66n/a start = ((start[0] * 60) + start[1]) * 75 + start[2]
67n/a total = ((total[0] * 60) + total[1]) * 75 + total[2]
68n/a block = ((min * 60) + sec) * 75 + frame
69n/a if block > total:
70n/a raise Error, 'out of range'
71n/a block = start + block
72n/a min, block = divmod(block, 75*60)
73n/a sec, frame = divmod(block, 75)
74n/a return min, sec, frame
75n/a
76n/a def reset(self):
77n/a self.list = []
78n/a
79n/a def appendtrack(self, track):
80n/a self.appendstretch(track, track)
81n/a
82n/a def appendstretch(self, start, end):
83n/a if not self.status:
84n/a self.cachestatus()
85n/a if not start:
86n/a start = 1
87n/a if not end:
88n/a end = self.status[6]
89n/a if type(end) == type(0):
90n/a if end < self.status[5] or end > self.status[6]:
91n/a raise Error, 'range error'
92n/a else:
93n/a l = len(end)
94n/a if l == 4:
95n/a prog, min, sec, frame = end
96n/a if prog < self.status[5] or prog > self.status[6]:
97n/a raise Error, 'range error'
98n/a end = self.pmsf2msf(prog, min, sec, frame)
99n/a elif l != 3:
100n/a raise Error, 'syntax error'
101n/a if type(start) == type(0):
102n/a if start < self.status[5] or start > self.status[6]:
103n/a raise Error, 'range error'
104n/a if len(self.list) > 0:
105n/a s, e = self.list[-1]
106n/a if type(e) == type(0):
107n/a if start == e+1:
108n/a start = s
109n/a del self.list[-1]
110n/a else:
111n/a l = len(start)
112n/a if l == 4:
113n/a prog, min, sec, frame = start
114n/a if prog < self.status[5] or prog > self.status[6]:
115n/a raise Error, 'range error'
116n/a start = self.pmsf2msf(prog, min, sec, frame)
117n/a elif l != 3:
118n/a raise Error, 'syntax error'
119n/a self.list.append((start, end))
120n/a
121n/a def settracks(self, list):
122n/a self.list = []
123n/a for track in list:
124n/a self.appendtrack(track)
125n/a
126n/a def setcallback(self, cb_type, func, arg):
127n/a if cb_type < 0 or cb_type >= 8:
128n/a raise Error, 'type out of range'
129n/a self.callbacks[cb_type] = (func, arg)
130n/a if self.playing:
131n/a start, end = self.list[self.listindex]
132n/a if type(end) == type(0):
133n/a if cb_type != CD.PNUM:
134n/a self.parser.setcallback(cb_type, func, arg)
135n/a else:
136n/a if cb_type != CD.ATIME:
137n/a self.parser.setcallback(cb_type, func, arg)
138n/a
139n/a def removecallback(self, cb_type):
140n/a if cb_type < 0 or cb_type >= 8:
141n/a raise Error, 'type out of range'
142n/a self.callbacks[cb_type] = (None, None)
143n/a if self.playing:
144n/a start, end = self.list[self.listindex]
145n/a if type(end) == type(0):
146n/a if cb_type != CD.PNUM:
147n/a self.parser.removecallback(cb_type)
148n/a else:
149n/a if cb_type != CD.ATIME:
150n/a self.parser.removecallback(cb_type)
151n/a
152n/a def gettrackinfo(self, *arg):
153n/a if not self.status:
154n/a self.cachestatus()
155n/a if not self.trackinfo:
156n/a self.cacheinfo()
157n/a if len(arg) == 0:
158n/a return self.trackinfo[self.status[5]:self.status[6]+1]
159n/a result = []
160n/a for i in arg:
161n/a if i < self.status[5] or i > self.status[6]:
162n/a raise Error, 'range error'
163n/a result.append(self.trackinfo[i])
164n/a return result
165n/a
166n/a def cacheinfo(self):
167n/a if not self.status:
168n/a self.cachestatus()
169n/a self.trackinfo = []
170n/a for i in range(self.status[5]):
171n/a self.trackinfo.append(None)
172n/a for i in range(self.status[5], self.status[6]+1):
173n/a self.trackinfo.append(self.player.gettrackinfo(i))
174n/a
175n/a def cachestatus(self):
176n/a self.status = self.player.getstatus()
177n/a if self.status[0] == CD.NODISC:
178n/a self.status = None
179n/a raise Error, 'no disc in player'
180n/a
181n/a def getstatus(self):
182n/a return self.player.getstatus()
183n/a
184n/a def play(self):
185n/a if not self.status:
186n/a self.cachestatus()
187n/a size = self.player.bestreadsize()
188n/a self.listindex = 0
189n/a self.playing = 0
190n/a for i in range(8):
191n/a func, arg = self.callbacks[i]
192n/a if func:
193n/a self.parser.setcallback(i, func, arg)
194n/a else:
195n/a self.parser.removecallback(i)
196n/a if len(self.list) == 0:
197n/a for i in range(self.status[5], self.status[6]+1):
198n/a self.appendtrack(i)
199n/a try:
200n/a while 1:
201n/a if not self.playing:
202n/a if self.listindex >= len(self.list):
203n/a return
204n/a start, end = self.list[self.listindex]
205n/a if type(start) == type(0):
206n/a dummy = self.player.seektrack(
207n/a start)
208n/a else:
209n/a min, sec, frame = start
210n/a dummy = self.player.seek(
211n/a min, sec, frame)
212n/a if type(end) == type(0):
213n/a self.parser.setcallback(
214n/a CD.PNUM, _dopnum, self)
215n/a self.end = end
216n/a func, arg = \
217n/a self.callbacks[CD.ATIME]
218n/a if func:
219n/a self.parser.setcallback(CD.ATIME, func, arg)
220n/a else:
221n/a self.parser.removecallback(CD.ATIME)
222n/a else:
223n/a min, sec, frame = end
224n/a self.parser.setcallback(
225n/a CD.ATIME, _doatime,
226n/a self)
227n/a self.end = (min * 60 + sec) * \
228n/a 75 + frame
229n/a func, arg = \
230n/a self.callbacks[CD.PNUM]
231n/a if func:
232n/a self.parser.setcallback(CD.PNUM, func, arg)
233n/a else:
234n/a self.parser.removecallback(CD.PNUM)
235n/a self.playing = 1
236n/a data = self.player.readda(size)
237n/a if data == '':
238n/a self.playing = 0
239n/a self.listindex = self.listindex + 1
240n/a continue
241n/a try:
242n/a self.parser.parseframe(data)
243n/a except _Stop:
244n/a self.playing = 0
245n/a self.listindex = self.listindex + 1
246n/a finally:
247n/a self.playing = 0