From 9695ea005d4af93dcd60f74f10fd3c54499a182f Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 11 Nov 2021 16:31:58 -0800 Subject: chore: split up base library into individual files for smaller binaries --- sys/base/io/fd.c | 7 +++++ sys/base/io/flush.c | 7 +++++ sys/base/io/get.c | 7 +++++ sys/base/io/interface.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ sys/base/io/internal.h | 4 +++ sys/base/io/open.c | 13 +++++++++ sys/base/io/putbyte.c | 7 +++++ sys/base/io/putstring.c | 7 +++++ sys/base/io/read.c | 7 +++++ sys/base/io/readln.c | 12 +++++++++ sys/base/io/rules.mk | 14 ++++++++++ sys/base/io/seek.c | 7 +++++ sys/base/io/stat.c | 7 +++++ sys/base/io/tell.c | 7 +++++ sys/base/io/unget.c | 7 +++++ sys/base/io/write.c | 7 +++++ 16 files changed, 190 insertions(+) create mode 100644 sys/base/io/fd.c create mode 100644 sys/base/io/flush.c create mode 100644 sys/base/io/get.c create mode 100644 sys/base/io/interface.c create mode 100644 sys/base/io/internal.h create mode 100644 sys/base/io/open.c create mode 100644 sys/base/io/putbyte.c create mode 100644 sys/base/io/putstring.c create mode 100644 sys/base/io/read.c create mode 100644 sys/base/io/readln.c create mode 100644 sys/base/io/rules.mk create mode 100644 sys/base/io/seek.c create mode 100644 sys/base/io/stat.c create mode 100644 sys/base/io/tell.c create mode 100644 sys/base/io/unget.c create mode 100644 sys/base/io/write.c (limited to 'sys/base/io') 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 +#include 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); +} -- cgit v1.2.1