summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--emu/port/devcons.c2
-rw-r--r--emu/port/devtab.c36
-rw-r--r--emu/port/fns.h1
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);