-
- if(*ch == 's')ISSTR = 1;
- else if(*ch == 'd')radix = 10;
- else if(*ch == 'x'){ radix = 16; upcase = 0; }
- else if(*ch == 'X'){ radix = 16; upcase = 1; }
- else if(*ch == 'c')radix = 0;
- else if(*ch == 'o')radix = 8;
- else if(*ch == 'b')radix = 2;
-
- if(ISSTR) {
- str = va_arg(ap, char *);
- while(*str) { putchar(*str);str++;}
- } else {
- if(ISLONG)val = va_arg(ap, long);
+
+ if (*ch == 's')
+ ISSTR = 1;
+ else if (*ch == 'd')
+ radix = 10;
+ else if (*ch == 'x')
+ {
+ radix = 16;
+ upcase = 0;
+ }
+ else if (*ch == 'X')
+ {
+ radix = 16;
+ upcase = 1;
+ }
+ else if (*ch == 'c')
+ radix = 0;
+ else if (*ch == 'o')
+ radix = 8;
+#ifdef BINARX_SPECIFIER
+ else if (*ch == 'b')
+ radix = 2;
+#endif
+
+ if (ISSTR)
+ {
+ str = va_arg (ap, char *);
+ while (*str)
+ {
+ putchar (*str);
+ ++str;
+ }
+ }
+ else
+ {
+ if (ISLONG)
+ val = va_arg (ap, long);
+ else if (ISCHAR)
+ {
+ val = (unsigned char) va_arg (ap, int); // FIXME: SDCC casts char arguments into ints
+ if (!HAVESIGN)
+ val = (char) val; // FIXME cont'd: sign-extend if required
+ }