#include "game_types.h"

/* Text_DrawNumber @ 0x08011864 (real 134B) -- 4-way DMA-dispatch number draw (Clear clone). Mirrors src/matched/Text_DrawNumber.c. */
/* Byte-clone of TextQueue_Clear (modulo label names): the same (c & 31)
   4-way DMA/memcpy dispatch over (b, a, count). */
extern int DMA_Transfer(int dst, int src, int n);
extern int DMA_TransferWord(int dst, int src, int n);
extern void Physics_MemCopyFast(int *dst, int *src, int n);

void Text_DrawNumber(int *a, int *b, int c)
{
    if ((c & 31) == 0) {
        int q = c >= 0 ? c / 4 : (c + 3) / 4;
        DMA_Transfer((int)b, (int)a, (q << 11) >> 11);
    } else if ((c & 3) == 0) {
        int q = c >= 0 ? c / 4 : (c + 3) / 4;
        DMA_TransferWord((int)b, (int)a, ((q << 11) >> 11) | 0x10000000);
    } else if ((c & 1) == 0) {
        int q = (c + (c < 0)) / 2;
        DMA_TransferWord((int)b, (int)a, (q << 11) >> 11);
    } else {
        Physics_MemCopyFast(a, b, (unsigned)c);
    }
}
