From ab400c0be5577cab2a66d242183887ebbd61717f Mon Sep 17 00:00:00 2001 From: Nicholas Date: Wed, 17 Nov 2021 08:22:03 -0800 Subject: checkin --- src/cmd/core/basename.c | 36 ++++++++++++++++++++++++++++++++++ src/cmd/core/cat.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ src/cmd/core/date.c | 37 +++++++++++++++++++++++++++++++++++ src/cmd/core/rules.mk | 19 ++++++++++++++++++ 4 files changed, 144 insertions(+) create mode 100644 src/cmd/core/basename.c create mode 100644 src/cmd/core/cat.c create mode 100644 src/cmd/core/date.c create mode 100644 src/cmd/core/rules.mk (limited to 'src/cmd/core') 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 +#include +#include + +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 +#include +#include + +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, ""); + 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 +#include +#include + +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 -- cgit v1.2.1