iprintf etc. don't print chars > 0x7F ?

support for the ARM toolchain
Post Reply
RyouArashi
Posts: 29
Joined: Sun Mar 29, 2009 9:23 pm

iprintf etc. don't print chars > 0x7F ?

Post by RyouArashi » Mon Dec 07, 2009 11:37 am

I'm writing a iprintf-like function for printing text using a 8x16 font to a text background.
My font contains the standard ASCII character set for codes 0-127 and language specific
characters starting at 128, e.g. german umlauts:
128 = 'ä', 129 = 'ö', 130 = 'ü' (and so on)

However, output is stopped, whenever a character > 127 is encountered. For parsing the
format string and ellipsis I use vsiprintf.

Code:

Code: Select all

char TextBuffer[2048];

int TextPrint(const char * Format, ...)
{
  va_list args;
  va_start(args, Format);

  int  N = vsiprintf(TextBuffer, Format, args);

  va_end(args);

  // some debug output:
  iprintf("1:%s [", Format);
  for (int j = 0; Format[j] != 0; j++) iprintf("%.2x", Format[j]);
  iprintf("]\n2:%s [", TextBuffer);
  for (int j = 0; TextBuffer[j] != 0; j++) iprintf("%.2x", TextBuffer[j]);
  iprintf("]\n");

  /* Output to selected background omitted here */

  return N;
}
Function call: Print the word "Zurück" (german for "back").
A console is init'd on the sub screen, regular output goes to main screen.

Code: Select all

  unsigned char test[] = {'Z', 'u', 'r', 0x82, 'c', 'k', 0};
  TextPrint((const char *)test);
Result:
Line 1 is what is passed to TextPrint (without inserting arguments)
Line 2 is the result of vsiprintf
Both lines include hex output in []
Funnily enough, output is correct, when Format is printed via "%s" (Line 1)...
Image

I confirmed that also iprintf, printf, sprintf and siprintf produce the same result.

On Win32 (DevCpp/MingW), (at least) printf produces correct results.
Code:

Code: Select all

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  unsigned char test[] = {'Z', 'u', 'r', 0x82, 'c', 'k', 0};
  printf((const char *)test);
  
  printf("\n");	
  
  system("PAUSE");	
  return 0;
}
Result:
(prints "é" instead of "ü" because the charset is different)
http://ryouarashi.ry.funpic.de/error2.png

Is this a bug or intended behaviour?

WinterMute
Site Admin
Posts: 1986
Joined: Tue Aug 09, 2005 3:21 am
Location: UK
Contact:

Re: iprintf etc. don't print chars > 0x7F ?

Post by WinterMute » Mon Dec 28, 2009 1:31 am

It's kind of intended behaviour, devkitARM uses UTF8 locale by default so invalid UTF8 characters won't be passed through to final output. Unfortunately the current libnds code isn't yet set up to handle multibyte characters so it still won't print correctly with the right encoding. That's something on the todo list.
Help keep devkitPro toolchains free, Donate today

Personal Blog

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest