aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/core')
-rw-r--r--src/cmd/core/basename.c36
-rw-r--r--src/cmd/core/cat.c52
-rw-r--r--src/cmd/core/date.c37
-rw-r--r--src/cmd/core/rules.mk19
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