Make GRAPHIC select the text plane
Some checks failed
akbasic CI Build / cmake_build (push) Failing after 3m22s
akbasic CI Build / sanitizers (push) Failing after 4m43s
akbasic CI Build / coverage (push) Failing after 3m43s
akbasic CI Build / akgl_build (push) Failing after 4m48s
akbasic CI Build / mutation_test (push) Failing after 3m31s

Co-authored-by: Andrew Kesterson <andrew@aklabs.net>
This commit is contained in:
2026-08-03 08:08:34 -04:00
parent c5d13f00f6
commit 3342f2b569
13 changed files with 345 additions and 79 deletions

View File

@@ -189,6 +189,10 @@ typedef struct
int columns; /* the character grid the cell size works out to */
int rows;
/* GRAPHIC chooses whether this text plane is visible and where it begins. */
int graphicmode;
int texttop; /* first screen row the current text region owns */
int cursorcol;
int cursorrow;

View File

@@ -82,6 +82,20 @@ typedef struct akbasic_TextSink
* @return `NULL` on success, otherwise an error context owned by the caller.
*/
akerr_ErrorContext AKERR_NOIGNORE *(*grid)(struct akbasic_TextSink *self, int *columns, int *rows, int *cellw, int *cellh);
/**
* Select how this sink's text plane participates in a GRAPHIC display mode.
*
* This is optional: a stream has no display plane to hide or split, so the
* stdio sink leaves it NULL. A graphical sink receives the mode after the
* runtime has validated it. @p split is the first text row for a split mode,
* or -1 when BASIC used the C128 default.
*
* @param self The sink.
* @param mode BASIC 7.0 GRAPHIC mode.
* @param split First text row for a split screen, or -1 for the default.
* @return `NULL` on success, otherwise an error context owned by the caller.
*/
akerr_ErrorContext AKERR_NOIGNORE *(*graphic)(struct akbasic_TextSink *self, int mode, int split);
} akbasic_TextSink;
/** @brief State for the stdio-backed sink. */