diff --git a/th01/hiscore/alph_p_i.cpp b/th01/hiscore/alph_p_i.cpp index 2ba9afe2..5cea62eb 100644 --- a/th01/hiscore/alph_p_i.cpp +++ b/th01/hiscore/alph_p_i.cpp @@ -1,4 +1,7 @@ -#define ALPHABET_Y 240 +#define COL_SELECTED 3 +#define COL_REGULAR 7 + +#define ALPHABET_TOP 240 #define MARGIN_W 32 #define KANJI_PADDING_X 16 #define KANJI_PADDING_Y 8 @@ -9,35 +12,45 @@ #define KANJI_PER_ROW \ ((RES_X - (MARGIN_W * 2)) / KANJI_PADDED_W) +#define relative_top(row) \ + ((row) * KANJI_PADDED_H) + +inline int relative_top_for(int kanji_id) +{ + return relative_top(kanji_id / KANJI_PER_ROW); +} + inline int row_ceil(int count) { return ((count + (KANJI_PER_ROW - 1)) / KANJI_PER_ROW); } -inline int alphabet_x(int i) +inline int left_for(int kanji_id) { - return (((i % KANJI_PER_ROW) * KANJI_PADDED_W) + MARGIN_W); + return (((kanji_id % KANJI_PER_ROW) * KANJI_PADDED_W) + MARGIN_W); } -inline int alphabet_y(int start_row, int i) -{ - return (((i / KANJI_PER_ROW) * KANJI_PADDED_H) + - (ALPHABET_Y + ((start_row) * KANJI_PADDED_H))); -} - -#define alphabet_putca_fx(start_row, i, fx, fmt_instance, kanji) \ +#define alphabet_putca_fx(top_for_0, i, fx, fmt_instance, kanji) \ graph_putkanji_fx( \ - alphabet_x(i), alphabet_y(start_row, i), fx, fmt_instance, kanji \ + left_for(i), (top_for_0 + relative_top_for(i)), fx, fmt_instance, kanji \ ); -#define alphabet_putsa_fx(start_row, i, fx, str) \ +#define alphabet_putsa_fx(top_for_0, i, fx, str) \ extern const char str[]; \ - graph_printf_fx(alphabet_x(i), alphabet_y(start_row, i), fx, str); + graph_printf_fx(left_for(i), (top_for_0 + relative_top_for(i)), fx, str); +#define A_TO_Z_COUNT 26 +#define NUM_COUNT 10 // TODO: Should be derived via `sizeof()` once the array is declared here. #define SYM_COUNT 18 extern const uint16_t ALPHABET_SYMS[]; +// Rows +#define LOWER_TOP (ALPHABET_TOP) +#define UPPER_TOP (LOWER_TOP + relative_top(row_ceil(A_TO_Z_COUNT))) +#define SYM_TOP (UPPER_TOP + relative_top(row_ceil(A_TO_Z_COUNT))) +#define NUM_TOP (SYM_TOP + relative_top(row_ceil(SYM_COUNT))) + inline uint16_t kanji_swap(uint16_t kanji) { return (kanji << 8) | (kanji >> 8); @@ -45,14 +58,7 @@ inline uint16_t kanji_swap(uint16_t kanji) void alphabet_put_initial() { - #define A_TO_Z_COUNT 26 - #define NUM_COUNT 10 - - #define CAPITAL_ROW (row_ceil(A_TO_Z_COUNT)) - #define SYM_ROW (CAPITAL_ROW + row_ceil(A_TO_Z_COUNT)) - #define NUM_ROW (SYM_ROW + row_ceil(SYM_COUNT)) - - int fx = FX(7, 2, 0); + int fx = FX(COL_REGULAR, 2, 0); uint16_t kanji; int i; #if (BINARY == 'M') @@ -61,30 +67,32 @@ void alphabet_put_initial() kanji = kanji_swap('‚‚'); for(i = 1; i < A_TO_Z_COUNT; i++) { - alphabet_putca_fx(0, i, fx, 0, kanji); + alphabet_putca_fx(LOWER_TOP, i, fx, 0, kanji); kanji++; } extern const char ALPHABET_A[]; - graph_putsa_fx(MARGIN_W, ALPHABET_Y, FX_REVERSE | FX(3, 2, 0), ALPHABET_A); + graph_putsa_fx( + MARGIN_W, LOWER_TOP, FX_REVERSE | FX(COL_SELECTED, 2, 0), ALPHABET_A + ); kanji = kanji_swap('‚`'); for(i = 0; i < A_TO_Z_COUNT; i++) { - alphabet_putca_fx(CAPITAL_ROW, i, fx, 1, kanji); + alphabet_putca_fx(UPPER_TOP, i, fx, 1, kanji); kanji++; } for(i = 0; i < SYM_COUNT; i++) { kanji = ALPHABET_SYMS[i]; - alphabet_putca_fx(SYM_ROW, i, fx, 2, kanji); + alphabet_putca_fx(SYM_TOP, i, fx, 2, kanji); } kanji = kanji_swap('‚O'); for(i = 0; i < NUM_COUNT; i++) { - alphabet_putca_fx(NUM_ROW, i, fx, 3, kanji); + alphabet_putca_fx(NUM_TOP, i, fx, 3, kanji); kanji++; } - alphabet_putsa_fx(NUM_ROW, i, fx, ALPHABET_SPACE); i = (KANJI_PER_ROW - 3); - alphabet_putsa_fx(NUM_ROW, i, fx, ALPHABET_LEFT); i++; - alphabet_putsa_fx(NUM_ROW, i, fx, ALPHABET_RIGHT); i++; - alphabet_putsa_fx(NUM_ROW, i, fx, ALPHABET_ENTER); i++; + alphabet_putsa_fx(NUM_TOP, i, fx, ALPHABET_SPACE); i = (KANJI_PER_ROW - 3); + alphabet_putsa_fx(NUM_TOP, i, fx, ALPHABET_LEFT); i++; + alphabet_putsa_fx(NUM_TOP, i, fx, ALPHABET_RIGHT); i++; + alphabet_putsa_fx(NUM_TOP, i, fx, ALPHABET_ENTER); i++; }