Просмотр исходного кода

Factorizing string printing. Must factor out of shell to the lib later

main
Ludovic 'Archivist' Lagouardette 3 недель назад
Родитель
Сommit
2125ac2abd
1 измененных файлов: 29 добавлений и 47 удалений
  1. +29
    -47
      sh.c

+ 29
- 47
sh.c Просмотреть файл

@ -10,58 +10,42 @@
int get_type_by_name(struct context* ctx, const char* name);
static void print_string(struct context* ctx, const struct elem string) {
int i;
const struct ink_array* name = ink_get_value(ctx, string);
for (i = 0; i < name->top; ++i) {
const struct elem a = name->elements[i];
if(a.value <= 0x7F) {
ctx->putchar(ctx, a.value);
} else if(a.value <= 0x7FF) {
ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 192);
ctx->putchar(ctx, (a.value & 0x3F) | 128);
} else if(a.value <= 0xFFFF) {
ctx->putchar(ctx, ((a.value & 0x3F000) >> 12) | 224);
ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 128);
ctx->putchar(ctx, (a.value & 0x3F) | 128);
} else if(a.value <= 0x10FFFF) {
ctx->putchar(ctx, ((a.value & 0x3C0000) >> 18) | 240);
ctx->putchar(ctx, ((a.value & 0x3F000) >> 12) | 128);
ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 128);
ctx->putchar(ctx, (a.value & 0x3F) | 128);
} else {
ctx->panic = -9472;
return;
}
}
}
static void list_words(struct context* ctx) {
struct native_fn* nit;
struct fn* dit;
int i;
for(nit = ctx->native_words; nit != ctx->native_words + ctx->native_words_top; ++nit) {
const struct ink_array* name = ink_get_value(ctx, nit->name);
for (i = 0; i < name->top; ++i) {
const struct elem a = name->elements[i];
if(a.value <= 0x7F) {
ctx->putchar(ctx, a.value);
} else if(a.value <= 0x7FF) {
ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 192);
ctx->putchar(ctx, (a.value & 0x3F) | 128);
} else if(a.value <= 0xFFFF) {
ctx->putchar(ctx, ((a.value & 0x3F000) >> 12) | 224);
ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 128);
ctx->putchar(ctx, (a.value & 0x3F) | 128);
} else if(a.value <= 0x10FFFF) {
ctx->putchar(ctx, ((a.value & 0x3C0000) >> 18) | 240);
ctx->putchar(ctx, ((a.value & 0x3F000) >> 12) | 128);
ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 128);
ctx->putchar(ctx, (a.value & 0x3F) | 128);
} else {
ctx->panic = -9472;
return;
}
}
print_string(ctx, nit->name);
ctx->putchar(ctx, '\n');
}
for(dit = ctx->words; dit != ctx->words + ctx->words_top; ++dit) {
const struct ink_array* name = ink_get_value(ctx, dit->name);
for (i = 0; i < name->top; ++i) {
const struct elem a = name->elements[i];
if(a.value <= 0x7F) {
ctx->putchar(ctx, a.value);
} else if(a.value <= 0x7FF) {
ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 192);
ctx->putchar(ctx, (a.value & 0x3F) | 128);
} else if(a.value <= 0xFFFF) {
ctx->putchar(ctx, ((a.value & 0x3F000) >> 12) | 224);
ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 128);
ctx->putchar(ctx, (a.value & 0x3F) | 128);
} else if(a.value <= 0x10FFFF) {
ctx->putchar(ctx, ((a.value & 0x3C0000) >> 18) | 240);
ctx->putchar(ctx, ((a.value & 0x3F000) >> 12) | 128);
ctx->putchar(ctx, ((a.value & 0xFC0) >> 6) | 128);
ctx->putchar(ctx, (a.value & 0x3F) | 128);
} else {
ctx->panic = -9472;
return;
}
}
print_string(ctx, dit->name);
ctx->putchar(ctx, '\n');
}
}
@ -232,9 +216,7 @@ int main(int argc, char** argv) {
}
if(print_as_string) {
for (ary_it = ary->elements; ary_it != ary->elements + ary->top; ++ary_it) {
fputc(ary_it->value, stdout);
}
print_string(ctx, rt->stack[rt->top - 1]);
fputc('\n', stdout);
} else {
fputc('[', stdout);

Загрузка…
Отмена
Сохранить