argument "-" for stdin file
This commit is contained in:
parent
59a9a5daf4
commit
6f99b58099
@ -1,6 +1,9 @@
|
|||||||
B m_str8(usz sz, char* s);
|
B m_str8(usz sz, char* s);
|
||||||
B m_str8l(char* s);
|
B m_str8l(char* s);
|
||||||
B m_str32(u32* s);
|
B m_str32(u32* s);
|
||||||
|
B m_str8l(char* s);
|
||||||
|
B fromUTF8l(char* x);
|
||||||
|
B fromUTF8a(I8Arr* x);
|
||||||
|
|
||||||
C8Arr* cpyC8Arr (B x); // consumes
|
C8Arr* cpyC8Arr (B x); // consumes
|
||||||
C16Arr* cpyC16Arr(B x); // consumes
|
C16Arr* cpyC16Arr(B x); // consumes
|
||||||
|
|||||||
@ -118,8 +118,6 @@ static bool elNum(u8 x) {
|
|||||||
|
|
||||||
// string stuff
|
// string stuff
|
||||||
|
|
||||||
B m_str8l(char* s);
|
|
||||||
B fromUTF8l(char* x);
|
|
||||||
i32 num_fmt(char buf[30], f64 x);
|
i32 num_fmt(char buf[30], f64 x);
|
||||||
#define NUM_FMT_BUF(N,X) char N[30]; num_fmt(N, X);
|
#define NUM_FMT_BUF(N,X) char N[30]; num_fmt(N, X);
|
||||||
B append_fmt(B s, char* p, ...);
|
B append_fmt(B s, char* p, ...);
|
||||||
|
|||||||
16
src/main.c
16
src/main.c
@ -53,11 +53,13 @@ int main(int argc, char* argv[]) {
|
|||||||
#endif
|
#endif
|
||||||
bool startREPL = argc==1;
|
bool startREPL = argc==1;
|
||||||
bool silentREPL = false;
|
bool silentREPL = false;
|
||||||
|
bool execStdin = false;
|
||||||
if (!startREPL) {
|
if (!startREPL) {
|
||||||
i32 i = 1;
|
i32 i = 1;
|
||||||
while (i!=argc) {
|
while (i!=argc) {
|
||||||
char* carg = argv[i];
|
char* carg = argv[i];
|
||||||
if (carg[0]!='-') break;
|
if (carg[0]!='-') break;
|
||||||
|
if (carg[1]==0) { execStdin=true; i++; break; }
|
||||||
i++;
|
i++;
|
||||||
if (carg[1]=='-') {
|
if (carg[1]=='-') {
|
||||||
if (!strcmp(carg, "--help")) {
|
if (!strcmp(carg, "--help")) {
|
||||||
@ -131,9 +133,10 @@ int main(int argc, char* argv[]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
execFile:
|
execFile:
|
||||||
if (i!=argc) {
|
if (i!=argc || execStdin) {
|
||||||
repl_init();
|
repl_init();
|
||||||
B src = fromUTF8l(argv[i++]);
|
B src;
|
||||||
|
if (!execStdin) src = fromUTF8l(argv[i++]);
|
||||||
B args;
|
B args;
|
||||||
if (i==argc) {
|
if (i==argc) {
|
||||||
args = emptySVec();
|
args = emptySVec();
|
||||||
@ -144,7 +147,14 @@ int main(int argc, char* argv[]) {
|
|||||||
}
|
}
|
||||||
args = ap.b;
|
args = ap.b;
|
||||||
}
|
}
|
||||||
dec(bqn_execFile(src, args));
|
|
||||||
|
B execRes;
|
||||||
|
if (execStdin) {
|
||||||
|
execRes = gsc_exec_inline(fromUTF8a(stdin_allBytes()), m_str8l("(-)"), args);
|
||||||
|
} else {
|
||||||
|
execRes = bqn_execFile(src, args);
|
||||||
|
}
|
||||||
|
dec(execRes);
|
||||||
#ifdef HEAP_VERIFY
|
#ifdef HEAP_VERIFY
|
||||||
heapVerify();
|
heapVerify();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -37,10 +37,7 @@ I8Arr* file_bytes(B path) { // consumes
|
|||||||
return src;
|
return src;
|
||||||
}
|
}
|
||||||
B file_chars(B path) { // consumes
|
B file_chars(B path) { // consumes
|
||||||
I8Arr* c = file_bytes(path);
|
return fromUTF8a(file_bytes(path));
|
||||||
B r = fromUTF8((char*)c->a, c->ia);
|
|
||||||
ptr_dec(c);
|
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
B file_lines(B path) { // consumes
|
B file_lines(B path) { // consumes
|
||||||
I8Arr* tf = file_bytes(path);
|
I8Arr* tf = file_bytes(path);
|
||||||
@ -68,6 +65,21 @@ B file_lines(B path) { // consumes
|
|||||||
return harr_fv(r);
|
return harr_fv(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
I8Arr* stdin_allBytes() {
|
||||||
|
B r = emptyIVec();
|
||||||
|
u64 SZ = 8192;
|
||||||
|
TALLOC(i8, t, SZ);
|
||||||
|
while(true) {
|
||||||
|
u64 read = fread(t, 1, SZ, stdin);
|
||||||
|
if (read==0) break;
|
||||||
|
i8* ap; B a = m_i8arrv(&ap, read);
|
||||||
|
memcpy(ap, t, read);
|
||||||
|
r = vec_join(r, a);
|
||||||
|
}
|
||||||
|
TFREE(t);
|
||||||
|
return toI8Arr(r);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
B path_resolve(B base, B rel) { // consumes rel; assumes base is a char vector or bi_N
|
B path_resolve(B base, B rel) { // consumes rel; assumes base is a char vector or bi_N
|
||||||
|
|||||||
@ -10,6 +10,8 @@ I8Arr* file_bytes(B path); // consumes
|
|||||||
B file_chars(B path); // consumes
|
B file_chars(B path); // consumes
|
||||||
B file_lines(B path); // consumes
|
B file_lines(B path); // consumes
|
||||||
|
|
||||||
|
I8Arr* stdin_allBytes();
|
||||||
|
|
||||||
void file_wChars(B path, B x); // consumes path
|
void file_wChars(B path, B x); // consumes path
|
||||||
void file_wBytes(B path, B x); // consumes path
|
void file_wBytes(B path, B x); // consumes path
|
||||||
|
|
||||||
|
|||||||
@ -49,6 +49,12 @@ B fromUTF8l(char* s) {
|
|||||||
return fromUTF8(s, strlen(s));
|
return fromUTF8(s, strlen(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
B fromUTF8a(I8Arr* a) { // consumes a
|
||||||
|
B r = fromUTF8((char*)a->a, a->ia);
|
||||||
|
ptr_dec(a);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
void printUTF8(u32 c) {
|
void printUTF8(u32 c) {
|
||||||
if (c<128) printf("%c", c);
|
if (c<128) printf("%c", c);
|
||||||
else if (c<=0x07FF) printf("%c%c" , 0xC0| c>>6 , 0x80|(c &0x3F) );
|
else if (c<=0x07FF) printf("%c%c" , 0xC0| c>>6 , 0x80|(c &0x3F) );
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user