|
|
@ -10,58 +10,42 @@ |
|
|
|
|
|
|
|
|
int get_type_by_name(struct context* ctx, const char* name); |
|
|
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) { |
|
|
static void list_words(struct context* ctx) { |
|
|
struct native_fn* nit; |
|
|
struct native_fn* nit; |
|
|
struct fn* dit; |
|
|
struct fn* dit; |
|
|
int i; |
|
|
int i; |
|
|
for(nit = ctx->native_words; nit != ctx->native_words + ctx->native_words_top; ++nit) { |
|
|
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'); |
|
|
ctx->putchar(ctx, '\n'); |
|
|
} |
|
|
} |
|
|
for(dit = ctx->words; dit != ctx->words + ctx->words_top; ++dit) { |
|
|
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'); |
|
|
ctx->putchar(ctx, '\n'); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@ -232,9 +216,7 @@ int main(int argc, char** argv) { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if(print_as_string) { |
|
|
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); |
|
|
fputc('\n', stdout); |
|
|
} else { |
|
|
} else { |
|
|
fputc('[', stdout); |
|
|
fputc('[', stdout); |
|
|
|