From 4b0ef5bf1644520bcec05a7b2f59d6787eb616f8 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 22 Apr 2021 10:29:35 -0700 Subject: chore(refactor): explicit definition of useful interfaces --- include/libn.h | 59 +++++++++++++++++++++------------ sys/cmd/dwm/util.c | 2 +- sys/cmd/term/config.h | 3 +- sys/libbio/newick.c | 4 +-- sys/libn/gz.c | 17 ++++++++++ sys/libn/io.c | 91 +++++++++++++++++++++++++++++++++++++++++---------- sys/libn/mmap.c | 4 +-- 7 files changed, 135 insertions(+), 45 deletions(-) diff --git a/include/libn.h b/include/libn.h index 19fb43c..30b4c87 100644 --- a/include/libn.h +++ b/include/libn.h @@ -69,16 +69,14 @@ typedef struct mem·Allocator { void *(*alloc)(void *iface, uint n, ulong size); void (*free)(void *iface, void *ptr); } mem·Allocator; +extern mem·Allocator mem·System; typedef struct mem·Reallocator { void *(*alloc)(void *iface, uint n, ulong size); void *(*realloc)(void *iface, void *ptr, uint n, ulong size); void (*free)(void *iface, void *ptr); } mem·Reallocator; - -/* system implementation */ -extern mem·Allocator mem·sys; -extern mem·Reallocator mem·rsys; +extern mem·Reallocator mem·FullSystem; /* simple memory arena */ typedef struct mem·Arena mem·Arena; @@ -163,7 +161,7 @@ int utf8·istitle(rune r); // ----------------------------------------------------------------------------- // i/o -typedef FILE Stream; +typedef FILE io·Stream; typedef struct stat io·Stat; enum SeekPos @@ -181,19 +179,19 @@ enum }; /* file handling */ -Stream *io·open(byte *name, byte *mode); -int io·fd(Stream *s); -error io·stat(Stream *s, io·Stat *buf); -error io·close(Stream *s); -byte io·getbyte(Stream *s); -error io·ungetbyte(Stream *s, byte c); -int io·read(Stream *s, int sz, int n, void *buf); -int io·readln(Stream *s, int n, byte *buf); -error io·putbyte(Stream *s, byte c); -int io·putstring(Stream *s, string str); -int io·write(Stream *s, int sz, int n, void *buf); -int io·flush(Stream *s); -int io·seek(Stream *s, long off, enum SeekPos whence); +io·Stream *io·open(byte *name, byte *mode); +int io·fd(io·Stream *s); +error io·stat(io·Stream *s, io·Stat *buf); +error io·close(io·Stream *s); +byte io·getbyte(io·Stream *s); +error io·ungetbyte(io·Stream *s, byte c); +int io·read(io·Stream *s, int sz, int n, void *buf); +int io·readln(io·Stream *s, int n, byte *buf); +error io·putbyte(io·Stream *s, byte c); +int io·putstring(io·Stream *s, string str); +int io·write(io·Stream *s, int sz, int n, void *buf); +int io·flush(io·Stream *s); +int io·seek(io·Stream *s, long off, enum SeekPos whence); /* basic os helpers */ int os·exists(byte *path, int flag); @@ -205,46 +203,55 @@ typedef struct io·Reader { int (*read)(void*, int sz, int n, void *buf); } io·Reader; +extern io·Reader sys·Reader; +/* typedef struct io·LineReader { int (*readln)(void*, int n, void *buf); } io·LineReader; +*/ typedef struct io·Peeker { byte (*get)(void*); error (*unget)(void*, byte); } io·Peeker; +extern io·Peeker sys·Peeker; typedef struct io·FullReader { io·Reader; io·Peeker; } io·FullReader; +extern io·FullReader sys·FullReader; typedef struct io·Writer { int (*write)(void*, int sz, int n, void *buf); } io·Writer; +extern io·Writer sys·Writer; typedef struct io·Putter { - error (*put)(void*, byte); - int (*putstr)(void*, string); + error (*put) (void*, byte); + int (*puts)(void*, string); } io·Putter; +extern io·Putter sys·Putter; typedef struct io·FullWriter { io·Writer; io·Putter; } io·FullWriter; +extern io·FullWriter sys·FullWriter; typedef struct io·ReadWriter { io·Reader; io·Writer; } io·ReadWriter; +extern io·ReadWriter sys·ReadWriter; /* buffered i/o */ typedef struct io·Buffer io·Buffer; @@ -350,7 +357,17 @@ error flate·closewriter(flate·Writer *wtr); typedef void gz·Stream; -gz·Stream* gz·open(byte *path, byte *mode); +/* interfaces */ +extern io·Reader gz·Reader; +extern io·Peeker gz·Peeker; +extern io·FullReader gz·FullReader; + +extern io·Writer gz·Writer; +extern io·Putter gz·Putter; +extern io·FullWriter gz·FullWriter; +extern io·ReadWriter gz·ReadWriter; + +gz·Stream *gz·open(byte *path, byte *mode); error gz·close(gz·Stream* s); int gz·read(gz·Stream *s, int sz, int n, void* buf); int gz·readln(gz·Stream *s, int n, byte *buf); diff --git a/sys/cmd/dwm/util.c b/sys/cmd/dwm/util.c index 445d479..c64e652 100644 --- a/sys/cmd/dwm/util.c +++ b/sys/cmd/dwm/util.c @@ -35,7 +35,7 @@ getparentprocess(pid_t p) uint v = 0; #if defined(__linux__) - Stream *f; + io·Stream *f; char buf[256]; snprintf(buf, sizeof(buf) - 1, "/proc/%u/stat", (unsigned)p); diff --git a/sys/cmd/term/config.h b/sys/cmd/term/config.h index 1e4603a..f638e8a 100644 --- a/sys/cmd/term/config.h +++ b/sys/cmd/term/config.h @@ -6,8 +6,7 @@ * * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html */ -// static char *font = "consolas:pixelsize=16:antialias=true"; -static char *font = "FiraCode:pixelsize=16:antialias=true"; +static char *font = "consolas:pixelsize=16:antialias=true"; static int borderpx = 2; /* diff --git a/sys/libbio/newick.c b/sys/libbio/newick.c index 164516f..a838278 100644 --- a/sys/libbio/newick.c +++ b/sys/libbio/newick.c @@ -395,13 +395,13 @@ dump(bio·Node *node, void *impl, io·Putter out) out.put(impl, ')'); } if (node->name) { - out.putstr(impl, node->name); + out.puts(impl, node->name); } if (node->parent) { out.put(impl, ':'); snprintf(b, arrlen(b), "%f", node->dist); - out.putstr(impl, b); + out.puts(impl, b); } return 0; diff --git a/sys/libn/gz.c b/sys/libn/gz.c index c1dda9e..79bc13f 100644 --- a/sys/libn/gz.c +++ b/sys/libn/gz.c @@ -3,6 +3,23 @@ #include +// ----------------------------------------------------------------------- +// interface implementations + +/* actual interfaces */ +io·Reader gz·FileReader = (io·Reader){ gz·read }; +io·Peeker gz·FilePeeker = (io·Peeker){ gz·getbyte, gz·ungetbyte }; +io·FullReader gz·FullFileReader = (io·FullReader){ gz·read, gz·getbyte, gz·ungetbyte }; + +io·Writer gz·FileWriter = (io·Writer){ gz·write }; +io·Putter gz·FilePutter = (io·Putter){ gz·putbyte, gz·putstring }; +io·FullWriter gz·FullFileWriter = (io·FullWriter){ gz·write, gz·putbyte, gz·putstring }; + +io·ReadWriter gz·FileReadWriter = (io·ReadWriter){ gz·read, gz·write }; + +// ----------------------------------------------------------------------- +// functions implementations + gz·Stream* gz·open(byte *path, byte *mode) { diff --git a/sys/libn/io.c b/sys/libn/io.c index 8aa4aa0..f0d270e 100644 --- a/sys/libn/io.c +++ b/sys/libn/io.c @@ -2,55 +2,112 @@ #include // ----------------------------------------------------------------------- -// Open/Close +// interface implementations -Stream* +/* casting functions */ +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); +} + +/* actual interfaces */ +io·Reader sys·Reader = (io·Reader){ ·read }; +io·Peeker sys·Peeker = (io·Peeker){ ·get, ·unget }; +io·FullReader sys·FullReader = (io·FullReader){ ·read, ·get, ·unget }; + +io·Writer sys·Writer = (io·Writer){ ·write }; +io·Putter sys·Putter = (io·Putter){ ·put, ·puts }; +io·FullWriter sys·FullWriter = (io·FullWriter){ ·write, ·put, ·puts }; + +io·ReadWriter sys·ReadWriter = (io·ReadWriter){ ·read, ·write }; + +// ----------------------------------------------------------------------- +// open/close + +io·Stream* io·open(byte *name, byte *mode) { return fopen(name, mode); } int -io·fd(Stream *s) +io·fd(io·Stream *s) { return fileno(s); } error -io·stat(Stream *s, io·Stat *buf) +io·stat(io·Stream *s, io·Stat *buf) { return fstat(fileno(s), buf); } error -io·close(Stream *s) +io·close(io·Stream *s) { return fclose(s); } // ----------------------------------------------------------------------- -// Reading +// reading byte -io·getbyte(Stream *s) +io·getbyte(io·Stream *s) { return fgetc(s); } error -io·ungetbyte(Stream *s, byte c) +io·ungetbyte(io·Stream *s, byte c) { return ungetc(c, s); } int -io·read(Stream *s, int sz, int n, void *buf) +io·read(io·Stream *s, int sz, int n, void *buf) { return fread(buf, sz, n, s); } int -io·readln(Stream *s, int n, byte* buf) +io·readln(io·Stream *s, int n, byte* buf) { byte* b; b = fgets(buf, n+1, s); @@ -61,37 +118,37 @@ io·readln(Stream *s, int n, byte* buf) } // ----------------------------------------------------------------------- -// Writing +// writing error -io·putbyte(Stream *s, byte c) +io·putbyte(io·Stream *s, byte c) { return fputc(c, s); } int -io·putstring(Stream *s, string str) +io·putstring(io·Stream *s, string str) { return fputs(str, s); } int -io·write(Stream *s, int sz, int n, void *buf) +io·write(io·Stream *s, int sz, int n, void *buf) { return fwrite(buf, sz, n, s); } int -io·flush(Stream *s) +io·flush(io·Stream *s) { return fflush(s); } // ----------------------------------------------------------------------- -// Seek +// seek int -io·seek(Stream *s, long off, enum SeekPos origin) +io·seek(io·Stream *s, long off, enum SeekPos origin) { return fseek(s, off, origin); } diff --git a/sys/libn/mmap.c b/sys/libn/mmap.c index 89b7519..b2c436c 100644 --- a/sys/libn/mmap.c +++ b/sys/libn/mmap.c @@ -9,8 +9,8 @@ mmap·open(byte *filename) int fd; int err; void *buf; - Stream *s; - io·Stat st; + io·Stream *s; + io·Stat st; s = io·open(filename, "r"); fd = io·fd(s); -- cgit v1.2.1