diff options
author | glenda <glenda@cirno> | 2022-09-09 21:06:16 +0000 |
---|---|---|
committer | glenda <glenda@cirno> | 2022-09-09 21:06:16 +0000 |
commit | d2b44ec9fc7bf4687dae74edfe708395461b5b6e (patch) | |
tree | 8c85d770449928e30c0d4e7eb89460334c16772e /quadnames.c | |
parent | a63358d02ae15ff9a62961d46e58bff26dbab68c (diff) |
Cleanup threads and add a ⎕TASKS system function
Diffstat (limited to 'quadnames.c')
-rw-r--r-- | quadnames.c | 33 |
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]); +} + + + |