xref: /plan9/acme/bin/source/acd/acd.h (revision 3ff48bf5ed603850fcd251ddf13025d23d693782)
19a747e4fSDavid du Colombier #include <u.h>
29a747e4fSDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier #include <bio.h>
49a747e4fSDavid du Colombier #include <disk.h>
59a747e4fSDavid du Colombier #include <auth.h>
69a747e4fSDavid du Colombier #include <fcall.h>
79a747e4fSDavid du Colombier #include <thread.h>
89a747e4fSDavid du Colombier #include <9p.h>
99a747e4fSDavid du Colombier 
109a747e4fSDavid du Colombier /* acme */
119a747e4fSDavid du Colombier typedef struct Event Event;
129a747e4fSDavid du Colombier typedef struct Window Window;
139a747e4fSDavid du Colombier 
149a747e4fSDavid du Colombier enum
159a747e4fSDavid du Colombier {
16*3ff48bf5SDavid du Colombier 	STACK		= 16384,
179a747e4fSDavid du Colombier 	EVENTSIZE	= 256,
189a747e4fSDavid du Colombier 	NEVENT		= 5,
199a747e4fSDavid du Colombier };
209a747e4fSDavid du Colombier 
219a747e4fSDavid du Colombier struct Event
229a747e4fSDavid du Colombier {
239a747e4fSDavid du Colombier 	int	c1;
249a747e4fSDavid du Colombier 	int	c2;
259a747e4fSDavid du Colombier 	int	q0;
269a747e4fSDavid du Colombier 	int	q1;
279a747e4fSDavid du Colombier 	int	flag;
289a747e4fSDavid du Colombier 	int	nb;
299a747e4fSDavid du Colombier 	int	nr;
309a747e4fSDavid du Colombier 	char	b[EVENTSIZE*UTFmax+1];
319a747e4fSDavid du Colombier 	Rune	r[EVENTSIZE+1];
329a747e4fSDavid du Colombier };
339a747e4fSDavid du Colombier 
349a747e4fSDavid du Colombier struct Window
359a747e4fSDavid du Colombier {
369a747e4fSDavid du Colombier 	/* file descriptors */
379a747e4fSDavid du Colombier 	int		ctl;
389a747e4fSDavid du Colombier 	int		event;
399a747e4fSDavid du Colombier 	int		addr;
409a747e4fSDavid du Colombier 	int		data;
419a747e4fSDavid du Colombier 	Biobuf	*body;
429a747e4fSDavid du Colombier 
439a747e4fSDavid du Colombier 	/* event input */
449a747e4fSDavid du Colombier 	char		buf[512];
459a747e4fSDavid du Colombier 	char		*bufp;
469a747e4fSDavid du Colombier 	int		nbuf;
479a747e4fSDavid du Colombier 	Event	e[NEVENT];
489a747e4fSDavid du Colombier 
499a747e4fSDavid du Colombier 	int		id;
509a747e4fSDavid du Colombier 	int		open;
519a747e4fSDavid du Colombier 	Channel	*cevent;	/* chan(Event*) */
529a747e4fSDavid du Colombier };
539a747e4fSDavid du Colombier 
549a747e4fSDavid du Colombier extern	Window*	newwindow(void);
559a747e4fSDavid du Colombier extern	int		winopenfile(Window*, char*);
569a747e4fSDavid du Colombier extern	void		winopenbody(Window*, int);
579a747e4fSDavid du Colombier extern	void		winclosebody(Window*);
589a747e4fSDavid du Colombier extern	void		wintagwrite(Window*, char*, int);
599a747e4fSDavid du Colombier extern	void		winname(Window*, char*);
609a747e4fSDavid du Colombier extern	void		winwriteevent(Window*, Event*);
619a747e4fSDavid du Colombier extern	void		winread(Window*, uint, uint, char*);
629a747e4fSDavid du Colombier extern	int		windel(Window*, int);
639a747e4fSDavid du Colombier extern	void		wingetevent(Window*, Event*);
649a747e4fSDavid du Colombier extern	void		wineventproc(void*);
659a747e4fSDavid du Colombier extern	void		winwritebody(Window*, char*, int);
669a747e4fSDavid du Colombier extern	void		winclean(Window*);
679a747e4fSDavid du Colombier extern	int		winselect(Window*, char*, int);
689a747e4fSDavid du Colombier extern	int		winsetaddr(Window*, char*, int);
699a747e4fSDavid du Colombier extern	char*	winreadbody(Window*, int*);
709a747e4fSDavid du Colombier extern	void		windormant(Window*);
719a747e4fSDavid du Colombier extern	void		winsetdump(Window*, char*, char*);
729a747e4fSDavid du Colombier 
739a747e4fSDavid du Colombier extern	char*	readfile(char*, char*, int*);
749a747e4fSDavid du Colombier extern	void		ctlprint(int, char*, ...);
759a747e4fSDavid du Colombier extern	void*	emalloc(uint);
769a747e4fSDavid du Colombier extern	char*	estrdup(char*);
779a747e4fSDavid du Colombier extern	char*	estrstrdup(char*, char*);
789a747e4fSDavid du Colombier extern	char*	egrow(char*, char*, char*);
799a747e4fSDavid du Colombier extern	char*	eappend(char*, char*, char*);
809a747e4fSDavid du Colombier extern	void		error(char*, ...);
819a747e4fSDavid du Colombier extern	int		tokenizec(char*, char**, int, char*);
829a747e4fSDavid du Colombier 
839a747e4fSDavid du Colombier /* cd stuff */
849a747e4fSDavid du Colombier typedef struct Msf Msf;	/* minute, second, frame */
859a747e4fSDavid du Colombier struct Msf {
869a747e4fSDavid du Colombier 	int m;
879a747e4fSDavid du Colombier 	int s;
889a747e4fSDavid du Colombier 	int f;
899a747e4fSDavid du Colombier };
909a747e4fSDavid du Colombier 
919a747e4fSDavid du Colombier typedef struct Track Track;
929a747e4fSDavid du Colombier struct Track {
939a747e4fSDavid du Colombier 	Msf start;
949a747e4fSDavid du Colombier 	Msf end;
959a747e4fSDavid du Colombier 	ulong bstart;
969a747e4fSDavid du Colombier 	ulong bend;
979a747e4fSDavid du Colombier 	char *title;
989a747e4fSDavid du Colombier };
999a747e4fSDavid du Colombier 
1009a747e4fSDavid du Colombier enum {
1019a747e4fSDavid du Colombier 	MTRACK = 64,
1029a747e4fSDavid du Colombier };
1039a747e4fSDavid du Colombier typedef struct Toc Toc;
1049a747e4fSDavid du Colombier struct Toc {
1059a747e4fSDavid du Colombier 	int ntrack;
1069a747e4fSDavid du Colombier 	int nchange;
1079a747e4fSDavid du Colombier 	int changetime;
1089a747e4fSDavid du Colombier 	int track0;
1099a747e4fSDavid du Colombier 	Track track[MTRACK];
1109a747e4fSDavid du Colombier 	char *title;
1119a747e4fSDavid du Colombier };
1129a747e4fSDavid du Colombier 
113*3ff48bf5SDavid du Colombier extern int msfconv(Fmt*);
1149a747e4fSDavid du Colombier 
1159a747e4fSDavid du Colombier #pragma	varargck	argpos	error	1
1169a747e4fSDavid du Colombier #pragma	varargck	argpos	ctlprint	2
1179a747e4fSDavid du Colombier #pragma	varargck	type		"M"	Msf
1189a747e4fSDavid du Colombier 
1199a747e4fSDavid du Colombier enum {	/* state */
1209a747e4fSDavid du Colombier 	Sunknown,
1219a747e4fSDavid du Colombier 	Splaying,
1229a747e4fSDavid du Colombier 	Spaused,
1239a747e4fSDavid du Colombier 	Scompleted,
1249a747e4fSDavid du Colombier 	Serror,
1259a747e4fSDavid du Colombier };
1269a747e4fSDavid du Colombier 
1279a747e4fSDavid du Colombier typedef struct Cdstatus Cdstatus;
1289a747e4fSDavid du Colombier struct Cdstatus {
1299a747e4fSDavid du Colombier 	int state;
1309a747e4fSDavid du Colombier 	int track;
1319a747e4fSDavid du Colombier 	int index;
1329a747e4fSDavid du Colombier 	Msf abs;
1339a747e4fSDavid du Colombier 	Msf rel;
1349a747e4fSDavid du Colombier };
1359a747e4fSDavid du Colombier 
1369a747e4fSDavid du Colombier typedef struct Drive Drive;
1379a747e4fSDavid du Colombier struct Drive {
1389a747e4fSDavid du Colombier 	Window *w;
1399a747e4fSDavid du Colombier 	Channel *cstatus;	/* chan(Cdstatus) */
1409a747e4fSDavid du Colombier 	Channel *ctocdisp;	/* chan(Toc) */
1419a747e4fSDavid du Colombier 	Channel *cdbreq;	/* chan(Toc) */
1429a747e4fSDavid du Colombier 	Channel *cdbreply; /* chan(Toc) */
1439a747e4fSDavid du Colombier 	Scsi *scsi;
1449a747e4fSDavid du Colombier 	Toc toc;
1459a747e4fSDavid du Colombier 	Cdstatus status;
1469a747e4fSDavid du Colombier };
1479a747e4fSDavid du Colombier 
1489a747e4fSDavid du Colombier int gettoc(Scsi*, Toc*);
1499a747e4fSDavid du Colombier void drawtoc(Window*, Drive*, Toc*);
1509a747e4fSDavid du Colombier void redrawtoc(Window*, Toc*);
1519a747e4fSDavid du Colombier void tocproc(void*);	/* Drive* */
1529a747e4fSDavid du Colombier void cddbproc(void*);	/* Drive* */
1539a747e4fSDavid du Colombier void cdstatusproc(void*);	/* Drive* */
1549a747e4fSDavid du Colombier 
1559a747e4fSDavid du Colombier extern int debug;
1569a747e4fSDavid du Colombier 
157*3ff48bf5SDavid du Colombier #define DPRINT if(debug)fprint
1589a747e4fSDavid du Colombier void acmeevent(Drive*, Window*, Event*);
1599a747e4fSDavid du Colombier 
1609a747e4fSDavid du Colombier int playtrack(Drive*, int, int);
1619a747e4fSDavid du Colombier int pause(Drive*);
1629a747e4fSDavid du Colombier int resume(Drive*);
1639a747e4fSDavid du Colombier int stop(Drive*);
1649a747e4fSDavid du Colombier int eject(Drive*);
1659a747e4fSDavid du Colombier int ingest(Drive*);
1669a747e4fSDavid du Colombier 
1679a747e4fSDavid du Colombier int markplay(Window*, ulong);
1689a747e4fSDavid du Colombier int setplaytime(Window*, char*);
1699a747e4fSDavid du Colombier void advancetrack(Drive*, Window*);
1709a747e4fSDavid du Colombier 
1719a747e4fSDavid du Colombier 
172