mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 23:28:48 +00:00
Merge pull request #4110 from andradei/termios-linux
Add support for Linux on os/sys/posix termios.
This commit is contained in:
+178
-52
@@ -88,7 +88,7 @@ foreign lib {
|
|||||||
|
|
||||||
[[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcsetattr.html ]]
|
[[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/tcsetattr.html ]]
|
||||||
*/
|
*/
|
||||||
tcsetattr :: proc(fildes: FD, optional_actions: c.int, termios_p: ^termios) -> result ---
|
tcsetattr :: proc(fildes: FD, optional_actions: TC_Optional_Action, termios_p: ^termios) -> result ---
|
||||||
}
|
}
|
||||||
|
|
||||||
Control_Char :: enum c.int {
|
Control_Char :: enum c.int {
|
||||||
@@ -219,6 +219,12 @@ TC_Action :: enum c.int {
|
|||||||
TCOON = TCOON,
|
TCOON = TCOON,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TC_Optional_Action :: enum c.int {
|
||||||
|
TCSANOW,
|
||||||
|
TCSADRAIN,
|
||||||
|
TCSAFLUSH,
|
||||||
|
}
|
||||||
|
|
||||||
TC_Queue :: enum c.int {
|
TC_Queue :: enum c.int {
|
||||||
TCIFLUSH = TCIFLUSH,
|
TCIFLUSH = TCIFLUSH,
|
||||||
TCOFLUSH = TCOFLUSH,
|
TCOFLUSH = TCOFLUSH,
|
||||||
@@ -268,34 +274,34 @@ when ODIN_OS == .Darwin {
|
|||||||
IXOFF :: 0x00000400
|
IXOFF :: 0x00000400
|
||||||
IXANY :: 0x00000800
|
IXANY :: 0x00000800
|
||||||
|
|
||||||
OPOST :: 0x00000001
|
OPOST :: 0x00000001
|
||||||
ONLCR :: 0x00000002
|
ONLCR :: 0x00000002
|
||||||
OCRNL :: 0x00000010
|
OCRNL :: 0x00000010
|
||||||
ONOCR :: 0x00000020
|
ONOCR :: 0x00000020
|
||||||
ONLRET :: 0x00000040
|
ONLRET :: 0x00000040
|
||||||
OFDEL :: 0x00020000
|
OFDEL :: 0x00020000
|
||||||
OFILL :: 0x00000080
|
OFILL :: 0x00000080
|
||||||
_NLDLY :: 0x00000300
|
_NLDLY :: 0x00000300
|
||||||
NL0 :: 0x00000000
|
NL0 :: 0x00000000
|
||||||
NL1 :: 0x00000100
|
NL1 :: 0x00000100
|
||||||
_CRDLY :: 0x00003000
|
_CRDLY :: 0x00003000
|
||||||
CR0 :: 0x00000000
|
CR0 :: 0x00000000
|
||||||
CR1 :: 0x00001000
|
CR1 :: 0x00001000
|
||||||
CR2 :: 0x00002000
|
CR2 :: 0x00002000
|
||||||
CR3 :: 0x00003000
|
CR3 :: 0x00003000
|
||||||
_TABDLY :: 0x00000c04
|
_TABDLY :: 0x00000c04
|
||||||
TAB0 :: 0x00000000
|
TAB0 :: 0x00000000
|
||||||
TAB1 :: 0x00000400
|
TAB1 :: 0x00000400
|
||||||
TAB3 :: 0x00000800
|
TAB3 :: 0x00000800
|
||||||
_BSDLY :: 0x00008000
|
_BSDLY :: 0x00008000
|
||||||
BS0 :: 0x00000000
|
BS0 :: 0x00000000
|
||||||
BS1 :: 0x00008000
|
BS1 :: 0x00008000
|
||||||
_VTDLY :: 0x00010000
|
_VTDLY :: 0x00010000
|
||||||
VT0 :: 0x00000000
|
VT0 :: 0x00000000
|
||||||
VT1 :: 0x00010000
|
VT1 :: 0x00010000
|
||||||
_FFDLY :: 0x00004000
|
_FFDLY :: 0x00004000
|
||||||
FF0 :: 0x00000000
|
FF0 :: 0x00000000
|
||||||
FF1 :: 0x00004000
|
FF1 :: 0x00004000
|
||||||
|
|
||||||
B0 :: 0
|
B0 :: 0
|
||||||
B50 :: 50
|
B50 :: 50
|
||||||
@@ -398,29 +404,29 @@ when ODIN_OS == .Darwin {
|
|||||||
ONOCR :: 0x00000020
|
ONOCR :: 0x00000020
|
||||||
ONLRET :: 0x00000040
|
ONLRET :: 0x00000040
|
||||||
}
|
}
|
||||||
OFDEL :: 0x00020000 // NOTE: not in headers
|
OFDEL :: 0x00020000 // NOTE: not in headers
|
||||||
OFILL :: 0x00000080 // NOTE: not in headers
|
OFILL :: 0x00000080 // NOTE: not in headers
|
||||||
_NLDLY :: 0x00000300 // NOTE: not in headers
|
_NLDLY :: 0x00000300 // NOTE: not in headers
|
||||||
NL0 :: 0x00000000 // NOTE: not in headers
|
NL0 :: 0x00000000 // NOTE: not in headers
|
||||||
NL1 :: 0x00000100 // NOTE: not in headers
|
NL1 :: 0x00000100 // NOTE: not in headers
|
||||||
_CRDLY :: 0x00003000 // NOTE: not in headers
|
_CRDLY :: 0x00003000 // NOTE: not in headers
|
||||||
CR0 :: 0x00000000 // NOTE: not in headers
|
CR0 :: 0x00000000 // NOTE: not in headers
|
||||||
CR1 :: 0x00001000 // NOTE: not in headers
|
CR1 :: 0x00001000 // NOTE: not in headers
|
||||||
CR2 :: 0x00002000 // NOTE: not in headers
|
CR2 :: 0x00002000 // NOTE: not in headers
|
||||||
CR3 :: 0x00003000 // NOTE: not in headers
|
CR3 :: 0x00003000 // NOTE: not in headers
|
||||||
_TABDLY :: 0x00000004 // NOTE: not in headers (netbsd)
|
_TABDLY :: 0x00000004 // NOTE: not in headers (netbsd)
|
||||||
TAB0 :: 0x00000000 // NOTE: not in headers (netbsd)
|
TAB0 :: 0x00000000 // NOTE: not in headers (netbsd)
|
||||||
TAB1 :: 0x00000004 // NOTE: not in headers
|
TAB1 :: 0x00000004 // NOTE: not in headers
|
||||||
TAB3 :: 0x00000004 // NOTE: not in headers (netbsd)
|
TAB3 :: 0x00000004 // NOTE: not in headers (netbsd)
|
||||||
_BSDLY :: 0x00008000 // NOTE: not in headers
|
_BSDLY :: 0x00008000 // NOTE: not in headers
|
||||||
BS0 :: 0x00000000 // NOTE: not in headers
|
BS0 :: 0x00000000 // NOTE: not in headers
|
||||||
BS1 :: 0x00008000 // NOTE: not in headers
|
BS1 :: 0x00008000 // NOTE: not in headers
|
||||||
_VTDLY :: 0x00010000 // NOTE: not in headers
|
_VTDLY :: 0x00010000 // NOTE: not in headers
|
||||||
VT0 :: 0x00000000 // NOTE: not in headers
|
VT0 :: 0x00000000 // NOTE: not in headers
|
||||||
VT1 :: 0x00010000 // NOTE: not in headers
|
VT1 :: 0x00010000 // NOTE: not in headers
|
||||||
_FFDLY :: 0x00004000 // NOTE: not in headers
|
_FFDLY :: 0x00004000 // NOTE: not in headers
|
||||||
FF0 :: 0x00000000 // NOTE: not in headers
|
FF0 :: 0x00000000 // NOTE: not in headers
|
||||||
FF1 :: 0x00004000 // NOTE: not in headers
|
FF1 :: 0x00004000 // NOTE: not in headers
|
||||||
|
|
||||||
B0 :: 0
|
B0 :: 0
|
||||||
B50 :: 50
|
B50 :: 50
|
||||||
@@ -470,6 +476,126 @@ when ODIN_OS == .Darwin {
|
|||||||
TCOOFF :: 1
|
TCOOFF :: 1
|
||||||
TCOON :: 2
|
TCOON :: 2
|
||||||
|
|
||||||
|
} else when ODIN_OS == .Linux {
|
||||||
|
cc_t :: distinct c.uchar
|
||||||
|
_speed_t :: distinct c.uint
|
||||||
|
tcflag_t :: distinct c.uint
|
||||||
|
|
||||||
|
termios :: struct {
|
||||||
|
c_iflag: CInput_Flags, /* [XBD] input flags */
|
||||||
|
c_oflag: COutput_Flags, /* [XBD] output flags */
|
||||||
|
c_cflag: CControl_Flags, /* [XBD] control flags */
|
||||||
|
c_lflag: CLocal_Flags, /* [XBD] local flag */
|
||||||
|
c_line: cc_t, /* control characters */
|
||||||
|
c_cc: #sparse [Control_Char]cc_t, /* [XBD] control chars */
|
||||||
|
c_ispeed: speed_t, /* input speed */
|
||||||
|
c_ospeed: speed_t, /* output speed */
|
||||||
|
}
|
||||||
|
|
||||||
|
NCCS :: 32
|
||||||
|
|
||||||
|
VINTR :: 0
|
||||||
|
VQUIT :: 1
|
||||||
|
VERASE :: 2
|
||||||
|
VKILL :: 3
|
||||||
|
VEOF :: 4
|
||||||
|
VTIME :: 5
|
||||||
|
VMIN :: 6
|
||||||
|
VSTART :: 8
|
||||||
|
VSTOP :: 9
|
||||||
|
VSUSP :: 10
|
||||||
|
VEOL :: 11
|
||||||
|
|
||||||
|
IGNBRK :: 0x00000001
|
||||||
|
BRKINT :: 0x00000002
|
||||||
|
IGNPAR :: 0x00000004
|
||||||
|
PARMRK :: 0x00000008
|
||||||
|
INPCK :: 0x00000010
|
||||||
|
ISTRIP :: 0x00000020
|
||||||
|
INLCR :: 0x00000040
|
||||||
|
IGNCR :: 0x00000080
|
||||||
|
ICRNL :: 0x00000100
|
||||||
|
IXON :: 0x00000400
|
||||||
|
IXOFF :: 0x00001000
|
||||||
|
IXANY :: 0x00000800
|
||||||
|
|
||||||
|
OPOST :: 0x00000001
|
||||||
|
ONLCR :: 0x00000004
|
||||||
|
OCRNL :: 0x00000008
|
||||||
|
ONOCR :: 0x00000010
|
||||||
|
ONLRET :: 0x00000020
|
||||||
|
OFDEL :: 0x00000080
|
||||||
|
OFILL :: 0x00000040
|
||||||
|
_NLDLY :: 0x00000100
|
||||||
|
NL0 :: 0x00000000
|
||||||
|
NL1 :: 0x00000100
|
||||||
|
_CRDLY :: 0x00000600
|
||||||
|
CR0 :: 0x00000000
|
||||||
|
CR1 :: 0x00000200
|
||||||
|
CR2 :: 0x00000400
|
||||||
|
CR3 :: 0x00000600
|
||||||
|
_TABDLY :: 0x00001800
|
||||||
|
TAB0 :: 0x00000000
|
||||||
|
TAB1 :: 0x00000800
|
||||||
|
TAB3 :: 0x00001800
|
||||||
|
_BSDLY :: 0x00002000
|
||||||
|
BS0 :: 0x00000000
|
||||||
|
BS1 :: 0x00002000
|
||||||
|
_VTDLY :: 0x00004000
|
||||||
|
VT0 :: 0x00000000
|
||||||
|
VT1 :: 0x00004000
|
||||||
|
_FFDLY :: 0x00008000
|
||||||
|
FF0 :: 0x00000000
|
||||||
|
FF1 :: 0x00008000
|
||||||
|
|
||||||
|
B0 :: 0x00000000
|
||||||
|
B50 :: 0x00000001
|
||||||
|
B75 :: 0x00000002
|
||||||
|
B110 :: 0x00000003
|
||||||
|
B134 :: 0x00000004
|
||||||
|
B150 :: 0x00000005
|
||||||
|
B200 :: 0x00000006
|
||||||
|
B300 :: 0x00000007
|
||||||
|
B600 :: 0x00000008
|
||||||
|
B1200 :: 0x00000009
|
||||||
|
B1800 :: 0x0000000a
|
||||||
|
B2400 :: 0x0000000b
|
||||||
|
B4800 :: 0x0000000c
|
||||||
|
B9600 :: 0x0000000d
|
||||||
|
B19200 :: 0x0000000e
|
||||||
|
B38400 :: 0x0000000f
|
||||||
|
|
||||||
|
_CSIZE :: 0x00000030
|
||||||
|
CS5 :: 0x00000000
|
||||||
|
CS6 :: 0x00000010
|
||||||
|
CS7 :: 0x00000020
|
||||||
|
CS8 :: 0x00000030
|
||||||
|
CSTOPB :: 0x00000040
|
||||||
|
CREAD :: 0x00000080
|
||||||
|
PARENB :: 0x00000100
|
||||||
|
PARODD :: 0x00000200
|
||||||
|
HUPCL :: 0x00000400
|
||||||
|
CLOCAL :: 0x00000800
|
||||||
|
|
||||||
|
ECHO :: 0x00000008
|
||||||
|
ECHOE :: 0x00000010
|
||||||
|
ECHOK :: 0x00000020
|
||||||
|
ECHONL :: 0x00000040
|
||||||
|
ICANON :: 0x00000002
|
||||||
|
IEXTEN :: 0x00008000
|
||||||
|
ISIG :: 0x00000001
|
||||||
|
NOFLSH :: 0x80000080
|
||||||
|
TOSTOP :: 0x00000100
|
||||||
|
|
||||||
|
TCIFLUSH :: 0
|
||||||
|
TCOFLUSH :: 1
|
||||||
|
TCIOFLUSH :: 2
|
||||||
|
|
||||||
|
TCIOFF :: 2
|
||||||
|
TCION :: 3
|
||||||
|
TCOOFF :: 0
|
||||||
|
TCOON :: 1
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
#panic("posix is unimplemented for the current target")
|
#panic("posix is unimplemented for the current target")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user