You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
738 B
C
37 lines
738 B
C
#include "fmt.h"
|
|
|
|
static void fmt_oct3(char* dest,uint8_t w) {
|
|
dest[2]=(w&7)+'0'; w>>=3;
|
|
dest[1]=(w&7)+'0'; w>>=3;
|
|
dest[0]=(w&7)+'0';
|
|
}
|
|
|
|
size_t fmt_escapecharc(char* dest,uint32_t ch) {
|
|
char c;
|
|
if (ch>0xff) return 0;
|
|
switch (ch) {
|
|
case '\a': c='a'; goto doescape;
|
|
case '\b': c='b'; goto doescape;
|
|
case 0x1b: c='e'; goto doescape;
|
|
case '\f': c='f'; goto doescape;
|
|
case '\n': c='n'; goto doescape;
|
|
case '\r': c='r'; goto doescape;
|
|
case '\t': c='t'; goto doescape;
|
|
case '\v': c='v'; goto doescape;
|
|
case '\\':
|
|
c='\\';
|
|
doescape:
|
|
if (dest) {
|
|
dest[0]='\\';
|
|
dest[1]=c;
|
|
}
|
|
return 2;
|
|
default:
|
|
if (dest) {
|
|
dest[0]='\\';
|
|
fmt_oct3(dest+1,ch&0xff);
|
|
}
|
|
return 4;
|
|
}
|
|
}
|