diff options
author | glenda <glenda@cirno> | 2022-09-10 16:25:05 +0000 |
---|---|---|
committer | glenda <glenda@cirno> | 2022-09-10 16:25:05 +0000 |
commit | e2ebfbb7d19ff3b990eb51dc9843200053cbbf98 (patch) | |
tree | 986b0353a1179f803872b1578ebfe0acd83050bd /quadnames.c | |
parent | d07d4afcb8acff3757394f2f9822d014f31fecf0 (diff) |
Improve the session a lot
Diffstat (limited to 'quadnames.c')
-rw-r--r-- | quadnames.c | 104 |
1 files changed, 31 insertions, 73 deletions
diff --git a/quadnames.c b/quadnames.c index 90a76ff..7c915eb 100644 --- a/quadnames.c +++ b/quadnames.c @@ -6,11 +6,9 @@ #include "apl9.h" Datum *getquotequad(void); -/* void setquotequad(Datum *); in apl9.h */ +void setquotequad(Datum *); Datum *getquad(void); -void setquad(Datum *); -Datum *getquotequadrawio(void); -void setquotequadrawio(Datum *); +/* void setquad(Datum *); in apl9.h */ Datum *getquadrawio(void); void setquadrawio(Datum *); Datum *getio(void); @@ -37,15 +35,12 @@ Array *quaddl(Array *); Array *quadtasks1(Array *); Array *quadtasks2(Array *, Array *); -int needsnewline = 0; static Rune *quadquotebuf = nil; -static Lock quadlock; static Array *session = nil; QuadnameDef quadnames[] = { {L"⍞", NameTag, getquotequad, setquotequad, nil, nil}, {L"⎕", NameTag, getquad, setquad, nil, nil}, - {L"⍞RAWIO", NameTag, getquotequadrawio, setquotequadrawio, nil, nil}, {L"⎕RAWIO", NameTag, getquadrawio, setquadrawio, nil, nil}, {L"⎕IO", NameTag, getio, setio, nil, nil}, {L"⎕PP", NameTag, getpp, setpp, nil, nil}, @@ -109,47 +104,10 @@ quadnamedatum(QuadnameDef q) Datum * getquotequad(void) { - return getquotequadrawio(); -} - -void -setquotequad(Datum *d) -{ - Rune *str = ppdatum(d); - Array *strarray = mkrunearray(str); - if(session) - rundfn(L"0::⍞RAWIO←⍶ ⋄ ⍺ ⍈ ⍵", d, nil, strarray, session); - else - setquotequadrawio(d); - free(str); - freearray(strarray); -} - -/* ⎕ */ -Datum * -getquad(void) -{ - return getquadrawio(); -} - -void -setquad(Datum *d) -{ - if(session) - rundfn(L"0::⎕RAWIO←⍶ ⋄ ⍶ ⍈ ⍵", d, nil, nil, session); - else - setquadrawio(d); -} - -/* ⍞RAWIO */ -Datum * -getquotequadrawio(void) -{ - lock(&quadlock); int sizemax = 512; int size; Rune *input; - if(needsnewline && quadquotebuf != nil){ + if(quadquotebuf != nil){ input = quadquotebuf; size = runestrlen(input); sizemax = size+1; @@ -171,37 +129,39 @@ getquotequadrawio(void) Datum *result = allocdatum(ArrayTag, 0); result->array = mkrunearray(input); free(input); - unlock(&quadlock); return result; } void -setquotequadrawio(Datum *new) +setquotequad(Datum *d) { - if(new->tag == ArrayTag && GetType(new->array) == AtypeRune){ - for(int i = 0; i < GetSize(new->array); i++) - print("%C", new->array->runedata[i]); - return; - } - lock(&quadlock); + Rune *str = ppdatum(d); + Array *strarray = mkrunearray(str); + if(session) + rundfn(L"0::⎕RAWIO←⍶ ⋄ ('⍞' ⍺) ⍈ ⍵", d, nil, strarray, session); + else + setquadrawio(d); + free(str); + freearray(strarray); +} - - Rune *str = ppdatum(new); - if(needsnewline && quadquotebuf != nil){ - if(quadquotebuf){ - Rune *tmp = quadquotebuf; - quadquotebuf = runesmprint("%S%S", tmp, str); - free(tmp); - } - }else{ - free(quadquotebuf); - quadquotebuf = runestrdup(str); - } +/* ⎕ */ +Datum * +getquad(void) +{ + return getquadrawio(); +} - needsnewline = 1; - print("%S", str); +void +setquad(Datum *d) +{ + Rune *str = ppdatum(d); + Array *strarray = mkrunearray(str); + if(session) + rundfn(L"0::⎕RAWIO←⍶ ⋄ ('⎕' ⍺) ⍈ ⍵", d, nil, strarray, session); + else + setquadrawio(d); free(str); - unlock(&quadlock); } /* ⎕RAWIO */ @@ -220,13 +180,11 @@ setquadrawio(Datum *new) if(new->tag == ArrayTag && GetType(new->array) == AtypeRune){ for(int i = 0; i < GetSize(new->array); i++) print("%C", new->array->runedata[i]); - print("\n"); return; } - lock(&quadlock); - needsnewline = 0; - print("%S\n", ppdatum(new)); - unlock(&quadlock); + Rune *str = ppdatum(new); + print("%S", str); + free(str); } /* ⎕IO */ |