Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include <bio.h>
4
#include <disk.h>
5
#include <auth.h>
6
#include <fcall.h>
7
#include <thread.h>
8
#include <9p.h>
9
 
10
/* acme */
11
typedef struct Event Event;
12
typedef struct Window Window;
13
 
14
enum
15
{
16
	STACK		= 16384,
17
	EVENTSIZE	= 256,
18
	NEVENT		= 5,
19
};
20
 
21
struct Event
22
{
23
	int	c1;
24
	int	c2;
25
	int	q0;
26
	int	q1;
27
	int	flag;
28
	int	nb;
29
	int	nr;
30
	char	b[EVENTSIZE*UTFmax+1];
31
	Rune	r[EVENTSIZE+1];
32
};
33
 
34
struct Window
35
{
36
	/* file descriptors */
37
	int		ctl;
38
	int		event;
39
	int		addr;
40
	int		data;
41
	Biobuf	*body;
42
 
43
	/* event input */
44
	char		buf[512];
45
	char		*bufp;
46
	int		nbuf;
47
	Event	e[NEVENT];
48
 
49
	int		id;
50
	int		open;
51
	Channel	*cevent;	/* chan(Event*) */
52
};
53
 
54
extern	Window*	newwindow(void);
55
extern	int		winopenfile(Window*, char*);
56
extern	void		winopenbody(Window*, int);
57
extern	void		winclosebody(Window*);
58
extern	void		wintagwrite(Window*, char*, int);
59
extern	void		winname(Window*, char*);
60
extern	void		winwriteevent(Window*, Event*);
61
extern	void		winread(Window*, uint, uint, char*);
62
extern	int		windel(Window*, int);
63
extern	void		wingetevent(Window*, Event*);
64
extern	void		wineventproc(void*);
65
extern	void		winwritebody(Window*, char*, int);
66
extern	void		winclean(Window*);
67
extern	int		winselect(Window*, char*, int);
68
extern	int		winsetaddr(Window*, char*, int);
69
extern	char*	winreadbody(Window*, int*);
70
extern	void		windormant(Window*);
71
extern	void		winsetdump(Window*, char*, char*);
72
 
73
extern	char*	readfile(char*, char*, int*);
74
extern	void		ctlprint(int, char*, ...);
75
extern	void*	emalloc(uint);
76
extern	char*	estrdup(char*);
77
extern	char*	estrstrdup(char*, char*);
78
extern	char*	egrow(char*, char*, char*);
79
extern	char*	eappend(char*, char*, char*);
80
extern	void		error(char*, ...);
81
extern	int		tokenizec(char*, char**, int, char*);
82
 
83
/* cd stuff */
84
typedef struct Msf Msf;	/* minute, second, frame */
85
struct Msf {
86
	int m;
87
	int s;
88
	int f;
89
};
90
 
91
typedef struct Track Track;
92
struct Track {
93
	Msf start;
94
	Msf end;
95
	ulong bstart;
96
	ulong bend;
97
	char *title;
98
};
99
 
100
enum {
101
	MTRACK = 64,
102
};
103
typedef struct Toc Toc;
104
struct Toc {
105
	int ntrack;
106
	int nchange;
107
	int changetime;
108
	int track0;
109
	Track track[MTRACK];
110
	char *title;
111
};
112
 
113
extern int msfconv(Fmt*);
114
 
115
#pragma	varargck	argpos	error	1
116
#pragma	varargck	argpos	ctlprint	2
117
#pragma	varargck	type		"M"	Msf
118
 
119
enum {	/* state */
120
	Sunknown,
121
	Splaying,
122
	Spaused,
123
	Scompleted,
124
	Serror,
125
};
126
 
127
typedef struct Cdstatus Cdstatus;
128
struct Cdstatus {
129
	int state;
130
	int track;
131
	int index;
132
	Msf abs;
133
	Msf rel;
134
};
135
 
136
typedef struct Drive Drive;
137
struct Drive {
138
	Window *w;
139
	Channel *cstatus;	/* chan(Cdstatus) */
140
	Channel *ctocdisp;	/* chan(Toc) */
141
	Channel *cdbreq;	/* chan(Toc) */
142
	Channel *cdbreply; /* chan(Toc) */
143
	Scsi *scsi;
144
	Toc toc;
145
	Cdstatus status;
146
};
147
 
148
int gettoc(Scsi*, Toc*);
149
void drawtoc(Window*, Drive*, Toc*);
150
void redrawtoc(Window*, Toc*);
151
void tocproc(void*);	/* Drive* */
152
void cddbproc(void*);	/* Drive* */
153
void cdstatusproc(void*);	/* Drive* */
154
 
155
extern int debug;
156
 
157
#define DPRINT if(debug)fprint
158
void acmeevent(Drive*, Window*, Event*);
159
 
160
int playtrack(Drive*, int, int);
161
int pause(Drive*);
162
int resume(Drive*);
163
int stop(Drive*);
164
int eject(Drive*);
165
int ingest(Drive*);
166
 
167
int markplay(Window*, ulong);
168
int setplaytime(Window*, char*);
169
void advancetrack(Drive*, Window*);
170
 
171