Use integer tags, provide macros for pleasant handlers

This commit is contained in:
bluepython508
2025-03-19 00:44:20 +00:00
parent 8b7236eef0
commit 407416cd79
2 changed files with 44 additions and 13 deletions

View File

@@ -265,26 +265,17 @@ static SCM scm_str(const char *chars) {
return scm_from_utf8_string("");
}
static SCM bitvector_tags(uint32_t tags) {
SCM bitvector = scm_c_make_bitvector(32, SCM_BOOL_F);
for (int i = 0; i < 32; i++) {
if ((tags & (1 << i)) != 0)
scm_c_bitvector_set_bit_x(bitvector, i);
}
return bitvector;
}
static SCM output_for(struct Output *output) {
SCM output_scm = scm_make_foreign_object_0(output_t);
scm_foreign_object_set_x(output_scm, 0, scm_from_int(output->name));
scm_foreign_object_set_x(output_scm, 0, scm_from_uint32(output->name));
scm_foreign_object_set_x(output_scm, 1,
bitvector_tags(output->tags.focused_tags));
scm_from_uint32(output->tags.focused_tags));
SCM view_tags = SCM_EOL;
for (ssize_t i = output->tags.view_tags_len - 1; i >= 0; i--)
view_tags = scm_cons(bitvector_tags(*(output->tags.view_tags + i)), view_tags);
view_tags = scm_cons(scm_from_uint32(*(output->tags.view_tags + i)), view_tags);
scm_foreign_object_set_x(output_scm, 2, view_tags);
scm_foreign_object_set_x(output_scm, 3,
bitvector_tags(output->tags.urgent_tags));
scm_from_uint32(output->tags.urgent_tags));
scm_foreign_object_set_x(output_scm, 4, scm_str(output->tags.layout_name));
return output_scm;
}