|
|
1.1 root 1: /*
2: * template for making a new device
3: */
4:
5: #include "u.h"
6: #include "../port/lib.h"
7: #include "mem.h"
8: #include "dat.h"
9: #include "fns.h"
10: #include "../port/error.h"
11:
12: #include "devtab.h"
13:
14: enum{
15: XXXdirqid,
16: XXXdataqid,
17: };
18: Dirtab XXXtab[]={
19: "data", {XXXdataqid, 0}, 0, 0600,
20: };
21: #define NXXXtab (sizeof(XXXtab)/sizeof(Dirtab))
22:
23: void
24: XXXreset(void)
25: {
26: }
27:
28: void
29: XXXinit(void)
30: {
31: }
32:
33: Chan *
34: XXXattach(char *spec)
35: {
36: return devattach('X', spec);
37: }
38:
39: Chan *
40: XXXclone(Chan *c, Chan *nc)
41: {
42: return devclone(c, nc);
43: }
44:
45: int
46: XXXwalk(Chan *c, char *name)
47: {
48: return devwalk(c, name, XXXtab, NXXXtab, devgen);
49: }
50:
51: void
52: XXXstat(Chan *c, char *db)
53: {
54: devstat(c, db, XXXtab, NXXXtab, devgen);
55: }
56:
57: Chan *
58: XXXopen(Chan *c, int omode)
59: {
60: return devopen(c, omode, XXXtab, NXXXtab, devgen);
61: }
62:
63: void
64: XXXcreate(Chan *c, char *name, int omode, ulong perm)
65: {
66: USED(c, name, omode, perm);
67: error(Eperm);
68: }
69:
70: void
71: XXXremove(Chan *c)
72: {
73: USED(c);
74: error(Eperm);
75: }
76:
77: void
78: XXXwstat(Chan *c, char *dp)
79: {
80: USED(c, dp);
81: error(Eperm);
82: }
83:
84: void
85: XXXclose(Chan *c)
86: {
87: }
88:
89: long
90: XXXread(Chan *c, void *a, long n, ulong offset)
91: {
92: switch(c->qid.path & ~CHDIR){
93: case XXXdirqid:
94: return devdirread(c, a, n, XXXtab, NXXXtab, devgen);
95: case XXXdataqid:
96: break;
97: default:
98: n=0;
99: break;
100: }
101: return n;
102: }
103:
104: long
105: XXXwrite(Chan *c, char *a, long n, ulong offset)
106: {
107: switch(c->qid.path & ~CHDIR){
108: case XXXdataqid:
109: break;
110: default:
111: error(Ebadusefd);
112: }
113: return n;
114: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.