summaryrefslogtreecommitdiff
path: root/quadnames.c
diff options
context:
space:
mode:
authorglenda <glenda@cirno>2022-09-10 16:25:05 +0000
committerglenda <glenda@cirno>2022-09-10 16:25:05 +0000
commite2ebfbb7d19ff3b990eb51dc9843200053cbbf98 (patch)
tree986b0353a1179f803872b1578ebfe0acd83050bd /quadnames.c
parentd07d4afcb8acff3757394f2f9822d014f31fecf0 (diff)
Improve the session a lot
Diffstat (limited to 'quadnames.c')
-rw-r--r--quadnames.c104
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 */