ref: 3e370bf9540c944ddf58e28ad92583b40936c6c1
dir: /437.c/
/* https://en.wikipedia.org/wiki/Code_page_437 */
#include "tagspriv.h"
#ifdef __unix__
int
cp437toutf8(char *o, int osz, const char *s, int sz)
{
/* FIXME somebody come up with portable code */
return snprint(o, osz, "%.*s", sz, s);
}
#else
static Rune rh[] =
L"ΔÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧"
L"ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│d┤╡╢╖╕╣║╗╝╜"
L"╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌"
L"▐▀αßeΓπfΣgσµhτΦΘΩiδj∞φkεl∩≡±≥≤⌠m"
L"⌡÷≈°∙n·√oⁿ²■ ";
int
cp437toutf8(char *o, int osz, const char *s, int sz)
{
char c[UTFmax];
int i, n;
Rune r;
for(i = 0; i < sz && osz > 1 && s[i] != 0; i++){
if((uchar)s[i] < 127){
*o++ = s[i];
osz--;
continue;
}
r = rh[(uchar)s[i] - 127];
if((n = runetochar(c, &r)) >= osz)
break;
memmove(o, c, n);
o += n;
osz -= n;
}
*o = 0;
return i;
}
#endif