mirror of
https://github.com/20kdc/OC-KittenOS.git
synced 2024-12-28 11:58:07 +11:00
115 lines
2.7 KiB
Plaintext
115 lines
2.7 KiB
Plaintext
The "svc-t" program / "x.neo.pub.t"
|
|
permission makes up the terminal
|
|
subsystem for KittenOS NEO.
|
|
|
|
--- THEORETICAL TERMINALS MODEL ---
|
|
|
|
The theoretical model for terminals
|
|
in KittenOS NEO is a TELNET client,
|
|
using the non-standard behavior of
|
|
treating a lack of remote echo as
|
|
meaning 'local line editing'.
|
|
|
|
To prevent code size going too far,
|
|
the shipped terminal supports:
|
|
|
|
1. Built-in history as part of the
|
|
line editing functionality
|
|
|
|
2. ANSI.SYS-compatible display, but
|
|
no support for attributes.
|
|
|
|
If you really want full support,
|
|
write a better terminal application.
|
|
|
|
A process starting another process
|
|
connected to the same terminal is
|
|
advised to wait for that process to
|
|
die before continuing reading input.
|
|
|
|
The controlling process is whichever
|
|
process is supposed to be accepting
|
|
user input. This is contextual, and
|
|
there is no mechanism to control
|
|
this explicitly.
|
|
|
|
The controlling process should show
|
|
text in response to any user input,
|
|
or at least provide some form of
|
|
acknowledgement that user input has
|
|
been received.
|
|
|
|
For convenience, terminal echo is on
|
|
by default; this is easily remedied.
|
|
|
|
--- ACTUAL USAGE OF TERMINALS ---
|
|
|
|
Access control on terminals is looser
|
|
than for most permissions, as it has
|
|
to be able to be 'sublet' in some
|
|
cases, including events.
|
|
|
|
As such, the secret flag is set for
|
|
terminal registration.
|
|
|
|
A terminal program is given a string
|
|
argument for the ID of the terminal
|
|
to connect to.
|
|
|
|
A terminal always has an ID beginning
|
|
with "x.neo.pub.t/". ALWAYS CHECK.
|
|
|
|
Requiring the responsible access
|
|
connects to the terminal. All
|
|
terminal programs SHOULD check for
|
|
the death of their parent terminal
|
|
(via the k.procdie event) and
|
|
self-destruct accordingly.
|
|
|
|
A program may start svc-t directly.
|
|
|
|
In this case, it must pass a function
|
|
(resTbl) and may pass a title.
|
|
|
|
When the terminal has shown, the
|
|
function provided is called with a
|
|
table as follows:
|
|
|
|
access = "x.neo.pub.t/<...>"
|
|
close = function (): close terminal
|
|
|
|
The k.kill permission and the close
|
|
function are the only ways for a
|
|
program to kill a terminal, and the
|
|
close function is only given to the
|
|
creating process.
|
|
|
|
In either case, when the access has
|
|
been acquired, the following API is
|
|
presented:
|
|
|
|
id = "x.neo.pub.t/<...>"
|
|
pid = <The terminal's PID.>
|
|
write = function (text): Writes the
|
|
TELNET data to the terminal.
|
|
|
|
User input is provided in events:
|
|
<id>, "data", <data>
|
|
|
|
TELNET commands are provided in:
|
|
<id>, "telnet", <data>
|
|
|
|
There is a total of one TELNET
|
|
command per event, unpadded.
|
|
|
|
Notably, intermixing the data part
|
|
of the data/telnet events in order
|
|
produces the full terminal-to-server
|
|
TELNET stream.
|
|
|
|
-- This is released into
|
|
the public domain.
|
|
-- No warranty is provided,
|
|
implied or otherwise.
|
|
|