fn start() { def str = getline("Testing: "); print("You said: `"); cprint(str); print("`"); free(str, 128); } fn neq(ch1, ch2) { if sub(ch1, ch2) { return 1; } else { return 0; } } fn mul(m, n) { def result = m; while n { result = add(result, m); n = sub(n, 1); } return result; } fn getline(prompt) { print(prompt); def str = alloc(128); def counter = 0; def input = getch(); def running = mul(neq(input, '\n'), neq(input, 0)); while running { *add(str, counter) = input; input = getch(); counter = add(counter, 1); running = mul(neq(input, '\n'), neq(input, 0)); } return str; } // free_byte only frees a single cell, so free must be implemented manually fn free(ptr, size) { while size { size = sub(size, 1); // free_byte is built in free_byte(add(ptr, size)); } // Store 0 in the return register return 0; }