I've been working on this slowly over several weeks, but it's too hard
to support 0 as the null value for addresses. I constantly have to add
exceptions for scalar value corresponding to an address type (now
occupying 2 locations). The final straw is the test for 'reload':
x:num <- reload text
'reload' returns an address. But there's no way to know that for
arbitrary instructions.
New plan: let's put this off for a bit and first create support for
literals. Then use 'null' instead of '0' for addresses everywhere. Then
it'll be easy to just change what 'null' means.
Required fixing an off-by-one error.
(Not bothering writing a test for this since I'm hoping to simplify
$read-from-socket to always return a single character..)
In the process I've also altered the API of $read-from-socket to return
a boolean (eof?) rather than the number of bytes read (which is implicit
in the length of the returned array).
Includes four Mu functions:
- $socket: Creates the C structure for a socket and tries to bind and
listen on a user-provided port.
- $accept: Returns a number pointer to a new socket session. Should
be called with the result of $socket.
- $read-from-socket: Read one character from the socket, passed in
as a Mu number. Should only be called after calling $socket and
$accept.
- $close-socket: Takes two parameters, one for the result of $socket
and one for the result of $accept, closing both sockets
and releasing bound ports.