Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
This commit is contained in:
1
vendor/anstyle-parse/.cargo-checksum.json
vendored
Normal file
1
vendor/anstyle-parse/.cargo-checksum.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
{"files":{"Cargo.lock":"7f68b5328c460caf1d2198b10fe1761e5f0282262f92d04076b30b25539970b0","Cargo.toml":"2834f39b7169c03b03da1e209f56133783ce00ea64d5f2c14381d93984ca20bf","LICENSE-APACHE":"b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1","LICENSE-MIT":"c1d4bc00896473e0109ccb4c3c7d21addb55a4ff1a644be204dcfce26612af2a","README.md":"abc82171d436ee0eb221838e8d21a21a2e392504e87f0c130b5eca6a35671e1e","benches/parse.rs":"336c808d51c90db2497fa87e571df7f71c844a1b09be88839fe4255066c632f4","examples/parselog.rs":"58b7db739deed701aa0ab386d0d0c1772511b8aed1c08d31ec5b35a1c8cd4321","src/lib.rs":"c89f2afa0e982276dc47ca8d8a76d47516aa39aa9d3354254c87fdbf2f8ef4cc","src/params.rs":"8cfef4e2ab1961ca2d9f210da553fc6ac64bb6dbd03321f0ee7d6089ab45389c","src/state/codegen.rs":"8530124c8f998f391e47950f130590376321dcade810990f4312c3b1c0a61968","src/state/definitions.rs":"dc3dbb3244def74430a72b0108f019e22cc02e0ae5f563ee14d38300ff82b814","src/state/mod.rs":"be07c2ea393a971dd54117dc2ce8a3ffb5b803cb557ab468389b74570855fa37","src/state/table.rs":"673b7e9242c5248efc076086cc6923578ec2f059c0c26da21363528e20e4285c"},"package":"c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"}
|
1202
vendor/anstyle-parse/Cargo.lock
generated
vendored
Normal file
1202
vendor/anstyle-parse/Cargo.lock
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
108
vendor/anstyle-parse/Cargo.toml
vendored
Normal file
108
vendor/anstyle-parse/Cargo.toml
vendored
Normal file
@ -0,0 +1,108 @@
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2021"
|
||||
rust-version = "1.70.0"
|
||||
name = "anstyle-parse"
|
||||
version = "0.2.3"
|
||||
include = [
|
||||
"build.rs",
|
||||
"src/**/*",
|
||||
"Cargo.toml",
|
||||
"Cargo.lock",
|
||||
"LICENSE*",
|
||||
"README.md",
|
||||
"benches/**/*",
|
||||
"examples/**/*",
|
||||
]
|
||||
description = "Parse ANSI Style Escapes"
|
||||
homepage = "https://github.com/rust-cli/anstyle"
|
||||
readme = "README.md"
|
||||
keywords = [
|
||||
"ansi",
|
||||
"terminal",
|
||||
"color",
|
||||
"vte",
|
||||
]
|
||||
categories = ["command-line-interface"]
|
||||
license = "MIT OR Apache-2.0"
|
||||
repository = "https://github.com/rust-cli/anstyle.git"
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
file = "CHANGELOG.md"
|
||||
min = 1
|
||||
replace = "{{version}}"
|
||||
search = "Unreleased"
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
exactly = 1
|
||||
file = "CHANGELOG.md"
|
||||
replace = "...{{tag_name}}"
|
||||
search = '\.\.\.HEAD'
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
file = "CHANGELOG.md"
|
||||
min = 1
|
||||
replace = "{{date}}"
|
||||
search = "ReleaseDate"
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
exactly = 1
|
||||
file = "CHANGELOG.md"
|
||||
replace = """
|
||||
<!-- next-header -->
|
||||
## [Unreleased] - ReleaseDate
|
||||
"""
|
||||
search = "<!-- next-header -->"
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
exactly = 1
|
||||
file = "CHANGELOG.md"
|
||||
replace = """
|
||||
<!-- next-url -->
|
||||
[Unreleased]: https://github.com/rust-cli/anstyle/compare/{{tag_name}}...HEAD"""
|
||||
search = "<!-- next-url -->"
|
||||
|
||||
[[bench]]
|
||||
name = "parse"
|
||||
harness = false
|
||||
|
||||
[dependencies.arrayvec]
|
||||
version = "0.7.2"
|
||||
optional = true
|
||||
default-features = false
|
||||
|
||||
[dependencies.utf8parse]
|
||||
version = "0.2.1"
|
||||
optional = true
|
||||
|
||||
[dev-dependencies.codegenrs]
|
||||
version = "3.0.1"
|
||||
default-features = false
|
||||
|
||||
[dev-dependencies.criterion]
|
||||
version = "0.5.1"
|
||||
|
||||
[dev-dependencies.proptest]
|
||||
version = "1.4.0"
|
||||
|
||||
[dev-dependencies.snapbox]
|
||||
version = "0.4.14"
|
||||
features = ["path"]
|
||||
|
||||
[dev-dependencies.vte_generate_state_changes]
|
||||
version = "0.1.1"
|
||||
|
||||
[features]
|
||||
core = ["dep:arrayvec"]
|
||||
default = ["utf8"]
|
||||
utf8 = ["dep:utf8parse"]
|
201
vendor/anstyle-parse/LICENSE-APACHE
vendored
Normal file
201
vendor/anstyle-parse/LICENSE-APACHE
vendored
Normal file
@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright {yyyy} {name of copyright owner}
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
25
vendor/anstyle-parse/LICENSE-MIT
vendored
Normal file
25
vendor/anstyle-parse/LICENSE-MIT
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
Copyright (c) 2016 Joe Wilm and individual contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any
|
||||
person obtaining a copy of this software and associated
|
||||
documentation files (the "Software"), to deal in the
|
||||
Software without restriction, including without
|
||||
limitation the rights to use, copy, modify, merge,
|
||||
publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software
|
||||
is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice
|
||||
shall be included in all copies or substantial portions
|
||||
of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
||||
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
||||
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
||||
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
||||
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
33
vendor/anstyle-parse/README.md
vendored
Normal file
33
vendor/anstyle-parse/README.md
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
# anstyle-parse
|
||||
|
||||
> Parse [Parse ANSI Style Escapes](https://vt100.net/emu/dec_ansi_parser)
|
||||
|
||||
[][Documentation]
|
||||

|
||||
[](https://crates.io/crates/anstyle-parse)
|
||||
|
||||
## License
|
||||
|
||||
Licensed under either of
|
||||
|
||||
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
|
||||
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
|
||||
|
||||
at your option.
|
||||
|
||||
### Contribution
|
||||
|
||||
Unless you explicitly state otherwise, any contribution intentionally
|
||||
submitted for inclusion in the work by you, as defined in the Apache-2.0
|
||||
license, shall be dual licensed as above, without any additional terms or
|
||||
conditions.
|
||||
|
||||
### Special Thanks
|
||||
|
||||
[chrisduerr](https://github.com/alacritty/vte/commits?author=chrisduerr) and the
|
||||
[alacritty project](https://github.com/alacritty/alacritty) for
|
||||
[vte](https://crates.io/crates/vte) which
|
||||
[this was forked from](https://github.com/alacritty/vte/issues/82)
|
||||
|
||||
[Crates.io]: https://crates.io/crates/anstyle-parse
|
||||
[Documentation]: https://docs.rs/anstyle-parse
|
169
vendor/anstyle-parse/benches/parse.rs
vendored
Normal file
169
vendor/anstyle-parse/benches/parse.rs
vendored
Normal file
@ -0,0 +1,169 @@
|
||||
use criterion::{black_box, Criterion};
|
||||
|
||||
use anstyle_parse::*;
|
||||
|
||||
struct BenchDispatcher;
|
||||
impl Perform for BenchDispatcher {
|
||||
fn print(&mut self, c: char) {
|
||||
black_box(c);
|
||||
}
|
||||
|
||||
fn execute(&mut self, byte: u8) {
|
||||
black_box(byte);
|
||||
}
|
||||
|
||||
fn hook(&mut self, params: &Params, intermediates: &[u8], ignore: bool, c: u8) {
|
||||
black_box((params, intermediates, ignore, c));
|
||||
}
|
||||
|
||||
fn put(&mut self, byte: u8) {
|
||||
black_box(byte);
|
||||
}
|
||||
|
||||
fn osc_dispatch(&mut self, params: &[&[u8]], bell_terminated: bool) {
|
||||
black_box((params, bell_terminated));
|
||||
}
|
||||
|
||||
fn csi_dispatch(&mut self, params: &Params, intermediates: &[u8], ignore: bool, c: u8) {
|
||||
black_box((params, intermediates, ignore, c));
|
||||
}
|
||||
|
||||
fn esc_dispatch(&mut self, intermediates: &[u8], ignore: bool, byte: u8) {
|
||||
black_box((intermediates, ignore, byte));
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
struct Strip(String);
|
||||
impl Strip {
|
||||
fn with_capacity(capacity: usize) -> Self {
|
||||
Self(String::with_capacity(capacity))
|
||||
}
|
||||
}
|
||||
impl Perform for Strip {
|
||||
fn print(&mut self, c: char) {
|
||||
self.0.push(c);
|
||||
}
|
||||
|
||||
fn execute(&mut self, byte: u8) {
|
||||
if byte.is_ascii_whitespace() {
|
||||
self.0.push(byte as char);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn strip_str(content: &str) -> String {
|
||||
use anstyle_parse::state::state_change;
|
||||
use anstyle_parse::state::Action;
|
||||
use anstyle_parse::state::State;
|
||||
|
||||
#[inline]
|
||||
fn is_utf8_continuation(b: u8) -> bool {
|
||||
matches!(b, 0x80..=0xbf)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn is_printable(action: Action, byte: u8) -> bool {
|
||||
action == Action::Print
|
||||
|| action == Action::BeginUtf8
|
||||
// since we know the input is valid UTF-8, the only thing we can do with
|
||||
// continuations is to print them
|
||||
|| is_utf8_continuation(byte)
|
||||
|| (action == Action::Execute && byte.is_ascii_whitespace())
|
||||
}
|
||||
|
||||
let mut stripped = Vec::with_capacity(content.len());
|
||||
|
||||
let mut bytes = content.as_bytes();
|
||||
while !bytes.is_empty() {
|
||||
let offset = bytes.iter().copied().position(|b| {
|
||||
let (_next_state, action) = state_change(State::Ground, b);
|
||||
!is_printable(action, b)
|
||||
});
|
||||
let (printable, next) = bytes.split_at(offset.unwrap_or(bytes.len()));
|
||||
stripped.extend(printable);
|
||||
bytes = next;
|
||||
|
||||
let mut state = State::Ground;
|
||||
let offset = bytes.iter().copied().position(|b| {
|
||||
let (next_state, action) = state_change(state, b);
|
||||
if next_state != State::Anywhere {
|
||||
state = next_state;
|
||||
}
|
||||
is_printable(action, b)
|
||||
});
|
||||
let (_, next) = bytes.split_at(offset.unwrap_or(bytes.len()));
|
||||
bytes = next;
|
||||
}
|
||||
|
||||
String::from_utf8(stripped).unwrap()
|
||||
}
|
||||
|
||||
fn parse(c: &mut Criterion) {
|
||||
for (name, content) in [
|
||||
#[cfg(feature = "utf8")]
|
||||
("demo.vte", &include_bytes!("../tests/demo.vte")[..]),
|
||||
("rg_help.vte", &include_bytes!("../tests/rg_help.vte")[..]),
|
||||
("rg_linus.vte", &include_bytes!("../tests/rg_linus.vte")[..]),
|
||||
(
|
||||
"state_changes",
|
||||
&b"\x1b]2;X\x1b\\ \x1b[0m \x1bP0@\x1b\\"[..],
|
||||
),
|
||||
] {
|
||||
// Make sure the comparison is fair
|
||||
if let Ok(content) = std::str::from_utf8(content) {
|
||||
let mut stripped = Strip::with_capacity(content.len());
|
||||
let mut parser = Parser::<DefaultCharAccumulator>::new();
|
||||
for byte in content.as_bytes() {
|
||||
parser.advance(&mut stripped, *byte);
|
||||
}
|
||||
assert_eq!(stripped.0, strip_str(content));
|
||||
}
|
||||
|
||||
let mut group = c.benchmark_group(name);
|
||||
group.bench_function("advance", |b| {
|
||||
b.iter(|| {
|
||||
let mut dispatcher = BenchDispatcher;
|
||||
let mut parser = Parser::<DefaultCharAccumulator>::new();
|
||||
|
||||
for byte in content {
|
||||
parser.advance(&mut dispatcher, *byte);
|
||||
}
|
||||
})
|
||||
});
|
||||
group.bench_function("advance_strip", |b| {
|
||||
b.iter(|| {
|
||||
let mut stripped = Strip::with_capacity(content.len());
|
||||
let mut parser = Parser::<DefaultCharAccumulator>::new();
|
||||
|
||||
for byte in content {
|
||||
parser.advance(&mut stripped, *byte);
|
||||
}
|
||||
|
||||
black_box(stripped.0)
|
||||
})
|
||||
});
|
||||
group.bench_function("state_change", |b| {
|
||||
b.iter(|| {
|
||||
let mut state = anstyle_parse::state::State::default();
|
||||
for byte in content {
|
||||
let (next_state, action) = anstyle_parse::state::state_change(state, *byte);
|
||||
state = next_state;
|
||||
black_box(action);
|
||||
}
|
||||
})
|
||||
});
|
||||
if let Ok(content) = std::str::from_utf8(content) {
|
||||
group.bench_function("state_change_strip_str", |b| {
|
||||
b.iter(|| {
|
||||
let stripped = strip_str(content);
|
||||
|
||||
black_box(stripped)
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
criterion::criterion_group!(benches, parse);
|
||||
criterion::criterion_main!(benches);
|
78
vendor/anstyle-parse/examples/parselog.rs
vendored
Normal file
78
vendor/anstyle-parse/examples/parselog.rs
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
//! Parse input from stdin and log actions on stdout
|
||||
use std::io::{self, Read};
|
||||
|
||||
use anstyle_parse::{DefaultCharAccumulator, Params, Parser, Perform};
|
||||
|
||||
/// A type implementing Perform that just logs actions
|
||||
struct Log;
|
||||
|
||||
impl Perform for Log {
|
||||
fn print(&mut self, c: char) {
|
||||
println!("[print] {:?}", c);
|
||||
}
|
||||
|
||||
fn execute(&mut self, byte: u8) {
|
||||
println!("[execute] {:02x}", byte);
|
||||
}
|
||||
|
||||
fn hook(&mut self, params: &Params, intermediates: &[u8], ignore: bool, c: u8) {
|
||||
println!(
|
||||
"[hook] params={:?}, intermediates={:?}, ignore={:?}, char={:?}",
|
||||
params, intermediates, ignore, c
|
||||
);
|
||||
}
|
||||
|
||||
fn put(&mut self, byte: u8) {
|
||||
println!("[put] {:02x}", byte);
|
||||
}
|
||||
|
||||
fn unhook(&mut self) {
|
||||
println!("[unhook]");
|
||||
}
|
||||
|
||||
fn osc_dispatch(&mut self, params: &[&[u8]], bell_terminated: bool) {
|
||||
println!(
|
||||
"[osc_dispatch] params={:?} bell_terminated={}",
|
||||
params, bell_terminated
|
||||
);
|
||||
}
|
||||
|
||||
fn csi_dispatch(&mut self, params: &Params, intermediates: &[u8], ignore: bool, c: u8) {
|
||||
println!(
|
||||
"[csi_dispatch] params={:#?}, intermediates={:?}, ignore={:?}, char={:?}",
|
||||
params, intermediates, ignore, c
|
||||
);
|
||||
}
|
||||
|
||||
fn esc_dispatch(&mut self, intermediates: &[u8], ignore: bool, byte: u8) {
|
||||
println!(
|
||||
"[esc_dispatch] intermediates={:?}, ignore={:?}, byte={:02x}",
|
||||
intermediates, ignore, byte
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let input = io::stdin();
|
||||
let mut handle = input.lock();
|
||||
|
||||
let mut statemachine = Parser::<DefaultCharAccumulator>::new();
|
||||
let mut performer = Log;
|
||||
|
||||
let mut buf = [0; 2048];
|
||||
|
||||
loop {
|
||||
match handle.read(&mut buf) {
|
||||
Ok(0) => break,
|
||||
Ok(n) => {
|
||||
for byte in &buf[..n] {
|
||||
statemachine.advance(&mut performer, *byte);
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
println!("err: {}", err);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
431
vendor/anstyle-parse/src/lib.rs
vendored
Normal file
431
vendor/anstyle-parse/src/lib.rs
vendored
Normal file
@ -0,0 +1,431 @@
|
||||
//! Parser for implementing virtual terminal emulators
|
||||
//!
|
||||
//! [`Parser`] is implemented according to [Paul Williams' ANSI parser
|
||||
//! state machine]. The state machine doesn't assign meaning to the parsed data
|
||||
//! and is thus not itself sufficient for writing a terminal emulator. Instead,
|
||||
//! it is expected that an implementation of [`Perform`] is provided which does
|
||||
//! something useful with the parsed data. The [`Parser`] handles the book
|
||||
//! keeping, and the [`Perform`] gets to simply handle actions.
|
||||
//!
|
||||
//! # Examples
|
||||
//!
|
||||
//! For an example of using the [`Parser`] please see the examples folder. The example included
|
||||
//! there simply logs all the actions [`Perform`] does. One quick thing to see it in action is to
|
||||
//! pipe `vim` into it
|
||||
//!
|
||||
//! ```sh
|
||||
//! cargo build --release --example parselog
|
||||
//! vim | target/release/examples/parselog
|
||||
//! ```
|
||||
//!
|
||||
//! Just type `:q` to exit.
|
||||
//!
|
||||
//! # Differences from original state machine description
|
||||
//!
|
||||
//! * UTF-8 Support for Input
|
||||
//! * OSC Strings can be terminated by 0x07
|
||||
//! * Only supports 7-bit codes. Some 8-bit codes are still supported, but they no longer work in
|
||||
//! all states.
|
||||
//!
|
||||
//! [Paul Williams' ANSI parser state machine]: https://vt100.net/emu/dec_ansi_parser
|
||||
#![cfg_attr(not(test), no_std)]
|
||||
|
||||
#[cfg(not(feature = "core"))]
|
||||
extern crate alloc;
|
||||
|
||||
use core::mem::MaybeUninit;
|
||||
|
||||
#[cfg(feature = "core")]
|
||||
use arrayvec::ArrayVec;
|
||||
#[cfg(feature = "utf8")]
|
||||
use utf8parse as utf8;
|
||||
|
||||
mod params;
|
||||
pub mod state;
|
||||
|
||||
pub use params::{Params, ParamsIter};
|
||||
|
||||
use state::{state_change, Action, State};
|
||||
|
||||
const MAX_INTERMEDIATES: usize = 2;
|
||||
const MAX_OSC_PARAMS: usize = 16;
|
||||
#[cfg(feature = "core")]
|
||||
const MAX_OSC_RAW: usize = 1024;
|
||||
|
||||
/// Parser for raw _VTE_ protocol which delegates actions to a [`Perform`]
|
||||
#[derive(Default, Clone, Debug, PartialEq, Eq)]
|
||||
pub struct Parser<C = DefaultCharAccumulator> {
|
||||
state: State,
|
||||
intermediates: [u8; MAX_INTERMEDIATES],
|
||||
intermediate_idx: usize,
|
||||
params: Params,
|
||||
param: u16,
|
||||
#[cfg(feature = "core")]
|
||||
osc_raw: ArrayVec<u8, MAX_OSC_RAW>,
|
||||
#[cfg(not(feature = "core"))]
|
||||
osc_raw: alloc::vec::Vec<u8>,
|
||||
osc_params: [(usize, usize); MAX_OSC_PARAMS],
|
||||
osc_num_params: usize,
|
||||
ignoring: bool,
|
||||
utf8_parser: C,
|
||||
}
|
||||
|
||||
impl<C> Parser<C>
|
||||
where
|
||||
C: CharAccumulator,
|
||||
{
|
||||
/// Create a new Parser
|
||||
pub fn new() -> Parser {
|
||||
Parser::default()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn params(&self) -> &Params {
|
||||
&self.params
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn intermediates(&self) -> &[u8] {
|
||||
&self.intermediates[..self.intermediate_idx]
|
||||
}
|
||||
|
||||
/// Advance the parser state
|
||||
///
|
||||
/// Requires a [`Perform`] in case `byte` triggers an action
|
||||
#[inline]
|
||||
pub fn advance<P: Perform>(&mut self, performer: &mut P, byte: u8) {
|
||||
// Utf8 characters are handled out-of-band.
|
||||
if let State::Utf8 = self.state {
|
||||
self.process_utf8(performer, byte);
|
||||
return;
|
||||
}
|
||||
|
||||
let (state, action) = state_change(self.state, byte);
|
||||
self.perform_state_change(performer, state, action, byte);
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn process_utf8<P>(&mut self, performer: &mut P, byte: u8)
|
||||
where
|
||||
P: Perform,
|
||||
{
|
||||
if let Some(c) = self.utf8_parser.add(byte) {
|
||||
performer.print(c);
|
||||
self.state = State::Ground;
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn perform_state_change<P>(&mut self, performer: &mut P, state: State, action: Action, byte: u8)
|
||||
where
|
||||
P: Perform,
|
||||
{
|
||||
match state {
|
||||
State::Anywhere => {
|
||||
// Just run the action
|
||||
self.perform_action(performer, action, byte);
|
||||
}
|
||||
state => {
|
||||
match self.state {
|
||||
State::DcsPassthrough => {
|
||||
self.perform_action(performer, Action::Unhook, byte);
|
||||
}
|
||||
State::OscString => {
|
||||
self.perform_action(performer, Action::OscEnd, byte);
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
|
||||
match action {
|
||||
Action::Nop => (),
|
||||
action => {
|
||||
self.perform_action(performer, action, byte);
|
||||
}
|
||||
}
|
||||
|
||||
match state {
|
||||
State::CsiEntry | State::DcsEntry | State::Escape => {
|
||||
self.perform_action(performer, Action::Clear, byte);
|
||||
}
|
||||
State::DcsPassthrough => {
|
||||
self.perform_action(performer, Action::Hook, byte);
|
||||
}
|
||||
State::OscString => {
|
||||
self.perform_action(performer, Action::OscStart, byte);
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
|
||||
// Assume the new state
|
||||
self.state = state;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Separate method for osc_dispatch that borrows self as read-only
|
||||
///
|
||||
/// The aliasing is needed here for multiple slices into self.osc_raw
|
||||
#[inline]
|
||||
fn osc_dispatch<P: Perform>(&self, performer: &mut P, byte: u8) {
|
||||
let mut slices: [MaybeUninit<&[u8]>; MAX_OSC_PARAMS] =
|
||||
unsafe { MaybeUninit::uninit().assume_init() };
|
||||
|
||||
for (i, slice) in slices.iter_mut().enumerate().take(self.osc_num_params) {
|
||||
let indices = self.osc_params[i];
|
||||
*slice = MaybeUninit::new(&self.osc_raw[indices.0..indices.1]);
|
||||
}
|
||||
|
||||
unsafe {
|
||||
let num_params = self.osc_num_params;
|
||||
let params = &slices[..num_params] as *const [MaybeUninit<&[u8]>] as *const [&[u8]];
|
||||
performer.osc_dispatch(&*params, byte == 0x07);
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn perform_action<P: Perform>(&mut self, performer: &mut P, action: Action, byte: u8) {
|
||||
match action {
|
||||
Action::Print => performer.print(byte as char),
|
||||
Action::Execute => performer.execute(byte),
|
||||
Action::Hook => {
|
||||
if self.params.is_full() {
|
||||
self.ignoring = true;
|
||||
} else {
|
||||
self.params.push(self.param);
|
||||
}
|
||||
|
||||
performer.hook(self.params(), self.intermediates(), self.ignoring, byte);
|
||||
}
|
||||
Action::Put => performer.put(byte),
|
||||
Action::OscStart => {
|
||||
self.osc_raw.clear();
|
||||
self.osc_num_params = 0;
|
||||
}
|
||||
Action::OscPut => {
|
||||
#[cfg(feature = "core")]
|
||||
{
|
||||
if self.osc_raw.is_full() {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
let idx = self.osc_raw.len();
|
||||
|
||||
// Param separator
|
||||
if byte == b';' {
|
||||
let param_idx = self.osc_num_params;
|
||||
match param_idx {
|
||||
// Only process up to MAX_OSC_PARAMS
|
||||
MAX_OSC_PARAMS => return,
|
||||
|
||||
// First param is special - 0 to current byte index
|
||||
0 => {
|
||||
self.osc_params[param_idx] = (0, idx);
|
||||
}
|
||||
|
||||
// All other params depend on previous indexing
|
||||
_ => {
|
||||
let prev = self.osc_params[param_idx - 1];
|
||||
let begin = prev.1;
|
||||
self.osc_params[param_idx] = (begin, idx);
|
||||
}
|
||||
}
|
||||
|
||||
self.osc_num_params += 1;
|
||||
} else {
|
||||
self.osc_raw.push(byte);
|
||||
}
|
||||
}
|
||||
Action::OscEnd => {
|
||||
let param_idx = self.osc_num_params;
|
||||
let idx = self.osc_raw.len();
|
||||
|
||||
match param_idx {
|
||||
// Finish last parameter if not already maxed
|
||||
MAX_OSC_PARAMS => (),
|
||||
|
||||
// First param is special - 0 to current byte index
|
||||
0 => {
|
||||
self.osc_params[param_idx] = (0, idx);
|
||||
self.osc_num_params += 1;
|
||||
}
|
||||
|
||||
// All other params depend on previous indexing
|
||||
_ => {
|
||||
let prev = self.osc_params[param_idx - 1];
|
||||
let begin = prev.1;
|
||||
self.osc_params[param_idx] = (begin, idx);
|
||||
self.osc_num_params += 1;
|
||||
}
|
||||
}
|
||||
self.osc_dispatch(performer, byte);
|
||||
}
|
||||
Action::Unhook => performer.unhook(),
|
||||
Action::CsiDispatch => {
|
||||
if self.params.is_full() {
|
||||
self.ignoring = true;
|
||||
} else {
|
||||
self.params.push(self.param);
|
||||
}
|
||||
|
||||
performer.csi_dispatch(self.params(), self.intermediates(), self.ignoring, byte);
|
||||
}
|
||||
Action::EscDispatch => {
|
||||
performer.esc_dispatch(self.intermediates(), self.ignoring, byte);
|
||||
}
|
||||
Action::Collect => {
|
||||
if self.intermediate_idx == MAX_INTERMEDIATES {
|
||||
self.ignoring = true;
|
||||
} else {
|
||||
self.intermediates[self.intermediate_idx] = byte;
|
||||
self.intermediate_idx += 1;
|
||||
}
|
||||
}
|
||||
Action::Param => {
|
||||
if self.params.is_full() {
|
||||
self.ignoring = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if byte == b';' {
|
||||
self.params.push(self.param);
|
||||
self.param = 0;
|
||||
} else if byte == b':' {
|
||||
self.params.extend(self.param);
|
||||
self.param = 0;
|
||||
} else {
|
||||
// Continue collecting bytes into param
|
||||
self.param = self.param.saturating_mul(10);
|
||||
self.param = self.param.saturating_add((byte - b'0') as u16);
|
||||
}
|
||||
}
|
||||
Action::Clear => {
|
||||
// Reset everything on ESC/CSI/DCS entry
|
||||
self.intermediate_idx = 0;
|
||||
self.ignoring = false;
|
||||
self.param = 0;
|
||||
|
||||
self.params.clear();
|
||||
}
|
||||
Action::BeginUtf8 => self.process_utf8(performer, byte),
|
||||
Action::Ignore => (),
|
||||
Action::Nop => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Build a `char` out of bytes
|
||||
pub trait CharAccumulator: Default {
|
||||
/// Build a `char` out of bytes
|
||||
///
|
||||
/// Return `None` when more data is needed
|
||||
fn add(&mut self, byte: u8) -> Option<char>;
|
||||
}
|
||||
|
||||
#[cfg(feature = "utf8")]
|
||||
pub type DefaultCharAccumulator = Utf8Parser;
|
||||
#[cfg(not(feature = "utf8"))]
|
||||
pub type DefaultCharAccumulator = AsciiParser;
|
||||
|
||||
/// Only allow parsing 7-bit ASCII
|
||||
#[derive(Default, Clone, Debug, PartialEq, Eq)]
|
||||
pub struct AsciiParser;
|
||||
|
||||
impl CharAccumulator for AsciiParser {
|
||||
fn add(&mut self, _byte: u8) -> Option<char> {
|
||||
unreachable!("multi-byte UTF8 characters are unsupported")
|
||||
}
|
||||
}
|
||||
|
||||
/// Allow parsing UTF-8
|
||||
#[cfg(feature = "utf8")]
|
||||
#[derive(Default, Clone, Debug, PartialEq, Eq)]
|
||||
pub struct Utf8Parser {
|
||||
utf8_parser: utf8::Parser,
|
||||
}
|
||||
|
||||
#[cfg(feature = "utf8")]
|
||||
impl CharAccumulator for Utf8Parser {
|
||||
fn add(&mut self, byte: u8) -> Option<char> {
|
||||
let mut c = None;
|
||||
let mut receiver = VtUtf8Receiver(&mut c);
|
||||
self.utf8_parser.advance(&mut receiver, byte);
|
||||
c
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "utf8")]
|
||||
struct VtUtf8Receiver<'a>(&'a mut Option<char>);
|
||||
|
||||
#[cfg(feature = "utf8")]
|
||||
impl<'a> utf8::Receiver for VtUtf8Receiver<'a> {
|
||||
fn codepoint(&mut self, c: char) {
|
||||
*self.0 = Some(c);
|
||||
}
|
||||
|
||||
fn invalid_sequence(&mut self) {
|
||||
*self.0 = Some('<27>');
|
||||
}
|
||||
}
|
||||
|
||||
/// Performs actions requested by the [`Parser`]
|
||||
///
|
||||
/// Actions in this case mean, for example, handling a CSI escape sequence describing cursor
|
||||
/// movement, or simply printing characters to the screen.
|
||||
///
|
||||
/// The methods on this type correspond to actions described in
|
||||
/// <http://vt100.net/emu/dec_ansi_parser>. I've done my best to describe them in
|
||||
/// a useful way in my own words for completeness, but the site should be
|
||||
/// referenced if something isn't clear. If the site disappears at some point in
|
||||
/// the future, consider checking archive.org.
|
||||
pub trait Perform {
|
||||
/// Draw a character to the screen and update states.
|
||||
fn print(&mut self, _c: char) {}
|
||||
|
||||
/// Execute a C0 or C1 control function.
|
||||
fn execute(&mut self, _byte: u8) {}
|
||||
|
||||
/// Invoked when a final character arrives in first part of device control string.
|
||||
///
|
||||
/// The control function should be determined from the private marker, final character, and
|
||||
/// execute with a parameter list. A handler should be selected for remaining characters in the
|
||||
/// string; the handler function should subsequently be called by `put` for every character in
|
||||
/// the control string.
|
||||
///
|
||||
/// The `ignore` flag indicates that more than two intermediates arrived and
|
||||
/// subsequent characters were ignored.
|
||||
fn hook(&mut self, _params: &Params, _intermediates: &[u8], _ignore: bool, _action: u8) {}
|
||||
|
||||
/// Pass bytes as part of a device control string to the handle chosen in `hook`. C0 controls
|
||||
/// will also be passed to the handler.
|
||||
fn put(&mut self, _byte: u8) {}
|
||||
|
||||
/// Called when a device control string is terminated.
|
||||
///
|
||||
/// The previously selected handler should be notified that the DCS has
|
||||
/// terminated.
|
||||
fn unhook(&mut self) {}
|
||||
|
||||
/// Dispatch an operating system command.
|
||||
fn osc_dispatch(&mut self, _params: &[&[u8]], _bell_terminated: bool) {}
|
||||
|
||||
/// A final character has arrived for a CSI sequence
|
||||
///
|
||||
/// The `ignore` flag indicates that either more than two intermediates arrived
|
||||
/// or the number of parameters exceeded the maximum supported length,
|
||||
/// and subsequent characters were ignored.
|
||||
fn csi_dispatch(
|
||||
&mut self,
|
||||
_params: &Params,
|
||||
_intermediates: &[u8],
|
||||
_ignore: bool,
|
||||
_action: u8,
|
||||
) {
|
||||
}
|
||||
|
||||
/// The final character of an escape sequence has arrived.
|
||||
///
|
||||
/// The `ignore` flag indicates that more than two intermediates arrived and
|
||||
/// subsequent characters were ignored.
|
||||
fn esc_dispatch(&mut self, _intermediates: &[u8], _ignore: bool, _byte: u8) {}
|
||||
}
|
143
vendor/anstyle-parse/src/params.rs
vendored
Normal file
143
vendor/anstyle-parse/src/params.rs
vendored
Normal file
@ -0,0 +1,143 @@
|
||||
//! Fixed size parameters list with optional subparameters.
|
||||
|
||||
use core::fmt::{self, Debug, Formatter};
|
||||
|
||||
pub(crate) const MAX_PARAMS: usize = 32;
|
||||
|
||||
#[derive(Default, Clone, PartialEq, Eq)]
|
||||
pub struct Params {
|
||||
/// Number of subparameters for each parameter.
|
||||
///
|
||||
/// For each entry in the `params` slice, this stores the length of the param as number of
|
||||
/// subparams at the same index as the param in the `params` slice.
|
||||
///
|
||||
/// At the subparam positions the length will always be `0`.
|
||||
subparams: [u8; MAX_PARAMS],
|
||||
|
||||
/// All parameters and subparameters.
|
||||
params: [u16; MAX_PARAMS],
|
||||
|
||||
/// Number of suparameters in the current parameter.
|
||||
current_subparams: u8,
|
||||
|
||||
/// Total number of parameters and subparameters.
|
||||
len: usize,
|
||||
}
|
||||
|
||||
impl Params {
|
||||
/// Returns the number of parameters.
|
||||
#[inline]
|
||||
pub fn len(&self) -> usize {
|
||||
self.len
|
||||
}
|
||||
|
||||
/// Returns `true` if there are no parameters present.
|
||||
#[inline]
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.len == 0
|
||||
}
|
||||
|
||||
/// Returns an iterator over all parameters and subparameters.
|
||||
#[inline]
|
||||
pub fn iter(&self) -> ParamsIter<'_> {
|
||||
ParamsIter::new(self)
|
||||
}
|
||||
|
||||
/// Returns `true` if there is no more space for additional parameters.
|
||||
#[inline]
|
||||
pub(crate) fn is_full(&self) -> bool {
|
||||
self.len == MAX_PARAMS
|
||||
}
|
||||
|
||||
/// Clear all parameters.
|
||||
#[inline]
|
||||
pub(crate) fn clear(&mut self) {
|
||||
self.current_subparams = 0;
|
||||
self.len = 0;
|
||||
}
|
||||
|
||||
/// Add an additional parameter.
|
||||
#[inline]
|
||||
pub(crate) fn push(&mut self, item: u16) {
|
||||
self.subparams[self.len - self.current_subparams as usize] = self.current_subparams + 1;
|
||||
self.params[self.len] = item;
|
||||
self.current_subparams = 0;
|
||||
self.len += 1;
|
||||
}
|
||||
|
||||
/// Add an additional subparameter to the current parameter.
|
||||
#[inline]
|
||||
pub(crate) fn extend(&mut self, item: u16) {
|
||||
self.subparams[self.len - self.current_subparams as usize] = self.current_subparams + 1;
|
||||
self.params[self.len] = item;
|
||||
self.current_subparams += 1;
|
||||
self.len += 1;
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> IntoIterator for &'a Params {
|
||||
type IntoIter = ParamsIter<'a>;
|
||||
type Item = &'a [u16];
|
||||
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
self.iter()
|
||||
}
|
||||
}
|
||||
|
||||
/// Immutable subparameter iterator.
|
||||
pub struct ParamsIter<'a> {
|
||||
params: &'a Params,
|
||||
index: usize,
|
||||
}
|
||||
|
||||
impl<'a> ParamsIter<'a> {
|
||||
fn new(params: &'a Params) -> Self {
|
||||
Self { params, index: 0 }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Iterator for ParamsIter<'a> {
|
||||
type Item = &'a [u16];
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
if self.index >= self.params.len() {
|
||||
return None;
|
||||
}
|
||||
|
||||
// Get all subparameters for the current parameter.
|
||||
let num_subparams = self.params.subparams[self.index];
|
||||
let param = &self.params.params[self.index..self.index + num_subparams as usize];
|
||||
|
||||
// Jump to the next parameter.
|
||||
self.index += num_subparams as usize;
|
||||
|
||||
Some(param)
|
||||
}
|
||||
|
||||
fn size_hint(&self) -> (usize, Option<usize>) {
|
||||
let remaining = self.params.len() - self.index;
|
||||
(remaining, Some(remaining))
|
||||
}
|
||||
}
|
||||
|
||||
impl Debug for Params {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "[")?;
|
||||
|
||||
for (i, param) in self.iter().enumerate() {
|
||||
if i != 0 {
|
||||
write!(f, ";")?;
|
||||
}
|
||||
|
||||
for (i, subparam) in param.iter().enumerate() {
|
||||
if i != 0 {
|
||||
write!(f, ":")?;
|
||||
}
|
||||
|
||||
subparam.fmt(f)?;
|
||||
}
|
||||
}
|
||||
|
||||
write!(f, "]")
|
||||
}
|
||||
}
|
217
vendor/anstyle-parse/src/state/codegen.rs
vendored
Normal file
217
vendor/anstyle-parse/src/state/codegen.rs
vendored
Normal file
@ -0,0 +1,217 @@
|
||||
use super::{pack, unpack, Action, State};
|
||||
|
||||
use vte_generate_state_changes::generate_state_changes;
|
||||
|
||||
#[test]
|
||||
fn table() {
|
||||
let mut content = vec![];
|
||||
generate_table(&mut content).unwrap();
|
||||
|
||||
let content = String::from_utf8(content).unwrap();
|
||||
let content = codegenrs::rustfmt(&content, None).unwrap();
|
||||
snapbox::assert_eq_path("./src/state/table.rs", content);
|
||||
}
|
||||
|
||||
#[allow(clippy::write_literal)]
|
||||
fn generate_table(file: &mut impl std::io::Write) -> std::io::Result<()> {
|
||||
writeln!(
|
||||
file,
|
||||
"// This file is @generated by {}",
|
||||
file!().replace('\\', "/")
|
||||
)?;
|
||||
writeln!(file)?;
|
||||
writeln!(
|
||||
file,
|
||||
"{}",
|
||||
r#"#[rustfmt::skip]
|
||||
pub(crate) const STATE_CHANGES: [[u8; 256]; 16] = ["#
|
||||
)?;
|
||||
|
||||
for (state, entries) in STATE_CHANGES.iter().enumerate() {
|
||||
writeln!(file, " // {:?}", State::try_from(state as u8).unwrap())?;
|
||||
write!(file, " [")?;
|
||||
let mut last_entry = None;
|
||||
for packed in entries {
|
||||
let (next_state, action) = unpack(*packed);
|
||||
if last_entry != Some(packed) {
|
||||
writeln!(file)?;
|
||||
writeln!(file, " // {:?} {:?}", next_state, action)?;
|
||||
write!(file, " ")?;
|
||||
}
|
||||
write!(file, "0x{:0>2x}, ", packed)?;
|
||||
last_entry = Some(packed);
|
||||
}
|
||||
writeln!(file)?;
|
||||
writeln!(file, " ],")?;
|
||||
}
|
||||
|
||||
writeln!(file, "{}", r#"];"#)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// This is the state change table. It's indexed first by current state and then by the next
|
||||
/// character in the pty stream.
|
||||
pub static STATE_CHANGES: [[u8; 256]; 16] = state_changes();
|
||||
generate_state_changes!(state_changes, {
|
||||
Anywhere {
|
||||
0x18 => (Ground, Execute),
|
||||
0x1a => (Ground, Execute),
|
||||
0x1b => (Escape, Nop),
|
||||
},
|
||||
|
||||
Ground {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x20..=0x7f => (Anywhere, Print),
|
||||
0x80..=0x8f => (Anywhere, Execute),
|
||||
0x91..=0x9a => (Anywhere, Execute),
|
||||
0x9c => (Anywhere, Execute),
|
||||
// Beginning of UTF-8 2 byte sequence
|
||||
0xc2..=0xdf => (Utf8, BeginUtf8),
|
||||
// Beginning of UTF-8 3 byte sequence
|
||||
0xe0..=0xef => (Utf8, BeginUtf8),
|
||||
// Beginning of UTF-8 4 byte sequence
|
||||
0xf0..=0xf4 => (Utf8, BeginUtf8),
|
||||
},
|
||||
|
||||
Escape {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x20..=0x2f => (EscapeIntermediate, Collect),
|
||||
0x30..=0x4f => (Ground, EscDispatch),
|
||||
0x51..=0x57 => (Ground, EscDispatch),
|
||||
0x59 => (Ground, EscDispatch),
|
||||
0x5a => (Ground, EscDispatch),
|
||||
0x5c => (Ground, EscDispatch),
|
||||
0x60..=0x7e => (Ground, EscDispatch),
|
||||
0x5b => (CsiEntry, Nop),
|
||||
0x5d => (OscString, Nop),
|
||||
0x50 => (DcsEntry, Nop),
|
||||
0x58 => (SosPmApcString, Nop),
|
||||
0x5e => (SosPmApcString, Nop),
|
||||
0x5f => (SosPmApcString, Nop),
|
||||
},
|
||||
|
||||
EscapeIntermediate {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x20..=0x2f => (Anywhere, Collect),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x30..=0x7e => (Ground, EscDispatch),
|
||||
},
|
||||
|
||||
CsiEntry {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x20..=0x2f => (CsiIntermediate, Collect),
|
||||
0x30..=0x39 => (CsiParam, Param),
|
||||
0x3a..=0x3b => (CsiParam, Param),
|
||||
0x3c..=0x3f => (CsiParam, Collect),
|
||||
0x40..=0x7e => (Ground, CsiDispatch),
|
||||
},
|
||||
|
||||
CsiIgnore {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x20..=0x3f => (Anywhere, Ignore),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x40..=0x7e => (Ground, Nop),
|
||||
},
|
||||
|
||||
CsiParam {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x30..=0x39 => (Anywhere, Param),
|
||||
0x3a..=0x3b => (Anywhere, Param),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x3c..=0x3f => (CsiIgnore, Nop),
|
||||
0x20..=0x2f => (CsiIntermediate, Collect),
|
||||
0x40..=0x7e => (Ground, CsiDispatch),
|
||||
},
|
||||
|
||||
CsiIntermediate {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x20..=0x2f => (Anywhere, Collect),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x30..=0x3f => (CsiIgnore, Nop),
|
||||
0x40..=0x7e => (Ground, CsiDispatch),
|
||||
},
|
||||
|
||||
DcsEntry {
|
||||
0x00..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x20..=0x2f => (DcsIntermediate, Collect),
|
||||
0x30..=0x39 => (DcsParam, Param),
|
||||
0x3a..=0x3b => (DcsParam, Param),
|
||||
0x3c..=0x3f => (DcsParam, Collect),
|
||||
0x40..=0x7e => (DcsPassthrough, Nop),
|
||||
},
|
||||
|
||||
DcsIntermediate {
|
||||
0x00..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x20..=0x2f => (Anywhere, Collect),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x30..=0x3f => (DcsIgnore, Nop),
|
||||
0x40..=0x7e => (DcsPassthrough, Nop),
|
||||
},
|
||||
|
||||
DcsIgnore {
|
||||
0x00..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x20..=0x7f => (Anywhere, Ignore),
|
||||
0x9c => (Ground, Nop),
|
||||
},
|
||||
|
||||
DcsParam {
|
||||
0x00..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x30..=0x39 => (Anywhere, Param),
|
||||
0x3a..=0x3b => (Anywhere, Param),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x3c..=0x3f => (DcsIgnore, Nop),
|
||||
0x20..=0x2f => (DcsIntermediate, Collect),
|
||||
0x40..=0x7e => (DcsPassthrough, Nop),
|
||||
},
|
||||
|
||||
DcsPassthrough {
|
||||
0x00..=0x17 => (Anywhere, Put),
|
||||
0x19 => (Anywhere, Put),
|
||||
0x1c..=0x1f => (Anywhere, Put),
|
||||
0x20..=0x7e => (Anywhere, Put),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x9c => (Ground, Nop),
|
||||
},
|
||||
|
||||
SosPmApcString {
|
||||
0x00..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x20..=0x7f => (Anywhere, Ignore),
|
||||
0x9c => (Ground, Nop),
|
||||
},
|
||||
|
||||
OscString {
|
||||
0x00..=0x06 => (Anywhere, Ignore),
|
||||
0x07 => (Ground, Nop),
|
||||
0x08..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x20..=0xff => (Anywhere, OscPut),
|
||||
}
|
||||
});
|
169
vendor/anstyle-parse/src/state/definitions.rs
vendored
Normal file
169
vendor/anstyle-parse/src/state/definitions.rs
vendored
Normal file
@ -0,0 +1,169 @@
|
||||
use core::mem;
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
#[repr(u8)]
|
||||
#[derive(Default)]
|
||||
pub enum State {
|
||||
Anywhere = 0,
|
||||
CsiEntry = 1,
|
||||
CsiIgnore = 2,
|
||||
CsiIntermediate = 3,
|
||||
CsiParam = 4,
|
||||
DcsEntry = 5,
|
||||
DcsIgnore = 6,
|
||||
DcsIntermediate = 7,
|
||||
DcsParam = 8,
|
||||
DcsPassthrough = 9,
|
||||
Escape = 10,
|
||||
EscapeIntermediate = 11,
|
||||
#[default]
|
||||
Ground = 12,
|
||||
OscString = 13,
|
||||
SosPmApcString = 14,
|
||||
Utf8 = 15,
|
||||
}
|
||||
|
||||
impl TryFrom<u8> for State {
|
||||
type Error = u8;
|
||||
|
||||
#[inline(always)]
|
||||
fn try_from(raw: u8) -> Result<Self, Self::Error> {
|
||||
STATES.get(raw as usize).ok_or(raw).copied()
|
||||
}
|
||||
}
|
||||
|
||||
const STATES: [State; 16] = [
|
||||
State::Anywhere,
|
||||
State::CsiEntry,
|
||||
State::CsiIgnore,
|
||||
State::CsiIntermediate,
|
||||
State::CsiParam,
|
||||
State::DcsEntry,
|
||||
State::DcsIgnore,
|
||||
State::DcsIntermediate,
|
||||
State::DcsParam,
|
||||
State::DcsPassthrough,
|
||||
State::Escape,
|
||||
State::EscapeIntermediate,
|
||||
State::Ground,
|
||||
State::OscString,
|
||||
State::SosPmApcString,
|
||||
State::Utf8,
|
||||
];
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
#[repr(u8)]
|
||||
#[derive(Default)]
|
||||
pub enum Action {
|
||||
#[default]
|
||||
Nop = 0,
|
||||
Clear = 1,
|
||||
Collect = 2,
|
||||
CsiDispatch = 3,
|
||||
EscDispatch = 4,
|
||||
Execute = 5,
|
||||
Hook = 6,
|
||||
Ignore = 7,
|
||||
OscEnd = 8,
|
||||
OscPut = 9,
|
||||
OscStart = 10,
|
||||
Param = 11,
|
||||
Print = 12,
|
||||
Put = 13,
|
||||
Unhook = 14,
|
||||
BeginUtf8 = 15,
|
||||
}
|
||||
|
||||
impl TryFrom<u8> for Action {
|
||||
type Error = u8;
|
||||
|
||||
#[inline(always)]
|
||||
fn try_from(raw: u8) -> Result<Self, Self::Error> {
|
||||
ACTIONS.get(raw as usize).ok_or(raw).copied()
|
||||
}
|
||||
}
|
||||
|
||||
const ACTIONS: [Action; 16] = [
|
||||
Action::Nop,
|
||||
Action::Clear,
|
||||
Action::Collect,
|
||||
Action::CsiDispatch,
|
||||
Action::EscDispatch,
|
||||
Action::Execute,
|
||||
Action::Hook,
|
||||
Action::Ignore,
|
||||
Action::OscEnd,
|
||||
Action::OscPut,
|
||||
Action::OscStart,
|
||||
Action::Param,
|
||||
Action::Print,
|
||||
Action::Put,
|
||||
Action::Unhook,
|
||||
Action::BeginUtf8,
|
||||
];
|
||||
|
||||
/// Unpack a u8 into a State and Action
|
||||
///
|
||||
/// The implementation of this assumes that there are *precisely* 16 variants for both Action and
|
||||
/// State. Furthermore, it assumes that the enums are tag-only; that is, there is no data in any
|
||||
/// variant.
|
||||
///
|
||||
/// Bad things will happen if those invariants are violated.
|
||||
#[inline(always)]
|
||||
pub const fn unpack(delta: u8) -> (State, Action) {
|
||||
unsafe {
|
||||
(
|
||||
// State is stored in bottom 4 bits
|
||||
mem::transmute(delta & 0x0f),
|
||||
// Action is stored in top 4 bits
|
||||
mem::transmute(delta >> 4),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
#[cfg(test)]
|
||||
pub const fn pack(state: State, action: Action) -> u8 {
|
||||
(action as u8) << 4 | state as u8
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn unpack_state_action() {
|
||||
match unpack(0xee) {
|
||||
(State::SosPmApcString, Action::Unhook) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
|
||||
match unpack(0x0f) {
|
||||
(State::Utf8, Action::Nop) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
|
||||
match unpack(0xff) {
|
||||
(State::Utf8, Action::BeginUtf8) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pack_state_action() {
|
||||
match unpack(0xee) {
|
||||
(State::SosPmApcString, Action::Unhook) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
|
||||
match unpack(0x0f) {
|
||||
(State::Utf8, Action::Nop) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
|
||||
match unpack(0xff) {
|
||||
(State::Utf8, Action::BeginUtf8) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
}
|
||||
}
|
41
vendor/anstyle-parse/src/state/mod.rs
vendored
Normal file
41
vendor/anstyle-parse/src/state/mod.rs
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
#[cfg(test)]
|
||||
mod codegen;
|
||||
mod definitions;
|
||||
mod table;
|
||||
|
||||
#[cfg(test)]
|
||||
pub(crate) use definitions::pack;
|
||||
pub(crate) use definitions::unpack;
|
||||
pub use definitions::Action;
|
||||
pub use definitions::State;
|
||||
|
||||
/// Transition to next [`State`]
|
||||
///
|
||||
/// Note: This does not directly support UTF-8.
|
||||
/// - If the data is validated as UTF-8 (e.g. `str`) or single-byte C1 control codes are
|
||||
/// unsupported, then treat [`Action::BeginUtf8`] and [`Action::Execute`] for UTF-8 continuations
|
||||
/// as [`Action::Print`].
|
||||
/// - If the data is not validated, then a UTF-8 state machine will need to be implemented on top,
|
||||
/// starting with [`Action::BeginUtf8`].
|
||||
///
|
||||
/// Note: When [`State::Anywhere`] is returned, revert back to the prior state.
|
||||
#[inline]
|
||||
pub const fn state_change(state: State, byte: u8) -> (State, Action) {
|
||||
// Handle state changes in the anywhere state before evaluating changes
|
||||
// for current state.
|
||||
let mut change = state_change_(State::Anywhere, byte);
|
||||
if change == 0 {
|
||||
change = state_change_(state, byte);
|
||||
}
|
||||
|
||||
// Unpack into a state and action
|
||||
unpack(change)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
const fn state_change_(state: State, byte: u8) -> u8 {
|
||||
let state_idx = state as usize;
|
||||
let byte_idx = byte as usize;
|
||||
|
||||
table::STATE_CHANGES[state_idx][byte_idx]
|
||||
}
|
361
vendor/anstyle-parse/src/state/table.rs
vendored
Normal file
361
vendor/anstyle-parse/src/state/table.rs
vendored
Normal file
@ -0,0 +1,361 @@
|
||||
// This file is @generated by crates/anstyle-parse/src/state/codegen.rs
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub(crate) const STATE_CHANGES: [[u8; 256]; 16] = [
|
||||
// Anywhere
|
||||
[
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// Ground Execute
|
||||
0x5c,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Ground Execute
|
||||
0x5c,
|
||||
// Escape Nop
|
||||
0x0a,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// CsiEntry
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// CsiIntermediate Collect
|
||||
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
|
||||
// CsiParam Param
|
||||
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
|
||||
// CsiParam Collect
|
||||
0x24, 0x24, 0x24, 0x24,
|
||||
// Ground CsiDispatch
|
||||
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// CsiIgnore
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Ground Nop
|
||||
0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// CsiIntermediate
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Collect
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
// CsiIgnore Nop
|
||||
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
|
||||
// Ground CsiDispatch
|
||||
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// CsiParam
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// CsiIntermediate Collect
|
||||
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
|
||||
// Anywhere Param
|
||||
0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
|
||||
// CsiIgnore Nop
|
||||
0x02, 0x02, 0x02, 0x02,
|
||||
// Ground CsiDispatch
|
||||
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// DcsEntry
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70,
|
||||
// DcsIntermediate Collect
|
||||
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
|
||||
// DcsParam Param
|
||||
0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
|
||||
// DcsParam Collect
|
||||
0x28, 0x28, 0x28, 0x28,
|
||||
// DcsPassthrough Nop
|
||||
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// DcsIgnore
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// Ground Nop
|
||||
0x0c,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// DcsIntermediate
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Collect
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
// DcsIgnore Nop
|
||||
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
|
||||
// DcsPassthrough Nop
|
||||
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// DcsParam
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70,
|
||||
// DcsIntermediate Collect
|
||||
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
|
||||
// Anywhere Param
|
||||
0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
|
||||
// DcsIgnore Nop
|
||||
0x06, 0x06, 0x06, 0x06,
|
||||
// DcsPassthrough Nop
|
||||
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// DcsPassthrough
|
||||
[
|
||||
// Anywhere Put
|
||||
0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Put
|
||||
0xd0,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Put
|
||||
0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// Ground Nop
|
||||
0x0c,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// Escape
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// EscapeIntermediate Collect
|
||||
0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b,
|
||||
// Ground EscDispatch
|
||||
0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
|
||||
// DcsEntry Nop
|
||||
0x05,
|
||||
// Ground EscDispatch
|
||||
0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
|
||||
// SosPmApcString Nop
|
||||
0x0e,
|
||||
// Ground EscDispatch
|
||||
0x4c, 0x4c,
|
||||
// CsiEntry Nop
|
||||
0x01,
|
||||
// Ground EscDispatch
|
||||
0x4c,
|
||||
// OscString Nop
|
||||
0x0d,
|
||||
// SosPmApcString Nop
|
||||
0x0e, 0x0e,
|
||||
// Ground EscDispatch
|
||||
0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// EscapeIntermediate
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Collect
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
// Ground EscDispatch
|
||||
0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// Ground
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Print
|
||||
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// Utf8 BeginUtf8
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// OscString
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Ground Nop
|
||||
0x0c,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere OscPut
|
||||
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
|
||||
],
|
||||
// SosPmApcString
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// Ground Nop
|
||||
0x0c,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// Utf8
|
||||
[
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
];
|
Reference in New Issue
Block a user