diff --git a/base/scripts/rc.tb b/base/scripts/rc.tb index 9e580ad..2976af5 100644 --- a/base/scripts/rc.tb +++ b/base/scripts/rc.tb @@ -1,3 +1,4 @@ mkalias pctl base:/bin/pctl mkalias tb base:/bin/tb mkalias fs base:/bin/fs +mkalias dev base:/bin/dev diff --git a/user/dev/.gitignore b/user/dev/.gitignore new file mode 100644 index 0000000..7bb87bc --- /dev/null +++ b/user/dev/.gitignore @@ -0,0 +1,2 @@ +*.o +dev diff --git a/user/dev/Makefile b/user/dev/Makefile new file mode 100644 index 0000000..29b4dd4 --- /dev/null +++ b/user/dev/Makefile @@ -0,0 +1,24 @@ +include $(ROOT)/mk/grabsrc.mk +include ../Makefile.inc + +.PHONY: all clean + +TARGET := dev + +LDFLAGS += -L$(ROOT)/ulib -l:libulib.a + +SRCFILES := $(call GRABSRC, .) +CFILES := $(call GET_CFILES, $(SRCFILES)) +OBJ := $(call GET_OBJ, $(SRCFILES)) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +all: $(TARGET) + +$(TARGET): $(OBJ) + $(LD) $^ $(LDFLAGS) -o $@ + echo $$(realpath $(TARGET)) >> $(FILES) + +clean: + rm -f $(OBJ) $(TARGET) diff --git a/user/dev/ls.c b/user/dev/ls.c new file mode 100644 index 0000000..9471134 --- /dev/null +++ b/user/dev/ls.c @@ -0,0 +1,20 @@ +#include +#include +#include + +void dev_ls(void) { + size_t ndevs = devctl(NULL, DEVCTL_DEVLS_SZ, NULL, 0, 0); + uprintf("TOTAL: %zu\n", ndevs); + + uprintf("%-20s %-10s\n", "DEVICE", "FUNCTIONS"); + + for (size_t i = 0; i < 0x100; i++) { + DevStat devstat; ZERO(&devstat); + devctl(NULL, DEVCTL_DEVLS_STAT, (uint8_t *)&devstat, i, 0); + + if (!devstat.present) + continue; + + uprintf("%-20s %-10zu\n", devstat.name, devstat.nfns); + } +} diff --git a/user/dev/main.c b/user/dev/main.c new file mode 100644 index 0000000..49f9cee --- /dev/null +++ b/user/dev/main.c @@ -0,0 +1,24 @@ +#include +#include +#include + +#define CMDS(X) \ + X(ls) + +void main(void) { + if (argslen() == 0) { + return; + } + + char *cmd = args()[0]; + + #define X(name) if (string_strcmp(cmd, #name) == 0) { \ + extern void dev_ ## name(void); \ + dev_ ## name(); \ + return; \ + } + CMDS(X) + #undef X + + uprintf("dev: unknown command %s\n", cmd); +}