From 080a800ac79ca6a2b6dca46e373561acf6f82745 Mon Sep 17 00:00:00 2001 From: "Jesus Galan Lopez (yy)" Date: Sun, 22 Aug 2021 17:14:38 +0200 Subject: [PATCH] dyadic FChars, FBytes and FLines --- src/builtins/sysfn.c | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/builtins/sysfn.c b/src/builtins/sysfn.c index f11800bf..65440b75 100644 --- a/src/builtins/sysfn.c +++ b/src/builtins/sysfn.c @@ -460,8 +460,11 @@ B fchars_c1(B d, B x) { return file_chars(path_resolve(nfn_objU(d), x)); } B fchars_c2(B d, B w, B x) { - file_wChars(path_resolve(nfn_objU(d), w), x); - return x; + if (!isArr(x)) thrM("•FChars: Non-array 𝕩"); + B p = inc(path_resolve(nfn_objU(d), w)); + file_wChars(p, x); + dec(x); + return p; } static NFnDesc* fBytesDesc; B fbytes_c1(B d, B x) { @@ -472,10 +475,34 @@ B fbytes_c1(B d, B x) { ptr_dec(tf); return r; } +B fbytes_c2(B d, B w, B x) { + if (!isArr(x)) thrM("•FBytes: Non-array 𝕩"); + B p = inc(path_resolve(nfn_objU(d), w)); + file_wBytes(p, x); + dec(x); + return p; +} static NFnDesc* fLinesDesc; B flines_c1(B d, B x) { return file_lines(path_resolve(nfn_objU(d), x)); } +B flines_c2(B d, B w, B x) { + if (!isArr(x)) thrM("•FLines: Non-array 𝕩"); + B nl, s = emptyCVec(); + usz ia = a(x)->ia; + for (u64 i = 0; i < ia; i++) { + nl = TI(x,get)(x, i); + if (!isArr(nl)) thrM("•FLines: Non-array element of 𝕩"); + s = vec_join(s, nl); + //if (windows) s = vec_add(s, m_c32('\r')); + s = vec_add(s, m_c32('\n')); + } + dec(x); + B p = inc(path_resolve(nfn_objU(d), w)); + file_wChars(p, s); + dec(s); + return p; +} static NFnDesc* importDesc; B import_c1(B d, B x) { return bqn_execFile(path_resolve(nfn_objU(d), x), emptySVec()); } B import_c2(B d, B w, B x) { return bqn_execFile(path_resolve(nfn_objU(d), x), w); } @@ -645,8 +672,8 @@ B sys_c1(B t, B x) { void sysfn_init() { fCharsDesc = registerNFn(m_str32(U"•FChars"), fchars_c1, fchars_c2); - fLinesDesc = registerNFn(m_str32(U"•FLines"), flines_c1, c2_invalid); - fBytesDesc = registerNFn(m_str32(U"•FBytes"), fbytes_c1, c2_invalid); + fLinesDesc = registerNFn(m_str32(U"•FLines"), flines_c1, flines_c2); + fBytesDesc = registerNFn(m_str32(U"•FBytes"), fbytes_c1, fbytes_c2); importDesc = registerNFn(m_str32(U"•Import"), import_c1, import_c2); makeREPLDesc = registerNFn(m_str32(U"(REPL)"), repl_c1, repl_c2); listDesc = registerNFn(m_str32(U"•file.List"), list_c1, c2_invalid);