diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-04-14 17:27:24 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-04-14 17:27:24 +0000 |
commit | a150899221a5badff9740703b754f901b4f52762 (patch) | |
tree | 3d6911874b0ee763e40490d04f56fc09d89ccfa6 /acme/bin/source/acd/acd.h | |
parent | 71cfa9c637386ebe00fc6d1bf6215db6657559f4 (diff) | |
download | plan9front-a150899221a5badff9740703b754f901b4f52762.tar.xz |
fill /acme
Diffstat (limited to 'acme/bin/source/acd/acd.h')
-rw-r--r-- | acme/bin/source/acd/acd.h | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/acme/bin/source/acd/acd.h b/acme/bin/source/acd/acd.h new file mode 100644 index 000000000..90c4bdb81 --- /dev/null +++ b/acme/bin/source/acd/acd.h @@ -0,0 +1,171 @@ +#include <u.h> +#include <libc.h> +#include <bio.h> +#include <disk.h> +#include <auth.h> +#include <fcall.h> +#include <thread.h> +#include <9p.h> + +/* acme */ +typedef struct Event Event; +typedef struct Window Window; + +enum +{ + STACK = 16384, + EVENTSIZE = 256, + NEVENT = 5, +}; + +struct Event +{ + int c1; + int c2; + int q0; + int q1; + int flag; + int nb; + int nr; + char b[EVENTSIZE*UTFmax+1]; + Rune r[EVENTSIZE+1]; +}; + +struct Window +{ + /* file descriptors */ + int ctl; + int event; + int addr; + int data; + Biobuf *body; + + /* event input */ + char buf[512]; + char *bufp; + int nbuf; + Event e[NEVENT]; + + int id; + int open; + Channel *cevent; /* chan(Event*) */ +}; + +extern Window* newwindow(void); +extern int winopenfile(Window*, char*); +extern void winopenbody(Window*, int); +extern void winclosebody(Window*); +extern void wintagwrite(Window*, char*, int); +extern void winname(Window*, char*); +extern void winwriteevent(Window*, Event*); +extern void winread(Window*, uint, uint, char*); +extern int windel(Window*, int); +extern void wingetevent(Window*, Event*); +extern void wineventproc(void*); +extern void winwritebody(Window*, char*, int); +extern void winclean(Window*); +extern int winselect(Window*, char*, int); +extern int winsetaddr(Window*, char*, int); +extern char* winreadbody(Window*, int*); +extern void windormant(Window*); +extern void winsetdump(Window*, char*, char*); + +extern char* readfile(char*, char*, int*); +extern void ctlprint(int, char*, ...); +extern void* emalloc(uint); +extern char* estrdup(char*); +extern char* estrstrdup(char*, char*); +extern char* egrow(char*, char*, char*); +extern char* eappend(char*, char*, char*); +extern void error(char*, ...); +extern int tokenizec(char*, char**, int, char*); + +/* cd stuff */ +typedef struct Msf Msf; /* minute, second, frame */ +struct Msf { + int m; + int s; + int f; +}; + +typedef struct Track Track; +struct Track { + Msf start; + Msf end; + ulong bstart; + ulong bend; + char *title; +}; + +enum { + MTRACK = 64, +}; +typedef struct Toc Toc; +struct Toc { + int ntrack; + int nchange; + int changetime; + int track0; + Track track[MTRACK]; + char *title; +}; + +extern int msfconv(Fmt*); + +#pragma varargck argpos error 1 +#pragma varargck argpos ctlprint 2 +#pragma varargck type "M" Msf + +enum { /* state */ + Sunknown, + Splaying, + Spaused, + Scompleted, + Serror, +}; + +typedef struct Cdstatus Cdstatus; +struct Cdstatus { + int state; + int track; + int index; + Msf abs; + Msf rel; +}; + +typedef struct Drive Drive; +struct Drive { + Window *w; + Channel *cstatus; /* chan(Cdstatus) */ + Channel *ctocdisp; /* chan(Toc) */ + Channel *cdbreq; /* chan(Toc) */ + Channel *cdbreply; /* chan(Toc) */ + Scsi *scsi; + Toc toc; + Cdstatus status; +}; + +int gettoc(Scsi*, Toc*); +void drawtoc(Window*, Drive*, Toc*); +void redrawtoc(Window*, Toc*); +void tocproc(void*); /* Drive* */ +void cddbproc(void*); /* Drive* */ +void cdstatusproc(void*); /* Drive* */ + +extern int debug; + +#define DPRINT if(debug)fprint +void acmeevent(Drive*, Window*, Event*); + +int playtrack(Drive*, int, int); +int pause(Drive*); +int resume(Drive*); +int stop(Drive*); +int eject(Drive*); +int ingest(Drive*); + +int markplay(Window*, ulong); +int setplaytime(Window*, char*); +void advancetrack(Drive*, Window*); + + |