Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 13 additions & 8 deletions .trinity/seals/claw_ClawGates.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
{
"built_by": "t27c-bootstrap@0.5.2+043cdea36",
"closure": [],
"built_by": "t27c-bootstrap@0.5.2+9da2c5f",
"closure": [
{
"spec": "specs/claw/text.t27",
"spec_hash": "sha256:eab393c71eb760e092ff07c51489fb2e5d67a6e8b25262ae7ebf5c95fbfb19a1"
}
],
"config": "gen=c,rust,verilog,zig;tests=zig",
"gen_hash_c": "sha256:97188898c4d8cda3d8bbb551de2a41cc67db142ee15f724bbfee30bb4cedd0c4",
"gen_hash_rust": "sha256:6192bfeb11dcb93a415eb8ef5f30a07d2588e58b0ea832f8ac99f4428a6829ee",
"gen_hash_verilog": "sha256:4ec80fa7604787bbb30bfee71cc6e838f4ac24e33348cbfbe46682182ff43b5e",
"gen_hash_zig": "sha256:3f6afb1b574d5a4346abf72b7a313ccae1316f56c04ef486c999fa2e160e4ee9",
"gen_hash_c": "sha256:31f5535824c04d63b77b8df6e0a72e96fef46ff1609043a46abedd3df21684c5",
"gen_hash_rust": "sha256:811db936e27fb63042662fb804f32f6cd4bd9dfff0d816d3f597c0cdc1c178fa",
"gen_hash_verilog": "sha256:cd9116aae7e4cd6315743c6ebc05c08579284821cfbfd363c33986cf0fd96b7a",
"gen_hash_zig": "sha256:83f1b79f148d10b88c18858c57630b06540be83be4335fc8b8fb0b57bf2651f8",
"module": "ClawGates",
"ring": 12,
"seal_schema": 2,
"sealed_at": "2026-10-18T07:27:06Z",
"sealed_at": "2026-10-18T08:30:55Z",
"sealed_by": "t27c-bootstrap@0.5.2",
"spec_hash": "sha256:2b49b0ada4cf5323472026378a33a07831bcc750ccc3a5a7b649e115dbcb6ab6",
"spec_hash": "sha256:3ae3db764f44ce4e0c45b8c7af6f17db39755e3c23be43c17a75409394a0a32d",
"spec_path": "specs/claw/gates.t27",
"tests": {
"failed": 0,
Expand Down
6 changes: 3 additions & 3 deletions .trinity/seals/claw_ClawGatesPins.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"built_by": "t27c-bootstrap@0.5.2+043cdea36",
"built_by": "t27c-bootstrap@0.5.2+9da2c5f",
"closure": [
{
"spec": "specs/claw/gates.t27",
"spec_hash": "sha256:2b49b0ada4cf5323472026378a33a07831bcc750ccc3a5a7b649e115dbcb6ab6"
"spec_hash": "sha256:3ae3db764f44ce4e0c45b8c7af6f17db39755e3c23be43c17a75409394a0a32d"
}
],
"config": "gen=c,rust,verilog,zig;tests=zig",
Expand All @@ -14,7 +14,7 @@
"module": "ClawGatesPins",
"ring": 12,
"seal_schema": 2,
"sealed_at": "2026-10-18T07:27:08Z",
"sealed_at": "2026-10-18T08:30:58Z",
"sealed_by": "t27c-bootstrap@0.5.2",
"spec_hash": "sha256:e18a7800770e75607f68b089aaa38880e490276fbe6706372b0e302bb990238c",
"spec_path": "specs/claw/gates_pins.t27",
Expand Down
21 changes: 13 additions & 8 deletions .trinity/seals/claw_ClawService.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
{
"built_by": "t27c-bootstrap@0.5.2+043cdea36",
"closure": [],
"built_by": "t27c-bootstrap@0.5.2+9da2c5f",
"closure": [
{
"spec": "specs/claw/text.t27",
"spec_hash": "sha256:eab393c71eb760e092ff07c51489fb2e5d67a6e8b25262ae7ebf5c95fbfb19a1"
}
],
"config": "gen=c,rust,verilog,zig;tests=zig",
"gen_hash_c": "sha256:de9f70b57e80b4aa791a51d8ea356605a0c1c99611c7d25017654742fb5a6a39",
"gen_hash_rust": "sha256:5c38af81d488436c4cb4db98ade0c82a4a63a4fff1b9a4cfa6a24e68f89e391e",
"gen_hash_verilog": "sha256:4c83cf81d17f778a8a07ee15277e7a4685b479851f036f8048f9e8f35a46dbdf",
"gen_hash_zig": "sha256:23cdedf78a2b4e9a324ad4653ea746379a3beacfea7ded12fd1d4cd4cbf91f5a",
"gen_hash_c": "sha256:c27d8844f0ea70fe6dc6e9efd9a7dadb0d79b5b3ac0ba662e4512b4bdbfb607f",
"gen_hash_rust": "sha256:b0ab966055933dd64fe05f683cf39318dfb48efb28742611e3bd930afe95992e",
"gen_hash_verilog": "sha256:ceb8e2e602bbeef6fac81113c46ffe8a6cf765a722c3242dc2dcf46303b8a941",
"gen_hash_zig": "sha256:d565e6d8882e0661bb513be2c68b83443495d1960941c73b6dcdba753f4846e9",
"module": "ClawService",
"ring": 12,
"seal_schema": 2,
"sealed_at": "2026-10-18T07:27:09Z",
"sealed_at": "2026-10-18T08:30:58Z",
"sealed_by": "t27c-bootstrap@0.5.2",
"spec_hash": "sha256:e704897a637b01492a2608aad832cb63461cbdf6f45222cd0c46e8728764381e",
"spec_hash": "sha256:ad9dab3f1f4d513036c68cf6a866289cf78a87b814e4b0644cb3d06aa4d26a03",
"spec_path": "specs/claw/service.t27",
"tests": {
"failed": 0,
Expand Down
216 changes: 108 additions & 108 deletions gen/c/claw/gates.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,19 +54,19 @@ bool is_blocking(const char* name, size_t name_len);
const char* events_of(const char* name, size_t name_len);
uint32_t count_class(uint8_t c);
bool every_row_filled(void);
bool str_eq(const char* a, size_t alen, const char* b, size_t blen);
bool all_names_unique(void);
bool all_classes_known(void);
size_t line_len(uint8_t* dir_text, size_t dir_len, size_t start);
bool line_eq_name(uint8_t* dir_text, size_t start, size_t len, const char* name, size_t name_len);
bool dir_has(uint8_t* dir_text, size_t dir_len, const char* name, size_t name_len);
bool line_in_names(uint8_t* dir_text, size_t start, size_t len);
size_t put_str(uint8_t* dst, size_t cap, size_t w, const char* s, size_t s_len);
uint8_t digit_byte(uint32_t d);
size_t put_count(uint8_t* dst, size_t cap, size_t w, uint32_t v);
bool buf_has(uint8_t* buf, size_t buf_len, const char* needle, size_t needle_len);
int32_t claw_status(uint8_t* dir_text, size_t dir_len, uint8_t* out, size_t out_cap);
size_t claw_coverage_report(uint8_t* out, size_t out_cap);
bool buf_has(uint8_t* buf, size_t buf_len, const char* needle, size_t needle_len);
uint8_t digit_byte(uint32_t d);
size_t put_count(uint8_t* dst, size_t cap, size_t w, uint32_t v);
size_t put_str(uint8_t* dst, size_t cap, size_t w, const char* s, size_t s_len);
bool str_eq(const char* a, size_t alen, const char* b, size_t blen);

/* -------------------------------------------------------
Function implementations
Expand Down Expand Up @@ -116,21 +116,6 @@ bool every_row_filled(void) {
return true;
}

bool str_eq(const char* a, size_t alen, const char* b, size_t blen) {
if ((alen != blen)) {
return false;
}
size_t diff = 0;
size_t i = 0;
while ((i < alen)) {
if ((a[i] != b[i])) {
diff += 1;
}
i += 1;
}
return (diff == 0);
}

bool all_names_unique(void) {
for (size_t i = 0; i < 67; i++) {
for (size_t j = (i + 1); j < 67; j++) {
Expand Down Expand Up @@ -202,94 +187,6 @@ bool line_in_names(uint8_t* dir_text, size_t start, size_t len) {
return false;
}

size_t put_str(uint8_t* dst, size_t cap, size_t w, const char* s, size_t s_len) {
size_t i = 0;
while ((i < s_len)) {
if (((w + i) < cap)) {
dst[(w + i)] = s[i];
}
i += 1;
}
return (w + s_len);
}

uint8_t digit_byte(uint32_t d) {
uint8_t b = '0';
if ((d == 1)) {
b = '1';
}
if ((d == 2)) {
b = '2';
}
if ((d == 3)) {
b = '3';
}
if ((d == 4)) {
b = '4';
}
if ((d == 5)) {
b = '5';
}
if ((d == 6)) {
b = '6';
}
if ((d == 7)) {
b = '7';
}
if ((d == 8)) {
b = '8';
}
if ((d == 9)) {
b = '9';
}
return b;
}

size_t put_count(uint8_t* dst, size_t cap, size_t w, uint32_t v) {
uint8_t tmp[16] = {0};
size_t n = 0;
uint32_t x = v;
if ((x == 0)) {
tmp[0] = digit_byte(0);
n = 1;
}
while ((x > 0)) {
tmp[n] = digit_byte((x % 10));
n += 1;
x = (x / 10);
}
size_t k = 0;
while ((k < n)) {
if (((w + k) < cap)) {
dst[(w + k)] = tmp[((n - 1) - k)];
}
k += 1;
}
return (w + n);
}

bool buf_has(uint8_t* buf, size_t buf_len, const char* needle, size_t needle_len) {
if ((needle_len > buf_len)) {
return false;
}
size_t start = 0;
while (((start + needle_len) <= buf_len)) {
size_t k = 0;
size_t diff = 0;
while ((k < needle_len)) {
if ((buf[(start + k)] != needle[k])) {
diff += 1;
}
k += 1;
}
if ((diff == 0)) {
return true;
}
start += 1;
}
return false;
}

int32_t claw_status(uint8_t* dir_text, size_t dir_len, uint8_t* out, size_t out_cap) {
size_t w = 0;
int32_t problems = 0;
Expand Down Expand Up @@ -376,6 +273,109 @@ size_t claw_coverage_report(uint8_t* out, size_t out_cap) {
return w;
}

bool buf_has(uint8_t* buf, size_t buf_len, const char* needle, size_t needle_len) {
if ((needle_len > buf_len)) {
return false;
}
size_t start = 0;
while (((start + needle_len) <= buf_len)) {
size_t k = 0;
size_t diff = 0;
while ((k < needle_len)) {
if ((buf[(start + k)] != needle[k])) {
diff += 1;
}
k += 1;
}
if ((diff == 0)) {
return true;
}
start += 1;
}
return false;
}

uint8_t digit_byte(uint32_t d) {
uint8_t b = '0';
if ((d == 1)) {
b = '1';
}
if ((d == 2)) {
b = '2';
}
if ((d == 3)) {
b = '3';
}
if ((d == 4)) {
b = '4';
}
if ((d == 5)) {
b = '5';
}
if ((d == 6)) {
b = '6';
}
if ((d == 7)) {
b = '7';
}
if ((d == 8)) {
b = '8';
}
if ((d == 9)) {
b = '9';
}
return b;
}

size_t put_count(uint8_t* dst, size_t cap, size_t w, uint32_t v) {
uint8_t tmp[16] = {0};
size_t n = 0;
uint32_t x = v;
if ((x == 0)) {
tmp[0] = digit_byte(0);
n = 1;
}
while ((x > 0)) {
tmp[n] = digit_byte((x % 10));
n += 1;
x = (x / 10);
}
size_t k = 0;
while ((k < n)) {
if (((w + k) < cap)) {
dst[(w + k)] = tmp[((n - 1) - k)];
}
k += 1;
}
return (w + n);
}

size_t put_str(uint8_t* dst, size_t cap, size_t w, const char* s, size_t s_len) {
size_t i = 0;
while ((i < s_len)) {
if (((w + i) < cap)) {
dst[(w + i)] = s[i];
}
i += 1;
}
return (w + s_len);
}

bool str_eq(const char* a, size_t alen, const char* b, size_t blen) {
if ((alen != blen)) {
return false;
}
size_t diff = 0;
size_t i = 0;
while ((i < alen)) {
if ((a[i] != b[i])) {
diff += 1;
}
i += 1;
}
return (diff == 0);
}

/* -------------------------------------------------------
Tests
------------------------------------------------------- */
Expand Down
Loading
Loading