|
|
@ -0,0 +1,116 @@ |
|
|
|
#include "ink.h" |
|
|
|
|
|
|
|
int main(int argc, char** argv) { |
|
|
|
struct context* ctx; |
|
|
|
ctx = ink_make_default_context(); |
|
|
|
|
|
|
|
ink_compile( |
|
|
|
ctx, |
|
|
|
"fn encrypt do\n" |
|
|
|
" 3 pluck array.size\n" |
|
|
|
" # array add_key modulo_key index\n" |
|
|
|
" loop:\n" |
|
|
|
" 1 - dup 5 pluck\n" |
|
|
|
" # array add_key modulo_key index index array\n" |
|
|
|
" array.index \n" |
|
|
|
" # array add_key modulo_key index v\n" |
|
|
|
" 4 pluck +\n" |
|
|
|
" # array add_key modulo_key index (v + add_key)\n" |
|
|
|
" 3 pluck %\n" |
|
|
|
" # array add_key modulo_key index ((v + add_key) % modulo_key)\n" |
|
|
|
" 2 pluck\n" |
|
|
|
" # array add_key modulo_key index ((v + add_key) % modulo_key) index\n" |
|
|
|
" 6 pluck\n" |
|
|
|
" # array add_key modulo_key index ((v + add_key) % modulo_key) index array\n" |
|
|
|
" array.set\n" |
|
|
|
" # array add_key modulo_key index\n" |
|
|
|
" dup 0 != loop jump_if drop drop drop drop\n" |
|
|
|
"end\n" |
|
|
|
"fn string.dump do\n" |
|
|
|
" dup array.size 0\n" |
|
|
|
" # array end it\n" |
|
|
|
" 91 print_utf8\n" |
|
|
|
" 32 print_utf8\n" |
|
|
|
" loop:\n" |
|
|
|
" dup\n" |
|
|
|
" # array end it it\n" |
|
|
|
" 4 pluck\n" |
|
|
|
" # array end it it array\n" |
|
|
|
" array.index print_int\n" |
|
|
|
" 32 print_utf8\n" |
|
|
|
" 1 +\n" |
|
|
|
" # array end it\n" |
|
|
|
" 2 pluck 2 pluck > loop jump_if\n" |
|
|
|
" # array end it\n" |
|
|
|
" 93 print_utf8\n" |
|
|
|
" drop drop drop\n" |
|
|
|
"end\n" |
|
|
|
"fn string.print do\n" |
|
|
|
" dup array.size 0\n" |
|
|
|
" # array end it\n" |
|
|
|
" loop:\n" |
|
|
|
" dup\n" |
|
|
|
" # array end it it\n" |
|
|
|
" 4 pluck\n" |
|
|
|
" # array end it it array\n" |
|
|
|
" array.index print_utf8\n" |
|
|
|
" 1 +\n" |
|
|
|
" # array end it\n" |
|
|
|
" 2 pluck 2 pluck > loop jump_if\n" |
|
|
|
" # array end it\n" |
|
|
|
" drop drop drop\n" |
|
|
|
"end" |
|
|
|
); |
|
|
|
|
|
|
|
ink_compile( |
|
|
|
ctx, |
|
|
|
"# Clones an array, creating a new array\n" |
|
|
|
"#\n" |
|
|
|
"# @param array The array to clone into a new array\n" |
|
|
|
"# @return a new array that contains the same elements as the source array\n" |
|
|
|
"#\n" |
|
|
|
"# array -> new_array\n" |
|
|
|
"fn array.clone do\n" |
|
|
|
" array.new 2 pluck array.size 0\n" |
|
|
|
" # array new_array end it\n" |
|
|
|
" 2 pluck 2 pluck == l jump_if\n" |
|
|
|
" # array new_array end it\n" |
|
|
|
" loop:\n" |
|
|
|
" dup 5 pluck\n" |
|
|
|
" # array new_array end it it array\n" |
|
|
|
" array.index 4 pluck\n" |
|
|
|
" # array new_array end it v new_array\n" |
|
|
|
" array.push\n" |
|
|
|
" # array new_array end it\n" |
|
|
|
" 1 +\n" |
|
|
|
" 2 pluck 2 pluck > loop jump_if\n" |
|
|
|
" l: drop drop swap drop\n" |
|
|
|
" # new_array\n" |
|
|
|
"end" |
|
|
|
); |
|
|
|
|
|
|
|
ink_compile( |
|
|
|
ctx, |
|
|
|
"[ 72 101 108 108 111 32 87 111 114 108 100 10 ] dup dup dup string.print\n" |
|
|
|
"32 131 encrypt string.dump\n" |
|
|
|
); |
|
|
|
|
|
|
|
//ctx->routines[coro].panic = 0; |
|
|
|
|
|
|
|
int increment = 1 << 16; |
|
|
|
int counter = increment; |
|
|
|
int c; |
|
|
|
|
|
|
|
while(ink_can_run(ctx)) { |
|
|
|
for(c = 0; c < 64; ++c) |
|
|
|
ink_step_everyone(ctx); |
|
|
|
|
|
|
|
|
|
|
|
if(ctx->steps < counter) { |
|
|
|
ink_gc(ctx); |
|
|
|
counter += increment; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//return ctx->routines[coro].panic != INK_ROUTINE_SUCCESS && ctx->routines[coro].panic != INK_ROUTINE_CAN_REUSE; |
|
|
|
} |