This is a list of all the currently available I/O functions in Migol 11.
I/O operations are initiated by writing pointers to data structures to the execution register, !. This page describes the format of each structure and the associated I/O operation.
I/O function list
Immediate interrupt
|
Position
|
Value
|
0
|
5
|
Adds the operation data structure to the interrupt queue immediately. Can be used for software interrupts.
|
Read from I/O channel
|
Position
|
Value
|
0
|
10
|
1
|
I/O handle
|
2
|
Read buffer address
|
3
|
Read buffer length
|
4
|
Error number
|
5
|
Number of bytes read (-1 if error)
|
Reads as many bytes as possible from the I/O channel to the buffer.
|
Write to I/O channel
|
Position
|
Value
|
0
|
11
|
1
|
I/O handle
|
2
|
Write buffer address
|
3
|
Write buffer length
|
4
|
Error number
|
5
|
Number of bytes written (-1 if error)
|
Writes as many bytes as possible from buffer to the I/O channel
|
Close I/O channel
|
Position
|
Value
|
0
|
12
|
1
|
I/O handle
|
2
|
Error number
|
Closes the I/O channel
|
Open file channel
|
Position
|
Value
|
0
|
20
|
1
|
File name address
|
2
|
File name length
|
3
|
File mode
|
4
|
Error number
|
5
|
New file channel handle (-1 if operation fails)
|
Opens a new file channel
|
Get file channel position
|
Position
|
Value
|
0
|
24
|
1
|
File channel handle
|
2
|
Error number
|
3
|
File channel position (-1 if the operation fails)
|
Obtains the current file position of the file channel
|
Set file channel position
|
Position
|
Value
|
0
|
25
|
1
|
File channel handle
|
2
|
New file channel position
|
3
|
Error number
|
Sets the file position of the file channel
|
Get file size
|
Position
|
Value
|
0
|
26
|
1
|
File channel handle
|
2
|
Error number
|
3
|
File size (-1 if the operation fails)
|
Obtains the file size of the file channel
|
Open TCP socket
|
Position
|
Value
|
0
|
30
|
1
|
IP address type
|
2
|
Pointer to IP address
|
3
|
Port number
|
4
|
Error number
|
5
|
Socket channel handle
|
Opens a connection to a TCP socket
|
Open server socket
|
Position
|
Value
|
0
|
31
|
1
|
Port number
|
2
|
Error number
|
3
|
New server socket channel handle
|
Opens a new server socket for listening to incoming TCP connections
|
Listen to server socket
|
Position
|
Value
|
0
|
32
|
1
|
Server socket handle
|
2
|
Error number
|
3
|
New socket channel handle
|
Listens to a incoming connection from a specific server socket and creates a new TCP connection.
|
Resolve DNS Address to IP Address
|
Position
|
Value
|
0
|
34
|
1
|
DNS name memory address
|
2
|
DNS name memory length
|
3
|
Address where the IP address is saved
|
4
|
Error number
|
5
|
IP address type
|
Resolves a DNS name to a IPv4 or IPv6 address
|
Get current time in milliseconds
|
Position
|
Value
|
0
|
70
|
1
|
The current time
|
Obtains the current system time, measured in milliseconds.
|
Timed interrupt
|
Position
|
Value
|
0
|
71
|
1
|
Delay until interrupt occurs
|
2
|
Time in milliseconds when the interrupt occured
|
Schedules an interrupt after a specific amount of milliseconds. This feature can be used to implement preemptive multitasking.
|
Various tables
Predefined I/O channels
Number
|
Description
|
1
|
STDIN
|
2
|
STDOUT
|
3
|
STDERR
|
IP address types
Number
|
Description
|
0
|
IPv4, each byte is stored in a separate memory cell
|
1
|
IPv6, each byte is stored in a separate memory cell
|
File opening mode
Number
|
Description
|
0
|
Read-only
|
1
|
Read and write
|
I/O error numbers
Number
|
Description
|
0
|
No error
|
1
|
Unspecified I/O error
|
2
|
I/O channel does not exist
|
3
|
Illegal operation argument
|
4
|
Operation not supported for this channel
|
5
|
Operation refused by operating system/runtime
|