|
|
@ -1,3 +1,5 @@
|
|
|
|
|
|
|
|
#define _GNU_SOURCE
|
|
|
|
|
|
|
|
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
|
|
|
|
|
|
@ -8,20 +10,32 @@
|
|
|
|
#include <string.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <time.h>
|
|
|
|
#include <time.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
#include <wchar.h>
|
|
|
|
|
|
|
|
#include <locale.h>
|
|
|
|
|
|
|
|
|
|
|
|
#include "blaze822.h"
|
|
|
|
#include "blaze822.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wchar_t replacement = '?';
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
u8putstr(FILE *out, char *s, size_t l, int pad)
|
|
|
|
u8putstr(FILE *out, char *s, size_t l, int pad)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
while (*s && l) {
|
|
|
|
while (*s && l) {
|
|
|
|
|
|
|
|
if (*s >= 32 && *s < 127) {
|
|
|
|
putc(*s, out);
|
|
|
|
putc(*s, out);
|
|
|
|
// elongate by utf8 overhead
|
|
|
|
|
|
|
|
if ((*s & 0xf0) == 0xf0) l += 3;
|
|
|
|
|
|
|
|
else if ((*s & 0xe0) == 0xe0) l += 2;
|
|
|
|
|
|
|
|
else if ((*s & 0xc0) == 0xc0) l += 1;
|
|
|
|
|
|
|
|
l--;
|
|
|
|
|
|
|
|
s++;
|
|
|
|
s++;
|
|
|
|
|
|
|
|
l--;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
wchar_t wc;
|
|
|
|
|
|
|
|
int r = mbtowc(&wc, s, 4);
|
|
|
|
|
|
|
|
if (r < 0) {
|
|
|
|
|
|
|
|
r = 1;
|
|
|
|
|
|
|
|
wc = replacement;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
s += r;
|
|
|
|
|
|
|
|
fprintf(out, "%lc", wc);
|
|
|
|
|
|
|
|
l -= wcwidth(wc);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (pad)
|
|
|
|
if (pad)
|
|
|
|
while (l-- > 0)
|
|
|
|
while (l-- > 0)
|
|
|
@ -134,6 +148,10 @@ oneline(char *file)
|
|
|
|
int
|
|
|
|
int
|
|
|
|
main(int argc, char *argv[])
|
|
|
|
main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
setlocale(LC_ALL, ""); // for wcwidth later
|
|
|
|
|
|
|
|
if (wcwidth(0xFFFD) > 0)
|
|
|
|
|
|
|
|
replacement = 0xFFFD;
|
|
|
|
|
|
|
|
|
|
|
|
char *seqmap = blaze822_seq_open(0);
|
|
|
|
char *seqmap = blaze822_seq_open(0);
|
|
|
|
blaze822_seq_load(seqmap);
|
|
|
|
blaze822_seq_load(seqmap);
|
|
|
|
cur = blaze822_seq_cur();
|
|
|
|
cur = blaze822_seq_cur();
|
|
|
|