Close the remaining cold-read gaps: bind, labels, menus and main's shape
Some checks failed
akbasic CI Build / cmake_build (push) Failing after 5m32s
akbasic CI Build / sanitizers (push) Failing after 15m58s
akbasic CI Build / coverage (push) Failing after 20m7s
akbasic CI Build / mutation_test (push) Failing after 4m29s
akbasic CI Build / akgl_build (push) Failing after 12m28s

Three more Haiku-class cold reads of the chapters, each against the
amended text. What each surfaced is now shown rather than described: the
akbasic_host_register_type()/akbasic_host_bind() boot calls, the
declare_play() label listing, the akgl_UiMenu static and its
handle_event signature, one control-handler pair, and main()'s
ATTEMPT/HANDLE_DEFAULT/FINISH_NORETURN shape with the CATCH-inside-
ATTEMPT rule stated. By the fourth read the generated player.c and
enemies.c compiled untouched and every remaining guess was a tuning
value the chapters deliberately leave open.

Co-authored-by: andrew <andrew@aklabs.net>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XiGgpHuXUm2mR4Wzndw3dc
This commit is contained in:
2026-08-04 09:22:43 -04:00
parent 54ab85a276
commit dd10dc143a
4 changed files with 155 additions and 6 deletions

View File

@@ -4,5 +4,7 @@
(void)SCRIPT; (void)SINK; (void)SINKSTATE; (void)SOURCE;
(void)args; (void)argp; (void)dtval; (void)result;
(void)enemy; (void)actor; (void)dt;
(void)SCRATCH_ENEMY; (void)SCRATCH_ACTOR; (void)galaga_shared;
(void)ENEMY_TYPE; (void)ACTOR_TYPE; (void)GAME_TYPE;
SUCCEED_RETURN(errctx);
}

View File

@@ -36,11 +36,42 @@ typedef struct galaga_docs_Enemy
float rnd;
} galaga_docs_Enemy;
typedef struct galaga_docs_Shared
{
float playerx;
float playery;
int32_t wave;
float rnd;
} galaga_docs_Shared;
static akbasic_Runtime SCRIPT;
static akbasic_TextSink SINK;
static akbasic_StdioSink SINKSTATE;
static char SOURCE[16384];
static galaga_docs_Enemy SCRATCH_ENEMY;
static akgl_Actor SCRATCH_ACTOR;
static galaga_docs_Shared galaga_shared;
static const akbasic_HostField ENEMY_FIELDS[] = {
AKBASIC_HOST_FIELD( galaga_docs_Enemy, kind, "KIND#", AKBASIC_HOSTFIELD_INT32 )
};
static const akbasic_HostType ENEMY_TYPE = {
"ENEMY", sizeof(galaga_docs_Enemy), ENEMY_FIELDS, 1
};
static const akbasic_HostField ACTOR_FIELDS[] = {
AKBASIC_HOST_FIELD( akgl_Actor, x, "X%", AKBASIC_HOSTFIELD_FLOAT )
};
static const akbasic_HostType ACTOR_TYPE = {
"ACTOR", sizeof(akgl_Actor), ACTOR_FIELDS, 1
};
static const akbasic_HostField GAME_FIELDS[] = {
AKBASIC_HOST_FIELD( galaga_docs_Shared, wave, "WAVE#", AKBASIC_HOSTFIELD_INT32 )
};
static const akbasic_HostType GAME_TYPE = {
"GAME", sizeof(galaga_docs_Shared), GAME_FIELDS, 1
};
akerr_ErrorContext AKERR_NOIGNORE *galaga_docs_fragment(galaga_docs_Enemy *enemy, akgl_Actor *actor, float dt);
akerr_ErrorContext AKERR_NOIGNORE *galaga_docs_fragment(galaga_docs_Enemy *enemy, akgl_Actor *actor, float dt)
{