diff --git a/lib/std/c.zig b/lib/std/c.zig index 5a85d40b69..4333a191e6 100644 --- a/lib/std/c.zig +++ b/lib/std/c.zig @@ -794,7 +794,7 @@ pub const termios = switch (native_os) { .linux => std.os.linux.termios, .macos, .ios, .tvos, .watchos => extern struct { iflag: tc_iflag_t, - oflag: tcflag_t, + oflag: tc_oflag_t, cflag: tcflag_t, lflag: tcflag_t, cc: [NCCS]cc_t, @@ -803,7 +803,7 @@ pub const termios = switch (native_os) { }, .freebsd, .kfreebsd, .netbsd, .dragonfly, .openbsd => extern struct { iflag: tc_iflag_t, - oflag: tcflag_t, + oflag: tc_oflag_t, cflag: tcflag_t, lflag: tcflag_t, cc: [NCCS]cc_t, @@ -812,7 +812,7 @@ pub const termios = switch (native_os) { }, .haiku => extern struct { iflag: tc_iflag_t, - oflag: tcflag_t, + oflag: tc_oflag_t, cflag: tcflag_t, lflag: tcflag_t, line: cc_t, @@ -822,14 +822,14 @@ pub const termios = switch (native_os) { }, .solaris, .illumos => extern struct { iflag: tc_iflag_t, - oflag: tcflag_t, + oflag: tc_oflag_t, cflag: tcflag_t, lflag: tcflag_t, cc: [NCCS]cc_t, }, .emscripten, .wasi => extern struct { iflag: tc_iflag_t, - oflag: tcflag_t, + oflag: tc_oflag_t, cflag: tcflag_t, lflag: tcflag_t, line: std.c.cc_t, @@ -950,6 +950,97 @@ pub const tc_iflag_t = switch (native_os) { else => @compileError("target libc does not have tc_iflag_t"), }; +pub const tc_oflag_t = switch (native_os) { + .linux => std.os.linux.tc_oflag_t, + .macos, .ios, .tvos, .watchos => packed struct(u32) { + OPOST: bool = false, + ONLCR: bool = false, + OXTABS: bool = false, + ONOEOT: bool = false, + OCRNL: bool = false, + ONOCR: bool = false, + ONLRET: bool = false, + OFILL: bool = false, + NLDLY: u2 = 0, + TABDLY: u2 = 0, + CRDLY: u2 = 0, + FFDLY: u1 = 0, + BSDLY: u1 = 0, + VTDLY: u1 = 0, + OFDEL: bool = false, + _: u14 = 0, + }, + .netbsd => packed struct(u32) { + OPOST: bool = false, + ONLCR: bool = false, + OXTABS: bool = false, + ONOEOT: bool = false, + OCRNL: bool = false, + _5: u1 = 0, + ONOCR: bool = false, + ONLRET: bool = false, + _: u24 = 0, + }, + .openbsd => packed struct(u32) { + OPOST: bool = false, + ONLCR: bool = false, + OXTABS: bool = false, + ONOEOT: bool = false, + OCRNL: bool = false, + OLCUC: bool = false, + ONOCR: bool = false, + ONLRET: bool = false, + _: u24 = 0, + }, + .freebsd, .kfreebsd, .dragonfly => packed struct(u32) { + OPOST: bool = false, + ONLCR: bool = false, + _2: u1 = 0, + ONOEOT: bool = false, + OCRNL: bool = false, + ONOCR: bool = false, + ONLRET: bool = false, + _: u25 = 0, + }, + .solaris, .illumos => packed struct(u32) { + OPOST: bool = false, + OLCUC: bool = false, + ONLCR: bool = false, + OCRNL: bool = false, + ONOCR: bool = false, + ONLRET: bool = false, + OFILL: bool = false, + OFDEL: bool = false, + NLDLY: u1 = 0, + CRDLY: u2 = 0, + TABDLY: u2 = 0, + BSDLY: u1 = 0, + VTDLY: u1 = 0, + FFDLY: u1 = 0, + PAGEOUT: bool = false, + WRAP: bool = false, + _: u14 = 0, + }, + .haiku, .wasi, .emscripten => packed struct(u32) { + OPOST: bool = false, + OLCUC: bool = false, + ONLCR: bool = false, + OCRNL: bool = false, + ONOCR: bool = false, + ONLRET: bool = false, + OFILL: bool = false, + OFDEL: bool = false, + NLDLY: u1 = 0, + CRDLY: u2 = 0, + TABDLY: u2 = 0, + BSDLY: u1 = 0, + VTDLY: u1 = 0, + FFDLY: u1 = 0, + _: u16 = 0, + }, + else => @compileError("target libc does not have tc_oflag_t"), +}; + pub const tcflag_t = switch (native_os) { .linux => std.os.linux.tcflag_t, .macos, .ios, .tvos, .watchos => u64, diff --git a/lib/std/c/darwin.zig b/lib/std/c/darwin.zig index d9e456921e..489cdc8bc0 100644 --- a/lib/std/c/darwin.zig +++ b/lib/std/c/darwin.zig @@ -2692,42 +2692,6 @@ pub const SHUT = struct { pub const RDWR = 2; }; -pub const OPOST: tcflag_t = 0x00000001; //enable following output processing -pub const ONLCR: tcflag_t = 0x00000002; // map NL to CR-NL (ala CRMOD) -pub const OXTABS: tcflag_t = 0x00000004; // expand tabs to spaces -pub const ONOEOT: tcflag_t = 0x00000008; // discard EOT's (^D) on output) - -pub const OCRNL: tcflag_t = 0x00000010; // map CR to NL on output -pub const ONOCR: tcflag_t = 0x00000020; // no CR output at column 0 -pub const ONLRET: tcflag_t = 0x00000040; // NL performs CR function -pub const OFILL: tcflag_t = 0x00000080; // use fill characters for delay -pub const NLDLY: tcflag_t = 0x00000300; // \n delay -pub const TABDLY: tcflag_t = 0x00000c04; // horizontal tab delay -pub const CRDLY: tcflag_t = 0x00003000; // \r delay -pub const FFDLY: tcflag_t = 0x00004000; // form feed delay -pub const BSDLY: tcflag_t = 0x00008000; // \b delay -pub const VTDLY: tcflag_t = 0x00010000; // vertical tab delay -pub const OFDEL: tcflag_t = 0x00020000; // fill is DEL, else NUL - -pub const NL0: tcflag_t = 0x00000000; -pub const NL1: tcflag_t = 0x00000100; -pub const NL2: tcflag_t = 0x00000200; -pub const NL3: tcflag_t = 0x00000300; -pub const TAB0: tcflag_t = 0x00000000; -pub const TAB1: tcflag_t = 0x00000400; -pub const TAB2: tcflag_t = 0x00000800; -pub const TAB3: tcflag_t = 0x00000004; -pub const CR0: tcflag_t = 0x00000000; -pub const CR1: tcflag_t = 0x00001000; -pub const CR2: tcflag_t = 0x00002000; -pub const CR3: tcflag_t = 0x00003000; -pub const FF0: tcflag_t = 0x00000000; -pub const FF1: tcflag_t = 0x00004000; -pub const BS0: tcflag_t = 0x00000000; -pub const BS1: tcflag_t = 0x00008000; -pub const VT0: tcflag_t = 0x00000000; -pub const VT1: tcflag_t = 0x00010000; - pub const CIGNORE: tcflag_t = 0x00000001; // ignore control flags pub const CSIZE: tcflag_t = 0x00000300; // character size mask pub const CS5: tcflag_t = 0x00000000; // 5 bits (pseudo) diff --git a/lib/std/c/netbsd.zig b/lib/std/c/netbsd.zig index cdb0564973..989c579d0e 100644 --- a/lib/std/c/netbsd.zig +++ b/lib/std/c/netbsd.zig @@ -807,15 +807,6 @@ pub const T = struct { }; -// Output flags - software output processing -pub const OPOST: tcflag_t = 0x00000001; // enable following output processing -pub const ONLCR: tcflag_t = 0x00000002; // map NL to CR-NL (ala CRMOD) -pub const OXTABS: tcflag_t = 0x00000004; // expand tabs to spaces -pub const ONOEOT: tcflag_t = 0x00000008; // discard EOT's (^D) on output -pub const OCRNL: tcflag_t = 0x00000010; // map CR to NL -pub const ONOCR: tcflag_t = 0x00000040; // discard CR's when on column 0 -pub const ONLRET: tcflag_t = 0x00000080; // move to column 0 on CR - // Control flags - hardware control of terminal pub const CIGNORE: tcflag_t = 0x00000001; // ignore control flags pub const CSIZE: tcflag_t = 0x00000300; // character size mask diff --git a/lib/std/c/openbsd.zig b/lib/std/c/openbsd.zig index 1a0d788fb3..86130ed1a8 100644 --- a/lib/std/c/openbsd.zig +++ b/lib/std/c/openbsd.zig @@ -769,15 +769,6 @@ pub const AUTH = struct { }; -// Output flags - software output processing -pub const OPOST: tcflag_t = 0x00000001; // enable following output processing -pub const ONLCR: tcflag_t = 0x00000002; // map NL to CR-NL (ala CRMOD) -pub const OXTABS: tcflag_t = 0x00000004; // expand tabs to spaces -pub const ONOEOT: tcflag_t = 0x00000008; // discard EOT's (^D) on output -pub const OCRNL: tcflag_t = 0x00000010; // map CR to NL -pub const OLCUC: tcflag_t = 0x00000020; // translate lower case to upper case -pub const ONOCR: tcflag_t = 0x00000040; // No CR output at column 0 -pub const ONLRET: tcflag_t = 0x00000080; // NL performs the CR function // Control flags - hardware control of terminal pub const CIGNORE: tcflag_t = 0x00000001; // ignore control flags diff --git a/lib/std/os.zig b/lib/std/os.zig index de994e4f14..fcac0d1bb4 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -188,6 +188,7 @@ pub const NCCS = system.NCCS; pub const speed_t = system.speed_t; pub const tcflag_t = system.tcflag_t; pub const tc_iflag_t = system.tc_iflag_t; +pub const tc_oflag_t = system.tc_oflag_t; pub const F_OK = system.F_OK; pub const R_OK = system.R_OK; diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index 2c3254bd06..40a77d54e8 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -5083,6 +5083,43 @@ pub const tc_iflag_t = switch (native_arch) { }, }; +pub const tc_oflag_t = switch (native_arch) { + .powerpc, .powerpcle, .powerpc64, .powerpc64le => packed struct(u32) { + OPOST: bool = false, + ONLCR: bool = false, + OLCUC: bool = false, + OCRNL: bool = false, + ONOCR: bool = false, + ONLRET: bool = false, + OFILL: bool = false, + OFDEL: bool = false, + NLDLY: u2 = 0, + TABDLY: u2 = 0, + CRDLY: u2 = 0, + FFDLY: u1 = 0, + BSDLY: u1 = 0, + VTDLY: u1 = 0, + _: u15 = 0, + }, + else => packed struct(u32) { + OPOST: bool = false, + OLCUC: bool = false, + ONLCR: bool = false, + OCRNL: bool = false, + ONOCR: bool = false, + ONLRET: bool = false, + OFILL: bool = false, + OFDEL: bool = false, + NLDLY: u1 = 0, + CRDLY: u2 = 0, + TABDLY: u2 = 0, + BSDLY: u1 = 0, + VTDLY: u1 = 0, + FFDLY: u1 = 0, + _: u16 = 0, + }, +}; + pub const cc_t = switch (native_arch) { .mips, .mipsel, .mips64, .mips64el => enum(u8) { VINTR = 0, @@ -5145,19 +5182,6 @@ pub const cc_t = switch (native_arch) { pub const tcflag_t = u32; -pub const OPOST: tcflag_t = 1; -pub const OLCUC: tcflag_t = 2; -pub const ONLCR: tcflag_t = 4; -pub const OCRNL: tcflag_t = 8; -pub const ONOCR: tcflag_t = 16; -pub const ONLRET: tcflag_t = 32; -pub const OFILL: tcflag_t = 64; -pub const OFDEL: tcflag_t = 128; - -pub const VTDLY: tcflag_t = 16384; -pub const VT0: tcflag_t = 0; -pub const VT1: tcflag_t = 16384; - pub const CSIZE: tcflag_t = 48; pub const CS5: tcflag_t = 0; pub const CS6: tcflag_t = 16; @@ -5190,7 +5214,7 @@ pub const TCSA = enum(c_uint) { pub const termios = switch (native_arch) { .powerpc, .powerpcle, .powerpc64, .powerpc64le => extern struct { iflag: tc_iflag_t, - oflag: tcflag_t, + oflag: tc_oflag_t, cflag: tcflag_t, lflag: tcflag_t, cc: [NCCS]cc_t, @@ -5200,7 +5224,7 @@ pub const termios = switch (native_arch) { }, else => extern struct { iflag: tc_iflag_t, - oflag: tcflag_t, + oflag: tc_oflag_t, cflag: tcflag_t, lflag: tcflag_t, line: cc_t,