posprintf#
posprintf - a condensed version of sprintf for Thumb, esp. GBA
https://www.danposluns.com/gbadev/posprintf
By Dan Posluns, released into the public domain.
Warning
This routine is unsafe, make sure the destination buffer is big enough to hold the output string!
Example:
import natu/[video, irq, bios, tte, posprintf]
let friends = 12
let maxFriends = 50
# write formatted text into a buffer
var buffer: array[100, char]
posprintf(addr buffer, "You found %d out of %d friends.", friends, maxFriends)
# draw the text on background 0
tte.initChr4c(bgnr = 0, initBgCnt(cbb = 0, sbb = 31))
tte.write(addr buffer)
# show background 0
dispcnt = initDispCnt(bg0 = true)
# wait forever:
irq.enable(iiVBlank)
while true:
VBlankIntrWait()
- proc posprintf(dest: cstring, src: cstring)#
src
must be a valid zero-terminated C string.dest
must point to a sufficiently large block of memory to contain the result string.
The following format specifiers are valid: ======= =========================================================================
%%
print a%
symbol%s
print a string; parameter must point to a valid zero-terminated C string%d
print a 16-bit (short) integer; must be within-65,535 .. 65,535
%l
print a 29-bit integer; approximate range-500,000,000 .. 500,000,000
%x
print a hexadecimal number (lowercase digits)%X
print a hexadecimal number (uppercase digits) ======= =========================================================================The specifiers
%d
,%l
,%x
and%X
may be modified as follows:Digits 1 through 9 indicate number of leading spaces to print, eg. |
%5d
would print the number123
as" 123"
|%5d
would print the number123456
as"123456"
(no leading spaces)When above digit is prefixed with 0, leading zeros are printed instead of spaces |
%05d
would print the number123
as"00123"
|%04d
would print the number12345
as"12345"
(no leading zeros)Negative sign consumes a leading space, eg. |
%05d
would print the number-123
as"-0123"
| (Hexadecimal numbers are considered unsigned)