xref: /plan9/acme/bin/source/acd/toc.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*9a747e4fSDavid du Colombier #include "acd.h"
2*9a747e4fSDavid du Colombier 
3*9a747e4fSDavid du Colombier Toc thetoc;
4*9a747e4fSDavid du Colombier 
5*9a747e4fSDavid du Colombier void
tocthread(void * v)6*9a747e4fSDavid du Colombier tocthread(void *v)
7*9a747e4fSDavid du Colombier {
8*9a747e4fSDavid du Colombier 	Drive *d;
9*9a747e4fSDavid du Colombier 
10*9a747e4fSDavid du Colombier 	threadsetname("tocthread");
11*9a747e4fSDavid du Colombier 	d = v;
12*9a747e4fSDavid du Colombier 	DPRINT(2, "recv ctocdisp?...");
13*9a747e4fSDavid du Colombier 	while(recv(d->ctocdisp, &thetoc) == 1) {
14*9a747e4fSDavid du Colombier 		DPRINT(2, "recv ctocdisp!...");
15*9a747e4fSDavid du Colombier 		drawtoc(d->w, &thetoc);
16*9a747e4fSDavid du Colombier 		DPRINT(2, "send dbreq...\n");
17*9a747e4fSDavid du Colombier 		send(d->ctocdbreq, &thetoc);
18*9a747e4fSDavid du Colombier 	}
19*9a747e4fSDavid du Colombier }
20*9a747e4fSDavid du Colombier 
21*9a747e4fSDavid du Colombier void
freetoc(Toc * t)22*9a747e4fSDavid du Colombier freetoc(Toc *t)
23*9a747e4fSDavid du Colombier {
24*9a747e4fSDavid du Colombier 	int i;
25*9a747e4fSDavid du Colombier 
26*9a747e4fSDavid du Colombier 	free(t->title);
27*9a747e4fSDavid du Colombier 	for(i=0; i<t->ntrack; i++)
28*9a747e4fSDavid du Colombier 		free(t->track[i].title);
29*9a747e4fSDavid du Colombier }
30*9a747e4fSDavid du Colombier 
31*9a747e4fSDavid du Colombier void
cddbthread(void * v)32*9a747e4fSDavid du Colombier cddbthread(void *v)
33*9a747e4fSDavid du Colombier {
34*9a747e4fSDavid du Colombier 	Drive *d;
35*9a747e4fSDavid du Colombier 	Toc t;
36*9a747e4fSDavid du Colombier 
37*9a747e4fSDavid du Colombier 	threadsetname("cddbthread");
38*9a747e4fSDavid du Colombier 	d = v;
39*9a747e4fSDavid du Colombier 	while(recv(d->ctocdbreply, &t) == 1) {
40*9a747e4fSDavid du Colombier 		if(thetoc.nchange == t.nchange) {
41*9a747e4fSDavid du Colombier 			freetoc(&thetoc);
42*9a747e4fSDavid du Colombier 			thetoc = t;
43*9a747e4fSDavid du Colombier 			redrawtoc(d->w, &thetoc);
44*9a747e4fSDavid du Colombier 		}
45*9a747e4fSDavid du Colombier 	}
46*9a747e4fSDavid du Colombier }
47*9a747e4fSDavid du Colombier 
48*9a747e4fSDavid du Colombier void
cdstatusthread(void * v)49*9a747e4fSDavid du Colombier cdstatusthread(void *v)
50*9a747e4fSDavid du Colombier {
51*9a747e4fSDavid du Colombier 	Drive *d;
52*9a747e4fSDavid du Colombier 	Cdstatus s;
53*9a747e4fSDavid du Colombier 
54*9a747e4fSDavid du Colombier 	d = v;
55*9a747e4fSDavid du Colombier 
56*9a747e4fSDavid du Colombier 	for(;;)
57*9a747e4fSDavid du Colombier 		recv(d->cstat, &s);
58*9a747e4fSDavid du Colombier 
59*9a747e4fSDavid du Colombier }
60