aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorNicholas Noll <nbnoll@eml.cc>2020-06-18 19:45:40 -0700
committerNicholas Noll <nbnoll@eml.cc>2020-06-18 19:45:40 -0700
commit425ef692da7e74112f88f0b368f3286dba84f846 (patch)
treed45729e90010e8d8c539031c3b72165f6884575d /include
parent0522b4bf4e125b7ceb67f7177db692aed3a0ebf9 (diff)
feat: working parser for rc shell language
Diffstat (limited to 'include')
-rw-r--r--include/libn.h56
-rw-r--r--include/u.h5
2 files changed, 47 insertions, 14 deletions
diff --git a/include/libn.h b/include/libn.h
index f30a761..81ddc9f 100644
--- a/include/libn.h
+++ b/include/libn.h
@@ -100,7 +100,7 @@ uintptr coro·yield(Coro *c, uintptr arg);
error coro·free(Coro *c);
// -----------------------------------------------------------------------------
-// Strings
+// strings
typedef byte* string;
@@ -161,7 +161,7 @@ int utf8·isspace(rune r);
int utf8·istitle(rune r);
// -----------------------------------------------------------------------------
-// I/O
+// i/o
typedef FILE Stream;
typedef struct stat io·Stat;
@@ -300,6 +300,37 @@ mmap·Reader mmap·open(byte *name);
error mmap·close(mmap·Reader rdr);
// -----------------------------------------------------------------------------
+// filesystem
+
+#define iota(x) 1 << (x)
+enum
+{
+ fs·preorder = iota(0),
+ fs·nolinks = iota(1),
+ fs·verbose = iota(2),
+};
+#undef iota
+
+typedef struct fs·Walker fs·Walker;
+typedef struct fs·History fs·History;
+
+struct fs·Walker
+{
+ int fd, lev, max, err;
+ uchar flags : 4;
+ fs·History *hist;
+ struct {
+ void *data;
+ void (*func)(void *data, char *relp, char *absp, io·Stat* info);
+ };
+ char *base, *end, path[4096];
+};
+
+int fs·init(fs·Walker *, char *path);
+void fs·fini(fs·Walker *);
+void fs·walk(fs·Walker *);
+
+// -----------------------------------------------------------------------------
// libflate
// NOTE: Experimental!
@@ -339,6 +370,7 @@ vlong gz·seek(gz·Stream *s, long off, enum SeekPos whence);
// -----------------------------------------------------------------------------
// error handling functions
+void exits(char *s);
void errorf(byte* fmt, ...);
void verrorf(byte* fmt, va_list args);
void panicf(byte *fmt, ...);
@@ -389,16 +421,16 @@ uint64 rng·randi(int max);
#endif
extern char *argv0;
-#define ARGBEGIN for((argv0?0:(argv0=*argv)),argv++,argc--;\
- argv[0] && argv[0][0]=='-' && argv[0][1];\
- argc--, argv++) {\
- byte *_args, *_argt;\
- rune _argc;\
- _args = &argv[0][1];\
- if(_args[0]=='-' && _args[1]==0){\
- argc--; argv++; break;\
- }\
- _argc = 0;\
+#define ARGBEGIN for((argv0?0:(argv0=*argv)),argv++,argc--; \
+ argv[0] && argv[0][0]=='-' && argv[0][1]; \
+ argc--, argv++) { \
+ byte *_args, *_argt; \
+ rune _argc; \
+ _args = &argv[0][1]; \
+ if(_args[0]=='-' && _args[1]==0){ \
+ argc--; argv++; break; \
+ } \
+ _argc = 0; \
while(*_args && (_args += utf8·bytetorune(&_argc, _args)))\
switch(_argc)
#define ARGEND SET(_argt);USED(_argt);USED(_argc);USED(_args);}USED(argv);USED(argc);
diff --git a/include/u.h b/include/u.h
index 617e41b..3cf3c7b 100644
--- a/include/u.h
+++ b/include/u.h
@@ -59,5 +59,6 @@ typedef int error;
#define arrlen(Array) (sizeof(Array) / sizeof((Array)[0]))
#define arrend(Array) ((Array) + arrlen(Array))
-#define MAX(x, y) ((x) >= (y) ? (x) : (y))
-#define MIN(x, y) ((x) < (y) ? (x) : (y))
+#define MAX(x, y) (((x) > (y)) ? (x) : (y))
+#define MIN(x, y) (((x) < (y)) ? (x) : (y))
+#define CLAMP(x, lo, hi) (((x) < (lo)) ? (lo) : (((x) > (hi)) ? (hi) : (x)))