diff options
Diffstat (limited to 'src/cmd/core')
-rw-r--r-- | src/cmd/core/basename.c | 36 | ||||
-rw-r--r-- | src/cmd/core/cat.c | 52 | ||||
-rw-r--r-- | src/cmd/core/date.c | 37 | ||||
-rw-r--r-- | src/cmd/core/rules.mk | 19 |
4 files changed, 144 insertions, 0 deletions
diff --git a/src/cmd/core/basename.c b/src/cmd/core/basename.c new file mode 100644 index 0000000..ba9d4c9 --- /dev/null +++ b/src/cmd/core/basename.c @@ -0,0 +1,36 @@ +#include <u.h> +#include <base.h> +#include <libfmt.h> + +static void +usage(void) +{ + fmt·fprint(2,"usage: %s [-d] path [suffix]\n", argv0); + exits("usage"); +} + +int +main(int argc, char *argv[]) +{ + int d; + long n; + char *p, *s; + + ARGBEGIN{ + case 'd': d = 1; break; + default: + usage(); + }ARGEND; + + if(argc < 1 || argc > 2) + usage(); + + p = d ? os·dirname(argv[0]) : os·basename(argv[0]); + if(argc>1){ + n = strlen(p)-strlen(argv[1]); + if(n >= 0 && strcmp(p+n, argv[1])==0) + p[n] = 0; + } + puts(p); + exits(nil); +} diff --git a/src/cmd/core/cat.c b/src/cmd/core/cat.c new file mode 100644 index 0000000..4f0929c --- /dev/null +++ b/src/cmd/core/cat.c @@ -0,0 +1,52 @@ +#include <u.h> +#include <base.h> +#include <libfmt.h> + +static void +usage(void) +{ + fmt·panic("usage: %s [-u] [file ...]\n", argv0); + exits("usage"); +} + +static void +cat(int fd, char *s) +{ + long n; + char buf[8192]; + + while((n=read(fd, buf, sizeof(buf)))>0){ + if(write(1, buf, n) != n) + fmt·panic("write error copying %s: %r", s); + } + + if(n<0) + fmt·panic("error reading %s: %r", s); +} + +int +main(int argc, char *argv[]) +{ + int fd; + + ARGBEGIN{ + case 'u': /* ignore */ break; + default: + usage(); + }ARGEND; + + if(!argc){ + cat(0, "<stdin>"); + exits(0); + } + + while(argc-- > 0){ + if((fd = open(*argv, O_RDONLY))<0) + fmt·panic("can't open %s: %r", *argv); + + cat(fd, *argv); + close(fd); + + argv++; + } +} diff --git a/src/cmd/core/date.c b/src/cmd/core/date.c new file mode 100644 index 0000000..225333f --- /dev/null +++ b/src/cmd/core/date.c @@ -0,0 +1,37 @@ +#include <u.h> +#include <base.h> +#include <libfmt.h> + +static void +usage(void) +{ + fmt·fprint(2, "usage: date [-un] [seconds]\n"); + exits("usage"); +} + +int +main(int argc, char *argv[]) +{ + int n, u; + ulong now; + + ARGBEGIN{ + case 'n': n = 1; break; + case 'u': u = 1; break; + default: usage(); + }ARGEND; + + if(argc == 1) + now = strtoul(*argv, 0, 0); + else + now = time(0); + + if(n) + fmt·print("%ld\n", now); + else if(u) + fmt·print("%s", asctime(gmtime(now))); + else + fmt·print("%s", ctime(now)); + + exits(nil); +} diff --git a/src/cmd/core/rules.mk b/src/cmd/core/rules.mk new file mode 100644 index 0000000..9c4eb76 --- /dev/null +++ b/src/cmd/core/rules.mk @@ -0,0 +1,19 @@ +include share/push.mk + +BINS_$(d):=\ + $(d)/basename\ + $(d)/cat + +include share/paths.mk +libbase:=\ + $(OBJ_DIR)/libfmt/libfmt.a\ + $(OBJ_DIR)/libutf/libutf.a\ + $(OBJ_DIR)/base/base.a + +$(o)/basename: $(d)/basename.c $(libbase) + $(COMPLINK) + +$(o)/cat: $(d)/cat.c $(libbase) + $(COMPLINK) + +include share/pop.mk |