summaryrefslogtreecommitdiff
path: root/quadnames.c
diff options
context:
space:
mode:
authorglenda <glenda@cirno>2022-09-09 21:06:16 +0000
committerglenda <glenda@cirno>2022-09-09 21:06:16 +0000
commitd2b44ec9fc7bf4687dae74edfe708395461b5b6e (patch)
tree8c85d770449928e30c0d4e7eb89460334c16772e /quadnames.c
parenta63358d02ae15ff9a62961d46e58bff26dbab68c (diff)
Cleanup threads and add a ⎕TASKS system function
Diffstat (limited to 'quadnames.c')
-rw-r--r--quadnames.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/quadnames.c b/quadnames.c
index bd98b9d..e3d3ca8 100644
--- a/quadnames.c
+++ b/quadnames.c
@@ -28,6 +28,8 @@ Array *quadinfo(Array *);
Array *quadproto(Array *);
Array *quaducs(Array *);
Array *quaddl(Array *);
+Array *quadtasks1(Array *);
+Array *quadtasks2(Array *, Array *);
int needsnewline = 0;
static Rune *quadquotebuf = nil;
@@ -50,6 +52,7 @@ QuadnameDef quadnames[] = {
{L"⎕PROTO", FunctionTag, nil, nil, quadproto, nil},
{L"⎕UCS", FunctionTag, nil, nil, quaducs, nil},
{L"⎕DL", FunctionTag, nil, nil, quaddl, nil},
+ {L"⎕TASKS", FunctionTag, nil, nil, quadtasks1, quadtasks2},
{nil, 0, nil, nil, nil, nil} /* MUST BE LAST */
};
@@ -410,4 +413,32 @@ quaddl(Array *a)
else
throwerror(nil, EDomain);
return fnSame(a);
-} \ No newline at end of file
+}
+
+/* ⎕TASKS */
+Array *
+quadtasks1(Array *properties)
+{
+ Array *threadids = runningtasks();
+ Array *res = rundfn(L"⍺ ⎕TASKS ⍵", nil, nil, threadids, properties);
+ freearray(threadids);
+ return res;
+}
+
+/* ⎕TASKS */
+Array *
+quadtasks2(Array *task, Array *property)
+{
+ if(GetType(task) != AtypeInt || GetType(property) != AtypeInt)
+ throwerror(nil, EDomain);
+ if(GetRank(task) > 1 || GetRank(property) > 1)
+ throwerror(nil, ERank);
+ if(GetRank(task) > 0 || GetRank(property) > 0)
+ return rundfn(L"⍺ ⎕TASKS⌾ ⍵", nil, nil, task, property);
+
+ /* Get task with ID task, and property based on number in property */
+ return taskproperty(task->intdata[0], property->intdata[0]);
+}
+
+
+