diff options
Diffstat (limited to 'emu')
| -rw-r--r-- | emu/port/devcons.c | 2 | ||||
| -rw-r--r-- | emu/port/devtab.c | 36 | ||||
| -rw-r--r-- | emu/port/fns.h | 1 |
3 files changed, 34 insertions, 5 deletions
diff --git a/emu/port/devcons.c b/emu/port/devcons.c index 93dc6fd6..858369dd 100644 --- a/emu/port/devcons.c +++ b/emu/port/devcons.c @@ -579,9 +579,7 @@ Dev consdevtab = { 'c', "cons", - devreset, consinit, - devshutdown, consattach, conswalk, consstat, diff --git a/emu/port/devtab.c b/emu/port/devtab.c index cc77a035..6f244e62 100644 --- a/emu/port/devtab.c +++ b/emu/port/devtab.c @@ -1,5 +1,35 @@ -void -placeholderonly(void) +#include "dat.h" +#include "fns.h" +#include "error.h" + +extern Dev* devtab[]; + +long +devtabread(Chan *c, void* buf, long n, vlong off) { - /* just in case some host compiler hates empty files */ + int i; + Dev *dev; + char *alloc, *e, *p; + + USED(c); + alloc = malloc(READSTR); + if(alloc == nil) + error(Enomem); + + p = alloc; + e = p + READSTR; + for(i = 0; devtab[i] != nil; i++){ + dev = devtab[i]; + p = seprint(p, e, "#%C %s\n", dev->dc, dev->name); + } + + if(waserror()){ + free(alloc); + nexterror(); + } + n = readstr(off, buf, n, alloc); + free(alloc); + poperror(); + + return n; } diff --git a/emu/port/fns.h b/emu/port/fns.h index 545b578f..86162d2e 100644 --- a/emu/port/fns.h +++ b/emu/port/fns.h @@ -47,6 +47,7 @@ Dev* devbyname(char*); void devpermcheck(char*, ulong, int); void devremove(Chan*); int devstat(Chan*, uchar*, int, Dirtab*, int, Devgen*); +long devtabread(Chan*, void*, long, vlong); int devwstat(Chan*, uchar*, int); Chan* devattach(int, char*); Block* devbread(Chan*, long, ulong); |
