📄 compat.h
字号:
#define Rendez KRendeztypedef struct Block Block;typedef struct Chan Chan;typedef struct Cname Cname;typedef struct Dev Dev;typedef struct Dirtab Dirtab;typedef struct Proc Proc;typedef struct Ref Ref;typedef struct Rendez Rendez;typedef struct Walkqid Walkqid;typedef int Devgen(Chan*, Dirtab*, int, int, Dir*);enum{ KNAMELEN = 28, NERR = 15, COPEN = 0x0001, /* for i/o */ CFREE = 0x0010, /* not in use */};struct Ref{ Lock; int ref;};struct Rendez{ Lock; Proc *p;};struct Chan{ Ref; Chan* next; /* allocation */ Chan* link; vlong offset; /* in file */ ushort type; ulong dev; ushort mode; /* read/write */ ushort flag; Qid qid; int fid; /* for devmnt */ ulong iounit; /* chunk size for i/o; 0==default */ void* aux; Cname *name;};struct Cname{ Ref; int alen; /* allocated length */ int len; /* strlen(s) */ char *s;};struct Dev{ int dc; char* name; void (*reset)(void); void (*init)(void); Chan* (*attach)(char*); Walkqid* (*walk)(Chan*, Chan*, char**, int); int (*stat)(Chan*, uchar*, int); Chan* (*open)(Chan*, int); void (*create)(Chan*, char*, int, ulong); void (*close)(Chan*); long (*read)(Chan*, void*, long, vlong); Block* (*bread)(Chan*, long, ulong); long (*write)(Chan*, void*, long, vlong); long (*bwrite)(Chan*, Block*, ulong); void (*remove)(Chan*); int (*wstat)(Chan*, uchar*, int);};struct Dirtab{ char name[KNAMELEN]; Qid qid; vlong length; long perm;};struct Walkqid{ Chan *clone; int nqid; Qid qid[1];};struct Proc{ Lock rlock; /* for rendsleep, rendwakeup, intr */ Rendez *r; int intr; char name[KNAMELEN]; char *user; char error[ERRMAX]; int nerrlab; jmp_buf errlab[NERR]; char genbuf[128]; /* buffer used e.g. for last name element from namec */};#define DEVDOTDOT -1extern Proc **privup;#define up (*privup)extern char *eve;extern Dev* devtab[];Chan* cclone(Chan*);void cclose(Chan*);void cnameclose(Cname*);int decref(Ref*);Chan* devattach(int, char*);Block* devbread(Chan*, long, ulong);long devbwrite(Chan*, Block*, ulong);void devcreate(Chan*, char*, int, ulong);void devdir(Chan*, Qid, char*, vlong, char*, long, Dir*);long devdirread(Chan*, char*, long, Dirtab*, int, Devgen*);Devgen devgen;void devinit(void);Chan* devopen(Chan*, int, Dirtab*, int, Devgen*);void devremove(Chan*);void devreset(void);int devstat(Chan*, uchar*, int, Dirtab*, int, Devgen*);Walkqid* devwalk(Chan*, Chan*, char**, int, Dirtab*, int, Devgen*);int devwstat(Chan*, uchar*, int);void error(char*);int incref(Ref*);void isdir(Chan*);void kproc(char*, void(*)(void*), void*);void mkqid(Qid*, vlong, ulong, int);void nexterror(void);Chan* newchan(void);Cname* newcname(char*);int openmode(ulong);void panic(char*, ...);int readstr(ulong, char*, ulong, char*);long seconds(void);void* smalloc(ulong);#define poperror() up->nerrlab--#define waserror() (up->nerrlab++, setjmp(up->errlab[up->nerrlab-1]))void initcompat(void);void rendintr(void *v);void rendclearintr(void);void rendsleep(Rendez*, int(*)(void*), void*);int rendwakeup(Rendez*);void kexit(void);int sysexport(int fd, Chan **roots, int nroots);int errdepth(int ed);void newup(char *name);int exporter(Dev**, int*, int*);int mounter(char *mntpt, int how, int fds, int n);void shutdown(void);void screeninit(int, int, char*);#pragma varargck argpos panic 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -