sco_ui_v1.normalize_chord
Writes chord’s normalized form, NUL-terminated, with the raw-handler size handshake (*inout_size: capacity in; bytes written, or needed with SCO_TOO_MANY, out). SCO_BAD_ARG: not a chord. No plugin handle needed; any thread.
Signature
Section titled “Signature”sco_result (*)(const char *, char *, uint32_t *)Service and availability
Section titled “Service and availability”| Property | Value |
|---|---|
| Symbol | sco_ui_v1.normalize_chord |
| Record ID | sco-ui-v1-normalize-chord |
| Service | sco.ui |
| Table | sco_ui_v1 |
| Version macro | SCO_UI_VERSION_1_0 |
| Packed table version | 65536 |
| Since / availability | size >= 72; 1.0 |
| Complete member extent (x64 bytes) | 72 |
| Table size (x64 bytes) | 80 |
Parameters and buffers
Section titled “Parameters and buffers”sco_result (*normalize_chord)(const char* chord, char* out, uint32_t* inout_size);
Writes chord’s normalized form, NUL-terminated, with the raw-handler size handshake (*inout_size: capacity in; bytes written, or needed with SCO_TOO_MANY, out). SCO_BAD_ARG: not a chord. No plugin handle needed; any thread.
Results and failures
Section titled “Results and failures”BAD_ARG invalid chord/buffer; TOO_MANY required bytes/allocation. Pure normalization needs no self; stopped-service refusal unspecified (implementation does not test started).
Absent capability
Section titled “Absent capability”unspecified
Ownership
Section titled “Ownership”Strings/arguments copied; draw/ctx borrowed until unregister/unload. Host owns registry; no allocation transfer.
Thread affinity
Section titled “Thread affinity”Any thread; draw callbacks game thread. Other recursive reentrancy unspecified.
Callback context
Section titled “Callback context”draw callbacks game thread.
Reentrancy
Section titled “Reentrancy”unspecified
Cleanup and cancellation
Section titled “Cleanup and cancellation”No in-flight cancellation API; unregister/unbind removes registration; ordinary unload/non-retained crash cleanup withdraws all UI. Retained-provider faults skip owner resource-release hooks and require restart; backing resources remain retained, not safe for cached calls. Guarded draws stop, but snapshots and chord reservations remain.
Language mappings
Section titled “Language mappings”Status labels are copied verbatim from the catalogue: direct is native access; typed-wrapper is wrapper-backed; restricted is a subset/adaptation; unsupported means no supported route is established. No status implies universal safety.
| Language | Catalogue status | Source evidence / wrapper tokens |
|---|---|---|
| c | direct | include/sco_ui.h(*normalize_chord) |
| cpp | typed-wrapper | include/scosdk/ui.hppconst sco_result r = t_->normalize_chord(chord, buf, &size); |
| csharp | typed-wrapper | sdk/csharp/Sco.Sdk/Ui.csScoResult r = Storage.Sized((buf, size) => { fixed (byte* cp = c) return _t->normalize_chord(cp, buf, size); }, out byte[] b); |
| lua | unsupported | docs/ui.mdScripts bind hotkeys; tabs and overlays need draw callbacks from Lua |
Examples
Section titled “Examples”None identified in the catalogue; this is not proof none can exist.
- tests/abi_ui.c
- tests/test_settings.cpp
- tests/test_ui.cpp
- sdk/csharp/Sco.Sdk.Tests/FakeHost.cs
- tools/test.sh
- sdk/csharp/Sco.Sdk.Tests/Layout.cs
ABI pins prove layout, not semantic behavior or a live game session.