e7738de6d2
CI / Deep Native Runtime Cases (1/6) (push) Has been skipped
CI / Native Preflight (push) Failing after 1s
CI / Native Runtime Cases (1/2) (push) Failing after 0s
CI / Native Runtime Cases (2/2) (push) Failing after 1s
CI / Native Metadata Reports (push) Failing after 0s
CI / Native Direct Backend Artifacts (push) Failing after 0s
CI / Native Sanitizer Smoke (push) Failing after 1s
CI / Command Contract Snapshots (push) Failing after 1s
CI / Deep Conformance Suite (push) Has been skipped
CI / Graph Build Perf (push) Failing after 1s
CI / Deep Native Preflight (push) Has been skipped
CI / Deep Native Runtime Cases (2/6) (push) Has been skipped
CI / Deep Native Runtime Cases (3/6) (push) Has been skipped
CI / Conformance Suite (push) Failing after 1s
CI / Workspace Checks (push) Failing after 0s
CI / Deep Native Runtime Cases (5/6) (push) Has been skipped
CI / Deep Native Runtime Cases (6/6) (push) Has been skipped
CI / Deep Native Runtime Cases (4/6) (push) Has been skipped
CI / Deep Graph Build Perf (push) Has been skipped
137 lines
9.3 KiB
Plaintext
137 lines
9.3 KiB
Plaintext
pub fn main(world: World) -> Void raises {
|
|
let enter: u32 = std.term.keyCode("\n")
|
|
let enter_len: usize = std.term.keyByteLen("\n")
|
|
let up: u32 = std.term.keyCode("\x1b[A")
|
|
let up_len: usize = std.term.keyByteLen("\x1b[A")
|
|
let down: u32 = std.term.keyCode("\x1b[B")
|
|
let right: u32 = std.term.keyCode("\x1b[C")
|
|
let left: u32 = std.term.keyCode("\x1b[D")
|
|
let escape: u32 = std.term.keyCode("\x1b")
|
|
let tab: u32 = std.term.keyCode("\t")
|
|
let backspace: u32 = std.term.keyCode("\x7f")
|
|
let ctrl_c: u32 = std.term.keyCode("\x03")
|
|
let delete: u32 = std.term.keyCode("\x1b[3~")
|
|
let home: u32 = std.term.keyCode("\x1b[H")
|
|
let home_tilde: u32 = std.term.keyCode("\x1b[1~")
|
|
let home_len: usize = std.term.keyByteLen("\x1b[H")
|
|
let end_key: u32 = std.term.keyCode("\x1b[F")
|
|
let end_tilde: u32 = std.term.keyCode("\x1b[4~")
|
|
let page_up: u32 = std.term.keyCode("\x1b[5~")
|
|
let page_down: u32 = std.term.keyCode("\x1b[6~")
|
|
let page_down_len: usize = std.term.keyByteLen("\x1b[6~")
|
|
let insert: u32 = std.term.keyCode("\x1b[2~")
|
|
let shift_tab: u32 = std.term.keyCode("\x1b[Z")
|
|
let f1_legacy: u32 = std.term.keyCode("\x1bOP")
|
|
let f1_csi: u32 = std.term.keyCode("\x1b[11~")
|
|
let f5: u32 = std.term.keyCode("\x1b[15~")
|
|
let f10: u32 = std.term.keyCode("\x1b[21~")
|
|
let f12: u32 = std.term.keyCode("\x1b[24~")
|
|
let f12_len: usize = std.term.keyByteLen("\x1b[24~")
|
|
let paste_start: u32 = std.term.keyCode("\x1b[200~")
|
|
let paste_end: u32 = std.term.keyCode("\x1b[201~")
|
|
let paste_len: usize = std.term.keyByteLen("\x1b[200~")
|
|
let ctrl_a: u32 = std.term.keyCode("\x01")
|
|
let ctrl_l: u32 = std.term.keyCode("\x0c")
|
|
let ctrl_r: u32 = std.term.keyCode("\x12")
|
|
let ctrl_w: u32 = std.term.keyCode("\x17")
|
|
let lambda: u32 = std.term.keyCode("λ")
|
|
let lambda_len: usize = std.term.keyByteLen("λ")
|
|
let bad: u32 = std.term.keyCode("\x1b[")
|
|
var cursor_to_buffer: [24]u8 = [0_u8; 24]
|
|
var cursor_up_buffer: [12]u8 = [0_u8; 12]
|
|
var cursor_down_buffer: [12]u8 = [0_u8; 12]
|
|
var cursor_right_buffer: [12]u8 = [0_u8; 12]
|
|
var cursor_left_buffer: [12]u8 = [0_u8; 12]
|
|
var cursor_zero_buffer: [12]u8 = [0_u8; 12]
|
|
var cursor_small_buffer: [3]u8 = [0_u8; 3]
|
|
let cursor_to: Maybe<Span<u8>> = std.term.cursorTo(cursor_to_buffer, 12_usize, 34_usize)
|
|
let cursor_up: Maybe<Span<u8>> = std.term.cursorUp(cursor_up_buffer, 3_usize)
|
|
let cursor_down: Maybe<Span<u8>> = std.term.cursorDown(cursor_down_buffer, 4_usize)
|
|
let cursor_right: Maybe<Span<u8>> = std.term.cursorRight(cursor_right_buffer, 5_usize)
|
|
let cursor_left: Maybe<Span<u8>> = std.term.cursorLeft(cursor_left_buffer, 6_usize)
|
|
let cursor_zero: Maybe<Span<u8>> = std.term.cursorUp(cursor_zero_buffer, 0_usize)
|
|
let cursor_small: Maybe<Span<u8>> = std.term.cursorTo(cursor_small_buffer, 12_usize, 34_usize)
|
|
let style_ok: Bool = std.mem.eql(std.term.underline(), "\x1b[4m") && std.mem.eql(std.term.fgBlack(), "\x1b[30m") && std.mem.eql(std.term.bgDefault(), "\x1b[49m") && std.mem.eql(std.term.bgBlack(), "\x1b[40m") && std.mem.eql(std.term.bgBlue(), "\x1b[44m") && std.mem.eql(std.term.bgWhite(), "\x1b[47m")
|
|
let clear_ok: Bool = std.mem.eql(std.term.clearScreenDown(), "\x1b[0J") && std.mem.eql(std.term.clearScreenUp(), "\x1b[1J") && std.mem.eql(std.term.clearLineRight(), "\x1b[0K") && std.mem.eql(std.term.clearLineLeft(), "\x1b[1K")
|
|
let cursor_ok: Bool = std.mem.eql(std.term.saveCursor(), "\x1b[s") && std.mem.eql(std.term.restoreCursor(), "\x1b[u") && std.mem.eql(std.term.enterBracketedPaste(), "\x1b[?2004h") && std.mem.eql(std.term.leaveBracketedPaste(), "\x1b[?2004l")
|
|
let mouse_ok: Bool = std.mem.eql(std.term.enterMouseCapture(), "\x1b[?1000h\x1b[?1002h\x1b[?1006h") && std.mem.eql(std.term.leaveMouseCapture(), "\x1b[?1006l\x1b[?1002l\x1b[?1000l")
|
|
if enter != std.term.keyEnter() || enter_len != 1_usize || up != std.term.keyArrowUp() || up_len != 3_usize || down != std.term.keyArrowDown() || right != std.term.keyArrowRight() || left != std.term.keyArrowLeft() || escape != std.term.keyEscape() || tab != std.term.keyTab() || backspace != std.term.keyBackspace() || ctrl_c != std.term.keyCtrlC() || delete != std.term.keyDelete() || home != std.term.keyHome() || home_tilde != std.term.keyHome() || home_len != 3_usize || end_key != std.term.keyEnd() || end_tilde != std.term.keyEnd() || page_up != std.term.keyPageUp() || page_down != std.term.keyPageDown() || page_down_len != 4_usize || insert != std.term.keyInsert() || shift_tab != std.term.keyShiftTab() || f1_legacy != std.term.keyF1() || f1_csi != std.term.keyF1() || f5 != std.term.keyF5() || f10 != std.term.keyF10() || f12 != std.term.keyF12() || f12_len != 5_usize || paste_start != std.term.keyPasteStart() || paste_end != std.term.keyPasteEnd() || paste_len != 6_usize || std.term.keyF2() != 1114125_u32 || std.term.keyF3() != 1114126_u32 || std.term.keyF4() != 1114127_u32 || std.term.keyF6() != 1114129_u32 || std.term.keyF7() != 1114130_u32 || std.term.keyF8() != 1114131_u32 || std.term.keyF9() != 1114132_u32 || std.term.keyF11() != 1114134_u32 || ctrl_a != std.term.keyCtrlA() || ctrl_l != std.term.keyCtrlL() || ctrl_r != std.term.keyCtrlR() || ctrl_w != std.term.keyCtrlW() || std.term.keyCtrlD() != 4_u32 || std.term.keyCtrlE() != 5_u32 || std.term.keyCtrlK() != 11_u32 || std.term.keyCtrlN() != 14_u32 || std.term.keyCtrlP() != 16_u32 || std.term.keyCtrlU() != 21_u32 || lambda != 955_u32 || lambda_len != 2_usize || bad != std.term.keyNone() || !style_ok || !clear_ok || !cursor_ok || !mouse_ok || !cursor_to.has || !std.mem.eql(cursor_to.value, "\x1b[12;34H") || !cursor_up.has || !std.mem.eql(cursor_up.value, "\x1b[3A") || !cursor_down.has || !std.mem.eql(cursor_down.value, "\x1b[4B") || !cursor_right.has || !std.mem.eql(cursor_right.value, "\x1b[5C") || !cursor_left.has || !std.mem.eql(cursor_left.value, "\x1b[6D") || !cursor_zero.has || std.mem.len(cursor_zero.value) != 0_usize || cursor_small.has {
|
|
check world.err.write("term key decode failed\n")
|
|
return
|
|
}
|
|
let stdin_tty: Bool = std.term.stdinIsTty()
|
|
let stdout_tty: Bool = std.term.stdoutIsTty()
|
|
let width: usize = std.term.widthOr(80_usize)
|
|
let height: usize = std.term.heightOr(24_usize)
|
|
var input: [16]u8 = [0_u8; 16]
|
|
let pending: Maybe<usize> = std.term.readInput(input)
|
|
if pending.has {
|
|
if pending.value == 0_usize || pending.value > std.mem.len(input) {
|
|
check world.err.write("term input read failed\n")
|
|
return
|
|
}
|
|
let input_bytes: Span<u8> = std.mem.prefix(input, pending.value)
|
|
let input_key: u32 = std.term.keyCode(input_bytes)
|
|
let input_key_len: usize = std.term.keyByteLen(input_bytes)
|
|
if input_key == std.term.keyNone() || input_key_len == 0_usize || input_key_len > pending.value {
|
|
check world.err.write("term input decode failed\n")
|
|
return
|
|
}
|
|
}
|
|
var raw_checked: Bool = true
|
|
if stdin_tty {
|
|
raw_checked = std.term.enterRawMode()
|
|
if raw_checked {
|
|
raw_checked = std.term.leaveRawMode()
|
|
}
|
|
} else {
|
|
raw_checked = !std.term.enterRawMode() && std.term.leaveRawMode()
|
|
}
|
|
if width == 0_usize || height == 0_usize || !raw_checked || stdin_tty && !stdin_tty || stdout_tty && !stdout_tty {
|
|
check world.err.write("term metadata failed\n")
|
|
return
|
|
}
|
|
check world.out.write(std.term.enterAltScreen())
|
|
check world.out.write(std.term.clearScreen())
|
|
check world.out.write(std.term.cursorHome())
|
|
check world.out.write(std.term.hideCursor())
|
|
check world.out.write(std.term.bold())
|
|
check world.out.write(std.term.dim())
|
|
check world.out.write(std.term.underline())
|
|
check world.out.write(std.term.inverse())
|
|
check world.out.write(std.term.fgBlack())
|
|
check world.out.write(std.term.fgRed())
|
|
check world.out.write(std.term.fgGreen())
|
|
check world.out.write(std.term.fgYellow())
|
|
check world.out.write(std.term.fgBlue())
|
|
check world.out.write(std.term.fgMagenta())
|
|
check world.out.write(std.term.fgCyan())
|
|
check world.out.write(std.term.fgWhite())
|
|
check world.out.write(std.term.fgDefault())
|
|
check world.out.write(std.term.bgBlack())
|
|
check world.out.write(std.term.bgRed())
|
|
check world.out.write(std.term.bgGreen())
|
|
check world.out.write(std.term.bgYellow())
|
|
check world.out.write(std.term.bgBlue())
|
|
check world.out.write(std.term.bgMagenta())
|
|
check world.out.write(std.term.bgCyan())
|
|
check world.out.write(std.term.bgWhite())
|
|
check world.out.write(std.term.bgDefault())
|
|
check world.out.write(std.term.saveCursor())
|
|
check world.out.write(std.term.restoreCursor())
|
|
check world.out.write(std.term.enterBracketedPaste())
|
|
check world.out.write(std.term.leaveBracketedPaste())
|
|
check world.out.write(std.term.enterMouseCapture())
|
|
check world.out.write(std.term.leaveMouseCapture())
|
|
check world.out.write("term ansi")
|
|
check world.out.write(std.term.reset())
|
|
check world.out.write(std.term.clearLine())
|
|
check world.out.write(std.term.clearLineRight())
|
|
check world.out.write(std.term.clearLineLeft())
|
|
check world.out.write(std.term.clearScreenDown())
|
|
check world.out.write(std.term.clearScreenUp())
|
|
check world.out.write(std.term.showCursor())
|
|
check world.out.write(std.term.leaveAltScreen())
|
|
check world.out.write("\n")
|
|
}
|