aboutsummaryrefslogtreecommitdiff
path: root/sys/base/io
diff options
context:
space:
mode:
Diffstat (limited to 'sys/base/io')
-rw-r--r--sys/base/io/fd.c7
-rw-r--r--sys/base/io/flush.c7
-rw-r--r--sys/base/io/get.c7
-rw-r--r--sys/base/io/interface.c70
-rw-r--r--sys/base/io/internal.h4
-rw-r--r--sys/base/io/open.c13
-rw-r--r--sys/base/io/putbyte.c7
-rw-r--r--sys/base/io/putstring.c7
-rw-r--r--sys/base/io/read.c7
-rw-r--r--sys/base/io/readln.c12
-rw-r--r--sys/base/io/rules.mk14
-rw-r--r--sys/base/io/seek.c7
-rw-r--r--sys/base/io/stat.c7
-rw-r--r--sys/base/io/tell.c7
-rw-r--r--sys/base/io/unget.c7
-rw-r--r--sys/base/io/write.c7
16 files changed, 190 insertions, 0 deletions
diff --git a/sys/base/io/fd.c b/sys/base/io/fd.c
new file mode 100644
index 0000000..ded1b02
--- /dev/null
+++ b/sys/base/io/fd.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+int
+io·fd(io·Stream *s)
+{
+ return fileno(s);
+}
diff --git a/sys/base/io/flush.c b/sys/base/io/flush.c
new file mode 100644
index 0000000..0f1217a
--- /dev/null
+++ b/sys/base/io/flush.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+int
+io·flush(io·Stream *s)
+{
+ return fflush(s);
+}
diff --git a/sys/base/io/get.c b/sys/base/io/get.c
new file mode 100644
index 0000000..d4e52f8
--- /dev/null
+++ b/sys/base/io/get.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+byte
+io·getbyte(io·Stream *s)
+{
+ return fgetc(s);
+}
diff --git a/sys/base/io/interface.c b/sys/base/io/interface.c
new file mode 100644
index 0000000..bead9e1
--- /dev/null
+++ b/sys/base/io/interface.c
@@ -0,0 +1,70 @@
+#include "internal.h"
+
+static
+int
+·read(void *rdr, int size, int n, void *buf)
+{
+ return io·read((io·Stream *)rdr, size, n, buf);
+}
+
+static
+byte
+·get(void *rdr)
+{
+ return io·getbyte((io·Stream *)rdr);
+}
+
+static
+error
+·unget(void *rdr, byte c)
+{
+ return io·ungetbyte((io·Stream *)rdr, c);
+}
+
+static
+int
+·write(void *wtr, int sz, int n, void *buf)
+{
+ return io·write((io·Stream *)wtr, sz, n, buf);
+}
+
+static
+error
+·put(void *wtr, byte c)
+{
+ return io·putbyte((io·Stream *)wtr, c);
+}
+
+static
+int
+·puts(void *wtr, string s)
+{
+ return io·putstring((io·Stream *)wtr, s);
+}
+
+static
+int
+·seek(void *skr, long off, enum SeekPos whence)
+{
+ return io·seek((io·Stream *)skr, off, whence);
+}
+
+static
+long
+·tell(void *skr)
+{
+ return io·tell((io·Stream *)skr);
+}
+
+/* actual interfaces */
+io·Reader sys·Reader = (io·Reader){ ·read };
+io·Seeker sys·Seeker = (io·Seeker){ ·seek, ·tell };
+io·Peeker sys·Peeker = (io·Peeker){ ·get, ·unget };
+io·SeekReader sys·SeekReader = (io·SeekReader){ ·seek, ·tell, ·read };
+io·PeekReader sys·PeekReader = (io·PeekReader){ ·read, ·get, ·unget };
+
+io·Writer sys·Writer = (io·Writer){ ·write };
+io·Putter sys·Putter = (io·Putter){ ·put, ·puts };
+io·PutWriter sys·PutWriter = (io·PutWriter){ ·write, ·put, ·puts };
+
+io·ReadWriter sys·ReadWriter = (io·ReadWriter){ ·read, ·write };
diff --git a/sys/base/io/internal.h b/sys/base/io/internal.h
new file mode 100644
index 0000000..302c035
--- /dev/null
+++ b/sys/base/io/internal.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#include <u.h>
+#include <base.h>
diff --git a/sys/base/io/open.c b/sys/base/io/open.c
new file mode 100644
index 0000000..e50e334
--- /dev/null
+++ b/sys/base/io/open.c
@@ -0,0 +1,13 @@
+#include "internal.h"
+
+io·Stream*
+io·open(byte *name, byte *mode)
+{
+ return fopen(name, mode);
+}
+
+error
+io·close(io·Stream *s)
+{
+ return fclose(s);
+}
diff --git a/sys/base/io/putbyte.c b/sys/base/io/putbyte.c
new file mode 100644
index 0000000..2350a8d
--- /dev/null
+++ b/sys/base/io/putbyte.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+int
+io·putbyte(io·Stream *s, byte c)
+{
+ return fputc(c, s);
+}
diff --git a/sys/base/io/putstring.c b/sys/base/io/putstring.c
new file mode 100644
index 0000000..53fa993
--- /dev/null
+++ b/sys/base/io/putstring.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+int
+io·putstring(io·Stream *s, string str)
+{
+ return fputs(str, s);
+}
diff --git a/sys/base/io/read.c b/sys/base/io/read.c
new file mode 100644
index 0000000..b0ed3d2
--- /dev/null
+++ b/sys/base/io/read.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+int
+io·read(io·Stream *s, int sz, int n, void *buf)
+{
+ return fread(buf, sz, n, s);
+}
diff --git a/sys/base/io/readln.c b/sys/base/io/readln.c
new file mode 100644
index 0000000..283472d
--- /dev/null
+++ b/sys/base/io/readln.c
@@ -0,0 +1,12 @@
+#include "internal.h"
+
+int
+io·readln(io·Stream *s, int n, byte* buf)
+{
+ byte* b;
+ b = fgets(buf, n+1, s);
+ if(b == nil)
+ return -1;
+
+ return strlen(buf);
+}
diff --git a/sys/base/io/rules.mk b/sys/base/io/rules.mk
new file mode 100644
index 0000000..2e03ca5
--- /dev/null
+++ b/sys/base/io/rules.mk
@@ -0,0 +1,14 @@
+SRCS_$(d)+=\
+ $(d)/io/fd.c\
+ $(d)/io/flush.c\
+ $(d)/io/interface.c\
+ $(d)/io/open.c\
+ $(d)/io/putbyte.c\
+ $(d)/io/putstring.c\
+ $(d)/io/read.c\
+ $(d)/io/readln.c\
+ $(d)/io/seek.c\
+ $(d)/io/stat.c\
+ $(d)/io/tell.c\
+ $(d)/io/unget.c\
+ $(d)/io/write.c\
diff --git a/sys/base/io/seek.c b/sys/base/io/seek.c
new file mode 100644
index 0000000..d0e7488
--- /dev/null
+++ b/sys/base/io/seek.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+int
+io·seek(io·Stream *s, long off, enum SeekPos origin)
+{
+ return fseek(s, off, origin);
+}
diff --git a/sys/base/io/stat.c b/sys/base/io/stat.c
new file mode 100644
index 0000000..d86f1ee
--- /dev/null
+++ b/sys/base/io/stat.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+error
+io·stat(io·Stream *s, io·Stat *buf)
+{
+ return fstat(fileno(s), buf);
+}
diff --git a/sys/base/io/tell.c b/sys/base/io/tell.c
new file mode 100644
index 0000000..1c50439
--- /dev/null
+++ b/sys/base/io/tell.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+long
+io·tell(io·Stream *s)
+{
+ return ftell(s);
+}
diff --git a/sys/base/io/unget.c b/sys/base/io/unget.c
new file mode 100644
index 0000000..5ec3536
--- /dev/null
+++ b/sys/base/io/unget.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+error
+io·ungetbyte(io·Stream *s, byte c)
+{
+ return ungetc(c, s);
+}
diff --git a/sys/base/io/write.c b/sys/base/io/write.c
new file mode 100644
index 0000000..63df664
--- /dev/null
+++ b/sys/base/io/write.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+int
+io·write(io·Stream *s, int sz, int n, void *buf)
+{
+ return fwrite(buf, sz, n, s);
+}